Two same-day integrations reconciled: their SPRINT15 (post ruling, editor iterative, honest edges) stands and runs first because it re-measures the numbers TEETH pins; the TEETH plan moves to SPRINT16 with a fires-after-15 banner, its D gate rewired to the landed swing lawn. ROADMAP arc 0 records the fork. THREADS keeps both sides chronologically. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
169 lines
10 KiB
Markdown
169 lines
10 KiB
Markdown
# SPRINT 16 — TEETH: YOUR WORK FOLLOWS YOU
|
||
|
||
*⚠️ PRE-SPECED, FIRES AFTER SPRINT 15 INTEGRATES. Sprint 15 (the post ruling,
|
||
the iterative editor, the honest edges) re-measures numbers this sprint pins —
|
||
do not start these gates on a pre-15 tree, and treat every number below that
|
||
S15's gate-1 re-measure moves as "re-measure first". Written 2026-07-18 at
|
||
John's direction (ROADMAP.md — gate 4 of S14 resolved: all three branches,
|
||
sequenced, teeth first).*
|
||
|
||
*The week grows consequences — reputation on the letterhead, warranty on the
|
||
job sheet, a sixth night, the swing lawn in the rotation, and the first night
|
||
where the default fabric is the wrong answer. Baseline selftest: whatever
|
||
Sprint 15 lands (409/0/0 pre-15 plus S15's additions). Keep it green;
|
||
mutation-check anything you'd call coverage.*
|
||
|
||
**The one-variable rule is LAW this sprint (ROADMAP principle 5):** six nights,
|
||
exactly one flies the new storm, exactly one is the new site, and they are NOT
|
||
the same night. A player who loses night 6 must be able to say whether the yard
|
||
beat them or the weather did.
|
||
|
||
## Gate 1 — THE LEDGER (A owns: week.js, hud.js surfaces, main.js wiring)
|
||
|
||
Reputation and warranty, hung off the paperwork that already exists. No new
|
||
phase, no new sim — this is week-state plus three surfaces telling the truth.
|
||
|
||
1. **The work history.** Every committed rig is recorded on the week: corners,
|
||
hardware, effective ratings, what broke, what was repaired by dawn. This is
|
||
data the night already computes — the ledger just keeps it.
|
||
2. **Warranty.** A corner of YOURS that broke and was still broken at dawn books
|
||
a warranty item: the NEXT morning's job sheet carries it as a line —
|
||
"warranty — q3, shackle, no charge to the client" — and its cost (the
|
||
hardware's shop price, unpaid labour is the point) comes off that night's
|
||
fee AT QUOTE TIME. week.js's own invariant is non-negotiable: the sheet and
|
||
the invoice never diverge — the quote already carries the deduction, so
|
||
settle pays exactly what was quoted. A repair you made mid-storm is NOT a
|
||
warranty item; riding it out broken is.
|
||
3. **Reputation.** One number on the letterhead (pick the unit — stars read as
|
||
client-speak; whatever it is, it appears under the ABN on job sheet AND
|
||
invoice, E's letterhead contract). Clean night (no breaks, no collateral):
|
||
up. Warranty item: down. Collateral event: down harder. It MOVES PAY at
|
||
quote time — a trusted outfit's callout fee multiplier, printed on the
|
||
sheet, so the player watches their number become money. Start neutral;
|
||
night 5's beyond-saving garden must NOT cost rep (the flag exists — read it;
|
||
a designed loss the ledger punishes is the verdict lying again).
|
||
4. **Aftermath teaches it.** The invoice's verdict line and the end-of-week
|
||
card both speak rep: a week that ends broke-but-clean and a week that ends
|
||
rich-with-warranties are different endings and should read as such.
|
||
5. Tests, a.test: warranty fires only on unrepaired breaks (repaired = no
|
||
item); quote==settle holds with a warranty line on the sheet; rep never
|
||
moves on gardenBeyondSaving nights for garden reasons; the multiplier is on
|
||
the sheet the night it applies. Negative control: a clean week books zero
|
||
warranty items and ends rep-positive.
|
||
|
||
## Gate 2 — THE HEAL + THE PAPER TRAIL + THE PIN (B owns)
|
||
|
||
1. **Divergence heal.** The review landed the break (a NaN corner now lets go,
|
||
reason:'divergence', production path) — but the freed node then integrates
|
||
from NaN forces and the cloth renders ugly after one. Sanitize on the break:
|
||
any non-finite node position resets from its nearest finite neighbour (or
|
||
the corner's anchor), prev matched so verlet doesn't invent velocity, and
|
||
non-finite water zeroed (a NaN pond re-poisons the heal through the weight
|
||
term). Assert: poison → break → every node finite within 1 s of sim.
|
||
Mutation: heal off, assert red. The existing divergence test must keep
|
||
passing untouched — the heal is IN ADDITION to the break, not instead.
|
||
2. **Fabric on the paperwork.** The chosen fabric prints in the prep summary,
|
||
on the invoice, and in the aftermath verdict when it mattered (a membrane
|
||
night survived in cloth should say what the leak cost). The FORECAST half is
|
||
C's (gate 3.3) — yours is that the choice the player made is on the record.
|
||
3. **Pin site_02's separation — AFTER S15's re-measure.** The SCORE IT card
|
||
says NONE PINNED and calls it out. Once the post ruling has settled the
|
||
numbers, run gardenfly, pick the honest target, pin the block in site_02's
|
||
JSON, assert it like backyard_01's. If the honest answer is "this yard
|
||
cannot separate held from bare at $80", that is a FINDING about the yard —
|
||
post it in THREADS; the balance fight starts there, not at a fudged pin.
|
||
Same pass, same rule for `site_03_swing_lawn` if S15 left it unpinned.
|
||
|
||
## Gate 3 — THE MEMBRANE NIGHT + THE SEEDED STORM (C owns)
|
||
|
||
1. **storm_06 — the pea-hail soaker.** Small stones (under the 2 mm-weave
|
||
ruling's blocking threshold), heavy rain, mild wind. The night the bet
|
||
flips: cloth leaks fine hail onto the bed all night; membrane stops
|
||
everything and the mild wind means its doubled load is affordable — but it
|
||
PONDS, so the broom matters. Author it so both lines exist and the membrane
|
||
line is genuinely better: measure with gardenfly/site_audit (funnel state in
|
||
the header, per the discipline; post-ruling numbers only), pin
|
||
membrane-vs-cloth garden separation in the storm's own selftest, and make
|
||
sure a $80 wallet affords the membrane line on the night's site. If the
|
||
measured numbers say cloth still wins, retune the hail spectrum until the
|
||
bet is real — the storm exists to make the F key matter, and a decoration
|
||
night is worse than no night.
|
||
2. **makeStorm(seed) — groundwork, not a shipped night.** A seeded generator
|
||
inside authored envelopes (base curve, gust budget, direction change window,
|
||
rain/hail ranges as data), producing storm defs that pass the schema
|
||
validator and the storm_envelope harness. Deterministic from seed —
|
||
ROADMAP arc 4's roguelite eats this. Selftest: same seed → byte-equal def;
|
||
100 seeds → all schema-valid, all inside the envelope; a seed that violates
|
||
the envelope is a red test, not a shrug.
|
||
3. **The forecast argues the bet.** Hail stone size and rain rate join wind on
|
||
the job sheet's forecast block (the data is in the storm JSON; A prints
|
||
what you expose). The band-not-a-promise rule holds — forecast bands, real
|
||
values inside them.
|
||
|
||
## Gate 4 — THE SIX-NIGHT WEEK (D owns)
|
||
|
||
1. **The swing lawn enters the rotation.** Your site_03_swing_lawn landed in
|
||
S14 — authored cold, scored, played, inert. Re-score it on the post-ruling
|
||
tree with S15's faster loop (the numbers that made it winnable-but-mean may
|
||
have moved), fix what moved, then wire it into NIGHTS. If S15's edges work
|
||
added a separation field or B pinned one for it, carry it; otherwise gate
|
||
2.3 covers it.
|
||
2. **The week becomes six nights.** Wire the swing lawn and storm_06 into
|
||
NIGHTS under the one-variable rule: the new site debuts on a storm the
|
||
player has already survived; storm_06 flies over a yard they already know.
|
||
You own the order and the two new briefs (client flavour is data — the
|
||
corner block got a name and a reason; the swing set's kid deserves one
|
||
too). Night 5's beyond-saving flag and going-broke-never-on-the-final-night
|
||
must both survive re-ordering — the a.test week asserts will tell you.
|
||
3. **Cold-play the whole six**, wallet from night 1, and file the verdict:
|
||
does a warranty callout read as FAIR when it lands on your sheet? Does rep
|
||
moving pay feel earned or arbitrary? Is night 6's bet legible from the
|
||
forecast alone? Your play IS the acceptance test for gates 1–3.
|
||
4. Pool (yours): the phantom-sail seam if S15 didn't close it.
|
||
|
||
## Gate 5 — THE NEXT TEMPTATIONS (E owns)
|
||
|
||
Arc 2 needs yards this palette cannot dress yet. Two of these three, factory-
|
||
built, byte-stable, negative-control-proven (build the wrong one on purpose,
|
||
watch red) — and every anchor-bearing node passes the S15 gate-1 mechanism
|
||
(a baked hint that cannot reach a JSON-declared anchor is the bug class that
|
||
cost the posts their truth):
|
||
1. **The glasshouse** — the collateral apex. Priced high, wreck variant,
|
||
collateral_key wired so a SECOND one placed in the editor still bills (the
|
||
carport's five-sprint lesson). Panes that read as fragile at a glance;
|
||
nothing about it may adopt as an anchor.
|
||
2. **The pool kit** — pool + compliant fence ring. The fence posts are the
|
||
temptation: honest `tie_off:false` on every one (silence is not neutral —
|
||
adoptAnchor's `?? 1` makes an unrated node the best steel in the game),
|
||
because the pool yard's whole puzzle is that the legal tie-offs are all in
|
||
the wrong places.
|
||
3. **The trampoline + tie-down kit** — typed honestly in the checked enum;
|
||
the tie-down is the prep-phase counter to the storm's opening projectile,
|
||
priced like it matters.
|
||
Flag D in THREADS as each lands.
|
||
|
||
## Gate 6 — JOHN: PLAY, THEN AIM ARC 2
|
||
|
||
Six nights at partly.party/hardyards (deploy after integration — ROADMAP: the
|
||
live gap never exceeds one sprint). Three sentences in THREADS. Then one
|
||
ruling for arc 2's first sprint: **emergency mid-storm callout or the cowboy
|
||
audit** — which job type leads THE BOOK OF CLIENTS?
|
||
|
||
Pool, spread by ownership: whatever S15's pool leaves standing, plus:
|
||
membrane pricing the day rain's drain weight moves (B, rigging.js's comment
|
||
names the start); the >83 ms determinism bound gets a pinning test or a
|
||
documented waiver (B).
|
||
|
||
```
|
||
gate 1: ledger — warranty on the sheet, rep on the letterhead, quote==settle
|
||
holds, a designed loss costs nothing
|
||
gate 2: divergence heal (finite in 1s, mutation-proof); fabric on the record;
|
||
separations pinned post-ruling or honestly refused
|
||
gate 3: storm_06 makes membrane the right answer, measured not asserted;
|
||
makeStorm(seed) deterministic inside envelopes; forecast argues the bet
|
||
gate 4: swing lawn re-scored and wired; six nights, one-variable rule;
|
||
the whole week cold-played and judged
|
||
gate 5: two temptation assets, honest extras, negative controls, S15-clean
|
||
gate 6: John's three sentences + the arc-2 job-type ruling
|
||
```
|