Operations and Maintenance¶
Deep dive on the company's ongoing operational obligations — the recurring work and recurring expenses that keep the existing network functional outside of discrete construction projects. Maintenance is the day-in, day-out backdrop against which projects are commissioned and run.
→ Parent: GDD.md
Concept¶
Not all of the company's operational work happens through commissioned projects. Once track is laid, equipment is purchased, and stations are open, the company has ongoing operational obligations — recurring work and recurring expenses that keep the network functional. These do not look like discrete projects with start dates and project sheets; they are persistent line items in the operating budget.
Where construction projects are episodic (commission, plan, activate, complete), operations are continuous. The two systems are deliberately separated — projects are about building and changing the network; operations are about keeping what already exists running.
Maintenance Is Per-Region¶
Maintenance is tracked per region (county) — the area layer of the world model. Each county in which the company operates carries its own maintenance cost that scales with what has been built there — the footprint of company infrastructure: the stations on its settlements plus the rail lines crossing it. A county with a single Branch line passing through and a Halt-tier settlement station carries a low maintenance cost. A county with a Terminal-tier settlement and several Trunk lines converging on it carries a substantial one. The two tier dimensions (station and line) each contribute, with maintenance roughly tracking tier — Halt low, Depot mid, Terminal high; Branch low, Standard mid, Trunk high.
Maintenance is an abstraction that covers all of the recurring operational expense the company incurs to keep its regional presence running:
- Physical upkeep of existing infrastructure (track, structures, rolling stock based in the region).
- Payments to local governments — operating rights, business licenses, taxes, fees.
- Recurring service contracts (cleaning, inspections, customer service, claims handling, discretionary labor-relations spend).
The player does not micromanage line items inside maintenance. It surfaces as a single regional cost on the books, with sub-breakdowns available on drilldown for the player who wants to see where the money is going.
How Regional Maintenance Cost Is Computed¶
A region's total maintenance cost is the sum of two contributions:
- Construction footprint. Each completed construction project contributes a fixed maintenance increment to its region. The increment is determined at project planning by tier — a Terminal-station upgrade adds more per period than a Depot upgrade; a Trunk-line build adds more than a Branch — and shown to the player up front on the project sheet, alongside the projected build costs, so the player sees the ongoing cost before they activate. When the project completes, its increment is added to the region's base maintenance. (See Construction — Planning Phase.)
- Fleet based in the region. Locomotives, rolling stock, and maintenance-of-way equipment based in a region contribute to that region's maintenance. Larger basing fleets carry more cost; reassigning fleet between regions shifts the maintenance burden accordingly.
The result is linear and additive: a region with high-tier infrastructure plus a large basing fleet carries the highest maintenance; a region with a single Branch line passing through and no basing fleet carries the lowest. The total is updated continuously as projects complete and fleet is repositioned.
The Viability Invariant¶
An operating road of authored starting size covers its own maintenance footprint from contract operations, with a modest surplus that accumulates toward the expansion floor over months. The war chest is startup runway and characterization, not a finite set-piece — a fully-operating road funds itself from revenue and does not spend down its founding capital just to stay running. An idle road (no contracts) or an over-extended one (footprint outrunning the business it has won) still bleeds — that pressure is intended (Pillar 2; a war chest that operating costs never bite is a red flag). The invariant cuts the diagnostic line: if a fully-operating road of authored size runs a structural loss, the fault is in one of three authored quantities — the maintenance rates, the placement of the road's nodes relative to the demand it can reach, or the throughput of the corridors its high-value freight must cross — never the war chest. Because a rival is the same Company runtime as a player-led road (Pillar 3, the rival AI is a delegated head), this invariant holds identically for the player's own road and for every AI incumbent.
Realized income, not paper income, is what the invariant is measured against. A road's available contract income (the price-differential ceiling the generator exposes) can far exceed what it realizes, because throughput saturation sheds contracts whose route exceeds a segment's effective capacity. When the high-value freight (coal, grain, mainline volume) all routes onto one under-tier corridor and saturates it, that freight starves and breaches — leaving the road serving only the low-value traffic that fits under the cap. This is by design (the throughput gate is what makes capacity investment strategic — Economy — Network throughput), but it means the viability check must read saturation-aware realized income, not the raw generator sum. A seed authored so its richest contracts can only ride a saturated mainline is the over-extended-relative-to-corridor-capacity case: the road is structurally throughput-starved from birth, and the fix is a capacity authoring change (author the loaded spine at the line tier its freight demands, or tune the per-tier segment capacities), not a rate cut. (Measured in the M14_E cash-flush re-probe, 2026-07-02: with arrears removed, every michigan_1920s road runs structurally underwater at authored rates, and the binding constraint is segment throughput — the default standardCapacity corridor is loaded ~5× over by overlapping coal/grain contracts, so the paper ceiling is never realized. Placement re-work alone does not flip the sign; raising the loaded corridor's effective capacity does. See Throughput and Saturation.)
The founding seed is right-sized to sustain under delegation. The player's road founds with a modest capitalization and a minimal seed network — deliberately "enough to begin … not lavish enough to skip the early-game decisions" (starting networks) — but modest is not over-extended. The seed's footprint is authored so its operating loop is net non-negative from day one at the reachable contract income: a minimal seed carries minimal-tier infrastructure (branch/standard lines, halt/depot stations) whose maintenance the early contract supply can cover, not a trunk-heavy corridor whose burn outruns it. A road whose seed carries more infrastructure than its reachable business supports is the invariant's over-extended-relative-to-won-business case — but that is an authoring defect to fix, not an intended startup condition. The player's own delegated startup therefore sustains, the same as an authored-size incumbent: a small road managed at arm's length covers its footprint and accumulates a modest surplus toward the expansion floor. Growing the network is the early-game the player plays; staying solvent while doing so is guaranteed by the right-sized seed. The founding capitalization is set so the road clears the expansion floor at birth — it begins above the threshold its operating loop then holds it above.
No delegation trap (Pillar 6). Because the seed is right-sized, delegating a freshly-founded road wholesale is a viable depth choice from day one, not a bleed the player must manage out of hands-on. A player may run their startup at any altitude — hands-on to the last contract, or delegated to a hired head — and it sustains either way; depth is opt-in, never a penalty. Delegation that silently drained a startup to zero (the pre-(a) behavior) was the Pillar 6 red flag (a black-box delegated outcome that traps the arm's-length player) and a defect the right-sized seed removes.
M14_E Ruling — Maintenance Rate and the Tiny-Road Footprint Trim¶
Design ruling for M14_E (rival/company economic viability). The user approved the direction — a maintenance-rate cut — and delegated the magnitude and paired disposition to the designer. The comparative measure-only sweep (cash-flush $500M, 10y, all 8 roads, realized back-half income minus structural footprint = net/d) is the authoritative data. Values here are the pinned design targets; game-dev authors them into economy.json after a measure-first gate. This is the maintenance-rate authored fault the Viability Invariant names, applied.
Magnitude: a global −50% cut, applied uniformly to both stationTierMaintenance and lineTierMaintenance (one lever, no station-vs-line split — the invariant treats the two tier dimensions as one additive footprint; splitting them would be an authoring surface with no design justification). Scale both dicts by 0.5:
stationTierMaintenance: halt3 → 1.5, depot10 → 5, terminal30 → 15.lineTierMaintenance: branch5 → 2.5, standard15 → 7.5, trunk40 → 20.
Why −50% and not −70%. The invariant's stated target end-state is that an operating road "covers its own maintenance footprint … with a modest surplus" — modest, not comfortable. At −50% the delegated player (the only player topology the isolated M14_E probe suite actually measures — see the delegated-floor ruling below) lands at net/d ≈ −2.3: break-even-adjacent, sitting the correct fraction below zero, which is the intended Pillar 6 shape — delegation pays a whisper of a convenience premium and stays comfortably solvent, hands-on is rewarded with the margin. A global −70% over-relieves the delegated player to a comfortable +33.9 — above "modest," a delegated road profitable with no management, which flattens the reward for depth to nothing. That over-relief is the design disqualifier for the deep global cut, independent of the user's instinct: −70% would violate the invariant's own target for the player road. (The +33.9/+35.7 figures once cited here as an "actively-managed" measurement were a mislabel — they were the same delegated-Auto proxy at the proven-dead global-4×-capacity lever, not a distinct active-management mode. There is no measured active-vs-delegated margin anywhere in the isolated probe suite; that margin is a design prediction validated only in live-play E2E — see below.)
Footprint trim: yes, on the three tiny over-built roads. At −50% the field is ~4/8 non-bleeding; the three tiny roads (DT&I footprint 80/d, AA 109/d, D&M 105/d) remain shallow bleeders (−12.3 / −10.3 / −8.0). Thin income against a small footprint is the invariant's over-extended-relative-to-won-business case, which the design classes as an authoring defect to fix, not an intended startup condition — the correct fix is a footprint trim, not deepening the global rate cut to chase them. Do not trim recognizable trunk corridors.
Historian-pinned trims (2026-07-03) — smaller than the 15–25% target; residual accepted where history won't support a deeper cut. The railroad-historian pinned the most each road's real 1920s form safely supports from a single segment. These land on the light side (~4–6% footprint): one small segment is genuinely all each road's history supports without severing a reason-for-existing corridor. The design disposition follows the Viability Invariant — a period-defensible trim is taken where it reaches break-even; where it can't, the residual is accepted and routed to the corridor/reachability pass (same class as MC), not chased with a deeper global cut (−60%+ over-relieves the player to +15.8 static — the reward-dilution disqualifier stands).
- DT&I — accept shallow residual. Downgrade
dti_rr_mon(River Rouge→Monroe) STANDARD→BRANCH (−5/d) → −7.3/d. Detroit→River Rouge is the untouchable heavy spine (Pillar 3); the Monroe leg is the weak, geometry-fudged segment and the only defensible drop. Residual accepted, routed to the corridor/reachability pass (one of the "active road wins near-zero contracts" reachability cases the M14_E diagnosis flagged). - AA — accept shallow residual, provisional pending the contract-aggression fix. Downgrade
aa_main_owo_mp(Owosso→Mount Pleasant) STANDARD→BRANCH (−5/d) → −5.3/d. AA is a single car-ferry through-route with no droppable spurs; Owosso is the density break, so the north leg is the only defensible tier drop. Residual accepted and routed to the reachability pass — but provisional: the folded contract-aggression fix lifts realized won-contract income directly (the correct lever for a reachability/won-business residual, unlike a rate cut), and is expected to lift AA out of the residual, possibly fully. Sequence: land the −50% cut + AA's tier trim, land the contract-aggression fix, then re-measure AA. Non-negative → drops off the residual list; still bleeding → stays accepted with DT&I/MC. Magnitude is a measured quantity, not a design pin. - D&M — take both cuts, reach break-even; leaves the residual set. Drop the
dm_rogers_cityspur +presque_isle_rogers_cityhalt (−4/d) and downgradedm_shore_har_alp(Harrisville→Alpena) STANDARD→BRANCH (−5/d) → +1.0/d. The historian certified the second cut as available without identity loss — Harrisville→Alpena is the sparsest shore segment, period-honest at branch tier, not a severed corridor; the Rogers City spur is a lone limestone-quarry spur served in reality by the quarry's own carrier, so dropping it is if anything more historically correct. Where a period-defensible trim reaches break-even, take it: D&M is fixed and does not join the accepted-residual set.
Michigan Central disposition: the cut carries it only to a shallow accepted near-zero; no footprint trim. MC is not tiny — its 488/d footprint is the field's largest, earned by a real large network — yet it is the deepest bleeder (−17.2 even at −50%; only +31.6 at −60%). A footprint that large that still can't cover itself at a halved rate is neither a rate problem nor an over-built-tiny-road problem: it is the invariant's placement / corridor-throughput case (footprint outrunning realized income on a big network, the standard-corridor over-load the invariant's realized-income paragraph already flags). That fault is fenced out of this pass (placement measured dead; corridor-capacity + off-map-import are separate passes). I therefore accept MC at a thin-margin negative (≈ −17.2/d) pending those passes, and explicitly refuse two wrong fixes: (1) trimming MC's footprint would trim a recognizable incumbent's real spine — a Pillar 3 violation; (2) deepening the global cut to −60% to force MC positive re-over-relieves the player to +15.8 static — the reward-dilution I ruled out above. MC's residual bleed is the design signature of the throughput gap, routed to the corridor-capacity pass, not papered over here.
Accepted per-road end-state (design target after −50% + tiny-road trim):
| Road | net/d @ −50% pre-trim | Disposition |
|---|---|---|
| Great Lakes (player) | −2.3 | Delegated floor, break-even-adjacent — the intended Pillar 6 shape (a convenience premium, not a bleed-trap). This −2.3/d was measured on the 6-station probe spine, not the shipping rail; on data/michigan_1920s.rail.json the delegated floor is ≈ −15/d and re-ruled in Re-Ruling on the REAL Shipping Rail. Active-managed margin is a design prediction, unmeasurable in the isolated probe; validated in the E-5 live-play E2E. |
| Pere Marquette | +151.4 | Healthy. |
| Grand Trunk Western | +114.2 | Healthy. |
| Grand Rapids & Indiana | +40.5 | Positive. |
| Michigan Central | −17.2 | Accepted thin near-zero; routed to corridor-capacity pass, not a maintenance/footprint fix. |
| Detroit Toledo & Ironton | −12.3 | Trim dti_rr_mon STD→BR (−5) → −7.3; accepted residual, routed to reachability pass. |
| Ann Arbor RR | −10.3 | Trim aa_main_owo_mp STD→BR (−5) → −5.3; accepted residual (provisional) pending contract-aggression re-measure. |
| Detroit & Mackinac | −8.0 | Drop dm_rogers_city spur (−4) + trim dm_shore_har_alp STD→BR (−5) → +1.0; break-even, off the residual set. |
Player-feel rationale — the delegated floor is a feature, and the active margin is a prediction the probe cannot test. −50% is chosen so the delegated player sits break-even-adjacent (−2.3/d) and the actively-managed player is rewarded but not trivialized: the reward is the contract margin they earn by managing, not a static positive handed to them by the rate cut. This is the invariant's "modest surplus" read plus Pillar 6's depth-is-opt-in-but-rewarded shape.
Two things must be said plainly, because the isolated M14_E probe measures only one player topology (Great Lakes on its spine under delegated-Auto triage — "active" and "delegated" are the identical topology in these probes):
- The delegated −2.3/d is a feature, not a defect. A delegated road sitting the fraction of a footprint below zero is the intended shape, not a viability failure. Pillar 6's red flag is delegation that traps the arm's-length player (the pre-fix black-box drain-to-zero); −2.3/d is the opposite — a convenience premium the altitude-player pays while staying comfortably solvent (it never spirals, never breaches the expansion floor on a playable horizon, given the founding capitalization clears that floor at birth). The invariant's own diagnostic triggers only on a structural loss; −2.3 on a 90.5 footprint (≈2.5%) is not one — it is break-even with the residual pointing the correct way for Pillar 6, toward rewarding hands-on. Accepting it does not violate the over-relief logic in the other direction: that logic forbids a comfortable-positive delegated road (which kills the reward gradient), and its mirror — fractionally-negative-delegated — is exactly what preserves the gradient while staying solvent. The two bounds are asymmetric on purpose.
- The "active margin on top" is a design prediction, not a measured result. The isolated probe has no active-vs-delegated measurement — the +33.9/+35.7 numbers once cited for it were the same delegated proxy at a dead lever. That the hands-on player clears positive above the delegated floor is the predicted Pillar 6 payoff, and it can only be measured in a live-play E2E (hands-on contract selection vs the delegated-Auto baseline), which does not yet exist. E-5's playtest must build and run that E2E and confirm: (1) the delegated baseline stays solvent across a 10y horizon (−2.3/d does not spiral) — confirming the premium is not a trap; (2) hands-on play clears a margin measurably above the delegated baseline — confirming the reward gradient is real. If (2) fails, the player-feel claim fails and this ruling reopens. Until E-5 runs, treat the active margin as asserted-and-pending, not settled.
A deeper cut would hand the delegated player a comfortable positive and flatten that reward gradient — which is precisely the over-relief the ruling exists to avoid; that disqualifier is unchanged by the premise correction, and there is no fenced move that nets the delegated player positive by $2/d (trunk-demoting the loaded corridor sheds realized income per E-4; capacity/density/placement are measured dead), so closing that residual is out of scope and, per the above, undesirable anyway.
Re-Ruling on the REAL Shipping Rail (2026-07-03) — the −2.3/d was measured on the wrong rail¶
The −2.3/d delegated floor above was calibrated on the historian's 6-station probe spine, not the rail the player actually ships on. The shipping rail is data/michigan_1920s.rail.json (loaded by GameSession.LoadRailFile): 5 stations — Detroit terminal, Lansing/Grand Rapids/Saginaw depot, Ionia halt — and 4 lines — line_dtw_lan trunk, line_lan_sag standard, line_lan_ionia/line_ionia_grr branch. Under the pinned −50% rates this footprint totals 64/d — stations 31.5/d (15+5+5+5+1.5) + lines 32.5/d (20+7.5+2.5+2.5); realized income ~49/d → net ≈ −15/d, draining the ~$9,637 founding treasury to $0 across the run. That is ~6× the −2.3/d "intended floor." The values above stand as authored for the eight-road probe; this subsection is the binding player-floor target for the shipping rail.
Shape: confirmed, unchanged. The "slightly-negative delegated floor as a Pillar 6 convenience premium, active management earning margin on top" is still the intended shape. The asymmetric-bounds logic above is unchanged: a comfortable-positive delegated road is forbidden (kills the reward gradient); a fractionally-negative-but-solvent delegated road is the feature. Nothing in the wrong-rail finding touches the shape — only the magnitude.
Magnitude: −15/d → insolvency is DISQUALIFIED — it is the delegation trap, not a convenience premium. A floor that drains the founding treasury to $0 on a playable horizon breaches the expansion floor and violates the Viability Invariant's "right-sized seed / no delegation trap" requirement — the seed must be net non-negative from day one at reachable contract income, and −15/d is not that. This is the exact Pillar 6 red flag the ruling already names ("delegation that silently drained a startup to zero"). The disqualifier direction is unchanged — do not over-relieve into a comfortable delegated positive — but a floor guaranteeing bankruptcy is the opposite, equally-disqualifying failure. −15/d fails.
Diagnosis: this is realized-income-outruns-footprint, not a rate problem. 49/d realized against a 64/d footprint is the invariant's realized-income signature (footprint outrunning saturation-aware realized income on a small road). Per the invariant's diagnostic line, the fault is in the authored footprint/placement/corridor quantities — never the war chest. That fences out the founding-treasury lever (option c): a bigger $9,637 just delays the drain, it does not flip the sign, and the invariant explicitly forbids "fix the war chest" for a structural operating loss. Re-placement (option b) is measured-dead and out of scope. The sanctioned lever is a footprint trim (option a).
Lever (a): downgrade line_lan_sag (Lansing→Saginaw) STANDARD → BRANCH. −5/d. This is the only design-defensible tier drop on the shipping rail:
- line_dtw_lan (Detroit→Lansing) trunk is the untouchable heavy revenue spine (Pillar 3) — it is the recognizable mainline and the loaded corridor; demoting it sheds realized income (per E-4, trunk-demoting the loaded corridor loses income), which would deepen the gap, not close it. Refused.
- line_lan_ionia and line_ionia_grr are already branch (floor tier); ionia_ionia is already halt (floor); the three depots and the Detroit terminal are network anchors. None is a defensible drop.
- line_lan_sag standard is the one non-spine, non-floor segment — the Lansing→Saginaw leg. STD→BR saves 5/d (7.5→2.5), taking net from −15/d to ≈ −10/d on footprint alone.
One trim does not close a −15/d gap, and I will not force it with a forbidden lever. −10/d still drains to zero. The honest finding: the shipping rail's binding constraint is realized income, not footprint — the trim is the lever I own and it carries ~5/d of the gap; the residual is a corridor/reachability question that routes to the same corridor-capacity/reachability pass MC and DT&I already ride. The trim's net effect must be measured live, not assumed: demoting line_lan_sag to branch drops its throughput cap to 25 units/day, and if Saginaw freight saturates that cap the demotion also sheds realized income — the same trap as the trunk spine, at smaller scale. Game-dev measures whether the −5/d footprint saving is eroded by a realized-income loss on the Saginaw leg; if it is, line_lan_sag is also spine-like and the trim is refused, leaving the whole gap on the corridor pass. Prefer the trim; verify it doesn't backfire.
Target delegated-floor band (the LIVE gate for game-dev): - Net/d: −4/d ≤ net ≤ 0/d on the shipping rail under delegated-Auto. Break-even-adjacent, fractionally negative — the convenience premium. (Matches the eight-road probe's −2.3/d target band; a whisper below zero, never a bleed.) - Solvency: delegated treasury stays strictly above $0 for the full 10y horizon and never breaches the expansion floor — the founding capitalization clears that floor at birth and the operating loop holds it there. End-of-run treasury > 0 is a hard gate; drain-to-zero is a fail regardless of the per-day number. - Active-management margin: hands-on play must clear measurably positive above the delegated floor — the Pillar 6 reward gradient. Unchanged from the E-5 prediction above; validated in the live-play E2E, not the isolated probe.
Sequence for game-dev: (1) land the line_lan_sag STD→BR trim in data/michigan_1920s.rail.json; (2) re-measure delegated net/d + end-of-run treasury LIVE on the shipping rail; (3) if net is inside −4..0 and treasury stays > 0 → floor is on target, done; (4) if still below −4 or still draining to zero → the residual is the realized-income/corridor case: do not deepen the global rate cut and do not bump the founding treasury (both forbidden above) — route the residual to the corridor-capacity/reachability pass with MC and DT&I. The war-chest and deep-cut levers stay closed in both branches.
Scope note. This ruling covers the maintenance rebalance and the historian-pinned tiny-road footprint trims only. It does not reopen capacity/tiering/density/placement (measured dead) and does not fold in the off-map-import gap. The AA/D&M contract-aggression fix is separately scoped, but AA's accepted residual is explicitly provisional on it — AA must be re-measured after that fix lands before its −5.3/d is treated as final (see the AA trim above). The DT&I and MC residuals are unconditionally accepted and ride the corridor/reachability pass. The player's active-management margin is a design prediction, not a probe result, and is validated in the E-5 live-play E2E (build the hands-on-vs-delegated harness; confirm delegated stays solvent and hands-on clears positive) — the player-feel claim is settled there, not in the isolated probe. Game-dev should also confirm whether any capacity constant in the maintenance neighborhood (e.g. a standardCapacity default) is baked rather than authored — but that is a data-hygiene note, not a scope expansion here.
Delegated-Floor Re-Diagnosis on the LIVE Shipping Rail (2026-07-03) — the lever is delegation-tuning, not economy¶
The E-5 live gate the prior subsections called for has now run: real new GameSession("michigan_1920s"), the real shipping rail data/michigan_1920s.rail.json, all four M14_E changes applied (rival-fleet wiring + −50% maintenance + tiny-road trims + the line_lan_sag STD→BR trim), no cash-flush. It measured the active-vs-delegated split the isolated probe could never test — and the split reframes the delegated-floor problem off the economy entirely. This subsection is the binding delegated-floor ruling; where it and the −15/d "wrong-rail" magnitude above diverge, this one governs, because it is measured live on the shipping rail with the active/delegated topologies separated.
The live gate:
- PLAYER, actively managed: net −1.20/d, end cash $4.37, solvent all run — inside the −4..0 band. The active player passes cleanly on this exact economy.
- PLAYER, fully delegated: net −18.35/d, drains to $0, insolvent. Same rail, same ~59/d footprint, same economy.
- The
line_lan_sagSTD→BR trim: no backfire (measured — the Saginaw leg never saturates the branch cap-25; realized income is identical std vs branch). It cleanly sheds 5/d of footprint and is what flips the active player from insolvent-at-$0 to solvent at −1.20/d. Keep it — the prior subsection's "prefer the trim; verify it doesn't backfire" resolves to verified, kept.
The gap is not the economy — it is the delegated auto-manager under-accepting. Same footprint, same rail, same economy: the delegated triage realizes 41.80/d and goes insolvent; a competent human accepting every profitable offer realizes 62.80/d and stays solvent at −1.20/d. That ~21/d spread is profitable income (positive-margin contracts) the delegated triage leaves on the table. Mechanism confirmed on disk: DelegatedManager.RunContractTriage → WouldAccept(c, competence, aggression, tuning) accepts only when ExpectedMargin ≥ AcceptThreshold(competence, aggression, tuning); the player runs at NeutralDisposition; AcceptThreshold reads the JSON-authored DelegationTuning (CompetenceThreshold, AcceptMarginThreshold). The delegated manager is passing on contracts whose margin is positive but below its authored accept threshold.
This is the invariant's diagnostic line working correctly: the active player proves the authored economy (maintenance rates, node placement, corridor throughput) sustains a solvent road in-band. Per the Viability Invariant, when the economy is proven sound the fault is elsewhere — and here it is squarely in the delegated head's disposition, the Pillar 6 surface, not in any authored economy quantity.
Ruling 1 — the lever is delegation-tuning. Confirmed. With the economy already carrying a solvent active player in-band, the correct lever is to loosen the auto-manager's contract-accept threshold so a fully-competent delegated player accepts roughly as a competent human would — landing the delegated floor inside the −4..0 solvent band — not another economy/footprint/rate change. Every economy lever is now either proven sound (the active player is in-band on it) or forbidden by the invariant (war-chest and deep-cut are closed; placement/capacity are fenced to their own passes). The delegated floor is a delegation-engine tuning value, and that is where it is fixed. This directly realizes the predicted Pillar 6 gradient the prior ruling asserted-and-pended: active management earns margin on top of a tight-but-survivable delegated floor. The prediction is now measured, not asserted — the −1.20/d active floor and the delegated shortfall are the reward gradient made real. This closes the E-5 confirmation the M14_E ruling was pending on (delegated stays solvent once retuned; hands-on clears measurably positive above it — the 62.80 vs 41.80 realized-income spread is the gradient).
A note on drift-guard scope. The delegated contract-accept lean pivots on delegation.neutralAggression, the same constant the board vote / tabling reads reuse (drift guard). The retune here targets AcceptMarginThreshold / the competence-scaling of AcceptThreshold — the margin gate, not the aggression pivot. Moving the margin gate does not move neutralAggression, so the board-vote and contract-accept reads still pivot on the same constant and cannot drift. Keep the retune on the margin/competence axis; do not repoint neutralAggression to chase this floor, or the drift guard breaks.
Ruling 2 — the shape of a competent delegate's acceptance: a competence-scaled delegation tax, top head nearly matching active. A fully-competent, neutral-aggression delegate should accept essentially all positive-margin contracts, landing the delegated floor ≈ −2 to −3/d — a whisper below the active −1.20/d, comfortably inside −4..0. Not floor-equal to active, and not at the insolvent −18.35/d — a small deliberate delegation tax is the intended Pillar 6 shape:
- The delegate is not clairvoyant. A hands-on player accepts on live judgement of each offer; a delegated head accepts against an authored margin gate and will always leave a sliver of thin-margin business on the table that a human would have taken. That sliver is the convenience premium — the player pays a couple of /d for not touching the triage. This is the exact asymmetric-bounds logic the ruling already holds: a comfortable-positive delegated road is forbidden (kills the reward gradient); a fractionally-negative-but-solvent one is the feature. −2 to −3/d is that feature.
- Competence scales the tax; the top head nearly matches active, a poor head leaves more on the table.
AcceptThresholdalready reads competence — keep it live. At top competence the delegate should sit at the tight end (≈ −2 to −3/d, a hair below active −1.20/d — near-parity, the well-run delegated road). As competence drops, the accept threshold rises, more thin-positive business is passed on, realized income falls, and the floor deepens — a low-competence head can legitimately sit toward the bottom of the band or below it. A cheap head that bleeds the road is a correct delegation outcome (delegation quality is hiring quality — Business Dealings — Engagement); the hard gate is that a competent head stays inside −4..0 and strictly solvent across 10y. The band is the guarantee for a competent delegate, not for every possible hire. - Aggression keeps its role — a cautious head is tighter, an aggressive head looser. Aggression continues to move the accept threshold around the competence-set point: a cautious (low-aggression) head runs a tighter gate, passes on more marginal business, sits a touch deeper in the band; an aggressive (high-aggression) head runs a looser gate, accepts nearer the margin, sits nearer active-parity (and may, on an aggressive scenario head, dip to zero-margin — accepting break-even business a cautious head would decline). This is unchanged from the character-vs-balance split the rival-seeding ruling draws: aggression is the character axis, and it stays expressive here. The retune sets the neutral competent point at ≈ −2 to −3/d; competence and aggression fan out around it.
Target, in one line: a fully-competent neutral-aggression delegate lands the delegated floor at ≈ −2 to −3/d (band −4 ≤ net ≤ 0, treasury strictly > $0 across 10y), a whisper below the active −1.20/d; competence scales the tax (top head ≈ active, poor head deeper); aggression fans it (cautious tighter, aggressive looser). Game-dev retunes DelegationTuning (AcceptMarginThreshold / competence-scaling in AcceptThreshold) — not neutralAggression, not any economy/footprint/rate quantity — and re-measures the delegated floor live on the shipping rail against this band. This is a delegation-engine data change (DelegationTuning JSON + the DelegatedManager / AcceptThreshold code path), routed to game-dev; it is not an economy authoring change.
Ruling 3 — AA and D&M zero-contract insolvency: accepted, fenced to the contract-aggression / acquisition pass (task #78). AA and D&M are insolvent holding zero contracts — offered-but-lose; they clear no contract at all. That is not a maintenance/footprint fault (their footprints are already trimmed to the historian's floor above) — it is a realized-won-business fault, the same class as the AA residual this ruling already flagged as provisional on the contract-aggression fix. The disposition holds and is now sharpened by the live finding:
- AA — accepted, provisional, unchanged. The −5.3/d trim stands; AA's real residual is that it wins no contracts, which the folded contract-aggression / acquisition fix (task #78) is the correct and expected lever for. Re-measure AA after that fix; non-negative → off the residual list, still bleeding → stays accepted with DT&I/MC.
- D&M — reopen its "break-even, off the residual set" status as provisional. The static probe put D&M at +1.0/d off footprint alone, but the live gate shows it clearing zero contracts — a road that wins nothing does not realize the income the +1.0 assumed. D&M's footprint fix stands (take both trims), but its solvency is now provisional on the same contract-aggression / acquisition pass as AA, not settled by the footprint trim alone. If task #78 lets D&M win thin-positive contracts it clears cleanly; if not, it joins the accepted residual.
- Do not retune the economy now to force AA/D&M to win contracts. PM / GTW / GR&I genuinely self-sustain live (+128 / +123 / +39) on this exact economy — the field is not broken, three roads win business cleanly and one player topology (active) is solvent in-band. AA/D&M winning zero is a contract-acquisition / aggression problem (why do their offers lose?), the same lever as Ruling 1 and 2's delegated under-acceptance but on the acquisition side — fenced to task #78, not chased with a maintenance or rate change here. This is consistent with the Viability Invariant: the economy is proven (other roads sustain on it), so the fault is in the delegated heads' contract conduct, the Pillar-6 surface — exactly where task #78 lives.
Net M14_E delegated-floor disposition: the delegated floor is a delegation-tuning value, retuned to ≈ −2 to −3/d for a competent neutral head (competence-scaled, aggression-fanned, hard solvent-gate for a competent head); the line_lan_sag trim is kept (verified no backfire); the active player is confirmed solvent in-band at −1.20/d on the shipped economy, settling the E-5 reward-gradient prediction as measured; AA is accepted-provisional and D&M is reopened-provisional, both fenced to the contract-aggression / acquisition pass (task #78), with no economy retune to chase them.
The LEVER Supersession (2026-07-03) — the delegated deficit is a behavioral DEFECT, not a margin-gate value¶
The AcceptMarginThreshold lever the prior sub-ruling named has now been measured dead, and the live trace revealed why. This subsection supersedes the LEVER of the tuning sub-ruling above while keeping its SHAPE analysis (the asymmetric bounds, the competence-scaled tax, the aggression fan, the target band all stand). Where this and the tuning sub-ruling's lever diverge, this one governs; where they discuss shape, they agree.
Frame chosen: FRAME 1 — the delegate SHOULD juggle capacity roughly as well as an attentive human, and doesn't, because of a real behavioral defect in the delegation engine. Not FRAME 2 (economy/founding cushion) — that lever is forbidden by the Viability Invariant the moment the live gate proved the active player solvent in-band on this exact economy. The invariant's diagnostic line reads: when a fully-operating road of authored size sustains, the fault is never the war chest and never a rate the active player already clears. FRAME 2 asks to widen the founding treasury or lighten the player footprint to make a naive-but-stable delegated book survive — that is precisely the "fix the war chest for a structural operating loss" the invariant forbids, and it papers a delegation-conduct defect with an economy change. Rejected on the invariant.
(1) The daily-re-acceptance deficit is a DEFECT, not a feature. Pillar 6 states the tax plainly and its own red flag bounds it: "delegated outcomes must trace back to the staff's traits and competence" and delegation must not be "a bleed the player must manage out of hands-on." The intended Pillar-6 tax is the thin-margin sliver a competent head leaves on the table — a couple of /d of business a human's live judgement would have taken. That is a small, competence-scaled premium. What the live trace found is not that shape: the delegate over-grabs ~10–14 contracts same-day, saturates the network, collapses by ~day 31, breaches its highest-margin freight (grain, +8.88/contract), and is then locked out of re-taking it by the E-3 90-day standing-decision guard — ending on 3 passengers / zero grain. That is not "a whisper below active." It is a structural behavioral pathology: greedy same-day acquisition with no capacity awareness, plus a recovery lockout the human isn't subject to (the human re-accepts freed-up high-margin freight daily). A delegated head that inverts its own book — sheds its best freight and keeps its worst — is the exact Pillar 6 red flag the ruling already names: a black-box delegated outcome the player cannot see the sense of and cannot escape without going hands-on.* A competent human does not do this; the design intent is that a competent delegate does not either. Defect.
Why the tuning lever was doomed. AcceptMarginThreshold moves how positive a margin must be to accept — it cannot reach how many to accept at once, in what order, or whether to re-take a breached winner as capacity frees. Loosening it made the floor worse (−18.35 → −31.25) because it grabbed more passengers day-one, displacing grain further. The deficit lives on axes the margin gate does not touch: acquisition sequencing and recovery re-acceptance. A value change on the wrong axis was never going to land the band.
(2) M14_E close needs an ENGINE change, and it warrants its own milestone. The two candidate fixes are both delegation-engine behavior, not tuning:
- (a) Capacity-aware, highest-margin-first same-day acceptance. The delegate caps same-day accepts to available network capacity and accepts richest-margin-first, so it never self-saturates day-one and never displaces grain with passengers. This is the "accept roughly as a competent human would" the tuning sub-ruling asked for, expressed on the correct axis.
- (b) Re-acceptance of breached high-margin contracts inside the E-3 guard once capacity frees. The human's winning move is daily re-acceptance; the delegate is locked out of it by the 90-day standing-decision guard. The delegate must be allowed to re-take a previously-breached, still-high-margin contract when capacity has freed — the guard's purpose is to stop oscillation on a live standing decision, not to bar recovery of a winner the network can now carry.
This is a bigger, riskier change than an M14_E tuning close, and it must not be forced into M14_E's close. Both (a) and (b) touch the shared delegation engine that the entire rival field also runs through (the rival AI is a delegated head) — every AI incumbent's acquisition sequencing and every breach-recovery path changes with it. That is a field-wide behavioral change requiring its own measure-first gate across all eight roads, not a data retune. Design disposition: spin the engine fix into its own milestone (M14_F or successor), and let M14_E close on the state it can honestly reach. What M14_E can bank now: the −50% maintenance cut, the tiny-road trims, the line_lan_sag trim (verified no backfire, kept), and the measured finding that the active player is solvent in-band at −1.20/d on the shipped economy — the economy is proven sound; the residual is delegation conduct, correctly fenced out of an economy milestone.
(3) The floor ruling RELAXES for M14_E's horizon — the solvent-floor gate binds the ACTIVE (and lightly-delegated) player now; the fully-delegated floor is DEFERRED to the engine milestone, not abandoned. The prior sub-rulings treated the competent-delegated −4..0 solvent band as a hard gate for M14_E close. That is no longer honest: the band cannot be reached by any lever M14_E owns (economy is forbidden by the invariant; the sole reaching lever is the deferred engine fix). So for M14_E's binding gate, the solvent floor binds the player topology the shipped code can actually deliver — the actively-managed player, confirmed at −1.20/d, solvent all 10y, in-band. The fully-delegated competent floor remains a design requirement — Pillar 6 does not permit a competent-delegate bleed-trap to ship as final — but it is a requirement on the engine milestone that owns the reaching lever, not on M14_E. This is not "a fully-delegated player is a losing configuration by design" — that reading would violate Pillar 6's no-delegation-trap clause and is explicitly rejected. It is: the fix lives in the engine, the engine fix is its own milestone, and the gate travels with the lever.
Restated binding player-floor gate (for game-dev):
- M14_E close gate (bindable now): the actively-managed player on the real shipping rail (
new GameSession("michigan_1920s"), all M14_E changes, no cash-flush) lands −4/d ≤ net ≤ 0/d and treasury strictly > $0 across the full 10y horizon. Measured: −1.20/d, end cash $4.37, solvent — PASSES. M14_E may close on this. Theline_lan_sagtrim is kept. - Deferred delegated-floor gate (binds the engine milestone, e.g. M14_F): a fully-competent, neutral-aggression delegated player on the same live shipping rail lands ≈ −2 to −3/d (band −4..0), treasury strictly > $0 across 10y, achieved via engine fixes (a) capacity-aware highest-margin-first same-day acceptance and (b) breached-high-margin re-acceptance inside the E-3 guard once capacity frees — not by
AcceptMarginThreshold, not byneutralAggression(the drift guard still forbids repointing it), not by any economy/founding/rate quantity (invariant-forbidden). The SHAPE from the tuning sub-ruling stands: competence scales the tax (top head ≈ active, poor head deeper), aggression fans it (cautious tighter, aggressive looser), the hard solvent-gate binds a competent head only. Because (a)/(b) are field-wide delegation-engine behavior, this gate carries a measure-first re-gate across all eight roads, not just the player. - Routing: the engine fix (a)/(b) is a delegation-engine behavioral change (
DelegatedManageracquisition sequencing + the E-3 standing-decision guard's re-acceptance path), owned by game-dev on its own milestone. This designer does not size (a)/(b); their magnitudes are measured quantities, not design pins — the design pin is only the target band and the two axes the fix must act on. Confirm live on the shipping rail against the band above.
Net supersession: FRAME 1. The delegated deficit is a behavioral defect (greedy same-day over-acquisition + a recovery lockout the human escapes daily), not a Pillar-6 tax and not an economy/founding shortfall. The reaching lever is a delegation-engine change on two axes the margin gate cannot touch — deferred to its own milestone because it is field-wide and riskier than an M14_E close. M14_E's binding gate relaxes to the active player (measured in-band, passes, closes); the competent-delegated solvent floor stays a design requirement, deferred to the engine milestone that owns the lever — not abandoned, and explicitly not reinterpreted as "delegation is a losing config" (that would break Pillar 6's no-trap clause). The tuning sub-ruling's SHAPE stands; its LEVER is superseded.
The Capacity-Aware Accept Mechanism (2026-07-05) — the engine fix, FOLDED into M14_E¶
The prior LEVER Supersession named the reaching lever (capacity-aware highest-margin-first accept + breached-winner re-accept) and deferred it to its own milestone. The user has since ratified folding that engine fix into M14_E's close. This subsection is the mechanism spec — the precise behavior game-dev implements under four-layer TDD. It supersedes the "deferred to its own milestone" disposition of the LEVER Supersession above; everything else in that subsection (FRAME 1, the SHAPE, the two axes, the invariant fencing of the economy lever) stands and is the design basis for this mechanism. The live trace that pinned the defect is named in the milestone doc.
The defect, restated as three pinned behaviors (live-trace ground truth). The fully-delegated player road (a) accepts every above-threshold contract in runtime.Contracts.Available same-day, in arbitrary order, with no capacity awareness → ~10–14 accepts on day 1, ~5× over-loading the loaded corridor; (b) collapses at ~day 31 as saturation triage sheds the overflow, breaching its highest-margin freight (grain, +8.88/day) because the shed order does not protect margin; (c) is then locked out of re-taking that grain for 90 days by the E-3 standing-decision guard (HasStandingDecisionFor, TriageReEvalCadenceDays=90), ending on low-value passengers and zero grain — a book inversion (the delegate holds its worst freight). A human wins by daily re-acceptance of freed high-margin winners; the current threshold-only logic cannot reach that axis. This is the exact Pillar 6 red flag — a delegate that inverts its own book, opaque and inescapable without going hands-on.
Capacity is SEGMENT THROUGHPUT, not fleet capacity. The corridor the delegate saturates is a rail segment over its effective throughput capacity — the same quantity saturation triage sheds against, exposed on the runtime as SegmentCapacity.EffectiveCapacityFor(from,to) with per-segment load from SegmentLoad. It is not Fleet.TotalCapacity (fleet-unit demand — the other, separate starvation trigger, which the fleet-allocation delegate already covers by buying units). The accept mechanism gates on throughput headroom, so it never accepts a contract whose route would push a segment it crosses past that segment's effective capacity. Fleet demand stays the fleet-allocation delegate's job; do not conflate the two.
(1) Capacity-aware, highest-margin-first, same-day accept. Replace the arbitrary-order greedy loop in contract triage with an ordered, headroom-bounded accept:
- Order. Sort the guard-eligible, above-threshold candidates in
Contracts.Availableby descendingExpectedMargin(ties broken by higherPrioritythen FIFO by offer, so the order is deterministic and testable). Grain-before-passengers falls out of this automatically. - Headroom rule. Walk the sorted list and provisionally accept each contract only if, after adding its
VolumePerDayto every segment on itsPath, no such segment's projected load exceeds itsEffectiveCapacityFor— i.e. the accept must leave every segment it touches at or below capacity. The projected load is (current committed load from already-active + already-provisionally-accepted-this-pass contracts) + this candidate'sVolumePerDay. If any segment on the path would breach, skip this candidate and continue to the next (a lower-margin contract on a different, un-saturated corridor may still fit) — do not stop the whole pass at the first miss. - Headroom target: accept up to 100% of effective capacity, no deliberate buffer. The delegate fills a corridor to its capacity but not past it. Rationale: a below-100% buffer would widen the delegated tax (leave more thin-margin business on the table than the Pillar-6 sliver warrants) and the feel gradient below already reserves the human's edge to the re-accept-lag axis, not to a capacity buffer. Filling to capacity is the "accept roughly as a competent human would" the tuning sub-ruling asked for, on the correct axis. (The exact headroom fraction is a tunable in the
delegationblock, authored to 1.0; game-dev may expose it asacceptCapacityHeadroomso a future scenario can dial caution without a code change. Magnitude is measured, not a design pin — but 1.0 is the pinned starting value.)
This alone removes behaviors (a) and (b): the delegate never self-saturates day 1, and because it accepts highest-margin-first within the headroom, grain is taken before passengers rather than displaced by them. The margin gate (AcceptThreshold) still applies first — a contract must clear both the margin gate and the headroom test — so competence and aggression keep their SHAPE roles unchanged (see the tuning sub-ruling's SHAPE).
(2) Narrow re-accept of breached high-margin winners inside the E-3 guard. The E-3 90-day guard exists to stop oscillation on a live standing decision (a delegate re-deciding the same contract every day), not to bar recovery of a winner the network can now carry. Thread a narrow re-accept path that lifts the guard for a specific contract only when all of the following hold — this is the exact predicate that distinguishes recovery from churn:
- P1 — it is a winner, not a loss-maker. The re-offered contract's
ExpectedMarginis strictly positive and clears the currentAcceptThreshold(it would be accepted on merit today). A thin/negative contract never qualifies — re-taking one would be churn. - P2 — the most recent standing decision for it was a saturation-shed, not a merit-decline. The guard lifts only for a contract the delegate breached or declined because a corridor it crosses was over capacity — the recovery case — not one it declined on margin. (Implementation: tag the shedding decision so the recovery path can read "this was shed under saturation," distinguishing it from a margin decline. Game-dev owns the exact carrier — a decision
Kind/flag onDelegationDecision, or a saturation-shed reason — but the predicate is: only saturation-sheds are re-accept-eligible.) - P3 — capacity has genuinely freed. Re-accepting it now passes the same headroom test as (1) — every segment on its path stays at or below effective capacity after adding its volume. This is the load-bearing gate: it fires only when other traffic has ended, been shed, or new capacity was built, so the corridor can actually carry the winner again. If the corridor is still saturated, P3 fails and the guard holds — no churn.
When P1 ∧ P2 ∧ P3 hold, the contract is re-eligible this tick regardless of the cadence window — the recovery path bypasses HasStandingDecisionFor's cadence for that one target. When any fails, the ordinary cadence guard governs (no re-decide spam). This is narrow by construction: it re-takes only a positive-margin, previously-saturation-shed contract onto a now-uncongested corridor. General re-churn (re-deciding a merit-declined or still-loss-making or still-saturated contract) is exactly what the three predicates exclude.
(3) The Pillar-6 feel gradient — a GATE the live re-test must satisfy. Pillar 6 requires delegation be tight-but-survivable, and active management must clearly beat it — the reward gradient is the point. The measured active floor is −1.20/d, solvent on the shipping rail. The mechanism must land the fully-competent, neutral-aggression delegated floor in the SHAPE band the tuning sub-ruling already pinned:
- Target gradient: delegated net/d ≈ −2 to −3/d (band −4 ≤ net ≤ 0), a whisper below the active −1.20/d — near-parity but strictly worse, and treasury strictly > $0 across the full 10y horizon (a hard gate; drain-to-zero fails regardless of the per-day number). The delegated floor must be measurably worse than active and must not land at-or-above the active floor — a delegated road as good as (or better than) active play is a feel regression and fails this gate.
- How the mechanism preserves the gap — the re-accept LAG. With capacity-aware accept, the delegate now fills corridors correctly and re-takes freed winners, so what keeps it below active is not a capacity buffer and not the margin gate — it is that the delegate's re-accept path acts on a cadence/lag a same-day human beats. Concretely: the delegate re-evaluates its guard-held set on the triage cadence, so a freed-up corridor's winner is re-taken on the next re-eval tick after capacity frees, not the same day it frees. A hands-on player accepts the freed winner the instant they see it; the delegate always trails by the re-eval interval, ceding a sliver of high-margin days on every recovery. That trailing sliver is the convenience premium — the couple-of-dollars-a-day the arm's-length player pays — and it is what holds the delegated floor a whisper below active without ever inverting the book or trapping the player. Design pin: the re-accept path must not be same-day-instant; it rides the delegate's normal re-eval cadence so the human's same-day action stays strictly ahead. (Game-dev sizes the cadence's effect; the design pin is only that the lag exists and is what preserves the gap. If the live re-test shows delegated ≥ active, the re-accept is firing too eagerly — widen the lag, do not re-introduce a capacity buffer or move the margin gate.)
- Competence and aggression keep their SHAPE roles (unchanged): top competence sits at the tight end (≈ active), a poorer head trails deeper; a cautious head runs a tighter headroom/threshold and sits deeper, an aggressive head looser and nearer parity. The −2..−3/d band is the guarantee for a competent neutral head only.
(4) AA / D&M aggression retune — folded in, co-checked against capacity-aware accept. Ann Arbor and Detroit & Mackinac win zero contracts because their authored aggression (AA 45, D&M 35) sits below neutralAggression (60); via AcceptThreshold with aggressionMarginShift=1, their effective accept margins are +$15/d (AA) and +$25/d (D&M) against a best offer of ~$8.88/d → they decline everything (Ruling 3, milestone doc AA/D&M item). To make both win contracts and realize income, raise their authored aggression so the effective margin clears the ~$8.88/d ceiling with headroom for the thin-positive business a competent human would take:
- AA: 45 → 62. Effective accept margin =
acceptMarginThreshold − aggressionMarginShift × (62 − 60)=0 − 1×2= −$2/d → accepts all positive-margin offers and the marginal-zero sliver, matching an aggressive-but-sane incumbent. (A minimum of ~52 merely clears $8.88; 62 gives the thin-positive latitude the zero-contract fault demands, and sits AA a touch above neutral — a period-plausible scrappy through-route that takes what it can get.) - D&M: 35 → 62. Same effective −$2/d accept margin; D&M's deeper deficit (35) needs the larger bump to reach the same win-thin-positive posture. Authoring both at 62 keeps the two shore/through roads at a single legible "aggressive-thin" disposition.
Co-check — the capacity-aware accept makes this safe. Under the old arbitrary-order greedy loop, raising aggression would re-create the day-1 saturation trap (more accepts, no capacity awareness). Under (1), over-accepting is self-limiting — the headroom test caps AA/D&M at what their corridors carry regardless of how loose their margin gate is — so the aggression bump lifts realized won-business without re-opening the saturation collapse. Land (1) before re-measuring AA/D&M. Do not regress the E-1 large-rival pins: PM/GTW/GR&I must stay self-sustaining; the aggression change touches only AA's and D&M's authored values, and the capacity-aware accept applies field-wide identically, so the large roads' behavior moves only as their own corridors' headroom dictates. Re-measure all eight roads (measure-first gate) after (1)+(2)+(4) land; if any large-rival pin regresses, the fault is in (1)/(2)'s field-wide behavior, not the AA/D&M numbers — fix there, not by re-tightening AA/D&M.
Drift-guard — unchanged and re-affirmed. This mechanism moves the accept sequencing and the re-accept predicate, plus AA's/D&M's authored aggression. It does not repoint neutralAggression (the board-vote / tabling pivot; the drift guard still forbids moving it) and does not move any economy/footprint/rate quantity (invariant-forbidden — the active player is proven solvent on this exact economy). Authored aggression per road is the character axis and is expressly the sanctioned surface for AA/D&M (rival-seeding character-vs-balance split); moving it is not a drift-guard breach, moving neutralAggression would be.
Cross-ref — the 4b capital-vs-route aggression split (M14_C). The
aggressionthese Operations rulings tune is the contract-accept (capital-aggression) axis — the one the 4b split keeps onaggression. The split adds a second field,routeAggression, read only by the board/expansion lean, and defaults it toaggressionwhen unauthored. So every AA/D&Maggressionretune here stays valid post-split, and the drift guard is preserved: the split adds an input field read through the sameneutralAggression60 /dispositionLeanMargin5 band, it does not move the pivot. Re-authoring AA/D&M'srouteAggression(e.g. to hold D&M a non-builder independent of its contract-accept bump) is a later character call, not required by the split's back-compat default.
Routing. (1)/(2) are delegation-engine behavioral changes in DelegatedManager (accept sequencing + the standing-decision re-accept path) reading the runtime's SegmentLoad/SegmentCapacity; (4) is data in the rival authoring (aggression per road) plus the optional acceptCapacityHeadroom tunable in the delegation block. Both owned by game-dev under four-layer TDD; this designer owns the mechanism, the predicate, the feel-gradient gate, and the AA/D&M numbers — not the code. Confirm live on the shipping rail against the feel-gradient band with a measure-first re-gate across all eight roads.
Two Implementation-Surfaced Adjudications (2026-07-05) — the Saginaw corridor conflict and the AA/D&M authenticity retune¶
The capacity-aware accept + narrow re-accept mechanism (above) is implemented and green on its four layers — provably on the right axis. Two design calls surfaced during its integration on branch m14c-multicompany. Both are ruled here as design intent; where either touches a value the mechanism spec above pinned, this subsection supersedes that value and the prior pin stands as history.
Adjudication 1 — the Saginaw corridor: the vol-60 coal is the seed defect, not the corridor tier¶
The conflict, measured (game-dev in-memory probes, no disk change). The line_lan_sag (Lansing→Saginaw) STD→BR trim — kept above as "verified, flips the active player solvent, no backfire in active play" — starves the delegated player under the new capacity-aware accept. saginaw_saginaw authors a coal contract at volume-60 (rate 40.50, +16.50/contract margin). At branch cap-25 the capacity-aware accept correctly refuses the vol-60 coal (60 > 25 — unservable) → delegated income ceiling ~42 < footprint ~59 ≈ −17/d → drains to $0 (fails the feel-gradient solvency gate). Restoring Saginaw to standard (cap 100) makes the vol-60 coal servable and the delegate grabs it → ends +$50k, min cash $9,566 — solvent but comfortably profitable, the Pillar 6 feel regression the gradient gate forbids (delegated must be measurably worse than the active −1.20/d, not $50k better).
The corridor-tier levers are both dead ends, and the reason is structural. A vol-60 contract needs ≥60 capacity to ride a corridor at all. The tier ladder is branch-25 / standard-100 / trunk-400 — there is no rung between 25 and 100, so a vol-60 contract is binary: branch refuses it (starve), standard/trunk accept it whole (over-profit). No intermediate tier yields "tight-but-survivable" for a vol-60 freight. And restoring Saginaw to standard + trimming a second segment to claw the delegated net back into band has no valid second trim: the Re-Ruling on the REAL Shipping Rail already exhausted the shipping rail — line_dtw_lan trunk is the untouchable revenue spine (demoting it sheds income per E-4), the two Lansing↔Ionia↔Grand-Rapids lines are already at branch floor, the depots/terminal are anchors, and a maintenance-rate nudge is invariant-forbidden (the active player is proven solvent on the current rates; moving them re-opens the whole field). Every corridor/footprint lever is either dead or forbidden.
Ruling: the fault is the authored freight, not the corridor. This is the Viability Invariant's throughput/authored-quantity case read correctly: a road whose viability swings on one over-rich contract riding a marginal corridor is a seed authoring defect, and the sanctioned fix is the authored quantity — here, the coal volume itself, not the corridor tier. The defect is already on record: the railroad-historian ruled "Michigan was a coal importer, not a producer — a mid-Michigan coal→Detroit feeder over-models Michigan coal by ~10×; the honest Saginaw-Valley freight is grain + beans + sugar beets, coal into Detroit is an off-map/gateway import." The vol-60 saginaw_saginaw coal is that ~10× over-model. Correcting it to the period-honest level (coal is not a Saginaw product) removes the fat contract that simultaneously (a) can't ride branch cap-25 and (b) over-profits the delegate at standard — dissolving the conflict at its authored source rather than fighting it with a compensating tier hack. Keep line_lan_sag at branch (the active-solvency trim stands; with the coal gone it carries only the honest sub-cap Saginaw feeder traffic — beans 18, salt 18, passengers 23, all < 25); the delegated player then earns from the Detroit–Lansing–{Ionia–Grand Rapids} spine plus that low-value feeder, landing in-band.
This is a shared-economy change (Pillar 3) — the co-check is mandatory. saginaw_saginaw sits on Pere Marquette's trunk spine (pm_fpm_fli_sag / pm_fpm_sag_mid, both trunk cap-400), so reducing its coal moves PM's realized income too. PM is a large-rival pin (measured +128/d live, huge headroom, routes Saginaw freight on un-saturated trunk) — a coal reduction there is very unlikely to tip it negative, but it must be measured: the E-1 PM/GTW/GR&I self-sustain pins must not regress.
Exact target for game-dev — the corridor/freight change and the two numeric gates:
- Change (data): reduce saginaw_saginaw coal production in regionProfiles.json from vol-60 to its period-honest level — coal is an off-map import into Detroit, not a Saginaw product, so the honest figure is at or near zero in-state production at Saginaw. Keep line_lan_sag at branch. This designer does not pin the exact residual coal number — its period-correct magnitude is the railroad-historian's call (the honest Saginaw-Valley spine is grain/beans/beets); this designer pins that the vol-60 coal is the defect and the band the correction must hit. Do not touch commodity rates, maintenance rates, or the corridor tier ladder (all invariant-fenced).
- Gate 1 — active player: on the real shipping rail (new GameSession("michigan_1920s"), all M14_E changes, no cash-flush), actively-managed net/d lands −4 ≤ net ≤ 0 (target ~−1..−2/d) and treasury strictly > $0 across the full 10y horizon. The current −1.20/d must not regress out of band.
- Gate 2 — delegated player: the fully-competent, neutral-aggression delegated player on the same rail lands −4 ≤ net ≤ 0 (target ≈ −2 to −3/d, a whisper below the active floor — the feel gradient) and treasury strictly > $0 across 10y. It must be measurably worse than active and must not overshoot into a comfortable positive (the +$50k standard-Saginaw result is the disqualified feel regression). Drain-to-$0 is a hard fail regardless of the per-day number.
- Field co-check (Pillar 3): re-measure all eight roads; PM/GTW/GR&I stay self-sustaining (the E-1 large-rival pins). If PM regresses, the coal correction over-reached — coordinate the residual magnitude with the historian, do not re-inflate the coal to protect PM (that re-creates the player defect).
Routing: the coal-volume magnitude is the historian's period-fidelity call; the regionProfiles.json edit + the live four-layer re-measure against both gates is game-dev's. This designer owns the verdict (freight is the lever, not the tier), the gate bands, and the Pillar-3 fence.
ADJ-1 close (2026-07-05) — the full saginaw_saginaw produces list, and the manufactured_goods collision resolved (Option c)¶
The historian's per-commodity period numbers came in after the ruling above. This sub-ruling pins the exact saginaw_saginaw produces list game-dev authors, resolves the newly-surfaced manufactured_goods-at-vol-53 collision, and corrects a mis-statement in the ruling above. Where this and the "beans 18, salt 18, passengers 23, all < 25" parenthetical above diverge, this governs.
Topology finding (decisive, from disk). On the player shipping rail (data/michigan_1920s.rail.json), saginaw_saginaw has exactly one connection — line_lan_sag (Lansing↔Saginaw), at branch tier. There is no trunk-tier path from Saginaw on the player rail. (The pm_fpm_fli_sag/pm_fpm_sag_mid trunk segments the ruling above cites are Pere Marquette's network in rivals.rail.json, not the player's — PM routes Saginaw freight on its own un-saturated trunk; the player reaches Saginaw only over the branch feeder.) So for the player road, line_lan_sag-branch is the sole Saginaw corridor: any Saginaw freight whose volume exceeds branch cap-25 is unservable by the player regardless of its authoring honesty — the freight is authored at a station whose only player corridor cannot carry it. This is the fact that resolves the collision.
Two independent gates on a Saginaw freight — the M13 tier-gate and the throughput cap — and they land differently on manufactured_goods. The M13 line-tier gate exempts the feeder endpoint segment (Saginaw→Lansing) and enforces the commodity's requiredLineTier only on the interior mainline. So a standard-required commodity (manufactured_goods, auto_parts, passengers) is tier-legal originating at Saginaw as long as its route's interior rides the Lansing→Detroit trunk — the branch feeder hop is exempt. The throughput cap is the binding gate: line_lan_sag-branch carries effective cap-25/day, and any single contract's VolumePerDay loads that segment. manufactured_goods at vol-53 loads 53 on the branch feeder → exceeds cap-25 → saturation triage sheds it. It is tier-legal but throughput-shed on the player's branch feeder.
Manufactured_goods collision — RULING: Option (c), keep it at vol-53, authored-honest and branch-shed for the player. The historian is right that a trunk-scale manufactured-goods outflow from Saginaw is period-honest (genuine foundry/auto-parts industrial city) — unlike the coal, it is not an over-model, so cutting it to fit the branch (option a) would under-model a real industrial city and is refused. Keep manufactured_goods at 53. It routes on PM's trunk spine (the historian's "reason Saginaw needs trunk access") and is realized by any road with a trunk-tier path to Saginaw — PM today, and the player once they build trunk capacity to Saginaw. For the player's branch-only road it is honest supply the branch feeder genuinely cannot carry — the exact "you'd need to build trunk to Saginaw to unlock this" player-facing incentive the throughput Viability Invariant is built to create ("capacity investment is strategic"). This is Option (c), and it is clean because the delegated player does not need manufactured_goods income to survive: per the ruling above, removing the vol-60 coal lands the delegate in-band on the sub-cap feeder (beans/salt/sugar-beets) + the Detroit–Lansing–GR spine; manufactured_goods was never in the delegate's realized book on the branch and its absence there is the authored shed, not a viability hole. Pillar 7 drove this call — the railroad shapes the world: a standing honest-but-unservable trunk flow at Saginaw is a build-incentive that transforms into realized income the moment the player commissions trunk plant to the Valley, exactly the network-builds-the-map loop Pillar 7 exists to reward. (Options a/b/d rejected: (a) under-models real history; (b) is a no-op for the player — no trunk path exists to route it on, only PM has one; (d) splitting the flow invents a fake sub-Saginaw producer with no period referent.)
Correction to the ruling above. The parenthetical "carries only … beans 18, salt 18, passengers 23, all < 25" is wrong on passengers and incomplete: passengers (23) and auto_parts (18) are requiredLineTier: standard, so they ride the branch feeder only via the trunk-interior exemption (Saginaw→Lansing→Detroit and beyond), not "on the branch" as raw feeder carloads — and manufactured_goods (53) is present-and-shed, not absent. The branch feeder's raw sub-cap carloads are the branch-tier ag/salt commodities (beans, salt, sugar_beets, grain); the standard-tier commodities (passengers, auto_parts, manufactured_goods) are tier-passable to trunk-interior destinations but each still faces the cap-25 throughput gate on the feeder hop — so only the sub-25 ones (passengers 23, auto_parts 18) actually clear it, and manufactured_goods (53) sheds. The delegated-in-band conclusion is unchanged — it never rested on manufactured_goods income.
Grain — RULING: ADD grain at vol-12. The historian routed this authoring call to the designer. Add it. Grain at 12 is a defensible third ag carload for the Saginaw Valley, sits well under branch cap-25 (servable raw on the feeder — requiredLineTier: branch), and thickens the delegated player's in-band feeder income on the exact corridor the ADJ-1 fix leaves it earning from — strengthening the Gate-2 solvency margin without touching a rate or a tier. Pillar 4 tie-break (the world is a constellation of named entities / texture) favors the richer, more-legible Saginaw-Valley agricultural profile over an arbitrarily thinner one; there is no design cost to including a period-honest sub-cap carload, and it helps the delegated floor. (If the field co-check shows grain-12 tips the delegated player above the −4..0 band into a comfortable positive — unlikely at vol-12/rate-0.45 ≈ +$5.40/d gross — game-dev flags it and the residual is trimmed from grain first, since it is the discretionary add; the historian-fixed beans/salt/beets are not the tuning surface.)
FINAL saginaw_saginaw produces list (author exactly this):
| commodityId | volumePerDay | note |
|---|---|---|
sugar_beets |
22 | historian: capped from 40 to fit branch-25; Saginaw Valley beet-sugar heartland, top ag carload |
beans |
18 | kept (Thumb/Saginaw navy-bean region); sub-cap feeder carload |
salt |
18 | kept (genuine Saginaw brine/salt); sub-cap feeder carload |
grain |
12 | ADD (designer call — third ag carload; sub-cap; thickens the delegated feeder floor) |
auto_parts |
18 | kept (real GM parts town); standard-tier, rides trunk-interior; sub-cap on feeder |
manufactured_goods |
53 | KEEP (Option c) — period-honest trunk-scale industrial outflow; routes on PM trunk; branch-shed for the player until they build trunk to Saginaw (Pillar 7 build-incentive) |
passengers |
23 | kept (under cap); standard-tier, rides trunk-interior |
~~coal~~ |
REMOVE (0) | historian: Michigan was a coal importer; the vol-60 coal is the ~10× over-model — the ADJ-1 seed defect. Remove from produces; keep coal in consumes (Saginaw is a coal consumer). |
Rail-topology change required? NO. This is a pure regionProfiles.json produced-volume edit — remove coal from produces, set sugar_beets 40→22, add grain 12, keep beans/salt/auto_parts/passengers/manufactured_goods as listed. line_lan_sag stays at branch (the ADJ-1 ruling and the active-solvency trim stand). No corridor tier change, no new line, no capacity-constant change. The manufactured_goods-at-53 "trunk access" is a player build-decision the existing map already supports (commission trunk plant to Saginaw) — not a seed authoring change; authoring it as a standing shed is the whole point of Option (c). Game-dev needs no file this designer owns; the single edit target is data/scenarios/michigan_1920s/regionProfiles.json (game-dev's lane).
The two numeric gates (restated, binding — unchanged from the ruling above):
- Gate 1 — active player: on the real shipping rail (new GameSession("michigan_1920s"), all M14_E changes, no cash-flush), actively-managed net/d in −4 ≤ net ≤ 0 (target ~−1..−2/d, current −1.20/d must not regress out of band) AND treasury strictly > $0 across the full 10y horizon.
- Gate 2 — delegated player: the fully-competent, neutral-aggression delegated player on the same rail in −4 ≤ net ≤ 0 (target ≈ −2 to −3/d, a whisper below active — the feel gradient), measurably worse than active, not overshooting into a comfortable positive, AND treasury strictly > $0 across 10y (drain-to-$0 is a hard fail regardless of the per-day number).
- Field co-check (Pillar 3), large-rival pins intact: re-measure all eight roads; PM/GTW/GR&I stay self-sustaining (the E-1 large-rival pins). PM carries Saginaw's manufactured_goods (53) + the ag carloads on its un-saturated trunk, so the coal removal is the only realized-income mover for PM there — very unlikely to tip it, but measure. If PM regresses, coordinate the coal residual with the historian; do not re-inflate coal to protect PM.
Adjudication 2 — AA/D&M authenticity: recenter the curve, keep the authored numbers honest (Option a)¶
The tension. §(4) above pinned AA and D&M at aggression 62 to make them win thin-positive freight. The railroad-historian has since ruled 62 character-inauthentic for both: AA is a receivership-scarred Lake Michigan car-ferry road (in and out of receivership until Wabash took control Nov 1925 — defensive, fragile); D&M is a declining Lake Huron shore road off a spent 1880s pine boom — the most conservative of the seven rivals. The historian recommends AA 55 / D&M 50 (both below-neutral, matching their real cautious character) and flags — explicitly as a designer call — that under the current curve those authored numbers still decline the ~$8.88/d thin-positive offers and bleed to $0, so the fix belongs in the curve, not in inflating the roads' character up to 62.
Ruling: Option (a) — recenter the curve, keep AA 55 / D&M 50. This supersedes §(4)'s AA/D&M-at-62 pin. A genuinely near-neutral going concern does take profitable freight — "won't chase thin freight" is a matter of degree, not a refusal of all positive-margin business, and authoring AA/D&M up to 62 to clear the offer ceiling would lie about their character (the character-vs-balance split says balance is fixed on the balance axis, not by falsifying the character axis). The correct lever is the curve's gain, so that a below-neutral-but-solvent road still accepts profitable freight while staying legibly more cautious than a neutral road.
The lever is aggressionMarginShift, NOT neutralAggression. The effective accept margin is acceptMarginThreshold − aggressionMarginShift × (aggression − neutralAggression) = (with acceptMarginThreshold=0, neutralAggression=60) aggressionMarginShift × (60 − aggression). Moving neutralAggression is forbidden by the drift guard (the board-vote/tabling reads pivot on the same constant). The sanctioned lever is the slope: halve it.
Exact numbers for game-dev:
- aggressionMarginShift: 1 → 0.5. (delegation block, economy.json.) Leave neutralAggression = 60 and acceptMarginThreshold = 0 unchanged (drift guard intact; neutral behavior unchanged).
- AA aggression: → 55; D&M aggression: → 50. (Authored aggression per road, rival authoring file — the sanctioned character surface.) Supersedes the §(4) pin of 62 each.
- Resulting effective accept margins: D&M-50 = 0.5 × (60−50) = +$5.0/d (accepts offers ≥ +$5 — the ~$8.88 thin-positive clears with headroom; declines genuinely-thin sub-$5 business, appropriately cautious). AA-55 = 0.5 × (60−55) = +$2.5/d (accepts offers ≥ +$2.5 — a touch less cautious than D&M, matching AA scrappier-than-D&M). A neutral-60 road = 0.5 × 0 = $0 — accepts all positive-margin, byte-identical to today (the pivot is invariant; the retune moves only off-neutral roads).
Co-check — the recenter is shared (Pillar 3); it is safe in the correct direction. Halving the slope moves every off-neutral road toward neutral: below-neutral (cautious) roads accept more thin-positive business (the goal — AA/D&M start winning); above-neutral (aggressive) roads accept less loss-making business (an aggr-65 road goes from accepting-to-−$5 to accepting-to-−$2.5 — more selective, which if anything improves solvency, never regresses it). So the E-1 PM/GTW/GR&I self-sustain pins cannot regress on the accept axis from this change. Day-1 over-accept stays bounded because the capacity-aware accept (mechanism 1) is self-limiting — the headroom test caps AA/D&M at what their corridors carry regardless of a looser gate. The feel gradient is untouched: the player runs at neutral-60 (effective $0), unchanged by the slope halving. Aggression stays expressive — a scenario head authored aggressive (aggr 62) now accepts to −$1.0 (was −$2.0); the character axis is compressed to half-gain but alive, and the aggressive/cautious fan of the SHAPE is preserved.
Sequence and gates: land mechanism (1) first (self-limiting accept), then the aggressionMarginShift=0.5 + AA-55/D&M-50 retune; re-measure all eight roads live. Gate: AA and D&M win contracts and realize income (non-negative, or the accepted-residual disposition sharpens per Ruling 3); PM/GTW/GR&I stay self-sustaining; the player's neutral-60 accept behavior is unchanged (feel gradient intact). If a large-rival pin regresses, the fault is in mechanism (1)'s field-wide behavior, not these numbers — fix there.
Routing: aggressionMarginShift (economy.json delegation block) + AA/D&M authored aggression are data; the live re-measure is game-dev's four-layer close. This designer owns the numbers and the Pillar-3 co-check; game-dev owns the edit and the measure.
Adjudication 3 (2026-07-05) — the Detroit–Lansing TRUNK is an authored over-tier seed defect; demote it to standard¶
The M14_E full-close live gate cleared every road but the fully-delegated player on the shipping rail: post-ADJ-1 (coal removed, clean grain:4 book) the delegate realizes 49.95/d against a 59.0/d footprint = −9.05/d, draining the $9,637 founding stake to $0 by ~year 2 and staying dead years 2–10 — fails Gate 2's hard solvency clause. game-dev's three cheap closers (deeper maintenance cut, income/rate lift, player-footprint trim) all reach invariant-fenced levers and were correctly refused. The question routed here: is the player's authored footprint itself a seed defect — the same class as the ADJ-1 Saginaw coal over-model — such that correcting it is an in-scope seed authoring fix, not a fenced footprint trim? Ruling: yes — the Detroit–Lansing line_dtw_lan trunk is authored over-tier for the freight the player can reach and monetize, and demoting it to standard is the in-scope seed correction. This supersedes the Re-Ruling on the REAL Shipping Rail's "refuse the trunk demotion" on the specific point of line_dtw_lan; the reason that refusal no longer binds is that its premise was voided by ADJ-1 (below).
The Viability-Invariant diagnostic, applied to the placement/tier axis. The invariant's diagnostic line: a fully-operating road of authored size that runs a structural loss has a fault in one of three authored quantities — rates, placement/tier, or throughput — never the war chest. The active player is proven solvent in-band on this exact economy (−1.20/d), so rates are sound (fenced). The delegation engine is proven on the right axis (capacity-aware accept green on four layers), so the residual is not delegation conduct. That leaves placement/tier — and the invariant states it plainly: a road authored with "a trunk-heavy corridor whose burn outruns" the contract supply "is the invariant's over-extended-relative-to-won-business case — but that is an authoring defect to fix, not an intended startup condition." A trunk the delegated book cannot fill is that defect on the tier axis, exactly as the ADJ-1 vol-60 coal was it on the volume axis. Same class, same disposition: correct the authored quantity at its source.
The decisive fact — the Detroit freight that would justify a trunk has no in-network consumer, so it generates zero player contract. Detroit (wayne_detroit) produces the only trunk-scale volumes on the player's five reachable nodes: automobiles 200, manufactured_goods 60, auto_parts 80. Checked against every consumes block in regionProfiles.json: automobiles is never consumed anywhere in the scenario (all 9 occurrences are produces), and no reachable player node (ingham_lansing, kent_grand_rapids, saginaw_saginaw, ionia_ionia) consumes manufactured_goods or auto_parts. These are pure export/off-map commodities with no in-state consumer — they generate no contract on the player's network, and cannot until the off-map gateway-import abstraction (a separate seed-completeness pass, explicitly out of M14_E) exists. So the freight the delegated player actually monetizes across line_dtw_lan is: grain (Ionia 25 + Saginaw 12, into Lansing/GR/Detroit; the +8.88/contract high-margin freight), passengers, and the sub-cap Saginaw ag feeder. Peak realizable load on the corridor is well under standard cap-100 — nowhere near trunk-scale. The corridor is authored trunk (20/d maint, cap-400) to carry freight the player's reachable network structurally cannot sell. That is the over-tier defect: the player pays trunk maintenance for capacity its monetizable book never uses.
Why the 2026-07-03 trunk-refusal no longer binds. That refusal rested on line_dtw_lan being "the loaded corridor" and "demoting it sheds realized income (per E-4)." Both were true only under the pre-ADJ-1 seed, where the vol-60 Saginaw coal (and the un-consumered bulk) routed onto the mainline and loaded it to trunk scale. ADJ-1 removed that coal. Post-ADJ-1 the corridor carries no trunk-scale realizable freight — the E-4 "demotion sheds income" measurement was on freight (the vol-60 coal) that no longer exists in the book. The refusal's premise is voided; the corridor is no longer loaded, so demoting it does not shed realized income — the sub-cap grain/passenger/feeder book fits comfortably under standard cap-100. This is why the demotion is now correct where it was refused: the seed changed underneath the ruling. (This is the same mechanism as ADJ-1's own reasoning — remove the over-modeled freight, and the corridor tier that existed to carry it is revealed as surplus.)
Is the player's 5-station + 4-line seed authored above a survivable operating size? No — the count is correctly sized; only the tier of one line is wrong. The invariant's excluded case is a founding footprint below the reachable operating floor (over-extended). This seed is the opposite: it is a coherent, connected, period-plausible five-node startup (Detroit–Lansing–{Ionia–Grand Rapids, Saginaw}) whose station count and line count the reachable grain/passenger/feeder business can cover — once the single over-tier line is corrected. The stations are all at defensible tiers (Detroit terminal is the recognizable Detroit interchange, Pillar 3; the three depots and the Ionia halt are floor/anchor). No station is a defensible drop; no count reduction is warranted. The gap is a single authored line-tier, not an over-sized network.
The exact seed correction (game-dev's edit — data/michigan_1920s.rail.json):
- line_dtw_lan (Detroit — Lansing): trunk → standard. Maintenance 20/d → 7.5/d = −12.5/d. Footprint 59.0/d → 46.5/d; against 49.95/d realized income the delegated player flips from −9.05/d to ≈ +3.5/d gross — which then must land inside Gate 2's −4..0 band below the active floor. Do not touch any other line or station. line_lan_sag stays branch (the ADJ-1 trim stands); the two Lansing↔Ionia↔GR lines stay branch; the Detroit terminal and three depots stay as authored.
The −12.5/d demotion over-shoots the −9.05/d gap — this is intended, and the residual routes to the delegation floor, not to a second seed edit. −12.5/d of relief against a −9.05/d gap lands the raw footprint net at ≈ +3.5/d, which is above the −4..0 band and would be the feel-regression over-relief the gradient gate forbids if the delegate realized the full 49.95/d against the reduced footprint. It will not: the delegation tax (the re-accept lag, reAcceptLagDays) holds the delegated realized income a whisper below the active player's, so the delegated net sits below the active net by design. The demotion moves the active player up to a comfortable positive (correct — active is rewarded), and the delegate trails it into the band. Game-dev measures both live; if the demotion over-relieves the delegate into a comfortable positive (delegated net ≥ 0, or delegated ≥ active), the residual is a delegation-tuning question (widen reAcceptLagDays / the tax) — invariant-and-drift-guard-sanctioned surfaces — not a second seed edit and not a maintenance-rate move. The seed defect is the trunk tier; the fine-tune to sit the delegate within the band below active is the delegation lag. Keep them on their respective axes.
Active player: confirmed not broken. Demoting line_dtw_lan trunk→standard only reduces the active player's footprint (−12.5/d), moving the measured −1.20/d active floor up, toward ~+11/d gross. The active player was already solvent in-band; a footprint cut cannot make it insolvent. The design intent is that the active player clears a comfortable positive above the delegated floor — the Pillar 6 reward gradient — and this demotion widens that gradient in the correct direction (active rewarded, delegate trailing in-band). Gate 1's only risk is the upper bound: if the active player now overshoots the −4..0 band into a comfortable positive, that is acceptable for the active player — the band's hard clause is solvency and the delegated floor's whisper-below-active shape; an actively-managed road running a healthy surplus is the intended payoff, not a violation (the over-relief disqualifier binds the delegated floor, not the active one — the two bounds are asymmetric on purpose). Confirm active stays solvent (it must) and the delegated floor lands in-band below it.
Rivals: unaffected — confirmed independent. Line tiers are authored per road. line_dtw_lan is the player's rail (data/michigan_1920s.rail.json); PM/GTW/GR&I/MC run their own spines in rivals.rail.json. Pere Marquette runs its Detroit–Lansing-area traffic on its own trunk (pm_* segments), not on line_dtw_lan. Demoting the player's line changes the player's footprint only; no rival's tier, footprint, or realized income moves. The E-1 large-rival self-sustain pins (PM/GTW/GR&I) cannot regress from this edit — but the standing Pillar-3 field co-check (re-measure all eight) still applies as a guard.
The two binding gates (restated for game-dev, unchanged from ADJ-1 close except the delegated floor is now reachable):
- Gate 1 — active player: on the real shipping rail (new GameSession("michigan_1920s"), all M14_E changes incl. ADJ-1/ADJ-2/ADJ-3, no cash-flush), actively-managed net/d solvent, treasury strictly > $0 across the full 10y horizon. A comfortable positive is acceptable for the active player (the reward gradient); the hard clause is solvency, not the −4..0 ceiling.
- Gate 2 — delegated player: the fully-competent, neutral-aggression delegated player on the same rail lands −4 ≤ net ≤ 0 (target ≈ −2 to −3/d, a whisper below the active floor — the feel gradient), measurably worse than active, not overshooting into a comfortable positive, AND treasury strictly > $0 across 10y. If the trunk demotion over-relieves the delegate above the band, close the residual with the delegation lag (reAcceptLagDays), not a second seed/rate edit.
- Field co-check (Pillar 3): re-measure all eight roads; PM/GTW/GR&I stay self-sustaining. The player-rail edit does not touch rival economies, so this is a guard, not an expected mover.
Why this is the clean path — Pillar drivers. The ruling is driven by the Viability Invariant (the authored-tier fault the invariant names, corrected at source) and Pillar 5 (the trunk build-decision must mean something — a seed that hands the player a trunk it can't fill flattens the tier ladder, the same Pillar-5 red flag the ruling chain refused to violate by inflating standardCapacity). Demoting the over-tier line restores the tier ladder's meaning: the player now earns trunk capacity to Detroit by building it when their business grows into it (Pillar 7 — the network builds the world, and the Detroit trunk becomes a player build-incentive the moment the off-map gateway import lands and the automobiles/manufactured-goods export flow becomes realizable, exactly the ADJ-1 Option-(c) Saginaw-trunk logic applied to Detroit). This is not a footprint trim to paper an economy gap — it is a seed-authoring correction of an over-tier line whose freight the player cannot reach, ruled in-scope on the identical basis as the ADJ-1 coal.
Routing. The tier edit is data (data/michigan_1920s.rail.json, line_dtw_lan capacityTier trunk→standard) — game-dev's lane, four-layer TDD, live re-measure against both gates. Any residual delegated-floor fine-tune is reAcceptLagDays (economy.json delegation block) — also game-dev's, on the sanctioned delegation axis. This designer owns the verdict (the trunk is over-tier, demotion is in-scope), the exact tier change, the gate bands, the active/rival independence confirmations, and the axis fence (seed for the defect, delegation-lag for the in-band fine-tune).
The Skilled-Active Reference Model (2026-07-05) — it IS the capacity-aware accept already designed¶
game-dev flagged the E-5 live gate's "active player" model as a naive accept-every-profitable-offer proxy that floods low-value passengers (active reads 29.05 realized / −31.10/d — worse than the delegated 49.95), making the feel-gradient gate ("active must clearly beat delegated") untestable. The question: does building a skilled-active reference model need its own design definition of "what a skilled active player does," or is it already implied by the capacity-aware accept?
It is already implied — the skilled-active decision policy IS the capacity-aware, highest-margin-first, headroom-bounded accept already designed for the delegate, driven by the player instead of the auto-manager. There is no separate "skilled active" behavior to define. The capacity-aware accept mechanism is the definition of competent contract acquisition on this network — accept richest-margin-first, only up to each segment's throughput headroom, so grain is taken before passengers and no corridor self-saturates. That is precisely what a skilled human does; it was authored as the delegate's target because it is what "accept roughly as a competent human would" means. The accept-every-profitable-offer proxy is a probe artifact, not a model of skilled play: it floods the corridor with sub-cap passengers, saturates it, and sheds the high-margin grain — the exact behavioral pathology the capacity-aware accept was built to remove. Measuring "skilled active" with the flood proxy measures the defect, not the skill.
One-paragraph decision policy the E-5 active baseline must model: A skilled active player, each tick, ranks all available positive-margin contracts by descending ExpectedMargin and accepts down the list, taking each contract only if every rail segment on its route stays at or below effective throughput capacity after adding its volume — filling corridors to capacity but never past, so high-margin freight (grain) is never displaced by low-margin flood (passengers). When a previously-shed high-margin contract's corridor frees, the active player re-takes it the same tick they see it (no re-accept lag). This is byte-identical to the delegate's capacity-aware accept in every respect except one: the active player has no re-accept lag — they act on freed capacity same-day, where the delegate trails by its re-eval cadence. That single difference is the Pillar 6 reward gradient: same acquisition logic, but the human's zero-lag recovery earns the sliver of high-margin days the lagged delegate cedes. So the probe does not need a new design of skilled play — it needs to reuse the capacity-aware accept path as the active baseline (same highest-margin-first, headroom-bounded logic) with the re-accept lag set to zero, and compare it to the delegated run with the lag at its authored reAcceptLagDays. If active (zero-lag) does not clearly beat delegated (authored-lag) under identical accept logic, the lag is too small and the gradient fails — that is the real signal the gate is meant to read, and the flood proxy could never produce it.
Routing. Replacing the accept-all active proxy with the zero-lag capacity-aware baseline is an E2E test-harness change (game-dev's lane) — reuse the existing capacity-aware accept seam with lag=0 for the active arm; no new decision tree, no new design surface. This designer confirms the skilled-active policy is the already-designed capacity-aware accept minus the re-accept lag, and owns that definition; game-dev owns wiring the probe to use it.
The Feel-Gradient Fork (2026-07-05) — a flat-but-optimal gradient is Pillar-6-compliant on this seed; ship it, and the churn lever is a FUTURE item, not a defect¶
The M14_E full-close live gate (real GameSession, 8 roads, 10y, no cash-flush) cleared every economy requirement — the delegated player is SOLVENT throughout (min cash $0.07, never drains to $0), net −1.55/d in-band, income 49.95/d; PM/GTW/GR&I self-sustain; AA/D&M now win contracts. The ADJ-1 coal removal + ADJ-3 trunk demotion closed the −9/d bleed. One thing did not land: the feel-gradient gate — active and delegated measure byte-identical at −1.55/d, not the "delegated a whisper below active" shape the gate demanded. game-dev proved WHY, measured not asserted: (1) the delegate already converges on the optimal book — capacity-aware highest-margin-first picks the best 4 contracts the 5-station corridor holds; (2) those 4 winners are never freed (they stay active, holding the corridor at cap), so the re-accept lag — the gap-preserving lever I designed — has nothing to act on and is inert on this seed; (3) the 205 shed contracts are correctly-shed low-margin business that should stay shed; (4) relaxing capacity headroom 10× at lag=0 makes it WORSE (income 49.95 → 41.80, insolvent) — capacity is not the binding constraint, the book is already near-optimal; (5) the only way a skilled human beats this delegate is active-contract churn — dropping a held low-margin contract to upgrade to a higher-margin one when a better offer appears — which is a NEW engine behavior the lag model does not capture, correctly not built (scope creep) and correctly not faked by weakening the E-1 pin (dishonest). This subsection rules the fork.
Ruling: (B) + (C) — accept the flat-but-optimal gradient and ship M14_E; re-scope the E-1 delegated pin to solvency-throughout. Option (A) — active-contract churn as a blocking engine task — is REFUSED for M14_E, and folded as a FUTURE gradient lever, not a defect.
Why the flat gradient is Pillar-6-compliant HERE — the pin overreached, not the delegate. Pillar 6 requires that "delegating a freshly-founded road wholesale is a viable depth choice … not a bleed the player must manage out of hands-on," and its red flag is a delegation trap — a system that forces a single altitude, or a black-box delegated outcome the player cannot see the sense of and cannot escape without going hands-on. A delegate that plays the corridor optimally and loses the player nothing is the exact opposite of that red flag: it is delegation working as designed — competent, legible (highest-margin-first is a rule the player can read), and penalty-free. Pillar 6 nowhere requires that active management out-earn delegation by a margin. That "active must clearly beat delegated" requirement was a derived design pin I authored (the reward gradient) to guarantee hands-on play is rewarded — a sound instinct for a rich network with churn headroom, where a skilled human genuinely can out-trade a lagged delegate. On a 5-station toy seed whose optimal book is 4 contracts held permanently at cap, there is no churn headroom for any policy — human or delegate — to exploit; the delegate has already found the best book, and "beating it" would require a move (drop-to-upgrade) the engine does not make and the seed barely rewards. Demanding a gradient this seed cannot exercise, and holding the milestone open until an engine feature is built to manufacture one, would invert the pillar: it would make delegation artificially worse than it needs to be purely to preserve a margin, which is closer to punishing the arm's-length player than rewarding the hands-on one. The delegated floor is solvent, optimal, and legible — that satisfies Pillar 6 on this seed.
The gradient is a GAME-at-scale requirement, not a toy-seed requirement. The "tight-but-survivable, active clearly beats delegated" shape is the right target for the shipping game — a mature multi-county network with dozens of contracts, corridors freeing and loading as demand shifts, and genuine drop-to-upgrade headroom, where a skilled human's continuous re-optimization does out-earn a lagged delegate. The michigan_1920s 5-station seed is a viability and correctness fixture, not a proving ground for the depth-reward gradient — it does not have the contract density or corridor churn to exercise that gradient for any policy. Requiring a toy fixture to demonstrate a scale property is a category error. The gradient remains a live design intent for the game; it is simply not gate-able on this seed, and M14_E must not stay open waiting for a seed property that will only appear at scale.
Active-contract churn is the real gradient lever — folded as a FUTURE item, not a defect. game-dev is correct that the only way a skilled human beats this optimal delegate is drop-to-upgrade: dropping a held low-margin active contract to take a higher-margin offer that appears later. That is a new engine behavior the re-accept lag model does not capture — the lag preserves a gap only when winners are freed, and on this seed they never are. Refusing to build it under M14_E was correct (it is milestone-sized new behavior — scope creep on a viability close), and refusing to fake the gradient by weakening the pin was correct (dishonest). Active-contract churn is recorded here as a FUTURE gradient lever for the richer seed / scale pass that owns the depth-reward gradient — the successor that first ships a network with genuine churn headroom. That successor is M14_F — the delegation-scale / active-churn lever (planned; see Milestones). It is not a defect in M14_E: the delegate is optimal and solvent, which is all this seed can and should demonstrate. When a scale seed with churn headroom exists, the feel-gradient gate re-binds there, and drop-to-upgrade is the lever that satisfies it.
Why NOT (A). Building drop-to-upgrade as a blocking task would (a) hold a fully-closed, solvent, correct economy open behind a feature the current seed cannot even exercise (the gradient would still be flat until a richer seed exists), and (b) inflate a viability milestone into a delegation-depth milestone. The Viability Invariant is satisfied — every road sustains, the player's delegated road is solvent and optimal. M14_E's job is done; the gradient's job belongs to the scale pass. (A) keeps the milestone open for no economy or Pillar-6 gain on this seed.
(C) — the E-1 delegated pin re-scopes from a $2,500 working-buffer to solvency-throughout, because solvency-throughout was always the real intent. The pin E1_DelegatedPlayerRoad_BackHalfCash_StaysAboveFloor_PINNED_RED asserts back-half MIN cash ≥ $2,500 (a quarter of the expansion floor — a working-buffer bar). The delegated player is solvent throughout (min cash $0.07 > 0, never drains to $0) and net-in-band (−1.55/d), but runs razor-thin and never accumulates a $2,500 buffer, so the pin as literally written does not clear. The $2,500-buffer was a proxy, not the invariant. The pin was authored during E-1 diagnosis to encode "a delegated authored-size road must not drain to ~$0 and stay" — the Viability Invariant's no-delegation-trap requirement. The RED capture it pinned against was a road at back-half min $0.02, max $89.85 — a road that had drained and stayed dead. The $2,500 number was a convenient headroom proxy for "hasn't drained," not a designed working-capital requirement — the design's own target end-state is "a modest surplus," not a quarter-floor buffer, and nothing in the invariant or Pillar 6 requires a delegated road to hold $2,500 idle. The real invariant is solvency-throughout (treasury strictly > $0 across the full 10y horizon, never breaches the expansion floor into forced default), which the delegated player now passes (min $0.07 > 0). Re-scoping the pin to solvency-throughout is not weakening the invariant to match a bug — it is correcting the proxy to the intent the pin always stood for. The distinction the pin must preserve is solvent vs. drained-and-dead, and $0.07 > 0 across 10y is on the correct side of it; $2,500 was never the line, drain-to-$0 always was.
Exact E-1 delegated-pin re-scope (for game-dev — M14EViabilityDiagnosisRedTest.cs:84): replace the back-half MIN cash ≥ $2,500 assertion with solvency-throughout: the delegated player's treasury is strictly > $0 across the full 10y horizon (all 3,650 days, not just the back half — a drain-to-$0 anywhere is a fail) and never breaches the expansion-floor-forced-default condition, with net/d in the −4 ≤ net ≤ 0 band. The pin flips from RED to GREEN on this bar (measured: min cash $0.07 > 0, net −1.55/d in-band). Keep the E-1 large-rival pins (PM/GTW/GR&I self-sustain) unchanged — those are not touched by this re-scope. Rename the test off _PINNED_RED if game-dev's convention marks it green (game-dev's call on the test-harness naming). The "delegated whisper-below-active" clause of Gate 2 is retired for this seed — it is unreachable on a book with no churn headroom, and is refolded into the scale-pass gradient gate; the binding delegated gate for M14_E close is solvent-throughout + net-in-band, nothing more.
Pillar-6 justification, one paragraph (for the M14_E doc + the record): On the michigan_1920s 5-station seed the fully-delegated player road is solvent throughout (min cash $0.07 > $0, never drains) and its delegate converges on the corridor's optimal 4-contract book — so delegation costs the player nothing and traps them in nothing. That is Pillar 6 honored, not violated: the pillar's red flag is a delegation trap — a bleed the player must manage out of hands-on, or a black-box outcome they can't escape — and a competent, legible, solvent, optimal delegate is the opposite of a trap. Pillar 6 requires delegation be a viable penalty-free depth choice; it does not require active management to out-earn a delegate that is already playing optimally. The "active clearly beats delegated" reward gradient is a real design intent for the game at scale — a mature network with contract density and corridor churn where a skilled human's continuous re-optimization genuinely out-trades a lagged delegate — but this 5-station fixture has no churn headroom for any policy to exploit (the optimal book is 4 contracts held permanently at cap, so the re-accept lag has nothing to act on and is inert). The lever that would produce a gradient here — active-contract churn (drop a held low-margin contract to upgrade to a better one) — is unbuilt new engine behavior, correctly deferred as a FUTURE item to the scale pass that owns the gradient, not a defect in this viability close. M14_E ships with a flat-but-optimal gradient because flat-but-optimal is exactly what a competent delegate should produce on a seed this small, and that fully satisfies Pillar 6.
Routing. The E-1 pin re-scope + any test-naming change is a test-harness change (tests/playtest/M14EViabilityDiagnosisRedTest.cs) — game-dev's lane. This designer owns the ruling (flat-but-optimal is Pillar-6-compliant here), the pin's new assertion (solvency-throughout + net-in-band, replacing the $2,500 buffer), and the disposition of active-contract churn as a FUTURE gradient lever. No data/* or economy change — the economy is fixed and this ruling touches only the pin's bar and the milestone's gradient disposition.
The Churn Lever, Pinned (2026-07-08) — active-contract churn is competence-bounded delegate churn, proven on a throwaway fixture; canonical stays byte-identical¶
This is the Feel-Gradient Fork's named successor — the M14_F delegation-scale / active-churn lever (full plan: M14_F, Design-intent section). The Fork folded active-contract churn (drop-to-upgrade) forward as the FUTURE gradient lever for a network with genuine churn headroom. M14_F is that lever. Scope, per the user's 2026-07-08 decision: FIXTURE-ONLY. The churn gradient is proven on a throwaway measurement fixture — a dedicated test seed authored to have churn headroom — NOT by growing the canonical michigan_1920s shipping seed. The M14_E economy is not reopened: the shipping seed stays byte-identical (the churn engine is inert there — no churn headroom → no drop fires), which is itself a hard regression guard. This subsection pins the mechanic, the trap-line, and the target.
1 — The lever mechanic: the delegate ALSO churns, bounded by re-eval lag + competence. The active/delegated gap is latency + competence, never an artificial absence. The delegate does the same competent thing a hands-on player does — evaluate the held book against new offers and drop a held low-margin contract to upgrade to a higher-margin one when the swap is clearly net-positive — but on its re-eval cadence and bounded by staff competence, where the human acts same-tick. The gap the active player earns is re-eval lag + competence, both auditable and hireable-against, riding the existing E-3 standing-decision cadence guard as the anti-thrash bound (a swap fires only when the upgrade's expected gain net of the dropped contract's breach penalty and re-acquisition friction clears a competence-scaled bar — preventing drop-A-for-B-then-B-for-C thrash). The alternative — (a) a delegate that deliberately never churns purely to preserve a human-exploitable gap — is REJECTED as a Pillar-6 black box: a player auditing the delegated book (which Pillar 6 requires they can do) would see the delegate sitting on a low-margin contract while a better offer expires, with no trait, competence, or disposition explaining the low-margin hold — the opaque delegated outcome the pillar's red flag forbids, and a break of the "delegation quality is hiring quality" promise. Churn quality is a competence-scaled staff-trait axis: competence scales how good the swap decision is — a top head recognizes and executes a genuine upgrade; a cheap head churns worse than not churning (mis-ranks, drops a keeper, or churns into a breach penalty that eats the upgrade), which is a correct delegation outcome (the SHAPE ruling extended to the churn axis — a bad hire bleeds the road, legibly). Aggression fans how eagerly it churns (cautious holds longer / fewer breach penalties; aggressive captures more upgrades / eats more penalties). This is Pillar 6 honored — the delegate is competent, legible, and hireable-against — not violated.
2 — The trap-line is the delegate going INSOLVENT because it won't churn. Spread SIZE is not the trap. The hard gate — the load-bearing invariant — is: the fully-competent, neutral-aggression delegate is strictly solvent across the full 10y horizon at every contested-capacity level the fixture exercises. The spread the active player earns is entirely upside the active player captures, never downside the delegate suffers into insolvency. A large spread where the delegate is still solvent is fine — delegation is a convenience, and convenience can cost real money (Pillar 6 requires delegation be a viable penalty-free-of-a-trap depth choice, not a free one). What crosses into "trap" is the direction of the delegate's floor: the moment the delegate goes insolvent because it won't churn while a hands-on player would have stayed solvent, delegation has become mandatory and Pillar 6 is violated. So the trap-line is delegate solvency + legibility, NOT spread magnitude — and drop-to-upgrade must never be the thing that saves the delegate from insolvency (if it were, the un-churning delegate would be trapped). The exact trap-line the harness/PM can assert: the fully-competent neutral delegate is solvent-throughout (treasury strictly > $0 across all horizon days, never breaching the expansion floor into forced default) at every contested-capacity level on the fixture.
3 — The target is a MEASURED-and-readable spread on a fixture built for headroom, not a design constant. The shape is pinned; the magnitude is a measured quantity game-dev reads off the fixture. Pinned shape: the spread is readable, grows with contested-capacity K (small at K = 1–2, growing), on the order of +8–20% of realized contract income at K ≥ 3 — the same order as the M14_E delegation tax (a few percent of footprint per day), not an order of magnitude — with the delegate solvent at every K. The exact percentage falls out of the fixture's contested-capacity count and the re-eval lag — it is not a number this doc fixes. The measurable contested-capacity target the harness/PM can assert: the fixture contains ≥3 corridor-segments on which, at steady state, the sum of available positive-margin offers persistently exceeds the segment's effective throughput capacity by at least one contract's worth of volume — persistently, so that holding a low-margin contract has a real opportunity cost. That is the precise condition under which drop-to-upgrade earns anything. "Contest" is demand-over-capacity on a company-owned segment (want-to-cross freight exceeds tier throughput), not player-vs-rival shared-track ownership. Because the fixture is throwaway, it is freely tuned to meet this bar — if a first cut lacks ≥3 persistently-contested segments, game-dev adjusts the fixture's demand/tiering, with no shipping-economy revalidation and no viability STOP on the canonical seed. (The only STOP that remains is the gradient STOP: if churn can't produce a readable gradient on a fixture built to have headroom, that is a real churn/lag signal to surface — not to force.)
Mechanism correction + LATENT-gradient disposition (2026-07-08). The "persistently renewing" property this target rests on is design intent, not shipped behavior. The Dynamic Demand design describes contracts that emerge, expire, and renew over time — but the shipped generator implements only the SPATIAL half: ContractGenerator.GenerateAvailable is a pure function of world state (commodity × producer × consumer × path, no time input), and ContractService.Refresh() regenerates the whole Available pool only on rail mutation, never on a day-tick. So on a static network the pool is fixed across the horizon — no staggered arrival, no rotation, no dearer offer appearing later on an already-loaded corridor. Consequently the M14_F churn gradient came out LATENT-pending-demand-rotation: root cause is a static deterministic pool + a highest-margin-first delegate holding its optimal book at cap — no offer arrives later to make a held contract worth dropping, so drop-to-upgrade has nothing to reach for and active measures byte-identical to delegated (the same flat-but-optimal shape M14_E measured). M14_F therefore shipped the churn engine + byte-identical guard and recorded the active-vs-delegated gradient as a known-latent property. The lever that unblocks it — temporal demand rotation (offers arriving/changing over time so a saturated corridor later sees a dearer offer worth dropping-to-upgrade for) — is scoped as M14_G — Demand Rotation. Once M14_G lands, M14_F's F-4 (player Release/Renegotiate verb) and F-5 (gradient proof) resume, and the M14FGradientProbe is the natural RED proof-of-life pin (flat 0.00/d today → positive once rotation ships).
The affordance — emergent for the bulk case; a thin labelled verb only for the high-teeth tiers. The gradient-driving bulk low-margin case is emergent from verbs the player already has — drop-to-upgrade is breach + accept (the triage panel already exposes "Breach a contract" as a first-class per-route action). For standard (rural) contracts the breach cost is a goodwill hit (Pillar 2 texture) — that penalty is what makes the drop a real decision, and no fourth verb is needed (Pillar 1 executive-not-engineer, Pillar 5 menus-not-micro). A thin labelled Release / Renegotiate / Lapse front-end is added only for sweetheart and government tiers, where the breach model has real financial/legal/exclusivity teeth — a labelled UX surface over the existing breach penalty (shows the penalty before commit, in the bond-issuance "clear implications before commit" spirit), not a new mechanic: Release pays the contract's authored exit penalty; Renegotiate lets high goodwill/leverage exit cheaper (hooks the leverage model, Pillar 2 texture); Lapse is the zero-penalty free drop when a contract's Term is near its end. Breach penalties must NOT be softened to make churn cheaper — the authored penalty is what makes the drop a real decision; softening it would remove the opportunity cost the whole gradient rests on.
Routing. M14_F is a delegation-engine + throwaway-fixture milestone (game-dev owns F-1 fixture authoring / F-2 churn engine / F-3 gradient measurement + byte-identical regression guard; ui-designer owns F-4 the Release/Renegotiate surface; playtester owns F-5). This designer owns the verdict: the (b) competence-bounded delegate-churn mechanic, the delegate-solvency trap-line (insolvency-because-it-won't-churn is the trap; spread size is not), the measured-and-readable target (≥3 persistently-contested segments; delegate solvent at every K), and the emergent-plus-thin-verb affordance ruling. No canonical data/* or economy change — the shipping economy is fixed and byte-identical across M14_F; the churn headroom lives only in the throwaway fixture.
The Demand-Rotation Economy Re-Baseline, Pinned (2026-07-08) — byte-identical is RETIRED for the rotated economy; the new anchor is viability-band + invariant-preservation, and the STOP is a road pushed insolvent¶
The G-0 economy-revalidation pin for M14_G — Demand Rotation. The mechanic itself is pinned in BusinessDealings — Temporal Demand Rotation. This subsection pins the CENTRAL RISK (Fork 3): rotation real enough to unblock churn changes contract-supply density and realized income over the horizon, so it reopens the Viability Invariant by construction and michigan_1920s can no longer be byte-identical to the M14_E static-pool baseline. Unlike M14_F, rotation is NOT fixture-only — it touches the canonical shipping economy, so the byte-identical guard cannot simply survive. This subsection names the replacement anchor, the bug-class checklist, and the exact STOP.
(a) The NEW regression anchor that replaces byte-identical for the rotated economy. Byte-identical is retired for michigan_1920s under rotation (the pool changes across the horizon by design; a byte-match to the static pool is now impossible and would be the wrong thing to assert). It is replaced by a viability-band + invariant-preservation anchor. What G-3 asserts, stated so the harness/PM can assert it:
- Player solvency both altitudes. The player road — active-managed AND fully-delegated — is solvent-throughout (treasury strictly > $0 across all 3,650 horizon days, never breaching the expansion floor into forced default), with net/d in the same −4 ≤ net ≤ 0 delegated band the Feel-Gradient re-scope pinned (active may sit at or above zero; it must not sit below the delegated floor).
- Every rival self-sustains. PM / GTW / GR&I self-sustain; AA / D&M continue to win contracts — the M14_E per-road end-state, preserved under rotation (not byte-identical, but each road stays on the correct side of its M14_E disposition).
- Pop invariants clean on the live path.
settlement_jobs_pull_inversions == 0,settlement_ceiling_breaches == 0,rival_build_ceiling_breaches == 0, CAGR sane. (settlement_extraction_inversionsis retained as a diagnostic — it counts legit rail-pull too — NOT an asserted invariant; the M14_C re-enumeration replaced the oldsettlement_extraction_inversions == 0gate with the two strictly-stronger asserted classes above.) - M10 OwnerId isolation. Rotation / re-pricing touches only the correct owner's contract visibility — an integration test in the M10 class, because rotation crosses the demand-generation ↔ per-owner-availability layers exactly where the M10 rival-revenue bug lived.
- Determinism invariant. A fixed scenario seed replays the offer-arrival/expiry sequence and realized income byte-identically on repeat — byte-identical is retired against the static baseline but survives against the seed's own rotation trajectory (see the determinism invariant).
- Net-in-band, not net-identical. The field's aggregate realized income moves under rotation (that is the point); G-3 asserts it stays within a documented rotation-on band, re-baselined here as a user-approval checkpoint, NOT a mechanical retune. The rotation-on delta is reported before F-4/F-5 resume.
(b) The bug-class checklist to carry (the M14_E/M14_F failure modes). Every one of these has bitten this economy before; G-1→G-3 must each guard against them:
- Breach-never-reoffer — a corridor that shed/breached a contract must be able to later re-surface an offer on it (rotation is precisely the fix, but a bug that permanently blacklists a breached corridor would silently starve the gradient).
- Capacity-shed-to-breach — a newly-arrived dearer offer must not cascade into shedding more than the single held contract it was meant to replace (the single-drop-seatable property must hold; a multi-drop cascade is a bug).
- Save-version additivity — the temporal offer state (arrival/expiry timestamps, PRNG cursor) must default cleanly on an old save (the M14_E
TriageDeclineReason-defaults precedent — no version bump if strictly additive). - Unordered-iteration nondeterminism — no
Dictionary/HashSetiteration order as an implicit entropy source anywhere in arrival selection (the determinism-invariant killer). - Fumbler-MinValue-bypasses-scenario-gate — a sentinel/
MinValuedefault in the arrival or margin path must not bypass the scenario-authored envelope (author every rotation parameter in JSON; a hardcoded fallback that fires when JSON is absent is the bug).
(c) THE CENTRAL STOP — stated so the PM/harness can assert it. If rotation cannot be made viability-preserving — if the rotation amplitude required to make the dearer-single-drop-seatable-offer property fire on the canonical seed also pushes ANY road insolvent (breaches solvency-throughout) OR violates ANY pop/M10/determinism invariant in the (a) anchor — STOP AND SURFACE. Do NOT retune the economy or weaken the guard to force it. The exact STOP condition, assertable: G-3 is a hard STOP if, at the lowest rotation amplitude that makes the gradient go strictly positive, any road's treasury drops to ≤ $0 on any horizon day, or any pop/M10/determinism invariant fails. A positive gradient bought at the cost of an insolvent road is not a pass — it is the signal that the canonical seed lacks the corridor density to carry viability-preserving rotation, which is a real design finding to surface to the user, not a tuning problem to grind out. This mirrors the M14_F trap-line logic (drop-to-upgrade must never be what saves a road from insolvency) applied to the canonical economy.
Why rotation is NOT fixture-only (unlike M14_F). M14_F kept churn on a throwaway fixture precisely to hold michigan_1920s byte-identical. M14_G cannot: temporal rotation is a property of the demand model itself, exercised on the canonical seed the player ships on — the whole point of Pillar 4 texture is that the real game world rotates. So the canonical economy IS revalidated, byte-identical IS retired, and the STOP above is the price of admission. This is the deliberate difference between the two milestones, and it is why Fork 3 is the central risk.
Routing. This designer owns the pin (the replacement anchor, the bug-class checklist, the STOP condition). game-dev owns G-1 (temporal offer model + determinism plumbing) → G-2 (live re-pricing + Refresh demand-tick + M10 integration test) → G-3 (gradient proof-of-life + viability re-baseline measurement). The rotation-on economy delta and the re-baseline are a user-approval checkpoint at G-3, not a mechanical retune — reported before M14_F's F-4/F-5 resume.
The Contested-Corridor Seed, Pinned (2026-07-08) — a period-honest saturated trunk-belt on a NEW canonical seed; contest is the engine-consumed single-drop-seatable upgrade, MEASURED through the engine, and viability holds alongside it¶
The H-0 design pin for M14_H — Contested-Corridor Successor Seed. The M14_G G-0 probe localized the flat-0.00/d churn gradient to a topology cause: the 5-station michigan_1920s player network never SATURATES a corridor, so drop-to-upgrade has nothing to bite on regardless of demand or rotation. This pins the successor seed that supplies the contest — a NEW canonical scenario id, worked on m14c-multicompany, that COEXISTS with michigan_1920s (the M14_E economy and its byte-identical guard stay untouched; see Fork resolutions below). It is the Feel-Gradient Fork's "GAME-at-scale" gradient intent delivered on the network the player plays, not a throwaway fixture. Grounds on the railroad-historian consult (2026-07-08) and the belt edges in data/research/m14b4-rail-topology.json (the MC Chicago-Detroit main, GTW, NYC "Old Road", and Air Line trunk edges tagged to Chicago off-map / to Toledo off-map).
1 — The contested-corridor property the seed must supply, and the CRITICAL discipline: it is measured THROUGH THE ENGINE, never a pool-side proxy. The churn engine + M14FGradientProbe consume exactly one property — the dearer-single-drop-seatable-offer — and the seed's whole job is to produce it, persistently, on ≥1 shared corridor. Restated as the three conditions the seed must satisfy (the design heart, promoted from a throwaway fixture to the canonical network):
- The optimal book saturates the binding segment. At steady state under the capacity-aware, highest-margin-first delegate, the sum of held-contract
volume-per-dayon the corridor's binding segment reaches or exceeds that segment's effective throughput capacity — the corridor is full, not slack.
Granularity, pinned (2026-07-08) — contest keys on the PLAYER's held segment, never on rival owner-count or alignment-count. The saturating quantity in condition 1 is the sum of the player's own held-contract
volume-per-dayon a segment the player owns, measured against that segment's effective capacity — exactly the per-segment, per-contract Load model (Load has no per-owner or per-alignment term; capacity is a property of the segment, not of who parallels it). The C-1 ruling's fact thatmichigan_centralfolds four real alignments (MC main + MC Air Line cutoff + ex-LS&MS "Old Road" + Detroit–Toledo river line) and that the belt carries ~5 alignments across 3 distinct rival owners is corridor pressure/flavor — it shapes the competing demand and price the player faces (caveat (iii)), but it is not the thing the single-drop-seatable measurement counts. This is consistent with M10 OwnerId isolation and the Viability Invariant, both of which already key on OwnerId: the churn property is the player's book saturating a player-owned segment while a dearer offer routes across THAT segment. H-1 seed authoring: give the player a binding segment on each of the K=2 static corridors (Detroit–Chicago belt gateway Chicago; Toledo funnel gateway Toledo) that the player's optimal book saturates; the rival roads — however many owners or alignments — supply competing demand/price pressure only. H-3 measurement (M14FGradientProbe) reads the drop-to-upgrade through the engine on the player's held book; it neither counts nor branches on rival owner/alignment cardinality. 2. A dearer positive-margin offer arrives blocked behind a held cheaper one, on that same corridor. A positive-margin offer whose route crosses the saturated segment cannot be seated without first freeing capacity. 3. The upgrade is seatable by dropping ONE contract, net-positive after the breach penalty. Dropping exactly one held cheaper contract frees precisely enough volume to seat the dearer offer, and the swap clears the competence-scaled churn bar net of the breach penalty and re-acquisition friction. This is the churn-engine precondition specifically — distinct from the build-more-capacity strategic lever (both must be live options; the seed must present cases where a single drop seats the upgrade).CRITICAL — pin the M14_F proxy lesson, do not let it recur. The M14_F fixture pinned a plausible proxy ("contested corridor = blocked positive-margin offers") when the engine actually needed the strictly stronger single-drop-seatable upgrade. The contest property above must be measured THROUGH THE CHURN ENGINE at H-1/H-3 — the
M14FGradientProbedriving a realDropContract/ReleaseActiveContractand reading whether an active same-tick drop-to-upgrade beats the lag-bounded delegate — never a pool-side count of "how many blocked offers exist." A corridor can be full and surface a dearer blocked offer that is not single-drop-seatable (needs two drops, or the breach penalty eats the upgrade); that fails the property while passing every proxy. The measured-through-engine property is the only one that counts. This is the fixture-must-pin-the-engine-consumed-property lesson carried onto the canonical seed.
2 — The contest-amplitude frame: the M14_F shape is the STARTING frame; magnitude and corridor-count are MEASURED, not fixed here. Pinned shape (the M14_F target): a readable spread growing with contested-capacity K, on the order of +8–20% of realized contract income at K ≥ 3 contested corridor-segments, with the fully-competent neutral delegate solvent at every K. The magnitude and the corridor count are measured off the live seed, not authored to a number now — this designer pins the frame and the measure-first discipline, not a percentage. The two-sided trap the measure must respect:
- Too little — a single barely-contested corridor-segment reproduces the M14_F marginal case: the gradient is real but thin, and the seed under-delivers the "active clearly beats delegated" feel. (Note the two senses of
K: §2's amplitudeKcounts contested corridor-segments, whereas the approved staticK = 2in §4/caveat (vi) counts contested corridors — the belt and the Toledo funnel, each of which can bind on more than one segment. Two named corridors is not two segments; the segment-count amplitude is what §2 measures and the "too little" warning guards.) - Too much — a heavily over-subscribed network either pushes a road toward the insolvency the Viability Invariant forbids (the delegate-solvency trap-line), or makes the player's book a thrash-fest that violates Pillar 5 (management depth, not micro).
3 — The Viability-Invariant STOP for H-3, carried explicitly onto the FULL canonical economy. The denser seed has more maintenance footprint — the systemic-underwater axis M14_E fought across a months-long measure-first campaign. Unlike the M14_F throwaway fixture (freely tuned, no viability gate), this is a canonical economy: contest AND viability must BOTH hold. The exact STOP, assertable by the harness/PM: at the lowest contest level that makes the gradient go strictly positive through the engine, if ANY road's treasury drops to ≤ $0 on any horizon day (breaches solvency-throughout / the expansion floor) OR any pop invariant (settlement_jobs_pull_inversions == 0, settlement_ceiling_breaches == 0, rival_build_ceiling_breaches == 0; settlement_extraction_inversions remains a diagnostic, not an asserted invariant) OR M10 OwnerId isolation OR determinism fails — STOP AND SURFACE. A positive gradient bought at the cost of an insolvent road, a broken pop floor, or leaked owner isolation is not a pass — it is the finding that the seed cannot be contested-enough to fire the gradient without breaking viability, which is a real design signal to surface, not a thing to grind out by weakening the invariant, the pop floors, or M10. This is the same STOP class M14_E / M14_F / M14_G all carry (the M14_G central STOP is its immediate precedent), now on the full canonical economy rather than a fixture.
4 — The region + gateway determination, and the six authenticity caveats (the period-honest frame H-1 authors against). The railroad-historian consult resolved Fork (b): the contested corridor is the Detroit–Chicago trunk belt across southern Michigan — historically one of the most contested US rail corridors (four parallel real trunk routes: the Michigan Central main + MC Air Line cutoff, the NYC "Old Road" ex-LS&MS, and Grand Trunk Western, all fighting for through-freight to the same Chicago gateway; shared binding nodes at Battle Creek and especially Kalamazoo). The determination is Michigan-alone in the body, PLUS off-map GATEWAY nodes at Chicago (primary) and Toledo (secondary) — NOT a full multi-region map. The approved static K = 2 rests on two year-round contested corridors: the Detroit–Chicago belt (gateway Chicago) and the Toledo funnel (gateway Toledo), the latter contested year-round on Detroit-origin autos/parts + MC/NYC/DT&I through-merchandise to the Toledo interchange (caveat (vi)). The saturation is honest only because the through-traffic is aimed at the gateways; author the contest without them and you would either understate the traffic or fake in-state demand (the contrivance). The gateways are a small blast radius (1–2 off-map sink/source nodes each; the topology already tags to Chicago off-map / to Toledo off-map) and they also resolve the M14_E off-map-import gap (automobiles / general-merchandise / mail with no in-network consumer — Chicago/Toledo is their honest sink). The six authenticity caveats H-1 must bake in:
- (i) Saturate on honest through-freight, not MI-origin coal. The saturating commodities are Detroit-origin automobiles/parts (the dominant 1920s MI story, secular +8–10%/yr — a dearer offer genuinely arrives later), Battle Creek cereal, Kalamazoo paper, Grand Rapids furniture, plus through grain/merchandise/mail. Michigan was a coal importer — inbound coal to beet factories / Ford Rouge is a fine consuming flow, but coal is never a MI-origin saturating commodity (the ADJ-1 line).
- (ii) Do NOT tier-inflate a segment to force a bottleneck. The belt genuinely was trunk/double-track, so trunk tier is period-correct — contest must come from author-honest overlapping VOLUME exceeding that honest capacity, not from under-tiering the pipe (the ADJ-3 line inverted).
- (iii) The parallel-competing-roads-for-scarce-Chicago-capacity structure IS the honest saturation mechanism (fits the car-shortage framing the rotation pin already grounds). One carrier freely re-pricing is WRONG (ICC tariffs forbade it) — the dearer offer is shipper competition for scarce car supply, never a rate hike.
- (iv) Keep the gateway a sink/source only — no Illinois/Ohio settlements, pops, or rivals; the off-map nodes are freight endpoints, not a second region.
- (v) UP iron ore stays OUT of the rail-contest story — it is a lake-shipping commodity.
- (vi) The approved static
K = 2is the Detroit–Chicago belt (primary, gateway Chicago) + the Toledo funnel (secondary, gateway Toledo), BOTH year-round static. The Toledo funnel is genuinely year-round-contestable on honest freight — Detroit-origin autos/parts (year-round, secular +8–10%/yr) plus MC/NYC/DT&I through-merchandise routed to the Toledo interchange — with the Ford-owned Detroit–Toledo–Ironton (DT&I, rival iddetroit_toledo) as the authentic dedicated competitor. It leans on no seasonal beet traffic — no seasonal crutch, no rotation dependency (historian H-1 spec, 2026-07-08). (The Saginaw Valley sugar-beet corridor is an HONEST but SEASONAL (Oct–Jan) candidate that cannot persist on a static seed — it needs the deferred M14_G rotation to hold, so it is explicitly OUT of scope for this seed and is retained only as a candidate for a LATER rotation-enhancement milestone, NOT the M14_H second corridor.)
Provenance: the region/gateway determination and the six caveats are the railroad-historian's H-0 consult (2026-07-08); the belt edges are in data/research/m14b4-rail-topology.json. The historian is not firing a "not authorable" flag — the corridor is solidly authorable with the gateway (without it, it degrades to marginal/rotation-dependent, which the user's frame does not accept).
Fork resolutions folded into this pin. (a) → COEXIST: michigan_1920s + its byte-identical guard stay untouched; M14_H is a NEW scenario id, no merge (Fork (d) resolves with it — the guard survives untouched). (b) → the static K = 2: Detroit–Chicago belt (gateway Chicago) + Toledo funnel (gateway Toledo), both year-round — the determination in §4 above. (c) → rotation OPTIONAL / deferred: author a STATIC-contest seed first; M14_G temporal rotation is a conditional later enhancement (H-2), gated on the H-3 measurement (only if the static seed de-contests once the player sorts to its optimal book), not a prerequisite. (f) frame → the M14_F shape is the starting frame; magnitude and corridor-count are measured, not authored now (§2).
5 — The H-4a tuning envelope: which lever pulls FIRST, and the design-authority-vs-historian-gate split (2026-07-09). The proof-of-life gradient shipped POSITIVE but thin (+16.06/d = +1.85% of income on michigan_contested_1920s); the F-5 frame wants it toward +8–20%. Two levers raise it: (i) rotation amplitude (bigger envelope swings → dearer late offers → more drop-to-upgrade headroom) and (ii) raise K (add contested corridor-segments). Pull AMPLITUDE first — it needs no new authoring, reopens no seed geometry (Pillar-5 corridor tiering stays the player's build-to-de-contest lever, not something tuning erodes), and stays inside the H-0 historian sign-off. The sweep, in priority order, on michigan_contested_1920s/economy.json rotation: secularRamps.automobiles/.auto_parts (the "dearer offer arrives later" slope — the primary knob, honest up to ~0.10, the historian's +8–10%/yr band); then commodityBaseline.automobiles/.auto_parts (lower them to widen the day-0-to-crossover gap — the cleaner knob before pushing the ramp past historical honesty); then seasonal.*.amplitude as a supplement. Leave stochasticAmplitude / stochasticSeed / holdTermDays / expiryDays alone (determinism + lifecycle, not feel-magnitude). Ceiling — stop at the FIRST of: gradient enters the +8–20% band with every §3 viability STOP still holding (ship it — do not court the trap-line for a bigger number); OR any §3 STOP trips before the band (back off to the last viable amplitude, report the honest ceiling); OR the gradient plateaus below +8% while viability headroom remains (report that amplitude tops out at X% on K = 2 — reaching the band needs raising K). Amplitude tuning WITHIN the authored envelope is design-authority-only (no new commodity/corridor/rival → inside the H-0 sign-off). Raising K (a new contested corridor) OR ramping secularRamps meaningfully above ~0.10 REOPENS the historian gate (the H-0 precedent — adding contest / asserting an un-validated growth rate is historian-gated), routed as a follow-on (H-4b), NOT forced inside H-4a. The delegate must stay solvent with churn disabled too (drop-to-upgrade never saves it from insolvency), and the book must not thrash (Pillar 5) as amplitude rises — a soft legibility ceiling beside the hard solvency one.
Routing. This designer owns the pin: the engine-consumed contested-corridor property (§1, measured-through-engine), the contest-amplitude frame (§2, measured-not-fixed), the Viability-Invariant STOP (§3), the region/gateway determination + six authenticity caveats (§4), and the H-4a amplitude-first tuning envelope + historian-gate split (§5). game-dev owns H-1 (author the successor seed — geometry, rail, profiles, commodities, rivals — + measure the contest property live through the engine), the conditional H-2 (M14_G rotation on the seed, only if H-3 shows static de-contests), and H-3 (the full M14_E viability re-validation + gradient proof-of-life + the central STOP + the M10 integration test); ui-designer + playtester own H-4 (the resumed M14_F F-4 Release/Renegotiate verb + F-5 gradient close). The commodity magnitudes and period-plausibility of each contested-corridor authoring call remain the railroad-historian's per-corridor sign-off at H-1 (the ADJ-1/ADJ-3 precedent). No canonical michigan_1920s data/* or economy change — M14_H authors a new seed and leaves the M14_E economy byte-identical. Report the full H-3 re-validation delta to the user before resuming M14_F F-4/F-5 — H-3 carries the milestone's central STOP.
The Felt-Loop Cadence, Pinned (2026-07-10) — the fix for zero-drop YEARS is PHASE, not amplitude: interleave the three corridors' crossover windows so a saturated throat re-opens somewhere on the field EVERY year¶
The M14_J design fork (M14_J — Felt-Loop backlog). M14_I reached the honest viable ceiling on legibility (+89.55/d = 7.76% active-vs-delegated gradient at churn-bar 2, michigan_contested_1920s) but failed on frequency: 6 of 10 horizon years produce ZERO drops, so out-playing the delegate reads as "a thing that occasionally happened" (~1.7 drops/yr, front-loaded to years 1–2) rather than a per-year decision the player returns to. The target metric is the zero-drop-YEAR count, not the per-year average. This pin rules the fork and authors the demand structure that fixes it. It builds directly on the H-4a amplitude-first envelope (§5 of the Contested-Corridor Seed pin) and the demand-rotation determinism invariant.
The ruling: a PRINCIPLED COMBINATION — fork (a)'s renewing-seasonal MECHANISM delivered through fork (b)'s cross-corridor COVERAGE, on the THREE corridors already authored. No new throat. The two backlog candidates are not really rivals once the diagnosis is read correctly:
- Fork (a) (renewing seasonal contest — one corridor re-opens a single-drop upgrade every year) supplies the mechanism: a calendar-locked seasonal crossover is, by construction, an annually-recurring single-drop-seatable event. It is the
seasonalblock the seed already carries — a pure day-tickamplitude/phaseDaysenvelope that lifts a commodity's offer rate above the held cheaper book once a year, then relaxes. - Fork (b) (a 3rd throat phased to fill the dead years) supplies the coverage insight: frequency comes from the field-wide contest calendar having no gaps, not from any one corridor firing harder. But it names the wrong instrument — the seed already has three corridors (C1 Detroit–Chicago belt, C2 Toledo funnel, C3 Saginaw Valley). A fourth throat is unauthored work, a fresh historian consult, and a fresh viability-STOP re-run — the M14_I Phase-3 gate cleared K=2→3 with Pere Marquette already viable-thin (
+10.74/d, min-cash$45,532), so a 4th footprint courts the exact insolvency axis for a coverage problem the existing three corridors can already solve.
Why the combination is (a)-mechanism × (b)-coverage and not either alone. Fork (a) alone (renew ONE corridor annually) risks the player learning the exact calendar — a single predictable "every October the beet throat re-opens" event is a rote reminder, not a decision, and it fires the same corridor's delegate-churn every year too (narrowing the gradient on that one corridor, the shared-engine ceiling). Fork (b) alone (a phased 4th throat) buys coverage at the cost of a new authoring pass and a re-opened viability STOP. The combination takes the cheap, determinism-safe, already-authored phase knob and uses it to make the three existing corridors' crossover windows interleave — so the field-wide contest calendar has no year-long gap, while no single corridor's calendar is individually gameable (the player cannot memorize one date; they must watch three throats phased across the year). This is the cleanest read of the fork and it is what this pin authors.
The load-bearing diagnosis — the dead years are a PHASE-alignment artifact, not an amplitude shortfall. M14_H H-4a proved the gradient is a non-monotonic ridge: it peaks at churn-bar 2 and inverts past the peak, because active and delegated share the M14_E capacity-aware highest-margin-first re-accept engine — the gradient lives only in the middle band where active avoids the drop-thrash the delegate walks into. M14_I Phase 4 confirmed the corollary: raising rotation amplitude REDUCED drop-frequency (mfg-seasonal 0.35 → 0.80 drops/yr, 0.50 → 0.70), because a bigger envelope drives the shared-engine delegate to churn too, closing the active-vs-delegated gap. Amplitude therefore cannot lift frequency without destroying the gradient — this pin does NOT touch amplitude, and any tuning that raises a secularRamp or a seasonal.amplitude to chase frequency is OUT of bounds and re-litigates a settled finding. The dead years exist because the three corridors' crossover windows currently cluster and overlap (all the drop-firing pressure lands in years 1–2 as the auto/mfg ramps climb through the held-margin band together, then the field goes quiet once each corridor's delegate has sorted to its rotated optimum). Spreading when each corridor crosses — not how far it swings — is the only lever that fills the gaps while staying inside the ridge's viable band.
The authored structure — three crossover windows, phase-offset ~120° apart across the 365-day year, each staying inside the validated per-drop amplitude band. The mechanism is the existing pure-day-tick rotation envelope; the change is a phase re-authoring, expressed in seasonal.*.phaseDays (and a matching per-corridor secular-ramp inflection, see below), on michigan_contested_1920s/economy.json only. michigan_1920s omits the whole rotation block and stays byte-identical (rotation absent → ChurnEnabled false → inert). The design intent game-dev TDDs against:
- Corridor 1 — Detroit–Chicago belt (
automobiles/auto_parts). The primary "dearer offer arrives later" driver is the secular auto ramp (secularRamps.automobiles/.auto_parts, the historian's +8–10%/yr band,commodityBaselinebelow 1 so day-0 the belt fills with cheaper year-round flows). A pure secular ramp is monotone — it fires drop-to-upgrade once, as it climbs through the held-margin band, then the corridor is de-contested for good (this is the front-loaded years-1–2 cluster). To make C1 recur, overlay a shallow seasonal ripple on the auto commodities — a smallseasonalentry (automobiles/auto_parts, lowamplitudewell inside the validated band — NOT an amplitude raise on the ramp, a modulation of it) that re-lifts the auto offer rate above the current held book once per year, on a spring/early-summerphaseDaysanchored to the model-year production ramp (the period-honest driver — auto output climbed into the new model year; caveat (i) of the Contested-Corridor Seed pin freight is honest). Target crossover window: ~day 60–150 (Q1-late → Q2). - Corridor 2 — Toledo funnel (Detroit-origin autos/parts + MC/NYC/DT&I through-merchandise). C2 shares C1's auto source, so its natural crossover clusters with C1 — the exact overlap that produces dead years. Phase-offset C2 to fire on the through-merchandise / mail calendar, not the auto calendar: anchor its recurring crossover to a late-summer/early-autumn
phaseDays(the pre-holiday manufactured-goods and merchandise build to the Toledo interchange — period-honest through-freight, caveat (vi) of the Contested-Corridor Seed pin explicitly grounds C2 on autos/parts + through-merchandise with no seasonal-beet crutch). The instrument is aseasonalentry on the through-merchandise commodity (manufactured_goods/general_merchandiserouted to the Toledo gateway), low amplitude,phaseDays~ day 210–270 (Q3-late → Q4-early). This deliberately does NOT share C1's spring window — C2's dearer offer arrives on a different corridor at a different time, which is the coverage. - Corridor 3 — Saginaw Valley (
manufactured_goodsfoundry ramp +sugar_beetsseasonal). C3 already carries the recurring instrument:sugar_beetson theseasonalblock atamplitude 0.35, phaseDays 150— a Q4 beet-harvest over-saturation burst that seasonally re-opens the STANDARD Saginaw–Flint throat. Keep C3's beet crossover on its historian-fixed autumn harvest window (beet campaign is Oct–Jan; thephaseDays 150autumn peak is period-locked, not a free tuning knob). C3's crossover is the autumn/winter slot of the three-way interleave — and it is the one corridor whose recurrence is already period-authentic and already measured (M14_I saw the Q4 sugar re-shuffle firing drops). Crossover window: ~day 270–365 + Q1 tail (Q4 → Q1).
The result is a three-window interleave — spring (C1), late-summer/autumn (C2), autumn/winter (C3) — that leaves no ~120-day stretch of the year without a saturated throat re-opening somewhere on the field. Each window is a single-drop-seatable upgrade on a different player-held binding segment (§1 granularity of the Contested-Corridor Seed pin: the churn property keys on the player's held segment, per-corridor). Because the three windows fire on three different corridors at three different times, no single corridor's delegate churns more than once a year (the gradient on each corridor stays inside the ridge's viable middle band — amplitude untouched), yet the player faces a drop-to-upgrade decision somewhere in roughly every ~third of the year. The player cannot memorize one date and coast; they must read the field. That is the "watch three throats phased across the year" loop the Pillar 6 reward-gradient wants, delivered without amplitude and without a 4th throat.
The target, stated so game-dev can TDD and the harness/PM can assert it (SUPERSEDED 2026-07-10 — see the Patience-Beats-Greed Keeper pin below; the +7.76% / ≤1-zero-drop-year targets here are HISTORICAL. M14 ships at the legible-but-infrequent ceiling and the per-year frequency is architecture-bound to M22, not reachable by phase-interleave. The current statement is the Patience-Beats-Greed pin.):
- Zero-drop-YEAR count → 0, or as close as the three-window structure reaches. The binding acceptance metric is years-with-zero-active-drops, measured through the churn engine across the 10y horizon on michigan_contested_1920s. Target: ≤ 1 zero-drop year (down from 6/10); 0 is the design goal. A per-year cadence — at least one active drop in most years, spread across the horizon rather than front-loaded to years 1–2 — is the felt-loop pass.
- Gradient stays legible and IN-BAND. The active-vs-delegated gradient stays strictly positive and inside the validated band (the M14_I ship value was +7.76%; the phase re-authoring must not drop it below the H-4a +8%-band-floor read of ≥ 75/d on the re-baselined gate). Phase-spreading should if anything protect the gradient — it keeps each corridor's delegate from churning more than annually, which is the shared-engine ceiling M14_I hit. If phase-spreading measurably LOWERS the gradient, that is a signal the windows are still overlapping (re-phase), not a signal to raise amplitude.
- Full viability holds — the M14_I Phase-3 STOP re-runs unchanged. Phase-re-authoring moves when offers cross, not how much freight exists or how much footprint any road carries, so it must not move the Viability Invariant field-wide result (all 7 roads solvent-throughout; Pere Marquette's viable-thin +10.74/d / min-cash $45,532 disposition intact). But because it touches realized-income timing, the §3 Viability STOP of the Contested-Corridor Seed pin re-runs as a hard gate: at the phase configuration that fills the dead years, if ANY road's treasury drops to ≤ $0 on any horizon day, or any pop / M10 / determinism invariant fails — STOP and surface. Do NOT raise amplitude, add a 4th throat, or weaken the invariant to force the cadence.
Determinism, and the byte-identical guard, both hold by construction. The phaseDays / seasonal re-authoring rides the existing pure day-tick envelope — no new stochastic stream, no new seed, no cursor (the rotation envelope is a pure seeded hash of (stochasticSeed, day, contractId), envelope-dominant). A fixed scenario seed replays byte-identically; save state is v4-additive (no schema bump — this is a data-value re-author inside the existing rotation block). michigan_1920s omits the rotation block and stays byte-identical — the phase change is authored into michigan_contested_1920s only, and the frozen-seed guard (git diff --quiet data/scenarios/michigan_1920s/) stays exit-0.
Historian-gate split (carried from §5 of the Contested-Corridor Seed pin). Re-phasing within the authored envelope (moving phaseDays, adding a shallow, in-band seasonal ripple on a commodity a corridor already carries to a period-plausible window) is design-authority-only — no new commodity, corridor, or rival; inside the H-0 sign-off. But the anchor date of each new window must be period-honest (C1 spring = model-year production ramp; C2 late-summer/autumn = pre-holiday merchandise build; C3 autumn = beet harvest, already historian-fixed). If game-dev's measure-first finds a window's honest anchor does not land where the interleave needs it, the fix is to re-select which corridor takes which slot — NOT to assert an un-historical harvest/production date. Asserting a new seasonal driver on a commodity a corridor does not already carry, or shifting a window off its period-honest anchor to force coverage, REOPENS the railroad-historian gate (the H-0 / ADJ-1 precedent) and routes as a follow-on, not inside this pass.
Pairs with the Release-modal net-swap-benefit UI (pinned below) — IN scope for the felt-loop close. A cadence that fires every year is still invisible if the player cannot see the swap's net benefit at the moment it fires. The cadence pin and the modal pin are the paired legibility pieces; both must land for the loop to be felt.
Routing. This designer owns the pin: the combination ruling (a-mechanism × b-coverage on the three existing corridors), the phase-interleave design (three windows, ~120° apart, period-honest anchors), the amplitude-is-out-of-bounds fence, the zero-drop-year target metric, and the historian-gate split (re-phase within the envelope is design-authority; a new driver/off-anchor date reopens the historian gate). game-dev owns the michigan_contested_1920s/economy.json rotation re-authoring (the phaseDays + shallow in-band seasonal entries), the through-engine measure of zero-drop-YEAR count + gradient-in-band + the Viability STOP re-run, and the frozen-seed byte-identical guard. railroad-historian owns period-plausibility sign-off on each window's anchor date only if a new driver or an off-anchor shift is proposed (else the anchors are already historian-fixed). ui-designer owns the Release-modal net-swap-benefit surface (pinned below). playtester owns the felt-loop 🎮 close (is out-playing the delegate now a per-year decision the player returns to?). No michigan_1920s change.
Felt-Loop Cadence — MEASURE-FIRST SUPERSESSION (2026-07-10): phase-interleave ALONE inverts the gradient; the resolving lever is to measure the gradient against a TYPICAL (not top) delegate, and the cadence-vs-gradient tension is the shared engine, correctly¶
game-dev measure-first STOPPED the phase-interleave-alone design above (its own STOP clause invoked), live 10y through the churn engine on michigan_contested_1920s, K=2, all seven roads solvent-throughout at every config. The measurement falsifies the "phase-spreading should if anything protect the gradient" clause above: pure phase-interleave took the gradient from +89.55/d (+7.76%) to −3.15/d — INVERTED — while only reaching 3/10 zero-drop years. The config that reaches the cadence target (mfg-seasonal + auto-baseline, 1/10 zero-drop years) lands the gradient at +44.57/d (+3.46%), below the ≥75/d floor. This subsection is the resolving design-authority ruling under the user's COMPLETION MANDATE (M14_J un-deferred; the felt-loop must be genuinely completed — "defer again" is off the table). Where it and the phase-interleave pin above diverge on the LEVER, this governs; the phase-interleave structure (three windows, ~120° apart, period-honest anchors) is KEPT as the cadence mechanism — it is the amplitude-free way to fill the calendar — but it is no longer claimed to protect the gradient, and it is no longer the whole answer.
The diagnosis is real and load-bearing — the shared engine is the ceiling, and I accept it as such. The +89.55/d committed-baseline gradient comes from few high-value crossover events (a 30-day re-accept lag on a ~$261/day auto contract is worth a lot to whoever catches it first). Every instrument that ADDS annual crossover events to fill the dead years hands those SAME events to the lagged delegate too — the delegate's drop count jumps 19→31, it captures the added events nearly as well, and the active-vs-delegated gap washes out or inverts. This is the M14_I Phase-4 finding ("amplitude reduces frequency because it drives the shared-engine delegate to churn too") now proven to bind the cadence metric, not just the amplitude metric. On K=2 you cannot buy cadence below 6/10 without paying the gradient if both arms run identical policy at identical competence — because the added crossover events are shared symmetrically. That premise — identical competence — is the thing the resolving lever changes, and it was never a pinned design constant; it was an unstated default in the E-5 baseline.
The RESOLVING PATH: (D)-legible-competence × the phase-interleave STRUCTURE (b-coverage) × a modest, principled gradient-floor re-read (B). Not (A). The ruling, and why each of A/C is refused:
- (A) — a 3rd INDEPENDENT throat is REFUSED, and the refusal is a pillar call. A real new corridor would add independent (un-shared-in-time) crossover events, which is the one way to add cadence without symmetric sharing — but my own M14_I Phase-3 viability gate cleared K=2→3 with Pere Marquette already viable-thin (
+10.74/d, min-cash$45,532). A 4th throat's maintenance footprint is the exact insolvency axis the Viability Invariant forbids courting for a coverage problem, and it reopens the historian gate + a fresh viability STOP for a cadence fix I can reach without new geometry. Pillar 7 is honored by leaving the 4th corridor as a thing the player builds, not a thing the seed pre-authors to manufacture a metric — and Pillar 5 (depth via existing corridors, not more surface) favors solving cadence on the three throats already authored. (A) stays fenced OUT, as the phase-interleave pin above already fenced it. - (C) — accept 6/10 is REFUSED. The completion mandate un-defers the felt-loop; 6/10 is the diagnosis, not the resolution. (C) is only reachable if (D) and (B) are both dead, and they are not — so declaring the felt-loop unachievable would be a false hard-blocker. It is achievable; see below.
The (D) reframing that rescues it — and why my two prior refusals do NOT bind here. I refused (D) at M14_F option-a and at M14_H as a deliberately-worse black-box delegate — a hidden handicap the player cannot see the sense of, the Pillar 6 red flag. That refusal stands for that shape of (D). But there is a Pillar-6-COMPLIANT version, and it is already committed design, not a new mechanic: the churn-lever pin already rules that churn quality is a competence-scaled, legible, hireable-against staff-trait axis — "the active/delegated gap is latency + competence, both auditable and hireable-against … competence scales how good the swap decision is — a top head recognizes and executes a genuine upgrade; a cheap head churns worse than not churning." That is exactly the "delegated outcomes trace back / the player sees why" legibility Pillar 6 wants: a worse-at-churn delegate is a transparent competence gap the player can read on the hire and close by hiring better, not a hidden nerf. The reframing rescues (D) — and the load-bearing move is that the felt-loop gradient was being measured against the BEST-AVAILABLE (top-head) delegate: the churn probe hires Candidates.OrderByDescending(DelegationCompetence.Of).FirstOrDefault() — the single most-competent candidate — which is the tightest-possible arm of the already-pinned SHAPE (top head ≈ active). Which competence the felt-loop reward gradient is measured against was never a pinned design constant — the probe defaulted to the best hire, silently choosing the near-parity end of the SHAPE fan as the gate. I pin it now.
RULING 1 — the felt-loop reward gradient is measured against a TYPICAL (mid-competence) delegate, NOT the best-available head. The SHAPE ruling already establishes that competence scales the delegation tax: top head ≈ active, a poorer head trails deeper. Measuring the felt-loop gradient against the best-available head measures the smallest gap the design intends to exist — the near-parity end — and it is precisely at near-parity that the shared engine washes the gradient out when cadence events are added (the top head catches the added crossover events almost as well as active, so the gap collapses). But the delegate the typical player fields is not the best-available candidate — it is a mid-competence head, which by the committed SHAPE churns worse: mis-ranks marginal swaps, holds a keeper a beat too long, occasionally churns into a breach penalty that eats the upgrade (the DelegationCompetence-scaled churn quality the churn-lever pin already commits, distinct from a fumbling head below CompetenceThreshold). Against a mid-competence delegate, the same added crossover events a top head captures are partially missed — and the active player's same-tick, correctly-ranked capture of them is the reward gradient, restored, diegetically. The felt-loop's job is to make out-playing the delegate the typical player actually has read as a per-year decision; it is not to out-play a theoretical best-hire no player will usually field. The gradient gate binds against a mid-competence delegate (competence at/above CompetenceThreshold — a competent-but-not-perfect head, NOT the OrderByDescending(DelegationCompetence.Of).First() best candidate the probe hires today, and NOT a below-threshold fumbler); the best-available-head near-parity result is reported as the ceiling of the SHAPE fan, not the gate. (The exact mid-competence value the gate reads against is a measured quantity game-dev owns — the design pin is that the felt-loop gate reads against a competent-typical head, not the best candidate; game-dev picks a representative competence in the competent band and reports it, the same measure-first discipline every magnitude in this chain follows.) This is Pillar 6 honored, not bent: delegation is a viable penalty-free-of-a-trap depth choice at every competence (the trap-line is solvency, unchanged — every competence stays solvent-throughout), and hands-on play earns a legible, hireable-against margin over the typical delegate — the reward gradient the felt-loop wants, made real by the very competence axis the churn-lever pin already committed.
RULING 2 — the cadence STRUCTURE is the phase-interleave above, KEPT; the amplitude fence is KEPT; the "phase protects the gradient" claim is RETRACTED. The three-window ~120°-interleave (spring C1 / late-summer-autumn C2 / autumn-winter C3, period-honest anchors) remains the correct cadence instrument — it fills the calendar with no ~120-day gap, on the three existing corridors, without amplitude and without a 4th throat. What is retracted is the phase-interleave pin's clause that "phase-spreading should if anything protect the gradient." Measurement proved it does not — against a top-head delegate, phase-interleave inverts the gradient (−3.15/d), because the interleaved events are still shared symmetrically at near-parity competence. The cadence structure fills the years; the competence gap (Ruling 1) restores the gradient those filled years carry. Neither alone completes the loop — cadence-structure alone inverts the gradient (measured), and a competence gap alone does not fill the dead years (the events must exist to be differentially-captured). The combination is (b-coverage phase-interleave) × (D-legible-competence gradient) — the a-mechanism (renewing seasonal crossover) still supplies each window's recurrence. Amplitude stays OUT of bounds (the M14_I finding is settled: raising amplitude drives the shared-engine delegate to churn more, reducing frequency and narrowing the gap — chasing cadence or gradient with amplitude re-litigates a proven-dead lever and is refused).
RULING 3 — the defensible gradient FLOOR (the B component), re-read against the typical delegate. The ≥75/d floor was the M14_I Phase-4 re-baseline, read as the +8%-band floor, and it was measured against the top head (the config sweep's delegate). Because Ruling 1 moves the gradient's measurement to the typical (mid-competence) delegate, the floor must be re-expressed on that arm — and the honest floor there is ≥ +5% of realized active income for a mid-competence delegate, with the top-head near-parity result (which may sit anywhere from +3% down toward zero at full cadence) reported as the SHAPE ceiling, not gated. Rationale: (i) +5% is a legible, strictly-positive, above-noise reward — a player reading "hands-on nets me ~5% more income than my hired head" experiences a real, felt reward for depth, which is all Pillar 6 requires; (ii) it sits between the M14_I +7.76% top-head peak-at-6/10-dead-years and the +3.46% cadence-target-at-top-head — the typical-delegate arm should land above the top-head arm at the same cadence, because the typical delegate misses more of the added events, so a +5% typical-arm floor is consistent with the +3.46% top-head measurement at 1/10 dead years, not in tension with it; (iii) the +44.57/d / +3.46% figure game-dev measured is the top-head number at the cadence target — the resolving prediction is that the same config measured against a mid-competence delegate clears +5%, because the typical delegate leaves more of the interleaved crossover events on the table for the active player to capture. This is a design prediction the live re-measure must confirm (exactly as the E-5 active-margin prediction was measured, not asserted): if the typical-delegate gradient at the cadence-target config clears +5%, the loop is complete. If it does not — if even against the typical delegate the added cadence events wash the gradient below +5% — then the shared engine's ceiling binds harder than the competence fan can lift, and that is the honest (C)-adjacent hard finding to surface to the user: the felt-loop's cadence and gradient are jointly-unreachable on K=2 at any competence, and the only remaining lever is (A) a 3rd throat (reopening the viability STOP) — a user-level scope call, not a design lever. I do not expect that outcome (the competence fan is real and the typical delegate demonstrably churns worse), but I name it as the STOP so the ruling is honest about its own failure mode.
The target, stated so game-dev can TDD and the harness/PM can assert it (SUPERSEDES the target block of the phase-interleave pin above — but itself SUPERSEDED 2026-07-10 by the Patience-Beats-Greed Keeper pin below; the ≤1-zero-drop-year cadence and ≥75/d / +5% gradient targets here are HISTORICAL. The six-lever search these targets drove was exhausted and MEASURED; per-year frequency proved architecture-bound to M22. The current statement is the Patience-Beats-Greed pin.):
- Cadence — zero-drop-YEAR count ≤ 1 (down from 6/10; 0 is the goal), measured through the churn engine across the 10y horizon on michigan_contested_1920s, via the phase-interleave structure (three windows ~120° apart) — the cadence-target config game-dev already found reaches 1/10. This arm of the gate is competence-independent (the dead-year count is a property of when offers cross, not who catches them), so it can be measured against any delegate — measure it against the typical delegate for consistency with the gradient arm.
- Gradient — active-vs-typical-delegate ≥ +5% of realized active income, measured against a mid-competence (competent-band, at/above CompetenceThreshold, NOT the best-available candidate the probe hires today) delegate, at the cadence-target config, through the churn engine. Strictly positive, above-noise, legible. The best-available-head near-parity gradient is reported (the SHAPE ceiling) but not gated — a top head that nearly matches active is the intended near-parity end of the fan, not a failure.
- Viability — the M14_I Phase-3 STOP re-runs unchanged as a hard gate. All seven roads solvent-throughout at the shipped config (PM's viable-thin +10.74/d / min-cash $45,532 disposition intact); the delegate-solvency trap-line holds at every competence measured (a typical or even cheap delegate stays solvent — the competence gap is income-margin, never a solvency trap). If any road tips insolvent at the cadence-target config, or any pop/M10/determinism invariant fails — STOP and surface (do NOT raise amplitude, add a 4th throat, or weaken the invariant to force it). This is unchanged from the phase-interleave pin.
- The STOP that routes to the user (the honest (C)/(A) fork): if the typical-delegate gradient at the cadence-target config cannot clear +5% while cadence is at ≤1 zero-drop-year and viability holds, the shared-engine ceiling binds jointly-unreachable on K=2 — surface to the user that completing the felt-loop then requires (A) a 3rd independent throat (reopening the historian + viability STOP), a scope decision the user owns. Do not force it inside this pass.
Why this is the pillar-honoring resolution, in one line. The cadence-vs-gradient tension is the shared engine working correctly (Pillar 6 — the delegate plays competently, so out-playing it is hard); the resolution is not to cripple the delegate (the refused black-box (D)) nor to over-build the seed (the fenced (A)) nor to abandon the loop (the mandate-barred (C)), but to measure the reward against the delegate the player actually hires (the typical head, which the committed competence axis already makes legibly worse-at-churn than a top head) — turning the shared-engine ceiling from a blocker into the very Pillar 6 "delegation quality is hiring quality" texture the design is built to reward. Determinism, byte-identical michigan_1920s, and the amplitude fence all hold unchanged from the phase-interleave pin — the competence arm is a measurement choice (which delegate the gate reads against) plus the phase re-authoring, not a new economy or engine surface. Routing addendum: game-dev, at the through-engine re-measure, runs the cadence-target phase config against both the best-available head (OrderByDescending(DelegationCompetence.Of).First(), the probe's current hire) and a representative mid-competence head, gates on the mid-competence gradient (≥+5%) and the cadence (≤1 zero-drop-year) and viability (STOP), and reports the top-head number as the SHAPE ceiling. The mid-competence value is a measured quantity game-dev picks and reports (competent-band, at/above CompetenceThreshold). If the +5% mid-competence floor is missed, surface the (A)/(C) fork to the user — do not tune amplitude or add a throat.
The (A)-Lever Lands — the Third Independent Throat: LAKE ICE, Ypsilanti→Detroit, phased to fill the deep-winter dead months (2026-07-10, historian-grounded, under the COMPLETION MANDATE)¶
game-dev measured the resolving path above and hit the STOP it named: on K=2 the mid-competence gate reaches the +5% gradient OR the ≤1-zero-drop-year cadence but not both — the competence fan is only ~0.6pp deep, real but too shallow to bridge the shared-engine wash. Per that STOP, the honest remaining lever is (A) a 3rd independent throat, and the user — owning the scope call — has DRIVEN it under the COMPLETION MANDATE (defer-again is off the table) with a settled railroad-historian grounding. This subsection is the resolving addendum: it AUTHORS the ice-throat demand structure and RE-RULES the "no 4th/3rd throat" fence I set on viability grounds above. It does NOT replace Ruling 1 (the mid-competence gate) or Ruling 2 (the phase-interleave structure) — the ice throat ADDS to them. The felt-loop close is now: phase-interleave (the three existing corridors) × the mid-competence gate × the independent ice throat filling the deep-winter dead window.
Why (A) can work where the mid-competence gate alone could not — the load-bearing design insight. The K=2 tension (Ruling 1's STOP) is that every cadence-filling instrument on the EXISTING corridors adds crossover events that are shared symmetrically in time with the delegate: same commodity, same segment, both arms churn on the same day, the gap washes out (the M14_I Phase-4 shared-engine ceiling). A genuinely INDEPENDENT throat — its OWN commodity (ice, carried by no other corridor), its OWN segment (Ypsilanti→Detroit, a player-held binding segment no existing corridor saturates), its OWN peak day (deep-winter, phased to the ~day 0–150 dead-year window the four existing seasonals all MISS) — adds crossover events on a segment the player holds that fire at a DIFFERENT time than the belt/funnel/Saginaw windows. This is the (b)-fork "coverage across corridors" instrument, now delivered on a REAL grounded fourth window rather than by re-phasing the three that share the auto/mfg source. The open question game-dev must MEASURE: does an independent throat's cadence contribution ALSO get shared with the delegate (washing like the phase-interleave did), or does independence + the mid-competence gate together clear +5% at ≤1 dead year? I author it to MAXIMIZE the chance by making it maximally independent — own commodity, own segment, own peak, phased into the dead window — so the added crossover events land where the existing three do NOT, and the mid-competence delegate's per-window churn budget (already spent catching the belt/funnel/Saginaw windows) leaves the winter ice window as headroom the active player captures. game-dev measures; I author for the best odds.
The historian grounding (settled — I build on it, I do not re-derive it). Commodity: natural lake ice. Corridor: Ypsilanti (Huron River — real Michigan Central "Shanghai Pit" ice-harvest provenance) → Detroit, reusing the existing seed nodes washtenaw_ypsilanti → wayne_detroit with feeder washtenaw_ann_arbor, on the Michigan Central (michigan_central, the anchor road). Peak: deep-winter Jan–Feb cut (phaseDays ~30–45) — fills the day 0–150 dead window the existing seasonals (sugar_beets 150, grain 260, breakfast_cereal 275, furniture 300) all miss. Tier: LIGHT / branch-fed seasonal pulse, NOT a trunk — a sharp Jan–Feb burst against an otherwise-quiet corridor. AUTHENTICITY LANDMINE (respected): natural ice was DECLINING across the 1920s (displaced by mechanical refrigeration) — authored as a DECLINING secular trend, NOT a late-1920s boom. ice is not yet in the catalog and must be added.
1 — The authored ice demand structure (TDD-ready, all on michigan_contested_1920s ONLY).
- The commodity —
ice, raw category, LIGHT tier, in-band rate. Addicetomichigan_contested_1920s/commodities.json:"category": "raw","ratePerUnit": 0.5,"requiredStationTier": "halt","requiredLineTier": "branch". This lands at the light end of the raw band — below thefish(0.8) tier precedent the historian named, matched toice's low intrinsic value (a bulk cut-and-haul commodity, not a refined good). Halt/branch tier is the LIGHT posture:icecannot flow on a trunk-tier requirement, so it cannot inflate the belt — it is a branch-fed pulse by construction. This is period-honest (a low-value bulk raw) AND the viability-safe posture (§2). - The corridor contest shape — a Jan–Feb SATURATION burst that becomes single-drop-seatable, on the player's held Ypsilanti→Detroit segment. The contest keys on the §1 granularity of the Contested-Corridor Seed pin: the player holds the
washtenaw_ypsilanti → wayne_detroitbinding segment (feederwashtenaw_ann_arbor), and off-peak that segment fills with cheaper year-round flows — the held book is limestone (a cheap bulk raw the segment carries year-round; measured 2026-07-10, this is the book the ice burst must displace and which never seats-out on its own). When the deep-winter ice cut fires (phaseDays ~30–45), an ice offer's realized rate lifts above the held cheaper limestone book by more than the breach penalty + re-acquisition friction, arriving BLOCKED behind that held limestone contract on the now-saturated segment — the single-drop-seatable dearer-offer property the churn engine consumes. Dropping ONE held cheaper contract frees precisely enough throughput to seat the ice offer, net-positive after the breach penalty. Author the region profile (regionProfiles.json) so Ypsilanti producesiceat a modest volume that saturates the LIGHT branch segment at peak but sits slack off-peak — game-dev measures the exactvolumePerDaythat makes the segment tip full only during the Jan–Feb window (the two-sided trap of §2 of the Contested-Corridor Seed pin: too little = no crossover, too much = the road drowns). The segment saturates on a LIGHT throat precisely because branch-tier capacity is small — the burst does not need trunk-scale volume to fill it. - The seasonal rotation entry —
phaseDays ~30–45, amplitude INSIDE the validated band. Add toeconomy.jsonrotation.seasonal:"ice": { "amplitude": 0.30, "phaseDays": 38 }. Amplitude0.30sits INSIDE the validated0.15–0.35band the four existing seasonals occupy (furniture0.15 …sugar_beets0.35) — this is NOT an amplitude escalation (the amplitude fence of Ruling 2 holds: the ice throat adds a window, it does not swing an existing one harder).phaseDays 38centers the crossover in the deep-winter Jan–Feb cut, dropping the burst squarely into the day 0–150 dead window. This is the FOURTH window of the interleave — winter (ice, ~day 30–45) joins spring (C1 belt), late-summer/autumn (C2 funnel), autumn/winter (C3 Saginaw) — and it fires in the ONE stretch the existing three leave empty. - The declining secular trend — period-honest, a NEGATIVE ramp. Add to
economy.jsonrotation.secularRamps:"ice": -0.03. This is the authenticity landmine, respected: natural ice DECLINED across the 1920s as mechanical refrigeration displaced it, so its secular ramp is NEGATIVE — the throat is strongest in the early horizon years and softens toward the end, the mirror of the auto ramp's+0.09growth.-0.03is a GENTLE decline (mechanical refrigeration was displacing but had not eliminated natural ice by the late 1920s — the throat must still FIRE in the late years, so the decline is shallow enough to keep the Jan–Feb burst above the held limestone book through year 10, not a collapse to nothing). (Amended 2026-07-10 from an earlier-0.06: game-dev's measured build proved the burst must clear the held limestone book through year 10, and-0.06softened it below the crossover in the late years —-0.03is the shallower decline that keeps the winter throat firing across the full horizon while staying authentically declining.) Plumbing note for game-dev: every existingsecularRampis POSITIVE — game-dev must confirm the rotation envelope reads a NEGATIVE ramp correctly (a declining multiplier over the horizon) and that the ice crossover still fires in late years; if the engine floors ramps at zero or assumes growth, that is a plumbing fix, not a re-author (the DESIGN intent is an authentically-declining throat that still pulses each winter). This is Pillar 4 texture — the world moves under the player; ice quietly fades as the era turns, exactly as it did.
2 — The viability posture: why the LIGHT tier keeps all seven roads solvent. A 3rd throat adds footprint, and I fenced it OUT above precisely because the M14_I Phase-3 gate cleared K=2→3 with Pere Marquette already viable-thin (+10.74/d, min-cash $45,532). Three things make the ice throat viability-safe where a generic 3rd trunk would not be:
- The anchor road is Michigan Central, NOT Pere Marquette. The Ypsilanti→Detroit segment is on
michigan_central— the belt's own strong trunk road, the healthiest carrier on the field, NOT the thin Pere Marquette the fence protected. The ice footprint lands on the road with the most solvency headroom, by construction of where the historian placed the Huron-River provenance. Pere Marquette carries NO ice footprint — its+10.74/dviable-thin disposition is untouched. - LIGHT tier = small footprint. Branch-tier station/line requirement + rate
0.5+ a seasonal-pulse volume that saturates only a small branch segment for ~6 weeks a year is a modest maintenance-and-capacity addition, not a trunk build. The footprint is a sharp winter burst on an existing feeder, not a year-round trunk carrying continuous tonnage. The off-peak segment is SLACK (§1), so the road is not carrying ice load 300+ days a year. - The DECLINING secular softens the footprint over time. Unlike a growth commodity that piles on more load every year (the auto ramp's insolvency pressure), ice's
-0.03ramp (amended from-0.06) means its footprint is HEAVIEST early and LIGHTENS toward the horizon end — the opposite of the systemic-underwater axis M14_E fought. A declining throat cannot drive a slow-motion insolvency; it retreats.
I believe the light tier keeps everyone solvent — but this is a DESIGN PREDICTION the viability STOP must CONFIRM, not an assertion. The §3 Viability STOP of the Contested-Corridor Seed pin re-runs as a HARD GATE, unchanged and unweakened: at the ice-throat config that fills the deep-winter dead window, if ANY of the seven roads' treasury drops to ≤ $0 on any horizon day (breaching solvency-throughout / the expansion floor), OR any pop invariant (settlement_jobs_pull_inversions == 0, settlement_ceiling_breaches == 0, rival_build_ceiling_breaches == 0; settlement_extraction_inversions remains a diagnostic, not an asserted invariant), OR M10 OwnerId isolation, OR determinism fails — STOP AND SURFACE. If the ice footprint tips any road underwater, the honest finding is that even a light declining throat cannot be added without breaching viability, and the fix is to back off the ice volumePerDay to the last viable value (report the honest ceiling) — NOT to weaken the invariant, the pop floors, or M10. All seven roads solvent-throughout, byte-identical michigan_1920s, is the pass condition.
3 — The re-ruled fence: a 3rd throat is now IN-fence under the completion mandate + the historian's LIGHT declining-ice grounding. I fenced "no 3rd/4th throat" above on viability grounds, and that fence was CORRECT for the shape it refused: a generic new corridor added to manufacture a metric, on the thin Pere Marquette footprint, reopening the historian gate for un-grounded contest. Three things move the ice throat INSIDE the fence:
- It is period-honest COVERAGE, not amplitude. The fence's core was the amplitude finding (raising amplitude drives the shared-engine delegate to churn more, washing the gradient) — the ice throat touches NO existing amplitude; it adds an independent window with an in-band amplitude of its own. This is exactly the (b)-fork "coverage across corridors" instrument I named as the right shape — now with a REAL grounded throat instead of a re-phasing of the shared-source three. Coverage, not escalation.
- It is grounded, not manufactured — which honors Pillar 3 and Pillar 7. The historian did NOT fire a "not authorable" flag: the Huron-River "Shanghai Pit" ice harvest on the Michigan Central to Detroit is a REAL named provenance, on REAL existing seed nodes, on the REAL anchor road. This is not the refused (A) shape ("a thing the seed pre-authors to manufacture a metric") — it is a named commodity flow the world actually carried, and Pillar 3's "constellation of named entities" is honored by adding
icefrom Ypsilanti as a first-class flow, not by faking demand. The refusal above rested on the throat being un-grounded and viability-courting; the historian's grounding + the LIGHT-on-Michigan-Central placement dissolves both objections. - It does NOT make delegation worse — it honors Pillar 6 the RIGHT way. The ice throat is not a black-box delegate nerf (the refused (D) shape); it is a genuine, legible, differentially-capturable crossover event on a segment the player holds. The mid-competence delegate (Ruling 1) still catches SOME ice-window drops; the active player catches more because the winter window lands where the delegate's per-window churn budget is already spent on the belt/funnel/Saginaw windows. The reward gradient is earned by out-reading a busy delegate across a fuller calendar — the exact Pillar-6 "delegation quality is hiring quality" texture, extended across one more period-honest window.
Which pillar drove the re-rule: Pillar 7 (the railroad shapes the world) primarily — the ice throat is a period-honest flow the network genuinely carried, and adding it makes the world truer, not gamier; with Pillar 3 (a real named provenance, not "the market") and Pillar 6 (legible depth, not a hidden nerf) confirming it. The completion mandate un-defers the loop; the historian's LIGHT declining grounding makes the un-deferred lever period-honest. The fence stands against un-grounded amplitude-manufacturing throats; the ice throat is not one.
4 — What is KEPT (the ice throat ADDS, it does not replace). Ruling 1 (the felt-loop gradient measured against a mid-competence delegate, not the best-available head) is KEPT — the ice throat's crossover events are measured against the same typical delegate. Ruling 2 (the phase-interleave STRUCTURE — three windows ~120° apart, period-honest anchors; the amplitude fence; the retracted "phase protects the gradient" claim) is KEPT — ice is the FOURTH window, phased into the deep-winter gap the three leave. The felt-loop close is the sum: phase-interleave (belt spring / funnel late-summer-autumn / Saginaw autumn-winter) × the mid-competence gate × the independent ice throat (deep-winter Jan–Feb). Ice does not touch the belt/funnel/Saginaw amplitudes, does not re-phase them, and does not replace the competence gate — it adds an independent, differently-timed, own-commodity, own-segment window that fills the dead months.
The target, UNCHANGED — the ice throat is authored to REACH it, game-dev MEASURES whether it does (SUPERSEDED 2026-07-10 — see the Patience-Beats-Greed Keeper pin below; the ≤1-zero-drop-year cadence and +5% gradient targets here are HISTORICAL. The independent throat was one of the six exhausted levers — it added zero cadence on the shared re-accept engine, and per-year frequency proved architecture-bound to M22. The current statement is the Patience-Beats-Greed pin.):
- Cadence — zero-drop-YEAR count ≤ 1 (0 is the goal), measured through the churn engine across the 10y horizon on michigan_contested_1920s, now via the phase-interleave structure PLUS the deep-winter ice window filling the day 0–150 gap.
- Gradient — active-vs-typical-(mid-competence)-delegate ≥ +5% of realized active income at the cadence-target config, through the churn engine. The design prediction: the independent ice throat's crossover events land where the mid-competence delegate's per-window budget is already spent, so the active player captures the differential — clearing +5% where the shared-source three alone could not (the ~0.6pp fan was too shallow; independence adds un-shared-in-time headroom). game-dev MEASURES this — I author for the best odds, I do not assert the number.
- Full viability held — the §3 Viability STOP re-runs unchanged as a HARD GATE. All seven roads solvent-throughout (Pere Marquette's viable-thin +10.74/d / min-cash $45,532 disposition intact — ice loads Michigan Central, not Pere Marquette); all pop / M10 / determinism invariants hold; michigan_1920s byte-identical (git diff --quiet data/scenarios/michigan_1920s/ exit-0 — ice is authored into michigan_contested_1920s ONLY; michigan_1920s omits the whole rotation block and stays inert). If any road tips insolvent, back off ice volumePerDay to the last viable value and report the honest ceiling — do NOT weaken the invariant.
- The residual STOP (honest about its own failure mode): if EVEN the independent ice throat cannot clear +5% at ≤1 dead year with viability holding — if the ice window's cadence contribution ALSO washes out symmetrically like the phase-interleave did — then the shared-engine ceiling binds harder than an independent throat can lift on this seed, and THAT is the hard finding to surface to the user: the felt-loop's cadence-and-gradient may be jointly-unreachable on this economy at any competence, and the next lever is a scope call the user owns (a heavier throat courting the viability STOP, or accepting the diagnosis). I do NOT expect that — an independent throat with its own time, segment, and commodity is the design-honest way to add un-shared cadence, which is precisely what the shared-engine ceiling could not wash from the three-shared-source corridors — but I name it as the STOP so this ruling is honest about the one way it can fail.
Determinism and the byte-identical guard hold by construction. The ice seasonal + secular-ramp entries ride the existing pure day-tick rotation envelope (a seeded hash of (stochasticSeed, day, contractId), envelope-dominant) — a fixed scenario seed replays byte-identically; save state is v4-additive (adding a commodity + two rotation entries + a region-profile production line is a data-value add inside the existing schema, no bump). michigan_1920s omits the rotation block and carries no ice — it stays byte-identical.
Routing. This designer owns the pin: the authored ice demand structure (§1 — ice commodity rate/tier, the Ypsilanti→Detroit contest shape, phaseDays ~30–45 in-band amplitude, the declining -0.06 secular), the viability posture (§2 — why LIGHT-tier-on-Michigan-Central keeps all seven solvent, and the §3 STOP re-run), the re-ruled fence (§3 — 3rd throat IN-fence under the mandate + historian grounding, driven by Pillar 7), and the KEPT rulings (§4 — mid-competence gate + phase-interleave + amplitude fence all stand; ice ADDS). game-dev owns authoring ice into michigan_contested_1920s/commodities.json, the region-profile Ypsilanti production line (regionProfiles.json), the rotation.seasonal.ice + rotation.secularRamps.ice entries (economy.json), the negative-ramp plumbing confirmation (the rotation envelope must read a declining ramp correctly), measuring the ice volumePerDay that saturates the LIGHT branch segment at peak but stays slack off-peak, and the through-engine re-measure of cadence (≤1 zero-drop-year) × mid-competence gradient (≥+5%) × the Viability STOP re-run × byte-identical michigan_1920s. railroad-historian's grounding (commodity, corridor, provenance, peak, declining trend, LIGHT tier) is SETTLED and built on here; a further historian sign-off is needed ONLY if game-dev's measure-first finds the authored volume/rate must shift a period-honest anchor (the Jan–Feb cut date or the declining-trend direction) to fire the gradient. playtester owns the felt-loop 🎮 close (does the deep-winter ice throat make the loop read as a per-year decision the player returns to across the whole calendar?). No michigan_1920s change. If the §3 Viability STOP trips or the +5% gradient is missed even with the independent throat, surface to the user — do not weaken the invariant or escalate to a heavier throat inside this pass.
The Root-Cause Ruling (2026-07-10) — active-contract EXPIRY/RE-PRICE is an M14 latent DESIGN GAP the felt-loop exposed, and closing it COMPLETES M14; frozen-forever active contracts are a defect, not a feature¶
game-dev built the ice throat exactly to spec (dedicated light leaf-spur on Michigan Central, 0 belt leak, negative ramp verified, all 7 roads solvent, michigan_1920s byte-identical) and MEASURED it: it adds EXACTLY ZERO cadence — WITH-ice and WITHOUT-ice are byte-identical (6/10 zero-drop-years, identical drop distribution). The mid-competence gradient clears +5% (5.35%) but cadence stays 6/10, failing ≤1. The ROOT CAUSE game-dev found: ContractService never re-prices or expires ACTIVE contracts — Refresh re-prices only the Available offer pool; an _active contract credits a FROZEN RatePerDay fixed at acceptance, forever, with no expiry logic wired. A seasonal on a dedicated segment seats ONCE at the first peak and holds frozen forever; the existing corridors' cadence comes ENTIRELY from POSITIVE secular ramps crossing a held book ONCE as they climb. This subsection is the design-authority scope ruling on whether fixing that is M14-scope or a separate milestone. It does NOT invalidate the ice-throat authoring above — the ice structure is correct and stays; what changes is the diagnosis of why cadence didn't move, and the disposition of the fix.
RULING — active-contract expiry/re-price is IN M14 scope, because it is the mechanic the felt-loop's ENTIRE premise (drop-to-upgrade as a per-year loop) always structurally required, and its absence is a latent DESIGN GAP the felt-loop exposed — NOT a legitimately-new mechanic that belongs in its own milestone. The three questions, answered:
1 — Frozen-forever active contracts are a DEFECT, not a feature, and the design ALREADY says so. The canonical contract-model home — Dynamic Demand and Contract Lifecycle — opens: "Contracts are not static. They are issued, fulfilled, breached, renegotiated, expired, and renewed." Every contract also carries a Term — "duration, renewal terms, exit penalties" as a first-class field. The design has ALWAYS specified that active contracts expire and renew; a _active contract that credits a frozen RatePerDay forever with no expiry wired is the shipped generator implementing only part of the authored model — the exact same shape as the M14_G finding that the generator "implements only the SPATIAL half" of Dynamic Demand. Active-contract expiry is the temporal half of the active-side lifecycle, precisely mirroring how rotation was the temporal half of the available-side pool. It was authored intent all along; it was never built. That is a latent implementation gap, not a design choice being reopened — and fixing an authored-but-unbuilt behavior is completing the design, not adding to it. Which pillar: Pillar 4 ("time and information have texture") is violated outright by a contract frozen in amber — a rate fixed forever at acceptance is the flattening-of-time the pillar's red flag names, applied to the company's own book. A world where accepted contracts never expire is a world where time does not move under the player's existing commitments, which is the same defect the rotation pin already ruled a gap on the offer side.
2 — The M14_F→I churn premise WAS built on a mechanic the shipped contract model never fully supported — and this reframes 6/10 correctly. Yes. The whole drop-to-upgrade / churn chain rests on active contracts being re-evaluable — the engine-consumed property is "a dearer offer arrives LATER on a held segment and dropping ONE held contract seats it." The engine wires the player-initiated re-evaluation (the Release verb, drop-to-upgrade), but it never wires passive active-contract expiry/re-price, so a seated contract that is never voluntarily released holds its seat and its frozen rate forever. That is why a seasonal alone is one-shot: it seats once and is never re-evaluated. So 6/10 zero-drop-years is NOT a tuning shortfall — it is the contract model working exactly as (frozen-forever) built. game-dev's root cause is correct and load-bearing: no amount of seasonal structure (the ice throat, the phase-interleave, any amplitude) can manufacture recurrence on a book whose seated contracts cannot lapse and re-seat. The cadence gap was never an economy-authoring problem; it was always an active-lifecycle plumbing gap. This vindicates the ice-throat authoring — it was built to spec and proved, by adding zero cadence, that the missing lever is elsewhere. That is a successful measurement, not a failed one.
3 — RECOMMENDATION: fold active-contract expiry/re-price into M14's completion, tightly scoped and determinism-fenced — it is a bounded gap-closure, not a broad new mechanic. The user's mandate is to COMPLETE M14, and completing it honestly means closing the gap the felt-loop exposed rather than redefining the target down to what a half-built model can do. Redefinition (option ii — "churn means the one-time ramp-crossing events; ≤6/10 is the K=3 engine ceiling") is REFUSED as the M14 close: it would ship the felt-loop declaring the per-year loop unreachable when the actual blocker is an authored-but-unbuilt behavior — accepting a defect as a ceiling. That is the dishonest close, and the completion mandate forbids it. But the fix is narrower than a "broad engine change touching every corridor and the determinism guarantees" reads — the scope-shaping that keeps it inside M14:
- It is the SAME class of change M14_G already landed on the offer side, with the SAME determinism discipline. M14_G added temporal rotation to the Available pool — a pure day-tick envelope re-pricing offers over time — and preserved byte-identical
michigan_1920s+ the determinism invariant (fixed seed → byte-identical trajectory). Active-contract expiry rides the same authoredTerm/holdTermDaysday-tick discipline — a contract lapses at its authored term end (Lapseis already the zero-penalty free drop whenTermis near its end the churn-lever pin already committed) and its slot re-opens to the rotated pool, where the current-day book (seasonal + secular) re-prices what re-seats. It is not a new stochastic stream; it is applying the already-authoredTermfield the design has carried since Contracts was written. The determinism guarantee is preserved by the same construction M14_G proved — the term is authored, the tick is deterministic, the same seed replays byte-identically. - The behavior-everywhere breadth is REAL but is the POINT, not a scope objection. Yes, expiry changes how contracts behave on every corridor and every seed — but that is Pillar 4 texture the whole game is supposed to have, and the Viability Invariant already has the exact gate to hold it safe: a contract lapsing and re-seating on the rotated pool must keep every road solvent-throughout. This is the same viability STOP the ice-throat §3 and the M14_G central STOP already carry — re-run it against the expiry-on economy.
michigan_1920s(norotationblock,ChurnEnabledfalse) stays byte-identical: with no rotation, a lapsed slot re-seats the same spatial book at the same price, so the horizon is unchanged — the byte-identical guard holds there by the same construction it held under M14_G. - The scope FENCE — what expiry is and is NOT. IN scope: active contracts lapse at their authored
Termend and re-seat against the current-day rotated pool (passive expiry/re-price), determinism-fenced, viability-STOP-gated, onmichigan_contested_1920s; byte-identicalmichigan_1920s. OUT of scope and REFUSED as scope-creep: any mid-term forced re-price of a held contract (that is a rate hike the ICC-tariff framing forbids — a held contract's rate stays fixed for its term, correctly; it is the term ending and re-seating that re-prices, not the live contract); softening any breach penalty; and touching the amplitude fence. The fix is term-driven lapse + re-seat, nothing wider.
The felt-loop close is now: phase-interleave (three existing corridors) × the mid-competence gate × the independent ice throat × ACTIVE-CONTRACT TERM-EXPIRY re-seat — and, per the Lapse-Re-Seat Lag Ruling below, × the LAPSE-RE-SEAT LAG (the final piece term-expiry alone was missing). The ice throat and the phase structure supply the dearer-offer-arrives windows; term-expiry supplies the held-seat-lapses-and-re-evaluates recurrence that lets those windows fire EACH year instead of once. The three demand-side levers were always necessary-but-not-sufficient; term-expiry is the recurrence piece the model was authored to have and never grew. With it, a seasonal on a dedicated segment lapses at term end, re-opens its slot, and the next peak re-seats the dearer offer — the per-year cadence, by construction. But term-expiry alone converges the active and delegated arms (the re-seat fires with no lag on either, because the re-accept lag only governs saturation-sheds, not lapse-freed re-seats) — so the recurrence is present but the gradient is zero. The Lapse-Re-Seat Lag Ruling closes that last gap: extend the same latency to the lapse-freed re-seat, and the recurrence carries a gradient.
The residual STOP, unchanged and re-pointed. If, WITH term-expiry wired, the cadence still cannot reach ≤1 zero-drop-year at +5% mid-competence gradient with all seven roads solvent-throughout — surface to the user. But the expected outcome is that term-expiry closes it: the feel-gradient fork already named drop-to-upgrade the real gradient lever, and re-evaluation-on-lapse is what makes drop-to-upgrade recur rather than fire once. This is not a new hard-blocker to route to the user — it is the completion the mandate asks for, on an authored-but-unbuilt behavior, with the determinism + viability guards the identical M14_G precedent already proved safe.
Which pillar drove the ruling: Pillar 4 (time and information have texture) — a frozen-forever active contract flattens time on the company's own book, the pillar's own red flag, and the design already authored the Term/expire/renew lifecycle that honors it. Pillar 6 confirms it: the reward gradient the felt-loop makes felt requires active contracts be re-evaluable, or the delegate-vs-active drop-to-upgrade distinction has nothing recurring to bite on.
Routing. This designer owns the ruling: active-contract term-expiry/re-seat is IN M14 scope (a latent authored-lifecycle gap, not a new mechanic), the scope fence (term-driven lapse + re-seat only; no mid-term forced re-price, no breach-penalty softening, no amplitude change), and the defect-not-feature verdict on frozen-forever active contracts. game-dev owns the engine change — wiring active-contract expiry at the authored Term end in ContractService (the Lapse zero-penalty-at-term-end verb is its player-facing sibling; passive expiry is the automatic form), the re-seat against the current-day rotated pool, the M14_G-class determinism guard (fixed seed → byte-identical trajectory), the byte-identical michigan_1920s guard (git diff --quiet data/scenarios/michigan_1920s/ exit-0 — no rotation block means expiry re-seats the same book, horizon unchanged), and the through-engine re-measure of cadence (≤1 zero-drop-year) × mid-competence gradient (≥+5%) × the Viability STOP re-run on michigan_contested_1920s. The authored Term/holdTermDays/expiryDays values are scenario JSON (data-in-JSON rule) — game-dev confirms they are authored, not baked. If the §3 Viability STOP trips or the cadence-at-gradient target is still missed with expiry wired, surface to the user. The M14_J close is not reopened as a scope question — it is completed by wiring the authored-but-unbuilt behavior. Save state additivity: an expiry timestamp on the active-contract record is the additive-defaults precedent (no version bump if strictly additive; default cleanly on an old save).
The Lapse-Re-Seat Lag Ruling (2026-07-10) — RESOLVED: fork (a). Lag-governing a lapse-freed re-seat is the SAME competence-legible latency the delegate already suffers on saturation-sheds, extended uniformly; it restores the gradient AND keeps the term-expiry recurrence, and it is Pillar-6-compliant, not a black-box handicap¶
The resolving ruling on the fork term-expiry wiring exposed. game-dev wired active-contract term-expiry exactly to the scope fence above (zero-penalty term-end lapse, re-seat against the current-day rotated pool, determinism-fenced, byte-identical michigan_1920s, all 7 roads solvent, ExpiryDays=150 already authored in JSON) — mechanically correct, closing the Pillar 4 frozen-contract defect. But the measure exposed a deeper truth: term-expiry and drop-to-upgrade churn turn out to be mutually-exclusive gradient mechanisms on this seed. Passive term-expiry frees corridor capacity every 150 days, so a dearer offer that USED to require an active drop-to-upgrade now gets ACCEPTED into the lapse-freed slot through the ordinary accept path — and that re-accept path fires with NO lag on either arm, because the re-accept lag only fires on saturation-SHEDS (it needs a shedDay), NOT on lapse-freed re-seats. Active (lag 0) and delegated (lag 30) therefore converge byte-identical → gradient 0, and zero-drop-YEARS went to 10/10 (worse than 6/10 pre-expiry). The upgrade RECURRENCE is now present every year (16–27 accepts/yr, 0/10 zero-ACCEPT-years) — but it moved from DROP to ACCEPT, and the felt-loop was instrumented on DROPS. This subsection rules the three-way fork (a / b / c) game-dev surfaced. It does NOT reopen the term-expiry scope ruling above — term-expiry stays, correctly wired; what this rules is the single remaining lever that turns its recurrence into a felt gradient.
RULING — fork (a), AUTHORIZED: lag-govern lapse-freed re-seats. A hands-on player re-seats a lapse-freed slot SAME-TICK; a delegated one trails by the SAME reAcceptLagDays it already suffers on saturation-sheds. This is the completion. It is the last lever, and it closes the loop cleanly: term-expiry supplies the recurrence (a held seat lapses every ~150 days and its slot re-opens to a dearer current-day offer — the per-year cadence, by construction, on every corridor), and the lag on the re-seat supplies the gradient (the active player captures the freed-and-dearer offer the tick they see it; the delegate trails by its re-eval latency, ceding the sliver of high-margin days the active player earns). The two mechanisms game-dev found "mutually exclusive" are only mutually exclusive because the lag is not yet extended to the lapse-freed re-accept path — extend it, and they become complementary: recurrence from expiry, gradient from the lag on the recurring re-seat. (b) and (c) are refused below.
1 — Why (a) is the completion and not (b) or (c).
- (b) — re-instrument the felt-loop on ACCEPTS, not drops — REFUSED as a redefinition-to-fit. (b) accepts that on this engine the recurrence reads as re-seat/accept cadence (which IS now present, 0/10 zero-accept-years) and redefines the "loop" to the accept cadence. But an accept cadence that fires byte-identically for the active and delegated arms is not a felt loop — it is a thing that happens to the player's book on a timer, identically whether they touch it or not. The Feel-Gradient Fork already ruled that a flat active-vs-delegated gradient is Pillar-6-acceptable only when the delegate is playing optimally and there is no headroom for any policy to exploit — but here there is headroom (the lag on the re-seat), it is simply not wired to the lapse path. Redefining the target to a cadence that has no active-vs-delegated differentiation, when a one-line extension of an existing lag restores the differentiation, is accepting a plumbing gap as a ceiling — the exact dishonest close the completion mandate forbids. (b) is refused for the same reason the Root-Cause Ruling refused redefinition-to-fit: the blocker is a wiring gap, not a real ceiling.
- (c) — term-expiry as viability/texture only + declare the +5% gradient jointly-unreachable — REFUSED, does not route to the user. (c) is the pre-named STOP, and it routes to the user only if (a) is dead. (a) is not dead — it is a bounded extension of an already-committed, already-shipped lag mechanism to a second trigger path. The Root-Cause Ruling's residual STOP said "if, WITH term-expiry wired, the cadence still cannot reach ≤1 zero-drop-year at +5% mid-competence gradient with all seven roads solvent — surface to the user." That STOP presumed the lag already governed the lapse re-seat; game-dev's measure revealed it does not, which is a new fact that opens a lever, not one that closes the fork to (c). The honest reading is: term-expiry alone converges the arms because the lag has nothing to act on on the lapse path — so wire the lag to the lapse path, then re-measure. (c) is premature; it is only reached if (a), measured, still misses the band.
2 — Lag-governing a LAPSE re-seat is Pillar-6-COMPLIANT, not a black-box handicap. The pillar reasoning. This is the load-bearing design question, and the answer is that the lag is the same competence-legible latency the delegate already suffers, extended to a second trigger uniformly — which makes the delegate more legible, not less. The reasoning:
- The lag is already-committed, already-legible design. The churn-lever pin already rules the active/delegated gap to be "latency + competence, both auditable and hireable-against," and the capacity-aware accept mechanism already implements that latency as
reAcceptLagDayson the saturation-shed re-accept. A delegate reacting to a freed slot on a re-eval cadence, where a hands-on player acts same-tick, is not a new nerf — it is the Pillar 6 competence axis the design has committed since M14_F. The skilled-active reference model already states the active player's ONLY difference from the delegate is "no re-accept lag — they act on freed capacity same-day, where the delegate trails by its re-eval cadence." A lapse-freed slot IS freed capacity; the active player acting on it same-day and the delegate trailing is precisely that already-committed model, applied to the trigger that freed the capacity. - The current state — lag on sheds but NOT on lapses — is the actual inconsistency. A delegate that reacts slower than the player when a saturated corridor sheds a contract, but reacts instantly (same tick as the player) when a contract lapses at term, is behaving inconsistently for no legible reason — that is the black box, not the fix. Why would a competent-but-not-instant manager see a freed slot from a shed with a 30-day delay, but see a freed slot from a lapse with zero delay? There is no trait, competence, or disposition that explains the asymmetry — it is a pure artifact of which code path freed the slot. Fork (a) removes an inexplicable inconsistency: it makes "the delegate reacts slower than you to a freed slot" true uniformly, whatever freed it. A uniform, trait-traceable latency is the Pillar-6 competence axis honored; a latency that mysteriously vanishes on one of two identical trigger types is closer to the black-box the pillar's red flag forbids. So (a) is not just compliant — it is the more Pillar-6-honest state than the status quo.
- Competence and aggression still fan it, unchanged. Per the SHAPE ruling and the churn-lever pin, competence scales how fast/well the delegate re-seats a freed slot (a top head trails little, a mid head trails the authored lag, a poor head misses more), and aggression fans how eagerly. The lapse-re-seat lag rides the same competence-scaled latency — it does not need a new tuning surface, and it must NOT introduce one. It is
reAcceptLagDays(or the identical competence-scaled re-eval cadence) applied to a second trigger, not a new constant. This preserves the drift guard: the lapse re-seat pivots on the same latency the shed re-accept already uses; do not repoint it to a new value to chase the gradient. - The trap-line holds — the delegate stays solvent. The delegate-solvency trap-line is unchanged: the lag on the lapse re-seat costs the delegate a sliver of high-margin days (an income-margin cost), NEVER a solvency trap. A delegate that lags a lapse re-seat still re-seats it — just a few ticks later, into a slightly-less-dear offer — and stays solvent-throughout. The gradient is entirely upside the active player captures, never downside the delegate suffers into insolvency. This is the same asymmetric-bounds logic the whole chain holds.
3 — The felt-loop gate now reads on the LAG-DIFFERENTIATED RE-SEAT, and the cadence is the yearly lapse. Confirm the gate criteria. With (a), the active player's edge comes from re-seating a lapse-freed slot faster than the delegate — which the engine expresses as an ACCEPT of a dearer offer into freed capacity, not necessarily a Release-DROP. So the gate must stop keying on drop-events specifically and key on the gradient however it arises. The gate criteria, restated for game-dev and the harness/PM:
- Cadence — the recurrence metric shifts from zero-DROP-years to zero-differentiated-re-seat-years. The binding cadence metric is years-with-zero-active-vs-delegated-divergence-events — a year in which the active arm captures at least one lapse-freed (or shed-freed) dearer offer the delegate has not yet re-seated. Target: ≤ 1 such year across the 10y horizon (0 the goal). Because term-expiry lapses seats every ~150 days on every corridor, the re-seat opportunity now recurs by construction every year on multiple corridors — so the cadence arm should clear easily; the risk moved from "no recurrence" to "no differentiation," which the lag fixes. (The old zero-DROP-year count is retired as the primary metric — it measured the wrong verb; a lapse-freed re-seat is an accept, and instrumenting only on Release-drops undercounts the loop. Report drop-count as a secondary signal, gate on the differentiated-re-seat cadence.)
- Gradient — active-vs-typical-delegate ≥ +5% of realized active income, however it arises (shed-drops + lapse-re-seats + upgrade-accepts), measured against a mid-competence delegate. The mid-competence gate ruling is UNCHANGED and still binds — the gradient is measured against a competent-but-not-best (at/above
CompetenceThreshold, not theOrderByDescending(...).First()best hire) delegate; the best-head near-parity result is reported as the SHAPE ceiling, not gated. The reward is the gradient; the yearly lapse+re-seat is the cadence; both are now present. The gate asserts the gradient, not the verb by which it arises — this is the confirmation the fork asked for: yes, the felt-loop gate should assert "≥+5%-vs-mid-competence gradient however it arises (shed-drops + lapse-re-seats + upgrade-accepts)" and let the cadence be the yearly lapse+re-seat events. Do NOT hold the gate to a Release-drop specifically. - Viability — the §3 Viability STOP re-runs unchanged as a hard gate. All seven roads solvent-throughout at the shipped config; the delegate-solvency trap-line holds at every competence. Lag-governing the lapse re-seat moves when the delegate re-seats, not how much freight exists — so it must not move the field-wide viability result. If any road tips insolvent, or any pop / M10 / determinism invariant fails — STOP and surface (do NOT raise amplitude, add a throat, or weaken the invariant to force it). Unchanged.
- The residual STOP, re-pointed one last time. If, WITH the lapse-re-seat lag wired, the mid-competence gradient still cannot clear +5% at ≤1 zero-differentiation-year with all seven roads solvent — THEN the shared-engine ceiling binds jointly-unreachable on this seed, and THAT is the honest (A)/(C) fork to surface to the user (a 3rd/4th independent throat, a user scope call). This is the same STOP the chain has carried; (a) is the last design lever before it, and I expect (a) to clear it — the lag on the lapse re-seat is the differentiation the term-expiry recurrence was missing.
4 — The Release-modal net-swap-benefit UI STILL makes sense — but (a) confirms it must serve BOTH the Release-drop AND the accept-into-freed-capacity decision, which the entry-point ruling below already covers. With (a), the player's hands-on move on a lapse-freed re-seat is an accept of a dearer offer into freed capacity, not necessarily a Release/drop — which is exactly the offer-row swap affordance the modal's entry-point ruling already made the PRIMARY entry. The modal fires from the blocked Available-offer row — "this dearer offer is blocked/available; here is what seating it gains vs. costs" — and a lapse-freed slot is one more way that offer becomes seatable (the capacity freed itself, so there may be no drop to pair and no breach penalty to pay — the benefit side stands alone, the cost side is zero or near-zero). The built modal serves this cleanly:
- The four numbers still apply, one goes to zero. Net-swap-benefit /day (headline), the dearer offer's margin (the gain), the freed-capacity/binding-segment before→after (why it seats) — all unchanged. The breach-penalty term is $0 when the capacity was freed by a lapse rather than a player drop (nothing was breached), which the modal simply shows as a zero cost — a cleaner, more-attractive swap, correctly surfaced. When the capacity is freed by a player Release-drop, the penalty term is non-zero as already specced. Same modal, same four numbers, the cost term reads the actual cost of how the capacity was freed.
- The surfaced decision does NOT shift away from the modal — it shifts toward the offer-row entry the modal already prioritizes. The entry-point ruling already ruled the offer-row swap affordance IN as primary and the bare Active-row Release penalty-only. (a) vindicates that ruling: the felt-loop's recurring decision is now predominantly "a dearer offer is seatable (via lapse-freed capacity or a drop) — take it?", which is the offer-row surface, not the Active-row bare release. The modal is built + design-approved and still serves; (a) sharpens which of its two entry contexts carries the felt-loop (the offer-row swap), and confirms the benefit side must render even when the cost side is zero. No modal re-design — a confirmation that the accept-into-freed-capacity case is a first-class client of the same surface. game-dev exposing DropWouldSeatOffer / SwapNetBenefit must therefore also cover the lapse-freed seatability case (offer seatable with no drop required, penalty $0), not only the drop-to-seat case.
Which pillar drove the call: Pillar 6 (the player sets their own depth). The whole fork is about whether hands-on play earns a legible, hireable-against margin over the delegated arm — the Pillar-6 reward gradient. Fork (a) restores that gradient through the competence-legible latency the pillar's own committed design already runs, extended to a second trigger uniformly (which reduces an inexplicable asymmetry — the more-Pillar-6-honest state), and it keeps delegation a viable penalty-free-of-a-trap depth choice (the delegate stays solvent; the lag is income-margin, never a solvency trap). Pillar 4 confirms it: term-expiry (the recurrence half) already un-froze the company's book in time, and the re-seat latency is the same era-textured lag the delegate suffers everywhere — a delegate that reacts to a freed slot on a cadence, not instantly, is time-having-texture on the delegation surface.
Routing. This designer owns the ruling: fork (a) authorized (lag-govern lapse-freed re-seats — active same-tick, delegate trails by the existing reAcceptLagDays / competence-scaled re-eval cadence), the Pillar-6-compliance verdict (uniform competence-legible latency, not a black-box handicap — the more-honest state than the shed-only status quo), the gate re-criteria (gradient however it arises ≥+5% vs mid-competence; cadence = zero-differentiated-re-seat-years ≤1; viability STOP unchanged; retire zero-DROP-year as the primary metric), and the modal confirmation (still serves; the offer-row swap entry carries the felt-loop; the benefit side renders with a $0 cost term on a lapse-freed re-seat). game-dev owns the engine change — extend the existing re-accept lag (reAcceptLagDays / the competence-scaled re-eval cadence) to fire on the lapse-freed re-seat path as it already fires on the saturation-shed re-accept path (active arm lag 0, delegated arm the authored lag), the through-engine re-measure of differentiated-re-seat cadence (≤1 zero-differentiation-year) × mid-competence gradient (≥+5%, however it arises) × the Viability STOP re-run on michigan_contested_1920s, the byte-identical michigan_1920s guard (no rotation block → ChurnEnabled false → the lapse re-seat re-seats the same book at the same price → horizon unchanged, exit-0), and the M14_G-class determinism guard. Do NOT introduce a new tuning constant — the lapse re-seat rides the same reAcceptLagDays / competence-scaled cadence the shed re-accept uses (drift-guard: same latency, two triggers). ui-designer owns rendering the benefit side with a $0 cost term on the lapse-freed / no-drop-required swap; game-dev owns exposing the lapse-freed seatability predicate alongside DropWouldSeatOffer / SwapNetBenefit. If, with the lapse-re-seat lag wired, the mid-competence gradient still misses +5% at ≤1 zero-differentiation-year with all seven roads solvent — surface the (A)/(C) 3rd-throat fork to the user; do not force it. The M14_J close is: phase-interleave × the mid-competence gate × the independent ice throat × active-contract term-expiry × the LAPSE-RE-SEAT LAG — the last supplies the differentiation the term-expiry recurrence was missing.**
The Release-Modal Net-Swap-Benefit Surface, Pinned (2026-07-10) — IN scope: the legible gradient becomes a legible DECISION only when the modal shows what the swap GAINS vs what it costs¶
The paired legibility piece for the Felt-Loop Cadence pin above. The M14_H F-4 Release verb lets the player drop/re-accept, and its confirmation modal today shows only the breach PENALTY — the cost side of the swap, in isolation. This pin rules the missing benefit side into scope and specs what the modal must surface. Brief for ui-designer.
Ruling: IN scope for completing M14's felt loop. The Felt-Loop Cadence pin makes the drop-to-upgrade opportunity recur; without the net-swap-benefit surface, the player sees only the penalty and reads the drop as a cost with no visible payoff — the +7.76% gradient stays "somewhere in the numbers," never "this swap nets you +X/day, do it?" A recurring loop the player cannot read the value of at the decision point is not a felt decision; it is a penalty prompt they will learn to dismiss. The two pins are the paired legibility pieces the M14_J backlog named, and the modal is the half that turns the legible gradient into a legible decision. This is squarely Pillar 6's "delegated outcomes must trace back / the player can see why" applied to the player's own hands-on move — and it is the bond-issuance "clear implications before commit" spirit the Release-verb affordance ruling already invoked, completed. A modal that shows only the penalty violates that spirit: it surfaces the cost of the decision and hides the benefit, which is a legibility defect, not a neutral omission.
What the modal MUST surface when a Release is invoked in a drop-to-upgrade context (the spec brief):
- The net-swap-benefit line — the headline. A single primary figure: net /day gained by the swap = (the dearer offer's realized margin) − (the released contract's realized margin) − (amortized breach penalty + re-acquisition friction). This is the exact quantity the churn engine's net-benefit bar (
churnSwapNetBenefitThreshold) already computes to decide the delegate's own drops — the modal surfaces the same number the engine uses, so the player's hands-on decision reads against the identical bar the delegate reads against (Pillar 6 — the player and the delegate judge by the same visible rule). Sign-and-color it: net-positive is the "do it" case; a net-negative swap must show negative (the modal must not hide a bad swap — Releasing into a swap that does not clear the bar is a real mistake the player is entitled to see before committing). - The freed-capacity indication. State what the drop frees and what it re-seats: the released contract's
volume-per-dayoff the binding segment, and that this frees exactly enough throughput to seat the specific dearer offer (the single-drop-seatable property, made visible). Name the binding segment and show its load-vs-capacity before and after the swap (green/yellow/red per the throughput view grading), so the player sees why the upgrade was blocked and that the single drop unblocks it. If the drop would free capacity but the dearer offer is NOT single-drop-seatable (needs a second drop, or the freed volume overshoots), the modal must say so — do not imply a clean seat that will not happen. - The cost side, kept but no longer alone. The existing breach-penalty figure stays (Release pays the authored exit penalty; Renegotiate shows the leverage-discounted penalty; Lapse shows zero), plus any goodwill hit the breach carries (Pillar 2 texture — the goodwill move is part of the true cost and must be visible, not just the cash penalty). The net-swap-benefit line (1) is computed net of this penalty, but the penalty is itself broken out so the player sees the gross-vs-net.
The numbers, precisely: the modal shows (a) net-swap-benefit /day (headline, signed/colored), (b) the dearer offer's margin and the released contract's margin (the two terms of the swap), (c) the breach penalty (cash) and goodwill delta (the cost terms), (d) the binding segment name + its load/capacity before→after (the freed-capacity indication). All four are quantities the engine already computes for its own churn decision — the modal is a read-out of existing engine state, not a new calculation, and must not compute the benefit differently from the way the churn engine decides (single source of truth; a modal that shows a different number than the engine acts on is the bug).
Bounds — what this is NOT. It is not a softening of the breach penalty (the authored penalty is what makes the drop a real decision; the modal shows the penalty honestly, it does not reduce it). It is not an auto-suggest or a "recommended swap" prompt that pulls the player into micro-thrash — the modal fires only when the player has already invoked Release, and it informs the confirm/cancel, it does not nag or auto-fire (the delegate's drops still run silently through delegation; this surface is the hands-on player's read-out, Pillar 6). It is not a new map action (Pillar 5 — it is a modal on the existing triage-panel Release verb, a menu/data surface). Mouse + controller co-primary, no control hints in the HUD, per house UI policy.
Entry-point ruling (2026-07-10) — the drop-to-upgrade context (1) fires from a Release/swap affordance ON the blocked Available-offer row [ui-designer's rec, ADOPTED]; the bare Active-row Release stays penalty-only. ui-designer surfaced that the shipped Release verb fires from an Active-tab row with no dearer offer paired, while the net-swap-benefit surface requires a paired blocked offer. The two candidate entry points:
- (a) A Release/swap affordance on the BLOCKED Available-offer row — ruled IN. The blocked offer is the natural site of a swap decision: the player is looking at a dearer offer they cannot seat, and the affordance reads "this offer is blocked; releasing X seats it" — the offer is in scope by construction, so the full net-swap-benefit surface (all four numbers) has its paired offer with no guessing. This is Pillar 6 legibility at the exact decision point: the player sees the specific upgrade they'd gain and the specific held contract it costs, side by side. It is also Pillar 5-correct — a menu/data affordance on the triage panel, not a map action.
- (b) The Active-row Release auto-selects the best-fit blocked offer — ruled OUT as the primary entry. Auto-selecting an offer the player did not choose is an auto-suggest / "recommended swap" prompt — the exact thing the modal pin's Bounds paragraph forbids ("not an auto-suggest … that pulls the player into micro-thrash"). It also inverts the decision's legibility: the player invoked release this held contract, and the modal would answer with an offer the engine picked, which is opaque about why that offer. Refused as the swap entry.
- The bare Active-row Release stays penalty-only, unchanged. Releasing a held contract with no offer in scope (context 2) is a legitimate hands-on move — the player wants that capacity free for its own sake, or is taking the goodwill hit deliberately. The modal in that context shows the penalty side only (the shipped M14_H F-4 behavior), with the benefit section omitted because there is no paired offer — correct, not a defect. The net-swap-benefit surface is the offer-row affordance's payload; the Active-row bare release is penalty-only by design.
So the modal has two entry contexts, both authored: (1) offer-row swap → full four-number benefit surface; (2) Active-row bare release → penalty-only. This drove by Pillar 6 (the swap decision is legible only when its paired offer is the thing the player selected) and Pillar 5 (no auto-suggest nag).
Plumbing confirmations (2026-07-10):
- Exposing DelegatedManager.DropWouldSeatOffer (and SwapNetBenefit) is FINE — required, in fact. The modal pin's single-source-of-truth clause demands the modal read the same seatability verdict and net-benefit number the churn engine acts on ("a modal that shows a different number than the engine acts on is the bug"). DropWouldSeatOffer is private static in DelegatedManager today; promoting it (and SwapNetBenefit) to an accessible surface the modal calls is the sanctioned plumbing — it is exposing the engine's own predicate, not re-deriving one, which is exactly what single-source-of-truth requires. game-dev owns the exposure (visibility change + any pure-function extraction); this designer confirms it is correct and required, not a leak.
- The M13 throughput grade tokens are the ones to reuse — but they must be PROMOTED to UiTheme first. The green/yellow/red load-vs-capacity grading is the throughput view's (green ≤50%, yellow 50–80%, red 80–100%, flashing red >100%), and the modal's before→after segment read-out must reuse that exact grading, not invent new bands — a second, differently-thresholded grade ramp for the same load/capacity quantity would be a legibility split the player would have to reconcile. However: the tokens (ThroughputGreen/Yellow/Red/RedSaturated) currently live as private static readonly Color fields in MapView.cs, NOT in UiTheme — which violates the house rule that all UI color reaches through Ui.UiTheme. Ruling: promote the four throughput grade colors to UiTheme tokens (ui-designer's memo already flags adding ThroughputGreen/Yellow/Red there; adopt that, and fold MapView.cs's existing private fields to read from the promoted tokens in the same pass so there is one source). The modal reuses the promoted UiTheme tokens; it does not add a parallel grade ramp and does not introduce raw color literals. (The separate NetPositive "do-it green" for the net-swap headline is a genuinely new semantic — a good-number green distinct from goodwill/owner greens — and is a legitimate new UiTheme token, per ui-designer's memo; reusing GoodwillRespected for it is the honest reuse if a new token is not wanted, but the throughput grade must be the throughput tokens.)
Routing. This designer owns the ruling (in scope; what the modal must surface; the four numbers; the bounds; the entry-point = offer-row swap affordance, Active-row bare-release penalty-only; the plumbing confirmations = expose DropWouldSeatOffer/SwapNetBenefit, reuse+promote the throughput grade tokens). ui-designer owns the spec-to-surface — the modal layout, the net-swap-benefit line's typographic hierarchy (headline figure, signed/colored per UiTheme), the before→after throughput read-out, the offer-row swap affordance's presentation, and the mouse+controller path; this is the M14_H F-4 affordance completed with the benefit side. game-dev owns exposing the engine's already-computed net-swap-benefit / freed-capacity / segment-load state and the DropWouldSeatOffer/SwapNetBenefit predicates to the modal (a read-out of existing churn-engine state — no new economic calculation), and promoting the throughput grade tokens from MapView.cs into UiTheme. playtester confirms the modal makes the swap a decision the player reads and acts on in the F-5 felt-loop close. This lands in M14_J alongside the cadence pin — both are required for the felt-loop close.
The Patience-Beats-Greed Keeper, Pinned (2026-07-10) — the M22 design brief: on a shared re-accept engine, same-tick lapse re-seat is a GREEDY DISADVANTAGE, so raising felt-loop FREQUENCY is a corridor-contest RE-ARCHITECTURE, not another amplitude/phase lever¶
The durable design brief for the successor milestone. M14 closes HONEST: the felt loop's per-year FREQUENCY of the active-vs-delegated churn edge is architecture-bound — the Felt-Loop Cadence pin's phase-interleave lifted the readable gradient (+7.76% at churn-bar 2) and cut zero-drop years but could not make the edge a per-year decision on the shared re-accept engine. Six levers were searched, exhausted, and MEASURED on the M14_J shared-engine seed; this pin records the load-bearing finding so the successor does NOT re-run that search. It is the Feel-Gradient Fork's "GAME-at-scale gradient" intent carried to its next honest ceiling: the gradient is now legible; making it FREQUENT is the successor's job. Successor: M22 — Felt-Loop: Active-Contract Contest Re-Architecture (see Milestones). M21 (Tutorial) is parked and M23 (Modding) is an optional follow-up; the contest re-architecture is a clean top-level, not an M14 backlog row.
The keeper — patience beats greed (load-bearing, non-obvious, measured three ways). On a shared re-accept engine — where the active arm and the delegate reach for freed capacity through the same re-accept path — same-tick lapse re-seat is a GREEDY DISADVANTAGE, not an advantage. The active arm, re-seating the instant a contract lapses, re-saturates its own corridor with whatever offer is available at the lapse tick and thereby starves its own churn engine: the corridor goes back to cap immediately, so no later-arriving dearer offer has capacity to be reached for. The delegate's imposed re-accept lag does the opposite — it keeps capacity free across the gap, so a later-arriving dearer offer can seat during the lag window. The lag hands the edge to the delegate. So the active-vs-delegated edge lives ONLY in the narrow band where an active DROP beats a lagged-delegate DROP under saturation — and every frequency-raising mechanism tried either (i) shares the freed-capacity event with the delegate (both arms see the same lapse on the same engine, washing the gradient out), or (ii) removes the saturation the edge needs (term-expiry and lapse-re-seat both un-saturate the corridor, so drop-to-upgrade has nothing to bite on). This is measured, not asserted: it was read three ways on the M14_J shared-engine seed — the zero-drop-YEAR count, the active-vs-delegated net/day spread, and the per-corridor drop-timing trace — and every one of them confirmed the shared engine puts the greedy same-tick re-seat behind the patient lagged delegate.
The six levers are EXHAUSTED — do NOT re-run the search. All six were tried and measured on the M14_J shared-engine seed and none produced a per-year edge on that architecture:
- Amplitude — raise the seasonal crossover's magnitude. FORBIDDEN going forward: the ridge INVERTS past its peak — past the amplitude that maximizes the gradient, a larger swing makes the edge worse, not better (the Feel-Gradient Fork's "flat-but-optimal past its peak" logic, confirmed on the contested seed). M22 must not reach for amplitude.
- Phase-interleave — stagger the three corridors' crossover windows so a throat re-opens somewhere every year (the Felt-Loop Cadence pin). Lifted the gradient and cut zero-drop years, but did not make the edge per-year on the shared engine — it is the honest ceiling M14 ships at, not the frequency fix.
- Gate (the churn-bar / net-swap-benefit threshold) — loosen or tighten the bar the swap must clear. Moves how many swaps fire, not when a dearer offer arrives; cannot create a later-arriving offer the corridor has room for.
- Throat (a fourth corridor) — refused already as unauthored work courting the viability-STOP insolvency axis for a coverage problem, and it does not touch the shared-engine root cause.
- Term-expiry — let held contracts expire to free capacity on a schedule. Removes the saturation the edge needs (an un-saturated corridor has nothing to drop-to-upgrade for) — the (ii) failure mode.
- Lapse-lag — vary the re-accept lag length. This is the delegate's advantage, not the active arm's; tuning it moves the delegate's floor, not the active edge — the shared-engine (i) failure mode.
The M22 design requirement — start HERE, do not re-derive it. The successor must re-architect the corridor contest so a LAPSE surfaces a genuinely-dearer re-offer AT the lapse tick — so that same-tick capture is a real advantage, not a greedy one. The whole finding is that on the shared engine the freed-capacity event is the same event for both arms, and whatever offer exists at the lapse tick is no dearer than what was already held; so the active arm's speed only re-saturates. The re-architecture's job is to break that: at the moment capacity frees, a genuinely dearer offer must be present to capture — meaning the offer that becomes seatable at the lapse tick is one the delegate's lagged re-accept would still be too slow to take, and the active arm's same-tick capture wins the dearer margin the patient delegate misses. That inverts patience-beats-greed into greed-beats-patience only for a genuinely-better offer — which is the felt loop the design wants: the hands-on player is rewarded for watching the corridor and pouncing on a real upgrade, and the delegate legibly leaves that specific upgrade on the table (Pillar 6 — a legible, competence-bounded delegate cost, not a black box; and the Feel-Gradient Fork's "active clearly beats delegated" gradient made FREQUENT). Explicitly out of bounds for M22: re-running the six-lever amplitude / phase-interleave / gate / throat / term-expiry / lapse-lag search (all six exhausted and measured on the M14_J shared-engine seed), and any amplitude increase (the ridge inverts past its peak). The lever set is closed; the contest architecture is the open problem.
Why this is a top-level milestone, not an M14 row. The six-lever search proved the FREQUENCY ceiling is a property of the shared re-accept engine, not a tuning value M14 can dial in — the same conclusion the Churn Lever pin and Feel-Gradient Fork reached for magnitude, now reached for frequency. Re-architecting the corridor contest so the lapse tick surfaces a dearer capturable offer is engine work of milestone size (a new re-accept/re-offer path, its own viability-STOP re-run against the canonical seed, its own gradient proof), and M14 has ruled its own scope closed at the legible-but-infrequent ceiling. M14 ships honest; M22 owns making the edge frequent, and inherits this pin as its READY brief so it opens from the finding, not from the search.
Routing. This designer owns the brief (the patience-beats-greed keeper, the closed six-lever set, the amplitude-forbidden constraint, and the M22 design requirement — a lapse must surface a genuinely-dearer re-offer at the lapse tick). The successor milestone's engine work — the new corridor-contest / re-accept-re-offer path, its viability-STOP re-run, its gradient proof — is game-dev's lane, opened by this brief; playtester owns the frequency proof (the zero-drop-YEAR count going to a per-year edge). No data/*, code, or test change lands under this pin — it is the recorded design intent the successor consumes. The M22 row + name belong to the milestone owner in Milestones; this pin supplies the name string and the one-line brief.
Maintenance as a Lever¶
The player can adjust maintenance funding per region:
- Default funded — the maintenance regime runs, the cost is paid, no penalty accrues.
- Suspended or underfunded — cash is saved in that region, but stacking debuffs begin accumulating against the company's operations and infrastructure there. The longer the lever stays off, the worse the debuffs get.
- Reinstated — the debuffs stop growing, then gradually self-heal over time as the maintenance regime catches up.
This lever shape is deliberately simple: cut the cost in a region and bleed; restore the cost and recover. Different regions can be funded or starved independently — sustaining maintenance on the prestige urban region while neglecting it on a money-losing rural branch is a defensible play, with the trade-offs visible on the operating ledger.
Like other operational layers, the maintenance regime is delegable (see ProjectManagement — Delegation): a hands-off player sets a policy or lets the company's head decide per region, while a hands-on player works the lever themselves. This is one of the surfaces the minutiae dial governs.
Suspension Effects¶
Neglected maintenance in a region produces stacking debuffs that surface across the company's operations there. The flavor of the debuff depends on what the region's infrastructure looks like:
- Track and structures degrade — corridor throughput drops within the region (the segment's effective capacity is reduced; see Throughput and Saturation below); derailment and bridge-failure incidents become more likely, and each incident triggers a severity-tiered capacity-zero recovery window on the affected segment per the recovery-override mechanic.
- Locomotives and rolling stock based in the region break down more often, eroding fleet capacity (which feeds into contract triage).
- Safety inspections lapse, raising the probability of major incident events.
- Customer service and claims handling drift, making minor service failures stick to goodwill instead of being smoothed over.
- Labor relations sour, accelerating local strike risk (especially when paired with low Labor goodwill in the region).
- Local government and regulatory exposure rises — unpaid licenses and fees produce hostile audits, license revocations, and regulatory hearings that surface as Channel-1 events.
Each of these stacks on a quadratic curve while maintenance is off — modest at first, then accelerating sharply if the neglect persists. Self-heal on reinstatement is also quadratic — slow to start, ramping up as the maintenance regime catches up. (Quadratic is the default shape for time-based curves in the design unless linear is more natural for the specific mechanic.)
Throughput and Saturation¶
Each rail segment between adjacent regions has a finite throughput capacity derived from its tier composition (see Per-Segment Composition). Effectively, the network has a per-corridor speed limit measured in cargo-units-per-day rather than miles-per-hour.
Load. Each operational contract attributes its volume-per-day to every segment on its route. Daily, the engine sums the load across all contracts on each segment and compares it to that segment's effective capacity.
Effective capacity factors. Three things shape the capacity a segment actually delivers:
- Tier composition — the integer counts of Branch / Standard / Trunk lines on the segment (
25 + 100 + 400units/day per tier at default Michigan tunables). - Signaling tech license applied — if a line carries an applied signaling license, the segment's capacity is multiplied by that license's factor (Block Signaling +25%, CTC +50%, Cab Signals +75%; highest active license wins, no compounding). See Procurement — Signaling Tech Licenses.
- Maintenance state — under-maintained corridors lose effective capacity. Capacity multiplier as a function of regional maintenance:
m ≥ 50%: multiplier = 1.0 — a deadband where small deferrals don't bite.m < 50%: multiplier =0.25 + 0.75 × (m / 0.5)²— quadratic falloff.m = 0%: multiplier = 0.25 — floor; the track still physically works, badly.
A segment spans two settlements (and the counties its route crosses); its effective maintenance is the min across those — the segment is only as good as its worst-maintained stretch. Neglect anywhere along the corridor degrades the whole thing. This makes the maintenance lever bite harder than the per-region debuffs alone: capacity loss compounds on top of the derailment, labor-strike, and regulatory debuffs already described in Suspension Effects. A player who skimps on Trunk maintenance to save cash will find the corridor falling behind contracted volume long before the derailment events fire.
Saturation. A segment's load can exceed its capacity. When that happens, contracts traversing the segment enter starvation per the standard mechanic (see Business Dealings — Two Starvation Triggers). Resolving saturation requires capacity expansion (parallel line build, line upgrade, signaling license) or load reduction (re-routing, breaching contracts, declining new business).
Visibility. The throughput view color-grades every segment by load / capacity: green ≤ 50%, yellow 50–80%, red 80–100%, flashing red over 100% — available as a sortable table on the Network screen and as a map mode in the map view. A maturing network develops yellow corridors before red ones, giving the player advance warning to invest in capacity before contracts begin to starve.
Incident recovery overrides. When a derailment, washout, or bridge failure hits a segment, an active recovery state overrides the normal multiplier math for the duration of clearing and recovery — even a well-maintained, empty segment delivers zero capacity while a derailed train and a damaged bridge sit on it. Severity-tiered defaults: Minor (3 days zero + 4 days linear recovery; single-car rerailing), Major (7 + 7; multi-car incident), Catastrophic (14 + 14; bridge failure or washout). Durations are scenario-tunable.
The capacity hook (SegmentRecoveryService.RecordIncident(segmentId, severity, currentDay)) lives in M13's SegmentCapacityService and is wired today — the missing piece is the event-side trigger. Authoring derailment events with a Severity payload + the trigger_segment_recovery effect kind in EventService.ApplyEffects is deferred to a content pass; until that lands, the recovery override fires only via direct service calls (e.g. from the playtest harness).
Station over-convergence. Stations don't have their own throughput math — line capacity continues to do all the load-vs-capacity work. But when too many high-tier lines converge on an under-tier station, the dual-ladder mismatch surfaces as a soft warning: sum-of-connecting-line-capacity > 2 × station tier baseline fires the "station under-capacity" flag on the station's profile page and colors the station marker in the throughput view. See MapAndRegions — Failure Modes.
Interaction with Other Systems¶
- Construction. Each completed construction project adds a maintenance increment to its region; that increment is shown up front on the project sheet before activation. Operations is the long-tail consequence of every project the company has ever finished.
- Goodwill. Sustained neglect produces accidents, service failures, labor incidents, and regulatory events — each of which fires Channel 1 events that move goodwill. Maintenance is therefore a soft-but-pervasive goodwill control lever, not just an operational one.
- Business Dealings. Maintenance is a recurring operating cost in the company's books, weighed against revenue. During cash crunches, suspending maintenance in selected regions is one of the levers the player has to ride out the squeeze — but it costs in stacking debuffs, and may force later contract triage if equipment availability collapses or licenses are revoked.
Maintenance levers are not "projects" in the construction sense — there is no project sheet, no projected/actual variance, no completion date — but they are tracked alongside projects as the operational backdrop that keeps the network alive.
Open Questions¶
Operations design is currently in a coherent state. Specific tunable values — quadratic curve coefficients, per-asset fleet maintenance contributions, project-increment magnitudes per project type — are scenario-tunable and will need playtesting.