CARDINALS_RATE_AND_ROSTER.md

decisions/spine/CARDINALS_RATE_AND_ROSTER.md

Two cardinals for Josh — the relational RATE and the Tunde ROSTER row

**Both cardinals dissolved under measurement. Neither is the question it was filed as, and one of them

you already ruled — on 2026-07-17, the same day it was escalated to you.**

I was asked to lead this with: *"the ladder you ratified is governed by a number nobody has written, and

that number decides whether the top tier is unreachable or arrives a third of the way through the story."*

I am not writing that sentence, because I measured it and it is false. The corrected one:

**The ladder you ratified is governed by a number that is not canon's to write — it is an unset clamp in
an already-landed ACTIVE runtime doc — and the "unreachable vs. one-third in" swing is an artifact of
counting a companion's *presence in a scene* as *movement of the bond*. Your four D-REL-BANDS rulings all
stand, untouched, under every option below.**

Nothing here re-opens Rulings 1-4. Nothing was applied; no repo file was touched.

---

What changed on the way to you

Three things, all up front, because each one killed a premise:

1. The RATE is not a canon question. The corpus already answers it in a landed ACTIVE doc that six

rounds of this lane never opened: RUNTIME_GENERATIVE_LAYER.md declares a relationship tick at

~0.03 Hz emitting a ±-clamped relationship_delta, with a deterministic state machine owning the

thresholds. The rate is that clamp. It is a runtime tuning value, not a magnitude class you rule.

2. The ROSTER premise is false. Tunde is not a "one-beat entity". He is carried across four nodes

(Ch 39-42) with an authored fork and a Ch-75 payoff. The "1 beat" came from measuring one field.

3. You already ruled the Ntala half. D-23 is on the RETIRED list — ruled 2026-07-17. Your ruling

contradicts a clause in Ruling 3 and a registry cell. Flagged below; you need not re-rule it.

---

CARDINAL 1 — the per-beat relational RATE

Context, in plain language

Your Scheme C ladder runs −100 to +100, with the top rung (Family / Exalted) at +90. For that to mean

anything, something has to say how many points a given moment is worth. Nothing does.

The brief filled the gap by assuming relational movement reuses the integrity magnitude classes

(Foundational 10-25, Substantial 3-10, Accumulative 0.5-3). That assumption is not canon. I read the

source line: it says "mid-magnitude integrity shifts … may shift integrity by three to ten points"

— the word is *integrity*, twice, and the class governs the integrity axis only

