HardYards/SPRINT12.md

5.6 KiB
Raw Permalink Blame History

SPRINT 12 — THE STEEL TELLS THE TRUTH, AND THE PAPERWORK LOOKS THE PART

Sprint 11 delivered everything it named: the venturi reconciled (twice — both directions of the same lesson), the enum checked, the carport priced and billing, the job sheet quoting before you spend, the invoice with C's resolving forecast on it, and — the door in front of all of it — B's setWorld, so night 3 is playable by mouse. 315/0/0, verified live at integration. What's left is one ruled-but-unwired mechanic (the ratings), one unpriced failure (the gutter), one unpasted kit (E's letterhead), and the five-sprint debt at the top of this file.

Read THREADS from the last [I] entry.

Gate 1 — JOHN PLAYS THE WEEK (fifth sprint standing — the excuse is gone)

The week is reachable end to end for the first time. cp .claude/launch.example.json .claude/launch.json, python3 server.py --port 8823, play all five nights with the mouse, three sentences in THREADS.

  • Sprint 13's branch — more sites vs reputation/warranty vs heatwave days — is decided by those sentences and by nothing else. Everyone else's gate-2 work below is deliberately branch-independent.
  • Watch the bank. A competent clean week now banks $485 (§BROKE_BELOW). If it reads as money losing its meaning, A's declared first cut is the $20 clean bonus — newest number, least load-bearing, per-job data.

Gate 2 — WIRE THE RATINGS (B owns; A's ruling is in THREADS, sprint 11)

The trap is priced but not weak: sail.js fails a corner on c.hw.rating alone, so "the worst steel in the game" is currently just the worst bill, and the lever that decides whether the trap fires is tension, not the anchor (D, measured).

  1. B: land the shape load > c.hw.rating * (anchor.ratingHint ?? 1). world.js now guarantees the field (DEFAULT_RATING_HINT = 1); the ?? 1 is belt-and-braces. Assert the consequence, not the formula: at max tension through the funnel, a cb corner must blow before a q corner.
  2. B: re-audit BOTH yards the moment it lands. E's baked hints (beam 0.22, post 0.30, fascia 0.35, tree 1.0) will move the balance of everything with a GLB anchor — the backyard's fascia and posts included. Post the winnable lines per night like the sprint-11 table. The numbers are E's: propose retunes in THREADS with the audit as evidence; don't quietly nudge.
  3. D: replay both yards after the wiring. Your measured fork (tension 1.0 → q3 blows, carport free; 1.4 → cb1 blows, $205) should now bite at default tension. The ladder trip should fire by itself (your #6). And your #7: B fixes the weak-link tie-break (rigging.js reduces with strict < — flag the lowest rating × hint, not the first click).
  4. C: second harness on the envelope. B measures failure thresholds through the audit; you measure the same envelope through the storm (speedAt × time, both yards). Two harnesses, one number — the repo rule. If they disagree, find the variable before anyone retunes.

Gate 3 — THE PAPERWORK AND THE GUTTER (A + E; the invoice earns its ABN)

  1. A: paste E's kittools/jobsheet/index.html, between the CUT markers, purely additive by construction. Keep .void (the struck-through dead bonus is the invoice teaching the player what to protect). Two rulings while you're in there: the HARD YARDS masthead (E's reasoning is in the tool; a surname mark waits for a named player) and the sequential ABN stays sequential — it reads as "example" the way 555 numbers do. Don't fix it into a real business's tax identity.
  2. A: wire the bike — site-JSON key + loader line, the gnome pattern. Read E's lean note first: it leans Z in three.js, toward the fence; bars ~0.10 m off the palings. Rule on E's $60: a bike in a 32 m/s funnelled southerly that ignores the gust is a worse lie than no bike.
  3. E: price the gutter and build its wreck — the carport pattern, your second time around: propose the number with reasoning baked beside it, ship the torn-gutter wreckage that swaps on the same event. With fascia 0.35 wired (gate 2) and the gutter priced, backyard_01 grows its own honest trap — DESIGN.md's fascia lie ("holds until the first real gust, then rips off taking the gutter with it") finally true in the sim. A rules the number; collateralFor('gutter') stops returning null.
  4. C: the change announces itself. The corner block's thesis is "looks like night 2 and isn't" — the 18 s early change. Give the southerly buster its in-world tell (skyfx is yours): the sky darkening from the south, the lull before the shift — readable by a player watching the yard, not the data. Deterministic off (dt, t) like everything else. D judges whether it telegraphs without spoiling.

Gate 4 — SPRINT 13'S BRANCH (integrator + John, end of sprint)

Named early so nobody half-builds it: reputation/warranty (DESIGN.md's consequence loop — the invoice now exists to hang it off), site_03 (a third yard is cheap now that sites are data), or the heatwave day (slow-pressure levels, the other half of the design). Decided on John's sentences, not before. Do not start any of the three this sprint.

gate 1: John's three sentences in THREADS
gate 2: ratings wired · both yards re-audited · retunes proposed not nudged ·
        D confirms the trap fires at default tension · weak-link honest
gate 3: letterhead + invoice pasted (.void survives) · HARD YARDS ruled ·
        bike wired and ruled · gutter priced, wrecked, and billing
gate 4: Sprint 13 branch chosen, in writing, in THREADS