# SPRINT 7 — ONE TRUTH, THEN THE WEEK (instructions for Opus 4.8 lanes)

*Sprint 6 verdict: gate 1's investigation was the lanes at their best — B found
the 7.4 kN corner no money could hold, C independently corroborated it and
declined to spend their own lever, A fixed it with one measured anchor and made
the verdicts stop lying. But the sprint ends with the wild night's winnability
CLAIMED by one harness and DENIED by another on the same quad and loadout —
the third two-harness discrepancy in this repo — and the week (gate 2) never
started. Sprint 7 closes the dispute first, then ships the campaign.*

Read THREADS from the last [I] entry.

## Gate 0 — ONE TRUTH (A + B, first, nothing else lands before it)

`balance.test.js` is the single source of truth from now on. A and B sit on it
together until A's win (t2,p3,p4,t2b · 4×shackle + spare · $75 → hp 58, 1 lost)
either reproduces there or is refuted with the cause named. Check in this
order: **tension** (the shop defaults 0.9 — what did A rig at? A's line may
simply want 0.85), **repair timing** (fly()'s scripted repair vs A's hand
repair — when and which corner), **drain wiring** (does fly() run the same
sky→garden path main.js runs, including my HAIL_WEIGHT wiring). When it's
settled: delete the integrator skip, post the cause in THREADS the way B
post-mortemed decision 11 — this repo learns from named mistakes.
If the line genuinely doesn't win: the next levers in SPRINT6's order are
still unspent (C holds 0.40 downdraft proven safe; win bar last).

## Gate 1 — THE WEEK (A owns; carried whole from Sprint 6)

Unchanged spec: five nights (01, 03, 03-variant, 02, 02b_icenight — C already
shipped the ice night), money persists (pay = base by severity + garden bonus
+ intact-hardware refund − collateral), broke = game over, survive = win
screen. E's end cards are on disk (diptych, left third reserved for your
text). "Play again" becomes "next night". One file if you can.

## Lane assignments

**A** — gate 0 partner; then the week; take E's window_glow + moon into the
night storms (one visible(true) + a sprite — E shipped them Sprint 6); the
grass/screenshot-POST decisions are STILL carried from Sprint 6 — close them
this sprint or write "won't do" in THREADS, either beats carrying.
**B** — gate 0 partner; then fabric choice per C's ruling: porous vs membrane
priced honestly (C's option 1) + stone-size hail pass-through (C's option 3 —
say the word and C lands hailBlockFor); post the fabric economics in THREADS
before coding the UI so A can slot it into prep.
**C** — land `hailBlockFor(size, porosity)` when B asks; forecast uncertainty
(carried from Sprint 6 — seeded ± bands that resolve as the night approaches);
support gate 0 if the drain-wiring path turns out to be the culprit.
**D** — the moment gate 0 closes: the feel pass on the final balanced storms
(you've queued it two sprints — it's the last read before John plays); douse
re-measure if gate 0 moved pond masses (your guard assert will tell you).
**E** — win/game-over card text pass with A once the week exists (the diptych
needs its words); one pass of "week" dressing if cheap (night counter on the
forecast card is A's, but a dawn tint for the morning-after aftermath is
yours). Otherwise a light sprint — you've earned it.

## Gates

```
gate 0: balance.test green with NO skip — A's win reproduced or refuted,
        cause named in THREADS
gate 1: the week runs end to end — five nights, money carries, broke = game
        over, survive = win screen — played, screenshotted
gate 2: John plays the week; his three sentences land in THREADS
```

After this sprint the game loop is closed at every scale — night, week,
wallet — and Sprint 8 opens DESIGN.md's real book: sites, clients, job types,
the landscaper service.