[SRC: _source/01_Tier_1_Foundation/T1_Integrity_Paths_Worldstates_Master [ACTIVE v2.1].md # L167].

That correction is right and it stands. But the escalation then asked which class a bond beat is, and

that question does not survive the measurement — for three independent reasons:

table: 696 relational writes, and exactly 0 of them carry any magnitude class — while 182 rows in the

*adjacent column of the same table* do carry one. The schema is explicit that the classed column is the

integrity column ("NO player choice, NO integrity delta" is what defines the shape that drops it)

[SRC: docs/SPINE_SCHEMA_v3.md # L64, L68]. The authors separated these two things 696 times out of 696.

0 writes. Every relational write in the corpus is qualitative prose.

in a scene* — as if each moved the bond. Her authored bond-moving rows number five, four of which

are mutually exclusive options of a single fork, so exactly two fire per playthrough

[SRC: docs/spine/CH_16.md # L167, L173-176] [SRC: docs/spine/CH_44.md # L158, L164]. Standing beside

someone is not the same as the relationship changing, and the spine's authors never wrote it as if it were.

The answer the lane missed. The corpus already declares where relational points come from. The

partner/companion class runs a personality tick at ~0.03 Hz, every ~30 s of relevant activity; the LLM

emits "a ±-clamped relationship_delta"; the deterministic executor owns "the **relationship state

machine** (thresholds, locked beats)" [SRC: docs/RUNTIME_GENERATIVE_LAYER.md # L113, L114, L115; table

row 4 at # L143]. That doc is ACTIVE [SRC: docs/DOC_MAP.md # L107]. It even declares a *different*

cadence per axis already — factions tick at ~0.005-0.02 Hz vs. companions at 0.03 Hz [# L143, L144].

So the rate is the ± clamp on that tick. It is unset — the flag is real — but it is a runtime tuning

parameter over a layer no spine node enumerates, not a canon magnitude class. The 79-node spine is the

*backbone* of a ~30M-word game; one spine beat is not one tick. No measurement of the spine can set it.

The options

OptionProsCons
ARatify the reuse — bond beats use the integrity classesZero new vocabulary; one class set everywhereRefuted. The source line says *integrity*; the spine separated the columns 696/696. And it doesn't even answer the question — "which class" still needs a ruling.
BAuthor a separate relational magnitude setHonest about the column separationPure invention — no source anywhere assigns relational magnitudes. Zero consumers today, so it orphans on arrival. Worst option against the do-not-invent rule.
CDerive a rate from a story target (0.5/presence-beat → Family at Ch 63)Arithmetically tidy; 90/184 = 0.489 ≈ the Accumulative floor 0.5 — two routes agreeingThe convergence is numerology: both routes share the false premise that presence = movement. Wrong unit (a rate over a *sample*, not the game). Its own precision (0.489) is decoration over a proxy.
DRule the calibration TARGET; leave the clamp to playtestAims at the layer that actually owns the number; the target is denominator-independent and *is* rulable today; invents nothingThe ladder stays inert until wired — though measurably nothing consumes it yet (0 writes). Defers a number.

RECOMMENDATION — D. Rule the target, not the rate.

Rule the design intent, and let the clamp be tuned to hit it:

*already* resolves her fate off your accumulated integrity, with no loyalty score at all

[SRC: docs/spine/CH_65.md # L138-146]. Late enough to be earned, in time to matter at Ch 75.

Reasoning, in weight order:

1. It aims at the right layer. The number lives in RUNTIME_GENERATIVE_LAYER as a clamp. Ruling a

magnitude class would be ruling canon for a runtime dial — and would sit inert beside a doc that already

contradicts it.

2. A target is rulable; a rate is not. You can decide *where Family should land* today. Nobody — you,

me, or playtest — can derive points-per-tick from a 79-node backbone of a 30M-word game.

3. It is the only option that doesn't build on sand. Both published numbers in the analysis (53, 87)

are not reproducible: 191 × 0.5 = 95.5, not 53; 44 × 3 = 132, not 87. They need undisclosed

denominators of 106 and 29 that no filter in the corpus reproduces, and "bond-moving" is defined

nowhere (4 greps, all inside the two lane docs, all rhetorical).

4. Your rulings are safe either way — proven, not assumed. Scheme C clamps the score to ±100, so the

inertia bonus (score ÷ 10) maxes at +10. Complete opposition 85 + 10 = 95 → capped at 90 < the

opposition ceiling of 100. Departure is always forced, under every rate. The invariant is protected

by the clamp, not the rate. No rate can break Ruling 3.

5. Deferral costs almost nothing. loyalty_score and bond_state have zero writes. Nothing breaks.

Strongest objection to D

**"This is the inert ladder you keep building and never wiring — and a target ruled today against a game

that doesn't exist is no better grounded than a number."** The anti-orphan failure is the standing one in

this repo, and D is the option that risks it. There is also one real, spine-authored cost: Ana's *presence*

at Ch 56 is already gated on ws.companion_loyalty_transition_events [SRC: docs/spine/CH_56.md # L18],

and Ch 61 writes +ana_wounded_bond_deepened [SRC: docs/spine/CH_61.md # L135] — the spine is consuming

a loyalty system whose numbers don't exist.

Why I hold D anyway: that Ch-56 gate keys off an authored fork (FORK_CH55_A), not off a score, so it

is computable today without the rate. And the honest reading of the evidence is that a rate ruled now would

be a number invented to fill a silence — which is the exact failure the cardinal rule exists to prevent.

The deferral is real; what makes it correct is that **the record now says precisely what is deferred (the

runtime clamp, against a ruled target) and what is settled (the §5.1 reuse is not canon).**

---

CARDINAL 2 — the Tunde ROSTER row

Context, in plain language

Tunde (CHAR_0127) is the freed fixer from Ch 39 — the bought-and-NDA'd broker the protagonist turns rather

than kills, whose turn is that chapter's whole thesis: *the modern enemy runs on people who can be

un-convinced.* The registry rows him as a companion: loyalty_model = drawn_conditional,

loyalty_state = recruitable, attackability_tier = bonded.

The escalation says he is a roster defect because he has "1 actor-beat, 1 node — no threshold makes a

one-beat entity climb nine rungs," and asks you to choose: more beats, or a different loyalty model.

Both halves of that framing are wrong, and I can show it.

The "1 beat" is a measuring artifact. It counts one field (actors:). Tunde is actually carried across

four nodes — Ch 39, 40, 41, 42 — written into ws.companion_roster_state as "carried lightly", with an

authored fork (FORK_CH39_B, two durable outcomes writing ws.relationship_history) and an explicit

downstream payoff: *"Tunde's carry into Ch 75 (FR-03) rides the companion/relationship columns"*

[SRC: docs/spine/CH_39.md # L203, L207-208] [SRC: docs/spine/CH_42.md # L301].

The real defect is his CLASS, not his beat count. The spine names him in the *same sentence* as two

other people: *"Tunde, Amboko, and Oupa Gert carried lightly"* [SRC: docs/spine/CH_42.md # L289]. All

three do the identical job — a light modern regional contact. I checked the registry:

And the row was never a claim about Tunde. The WS7 plan that seeded it says so in its own words:

*"The CHAR_0002 / CHAR_0017 / CHAR_0127 seeds are illustrative reads for the schema only — do NOT

mass-populate … before Josh ratifies"* [SRC: docs/proposals/systems/WS7_WIRING_BUILD_PLAN.md # L158].

The row is a schema example that got mistaken for a roster assignment — the identical provenance shape

you already ruled on in Ruling 1, where the six-tier ladder turned out to be the author's shorthand rather

than your count. This lane has now made the same mistake twice.

The options

OptionProsCons
AReclassify Tunde as a contact — drop the loyalty row, matching Amboko / Gert / WenceslaoMatches what the spine actually authored, four times, in the same breath as his peers. Honors the seed's own "illustrative" label. Costs nothing — no prose changes.Leaves drawn_conditional with zero exemplars in 162 rows (see the objection).
BAuthor the arc — keep drawn_conditional, commission Tunde a real join/travel arcThematically the strongest: he *is* the drawn-by-integrity idea made flesh, and his Ch-39 turn already carries redemption. Gives the model its exemplar.Real authoring cost across the modern arc, against a locked 77. He'd need beats the coverage map hasn't budgeted.
CStatus quo — leave the seedFreeA companion row that can never fire; the analysis is right that this is dead content. Harmless today (nothing consumes it), but it is exactly the "we built it and never wired it" pattern.

RECOMMENDATION — A, reclassify Tunde as a contact — unless you want the drawn-by-integrity companion, in which case B.

Reasoning, in weight order:

1. The spine already answered. Four nodes of "carried lightly", grouped every time with two people who

have no loyalty rows. That is an authored intent, not an omission.

2. The row has no authority behind it. WS7 L158 labels it illustrative and forbids exactly the

inference this lane drew from it. A schema example is not characterization canon.

3. His story is complete without it. Tunde's function — proof the enemy runs on the un-convincible —

lands entirely at Ch 39 and pays off at Ch 75 through the coalition wing (FR-03), which is a *contact's*

payoff, not a travelling companion's.

4. It is not a tuning pass and never was. No threshold on any ladder fixes a class mismatch. The

analysis was right that this isn't tuning, and wrong about what it is.

Strongest objection to A

Dropping Tunde leaves drawn_conditional a dead letter. He is the only instance of it in all 162

rows. You ruled the drawn-by-integrity model explicitly — *"others are DRAWN by your integrity/actions"*

[SRC: docs/proposals/systems/RULINGS.md # L56] — so reclassifying him quietly retires a model you

authored, leaving a ratified branch of the loyalty system with no character anywhere who exercises it.

That is the anti-orphan failure arriving through the back door: not an unused doc, but an unused *ruling*.

This is why B is genuinely live and why the call is yours. If you want a drawn-by-integrity companion

in the modern arc, Tunde is the right body for it and the answer is an authoring order. If you don't, A is

correct and drawn_conditional should be retired or reassigned deliberately — not left propped up by an

illustrative seed. What A must not do is drop the row and say nothing about the orphaned model.

---

Flagged, not fixed — three corrections you do not need to rule

1. Your D-23 ruling contradicts Ruling 3's for_life exemption and a registry cell. The brief says

*"never is no trigger (Ntala's for_life anchor)"* and *"Only loyalty_model = for_life is exempt"*

[SRC: docs/spine/RELATIONSHIP_TIER_BANDS_BRIEF.md # L220, L221], and the registry rows CHAR_0002 as

for_life / never. But the live spine's Ch-65 EVIL row reads: **"Ntala departs (companions who oppose

the corrosion leave)" [SRC: docs/spine/CH_65.md # L146] — and your D-23 ruling of 2026-07-17**

confirms it, offering Departure/Continuation on *"every surviving band (TG/GE/Drifting)"*, with EVIL

pointedly not enumerated [SRC: docs/spine/DECISIONS_PENDING_JOSH.md # L13 (D-23 RETIRED), # L94].

Scope it precisely: your *cap arithmetic* invariant is untouched — the spine agrees complete

opposition forces departure. What is refuted is the exemption clause layered beside it. The spine

and your own ruling outrank the registry; the row and the clause should be aligned to them at the §9

wiring commit. This needs no new ruling from you.

2. The ratified +15 bonus cap is inert. Max inertia is 100 ÷ 10 = +10, which never reaches +15. One

of the eight ratified starting magnitudes can never fire. Harmless (it fails safe) and tunable without a

re-ruling per Ruling 3 — but better known now than discovered later.

3. A citation defect is propagating. Both the analysis §5 and the work order cite the brief's

relational-reuse claim at L151. L151 is the departure-enum bullet; the claim is at L170. The

substance is unaffected; the pointer is wrong and has been copied forward twice.

---

Verification record

**24 citations checked; 22 resolve and say what is claimed; 1 is the L151 defect above; 1 (D-23 as an open

question) is superseded — it is ruled.** Every number below was re-derived with my own read-only parsers

against docs/spine/, not inherited from the lane.

are). Ntala CHAR_0002 = 191 beats / 55 nodes. Ana CHAR_0017 = 44 / 22. Architect = 7 / 2. Wabenhotep =

2 / 1. Tunde = 0 by ID, 1 as the bare name Tunde [SRC: docs/spine/CH_39.md # L151]. Ntala's

cumulative presence: Ch 17 = 29, Ch 24 = 66, Ch 39 = 113, Ch 58 = 166, Ch 65 = 184, Ch 76 = 190.

(a *different* axis); ws.faction_standing_per_faction 50 / 16; ws.relationship_history 72 / 22;

ws.companion_roster_state 35 / 12; ws.companion_loyalty_transition_events 18 / 4.

182 classed integrity deltas in the adjacent column. (My parse spans all fork-table shapes; counts differ

by ≤2 from the deliverable's choice-table-only basis — immaterial, and the 0 is exact under both.)

44 × 3 = 132. Implied denominators of 106 and 29 appear nowhere and no filter reproduces both.

the "hundreds of transactions" live in the ambient runtime layer no spine node enumerates. Like-for-like,

*neither* axis's events are countable from this corpus — so the asymmetry the risk rested on is not

demonstrable in either direction.

live in the scratchpad. Concurrent-lane churn (drain 7) touched nothing I measured — all reads were of

docs/spine/, docs/, _source/, and registries/.

Generated by harness/site/structure_site.py — the URL path is the repo path. review root