94 lines
5.6 KiB
Markdown
94 lines
5.6 KiB
Markdown
# 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 kit** — `tools/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
|
||
```
|