decisions/spine/RATE_NO_CORRECT_VALUE_TEST.md
Read-only adversarial test, 2026-07-17. Nothing applied. All counts re-derived by my own parser over the
live tree; the concurrent lane's worktree (.claude/worktrees/clever-robinson-1527c2/) was excluded.
---
H is correct that no canon assigns a relational magnitude class, and correct that a ruling slot spent on
"what is the rate?" is wasted. But "it's a judgment, not a lookup" is the *softest* argument for that
conclusion and the one most easily answered with "fine — judgment is what a ruling IS." Measurement
supplies three harder ones. (1) Nothing consumes the number. loyalty_score is not declared in any live
registry, has zero writes across all 79 nodes, is referenced by zero lines of harness code, and its five
declared consumers exist only inside a plan document. **(2) Its one ratified consumer is arithmetically
insensitive to it** — under the ratified departure rule, the entire "Ana is three points short of Family"
question moves her effective trigger from 68.7 to 69.0, i.e. 0.3 points on a 100-point opposition scale.
(3) The integrity axis is a controlled experiment that already ran: integrity *has* an authored per-beat
rate in canon (§5.1), and all 406 ws.integrity_score writes in the spine are still qualitative
(+substantial-generative), zero carrying a point value — so authoring a rate demonstrably does not change
what the spine records. And (4) the deepest defect is a logical one: RATE_MISMATCH_ANALYSIS.md §5
correctly disowns the per-beat accumulator model as the brief's own non-canon construction, and then in the
same section promotes *that disowned model's free parameter* to a cardinal. You cannot disown a model and
keep its parameter as a canon question. One correction to H: it implies the rate is unanswerable in
principle. It is not — it is answerable exactly the way §5.1 answered it for integrity, as a
class-and-direction taxonomy, and that authoring is Fable-5 tuning, not a Josh cardinal. The rate is not
un-authorable; it is un-ruling-worthy.
---
The RATE_MISMATCH parser is honest about its stated method and I reproduce it exactly:
| Claim | Source | My re-derivation | Status |
|---|---|---|---|
891 beats parsed, all carry actors: | RATE_MISMATCH L8-9 | 891 across 79 nodes | ✅ exact |
| Ntala CHAR_0002 — 191 beats / 55 nodes | L19 | 191 / 55 | ✅ exact |
| Ana CHAR_0017 — 44 beats / 22 nodes | L20 | 44 / 22 | ✅ exact |
ws.loyalty_score / ws.bond_state — zero writes | L49 | 0 and 0 | ✅ exact |
ws.familiar_bond_state — 99 writes / 38 nodes | L54-56 | 99 / 38 | ✅ exact |
| Faction rate UNCOUNTABLE — 50 writes / 16 nodes, qualitative | L30-32 | 50 / 16; 0 payloads carry a signed point value | ✅ (stronger than stated) |
| Tunde CHAR_0127 — 1 actor-beat, 1 node (Ch 39) | L21 | 0 actor-beats, 0 nodes | ❌ overcounted |
Tunde has ZERO actor-beats. His single appearance in the entire spine is a prose cast line under the
## Key ally NPCs heading — not a typed beat row: "Tunde (the freed fixer, CHAR_0127) — the NDA'd local
collaborator…" [SRC: docs/spine/CH_39.md # L228, heading at L222]. The correction runs *against* the
counting lane's interest and *strengthens* its §6 conclusion: the roster defect is worse than reported.
RATE_MISMATCH's arithmetic runs off a "bond-moving" subset — "~106 bond-moving" for Ntala (106 × 0.5 =
53.0, 106 × 10 = 1060, matching L63-64 exactly) and, implied, 29 for Ana (29 × 3 = 87, matching L78-79).
That subset is not the actors: field the method section claims to parse [SRC:
docs/spine/RATE_MISMATCH_ANALYSIS.md # L8-9], and no filter over any structural field in the v3.1 beat row
reproduces 106 or 29. I tried nine:
| filter | Ntala | ×0.5 | ×10 | Ana | ×3 (Substantial floor) |
|---|---|---|---|---|---|
| all actor-beats | 191 | 95.5 | 1910 | 44 | 132 — clears +90 |
| role core+climax+hook | 147 | 73.5 | 1470 | 32 | 96 — clears +90 |
| role core+climax | 114 | 57.0 | 1140 | 24 | 72 — misses by 18 |
| role core only | 99 | 49.5 | 990 | 19 | 57 |
| mode = character/dialogue | 66 | 33.0 | 660 | 13 | 39 |
| the doc's figure | ~106 | 53.0 | 1060 | 29 | 87 — "three short" |
Ana's headline number lands between two adjacent filters that disagree qualitatively: at 32
bond-moving beats she *clears* +90 with room; at 24 she misses by 18, not 3. "Three points short of +90" is
not a measurement — it is the output of one unstated filter selected from a family whose members give
"clears," "misses narrowly," and "misses badly." The near-miss that makes the rate feel urgent is an
artifact of the filter, and the filter is itself an unauthored judgment sitting *underneath* the unauthored
rate. Two stacked judgments, presented as an arithmetic near-miss.
---
The premise of the whole rate question is that companions are countable and factions are not. **The
measurement inverts on inspection.** The ratified runtime architecture says the companion bond does not
move per authored beat at all:
reaction, a banter line, or a shifted disposition" [SRC: docs/RUNTIME_GENERATIVE_LAYER.md # L113 §A.4].
relationship_delta" [SRC: same # L114].[SRC: same # L115]. The summary table repeats it: "personality ~0.03 Hz | … relationship-delta | …
relationship SM" [SRC: same # L143].
Relational movement is a ±-clamped delta emitted at runtime on a wall-clock tick, driven by play time
and emergent interaction. The 191 authored spine beats are the *skeleton*, not the event set. At ~0.03 Hz
across a 30M-word game the emission count is **UNCOUNTABLE from this corpus — exactly as uncountable as the
faction rate.**
So RATE_MISMATCH §2's finding — "the spine actually gives companions FAR MORE relational surface than
factions (191 actor-beats / 55 nodes versus 50 standing-writes / 16 nodes)" [SRC: same # L36-37] — compares
the *authored surface* of both axes. Neither is the runtime event set. It is an apples-to-apples comparison
of the wrong quantity, twice.
Does the ruled shape have a hole? No — and I decline to smuggle per-axis thresholds back in. Ruling 2's
shared ladder is a ladder over a state, not over an event count, and a state bands identically whether
it is fed by 100 or 100,000 events. The ladder is untouched by any of this. **The hole is in the per-beat
accumulator model, which is not the ladder and was never ruled.** The persona doc says so directly:
movement is "driven by three inputs read together: the protagonist's integrity band …, the specific
decisions the player has made toward this entity and its group …, and the mark the protagonist has left on
the entity's community" [SRC: docs/proposals/ENTITY_PERSONA_SYSTEM.md # L135] — and, decisively, "the
disposition is generated fresh each encounter from the current state" [SRC: same # L137]. That is a
state function, not an accumulator. There is no running total for a per-beat rate to feed.
---
"Ana can reach Family iff the rate is ≥X" fails three ways at once:
1. The denominator is wrong (authored beats ≠ runtime relationship_delta emissions — §2 above).
2. The numerator is unreproducible (the "bond-moving" filter — §1 above).
3. The model is contradicted by the persona doc's own §3.2 (disposition is generated fresh from state,
not summed — L137).
And the executed spine already reaches her arc without a number. All 18 ws.companion_loyalty_transition_events
writes and all 35 ws.companion_roster_state writes are qualitative tokens:
ana_drawn_deeper · ana_present_and_aiding_cooling · ana_rejoined_melee_blade ·
ana_departs_next_node_ch41 · ana_wounded_bond_deepened · ana_forced_out_covered_by_wenceslao_or_hired_blade
(CH_27/28/29/42/51/55/56/61). Note the last one: the spine already executes a companion departure,
branch-resolved per FORK_CH55_A, with no score, no threshold, and no rate. The qualitative register is not
a placeholder awaiting a number — it is the working system.
The integrity control case settles it. Integrity is the one axis where the rate *is* authored:
"Foundational … ten to twenty-five points"; "Substantial … three to ten points"; "Accumulative … half a
point to three points each" [SRC: _source/01_Tier_1_Foundation/T1_Integrity_Paths_Worldstates_Master [ACTIVE v2.1].md # L165-169 §5.1].
Measured across the spine: **406 ws.integrity_score writes across 70 nodes, and ZERO carry a point
value.** They carry class-and-direction — +substantial-generative, −accumulative-corrosive, ~0,
"Substantial direction set". A fully authored rate produced exactly zero numbers in the spine. Authoring
the relational rate would change nothing about anything that exists today. That is not a prediction; it is
what already happened on the axis that ran the experiment.
---
| Consumer | Status |
|---|---|
ws.loyalty_score writes in 79 spine nodes | 0 |
ws.bond_state writes in 79 spine nodes | 0 |
Lines in harness/*.py referencing loyalty / bond_state / tier_threshold / standing_value | 0 (sole hit: mastery_tier_threshold in enrich.py L441 — a different subsystem) |
tier_thresholds populated cells | 0 — empty on both FR_0001 / FR_0002 |
loyalty_score declared in any live registry | NO |
loyalty_score does not exist outside a plan document. WS_027 landed with its domain reduced to the
free-text "companion-loyalty runtime state" and its consumers field reading "companion-loyalty" — a
placeholder, not a consumer list [SRC: registries/T0_Worldstate_Variables [ACTIVE v0.1]/Sheet1.csv # WS_027].
The loyalty_score(-100..+100) spec exists only at [SRC: docs/proposals/systems/WS7_WIRING_BUILD_PLAN.md # L150, L153].
Its five planned consumers — party_manager, dialogue_resolver, no_dead_end_pathing_resolver,
region_page_section_19_dispatcher, six_option_dispatcher — appear in exactly three files repo-wide, all
of them declarations: the WS7 plan, the WS registry cell that names them, and SSBL_APPENDIXB_MIGRATION.md.
None is code. None is a gate. None is a region page. (Contrast WS_001/WS_002/WS_008/WS_021, which carry
real, specific consumer lists.)
This is decisive for H. The proposal is to spend Josh's scarce authority authoring a per-beat rate for a
variable that is not declared, never written, read by nothing, and whose only ratified rule is insensitive
to it (§5). The honest consequence, exactly as the task anticipated: **author the rate when the first
consumer exists — at the WS_027 wiring commit — not before.**
---
Ratified [SRC: docs/spine/RELATIONSHIP_TIER_BANDS_BRIEF.md # L36-51 Ruling 3, L221 §6]:
eff_trigger = min(base + min(loyalty_score/10, +15), 90), opposition ∈ [0,100].
Domain: loyalty_score ∈ −100..+100 [SRC: docs/proposals/systems/WS7_WIRING_BUILD_PLAN.md # L150].
Finding A — the +15 bonus cap is dead arithmetic. max(loyalty_score/10) = 10.0 at the domain ceiling.
The +15 cap requires loyalty_score = 150, outside the ratified domain. It can never bind. (The task
brief's "saturates at loyalty_score=150" is the naive reading; 150 is off the axis.)
Finding B — the 90 cap binds for exactly one threshold, which has zero live rows.
| threshold | base | eff@ls=0 | eff@ls=100 | does the 90 cap ever bind? | live rows |
|---|---|---|---|---|---|
complete_opposition | 85 | 85.0 | 90.0 | yes, at ls ≥ 50 | 0 |
major_opposition | 60 | 60.0 | 70.0 | NEVER | 1 (Ana) |
any_sustained_misalignment | 35 | 35.0 | 45.0 | NEVER | 1 (Tunde) |
All five populated loyalty rows, measured [SRC: registries/T0_Character_Index [ACTIVE v1.1]/T0_Character_Index DRAFT v1.1.csv # cols 14-19]:
Ntala for_life/never · Architect not_companion/circumstance · Ana come_and_go/major_opposition ·
Wabenhotep not_companion/never · Tunde drawn_conditional/any_sustained_misalignment.
complete_opposition. The ratified 90-cap invariant — Ruling 3's declaredload-bearing clause, "complete opposition ALWAYS forces departure and investment can never buy immunity"
— governs an empty set today.
invested_sticky. The theorem "invested is sticky but not immune" [SRC:docs/proposals/systems/RULINGS.md # L56] governs an empty set today.
never + for_life — no trigger at all, and explicitly exempt [SRC: RELATIONSHIP_TIER_BANDS_BRIEF.md # L221]. loyalty_score does literally nothing for her. Which also dissolves RATE_MISMATCH §3's "saturation"
defect: Ntala pinning the top rung by Ch 24 has no mechanical consequence, because nothing reads the
score and she cannot depart.
Finding C — the price of the whole cardinal. Ana is the only companion for whom loyalty_score does
any work at all. Her Family-vs-Trusted question, priced against its only ratified consumer:
ls = 87 -> bonus 8.7 -> eff_trigger = 60 + 8.7 = 68.7 ls = 90 -> bonus 9.0 -> eff_trigger = 60 + 9.0 = 69.0 DELTA = 0.3 trigger-points on a 0-100 opposition scale (0.3% of the axis)
**The question that is being nominated for one of Josh's two remaining ruling slots moves the only rule
that consumes its answer by three tenths of one point.** The question does not shrink. It dissolves.
*(Both Findings A and B are Fable-5 tuning repairs, not rulings — Ruling 3 expressly ratified its eight
magnitudes as "AUTHORED STARTING VALUES" that playtest may move without a re-ruling, while fixing the SHAPE
and the 90-cap invariant. Correcting +15 → +10 restores the author's evident intent within that grant. Do
NOT tune the 90 cap itself — that is the ratified invariant.)*
---
RATE_MISMATCH §5 makes two claims in one section, and they destroy each other:
"The claim that relational movement reuses those classes is the BRIEF'S OWN CONSTRUCTION at its L151 …
it was never ratified and it is not canon." [SRC: docs/spine/RATE_MISMATCH_ANALYSIS.md # L71-73]
"The threshold was never the binding constraint. The unauthored per-beat rate is." [SRC: same # L75-76]
The per-beat rate is the free parameter of the model it just disowned. If "relational movement reuses
the §5.1 magnitude classes" is not canon, then "which §5.1 class does a relational beat belong to?" is not a
canon question — it is a question about an unratified model. §5 is internally inconsistent: it correctly
demotes the model and then promotes the model's parameter to a cardinal in the next paragraph.
One honest refinement in the lane's favour, which does not save the cardinal. §5.1 L167 *does* name
relationship beats — "Substantial choices are mid-magnitude integrity shifts tied to per-chapter primary
boss encounters, trade master encounters, and named-NPC relationship beats. They may shift integrity
by three to ten points" [SRC: _source/01_Tier_1_Foundation/T1_Integrity_Paths_Worldstates_Master [ACTIVE v2.1].md # L167 §5.1].
So §5.1 is an event taxonomy that already classifies relationship beats — it just measures what they do
to *integrity*. The brief's transfer was a plausible axis-extension of a real taxonomy, not an invention
from nothing. RATE_MISMATCH is right that it is not canon. But this cuts *against* the cardinal: it shows
the missing piece is a class-and-direction taxonomy, which is precisely the artifact §5.1 already
models and which the spine already writes qualitatively for integrity. That is an authoring pattern to copy
at wiring time, not a question to put to Josh.
Citation defect, flagged. Both RATE_MISMATCH_ANALYSIS.md L71-73 and RELATIONSHIP_TIER_BANDS_BRIEF.md
cite the relational-reuse claim as the brief's "L151". Against the live file, **L151 is the
departure-enum line; the relational-reuse claim now lives at L170** — it moved when the 2026-07-17
correction block was inserted above it. The task brief inherited the stale pointer. Cite L170. (Exactly
the "later agent reads a stale pointer and trusts it" failure mode that RELATIONSHIP_TIER_BANDS_BRIEF §10
was written to prevent.)
---
Weighed honestly, including the candidates the task named.
one numeric ladder across *every* relational axis including loyalty_score. And measurement gives no
warrant to re-open it: the integrity axis is numeric *and* qualitatively written, and the companion axis
can be the same. There is no fork here. Bringing it would be the §8 smuggling vector wearing a
measurement hat.
axes are runtime-driven state; both band fine. The ladder survives every number I derived.
TRUE, but not a question.** It is a finding, and it is *this* document. It needs no ruling; it needs the
§5 cardinal retired.
reported:
| measured | |
|---|---|
| Companion rows intended | ~30 [SRC: docs/proposals/systems/WS7_WIRING_BUILD_PLAN.md # L158] |
Rows carrying a non-not_companion loyalty_model | 3 (Ntala, Ana, Tunde) |
| Of those 3, rows the spine never travels with | 1 — Tunde: 0 actor-beats, 0 roster writes |
Characters named inside live companion_roster_state writes with no loyalty_model | 4 — CHAR_0140 Edivan Kanamari, CHAR_0144 Helena Vasconcelos, CHAR_0145 Fortunato Ccahuana, CHAR_0146 Efraín Quispe Mamani (all CH_51) |
The roster is inverted. The registry rows a companion the spine never travels with, and the spine
travels with four the registry does not row. Two ratified constructs (invested_sticky,
complete_opposition) govern empty sets. This is characterization canon — "which canonical companion gets
which loyalty_model / belief_axis / departure_threshold / join_trigger is Josh's call" — and mass
population is expressly forbidden pre-ratification [SRC: same # L158].
**But it is still not a ruling-slot question yet, and surfacing it as one would break the standing
protocol.** "Who are the ~30 companions?" is a bare question. The standing decision protocol forbids bare
questions absolutely. And most of the answer is *already derivable from the spine's own evidence* — the
executed nodes name who travels, when they join, when they leave. The correct next action is **Claude
authors the roster brief** (fan-out, deep-dive, adversarial, recommendation, strongest objection) grounded
in the 35 companion_roster_state writes and the 891-beat actor census — and *then* Josh ratifies a
proposed roster. That is a ratification, not a slot.
---
**H is TRUE. Do NOT spend a ruling slot on the rate. Retire the §5 cardinal outright — it is not a question,
and it should not be replaced by a different question.**
1. RETIRE the "per-beat relational RATE" cardinal from DECISIONS_PENDING_JOSH.md (the entry at L502
and the queue header) and from RATE_MISMATCH_ANALYSIS.md §5. Kill evidence: zero consumers (§4); a
0.3-point effect on its only ratified consumer (§5); the integrity control case proving an authored rate
yields zero spine numbers (§3); and the §5 self-contradiction — a disowned model's parameter cannot be a
cardinal (§6). **A parallel workflow is briefing this as an authorable number; that framing should be
stood down before it produces a brief for Josh.**
2. CORRECT the two measured defects in the analysis (both cut against the lane's own conclusion, both
should be recorded rather than quietly dropped): Tunde is 0 actor-beats, not 1 (§1); and the "87 /
three points short" figure rests on an unstated, unreproducible bond-moving filter whose neighbours
give 72 (misses by 18) and 96 (clears) (§1). Ana's near-miss is a filter artifact.
3. FIX the stale L151 → L170 pointer in both docs (§6).
4. AUTHOR THE RATE WHEN THE FIRST CONSUMER EXISTS — at the WS_027 wiring commit, not before — and
author it the way canon already authors this exact thing: a class-and-direction taxonomy per the
§5.1 precedent, with the point resolution living at Fable-5 tuning and the spine continuing to write
+substantial-generative-style tokens. The one *genuine* gap this whole investigation surfaced is small
and mechanical: relational writes carry direction (ana_drawn_deeper) but no magnitude class, where
integrity writes carry both. Adding the class token is creative-within-vision wiring — apply and show the
path; it is not Josh's.
5. APPLY as tuning, when a green window opens (Ruling 3's own grant; the concurrent lane has
fidelity/index_freshness red): the +15 bonus cap → +10, since +15 is unreachable on a −100..+100
domain (§5, Finding A). Do not touch the 90 cap — that is the ratified invariant.
6. IF a slot is spent on this system at all, spend it on the ROSTER — and not yet. The correct sequence
is Claude authors a grounded roster brief from the spine's own writes → Josh ratifies a recommendation.
Nothing blocks in the meantime: the queue's own sweep records that the two live items block nothing, and
all 79 nodes are executed and green on this axis without any of it.
Strongest objection to my own verdict. A ratified ladder whose top rung may be unreachable is a real
defect, and "no consumer exists yet" is the classic argument that lets a defect ship — this repo's own
anti-orphan memory says we build things and never wire them. I take it seriously and it fails on the
measurement: unreachability was computed from a denominator (authored beats) that the ratified runtime
architecture says is not the event set, through a filter nobody authored, on an accumulator model the
persona doc contradicts, for a variable no live registry declares. Every layer of the defect is
construction, not canon. The wiring commit is where a rate becomes real, and that commit is where a rate
should be written — by whoever writes it, at tuning tier, showing the path.
---
**23 citations checked; every one opened and read against the claim it carries. 21 resolve and say what is
claimed. 2 do not, and are corrected above:** RATE_MISMATCH_ANALYSIS.md # L21 (Tunde "1 actor-beat" — the
line resolves, but the claim is false against the corpus; it is 0), and the `RELATIONSHIP_TIER_BANDS_BRIEF
which is at L170).
Every count in this brief is measured by my own read-only parser over the live tree, not quoted.
Reproducible: 79 nodes / 891 beats; per-actor census; ws.* write census by variable; the nine-filter
spread; the departure arithmetic. The concurrent lane's worktree was excluded from all counts.
Stated UNCOUNTABLE rather than estimated: the faction relational event rate (ambient runtime; 50
qualitative standing-writes / 16 nodes is the *authored* surface, not the event set); **and — new — the
companion relational event rate**, for the same reason and on the same authority (relationship_delta at
~0.03 Hz, RUNTIME_GENERATIVE_LAYER L113-114, L143). Neither axis has a countable denominator. **No figure
in this brief is invented; where the corpus cannot supply a number I say so rather than supply one.**
Only Josh can, and only against a brief that does not yet exist.
neighbouring filters disagree qualitatively. I cannot recover what its author meant, and did not guess.
docs/RUNTIME_GENERATIVE_LAYER.md outranks WS7_WIRING_BUILD_PLAN.md on the companionarchitecture. Both are proposal-tier. I lean on RGL because Josh's own Ruling 4 cites it as canon
grounding** (L116, for five of the nine BOND labels) and ENTITY_PERSONA L134 cites §A.4 for the
locked-out threshold — but no tier doc owns this domain, and WS7 L160 already flags that the
companion-loyalty system needs a canonical T1 home. That gap is real, it is orthogonal to the rate,
and it is the thing most likely to generate the *next* phantom cardinal.