# SPRINT 4 — FACE & WATER (instructions for Opus 4.8 lanes)

*Sprint 3 verdict: gate 3 is met — Lane D closed the §7 loop by hand, on record,
with a natural break and a mid-storm repair, and the decision-2 yard makes rig
size a real choice (small quads ride at hundreds of newtons; full coverage costs
a >45 m² risk, and there's an assert keeping it that way). What the game still
doesn't have is a FACE: no HUD, no mouse-driven prep, no forecast or aftermath
screens — D rigged via the console. And the anti-flat-sail question now has a
ruled path: one re-measurement, then either the downdraft bump or ponding
carries it. Sprint 4 gives the game its face and its water.*

Read THREADS.md from the last [I] entry — it contains the dispute ruling and
decision 10. New decisions:

10. **Ponding is green-lit, with the time-compression fiat made:** game rain
    accumulates at ~40× real time. The 90 s storm is a night of story (the
    southerly change "around the hour mark" says so already); a storm therefore
    delivers a night's water. Lane B owns cloth-side water mass, Lane C owns
    rain intensity data. B's own numbers: 5 cm on a flat 25 m² sail = 3.1 kN/
    corner, and a hypar can't pool — it cannot pincer §7.
11. **The 60% bar gets ONE re-measurement on real anchors, then we commit.**
    B re-points §7 to an 18–45 m² quad from the dressed yard, sweeps at ≤0.45
    fraction-of-total. Pass → bump storm_02 `downdraftOfTotal` 0.12→0.45, both
    physics gates close. Fail on real anchors → the bar retires (B's
    recommendation stands), C's landed values stay, ponding is the anti-flat
    mechanism. Either outcome is a win; no third sprint on this.
12. **Ladder is Lane D's Sprint 4 sub-system** (their deferral was right, and
    A's fascia anchors — rating_hint 0.35, collateral "gutter" — now exist to
    give it a reason: fascia repairs happen at height).

## Lane A — the face (critical path, carried from Sprint 3)

Everything else this sprint is worthless to a stranger until this lands:
1. **hud.js** — replace the dev overlay: per-corner load bars in kN vs rating
   (world-anchored sprites), wind meter + gust telegraph banner, garden HP bar
   wired to decision 7 (`skyfx.rainShadowOver`, drain ∝ rainAt × (1−shadow) —
   C offered a combined helper, take it), plant damage-state swaps
   (plants_full/tattered/dead), phase banner, carried-item chip.
2. **Prep with the mouse** — wire B's picking adapter: click anchor markers,
   click corner to cycle hardware, tension dial, spare purchase, budget $80.
   Take B's preview-rig offer for live force arrows (DESIGN.md's teaching tool).
3. **Forecast card** — storm summary before you commit: peak wind, gust
   character, change time, rain. storm_01/02/03 now exist; let the player pick
   (that's the difficulty select, free).
4. **Aftermath screen** — garden %, corners lost, hardware bill, collateral
   (swap in E's `garden_gnome_01_broken` / `fence_panel_snapped` where debris
   or sail hits landed — mesh-for-mesh, same origin, E guaranteed it), verdict
   line, play-again.
5. Retitle the page (still says M0). Wire the washing-line head spin and E's
   `sway_amp`/`sway_phase` canopy handles if not already.

## Lane B — water & the last measurement

1. **Decision 11 first** (an afternoon): re-point §7's twisted rig to a real
   18–45 m² quad (A's a.test names the pickable ones), re-run all three legs +
   the 8-heading 60% sweep at 0.45 and 0.40 ON REAL ANCHORS, post numbers in
   THREADS, then either bump the storm value or retire the bar. Done forever.
2. **Ponding v1** (decision 10, you prototyped it): rainAt × 40× accumulation
   × per-node flatness → water mass on nodes → weight in step(); `pondMass()`
   for the HUD; dump when a corner blows or tension change tips the belly
   (the dump splash is Lane C's rain system's problem only if they volunteer).
   Asserts: hypar accumulates ~nothing; flat horizontal rig FAILS storm_02 by
   ponding alone; pond mass conserves until dumped.
3. **Stability cliff** (D's finding): evaluate a per-face force clamp so tn
   1.04 degrades instead of exploding 1.2→10 kN in one step. If the clamp
   changes §7 numbers, say so in THREADS before landing it.

## Lane C — rain data & support

1. Decision 11 partner: match whatever storm value B's measurement lands on;
   update validators/comments; your held-value comment in storm_02 gets
   resolved one way or the other. Delete it with satisfaction.
2. Ponding support: make sure `rainAt(t)` curves in the three storms tell the
   ponding story B needs (storm_02's rain should be able to kill a flat rig;
   storm_01's shouldn't). A `rain` intensity pass over storm_03 too.
3. Support A on the HUD wiring (rainShadowOver helper, telegraph feed).
4. Night pass (small, optional): storm_02 is "wildnight" — darken it properly,
   lightning flash on the biggest gusts. The forecast card sells it.

## Lane D — the ladder sub-system (decision 12)

Your deferral note was the spec; build it: carry-ladder as a second carry type
(hands-full rules interact with the spare — choose, don't stack), placement
with a valid-surface test + snap to fascia anchors, code-driven climb height
with ClimbLadder playing on top (your knockdown precedent), dismount at the
top into a work stance where hold-E fascia repairs work. Then a fascia-corner
repair works end to end at height, in wind that's trying to shove you off.
Selftest: state-machine legs + a scripted climb-repair-descend run. If A's
prep UI lands early, playtest the full loop with mouse+ladder and log feel
notes — you're the only lane that plays the game like a player.

## Lane E — water & wreckage juice (small)

1. Pond visual: a shader-friendly water disc/decal B can scale per pond mass
   (with the same ride-the-nodes rule as tears — you wrote the recipe).
2. `broom_01.glb` (the poke-the-pond tool — DESIGN.md's funniest mechanic
   arrives next sprint; the prop should be waiting). Reuse Crank/Dig for the
   poke anim, no new Mixamo needed.
3. `fence_panel_snapped_v1.glb` if not already shipped (aftermath screen).
4. Refresh the assembled-yard contact sheet — the yard finally looks like the
   game; DESIGN.md deserves the new picture.

## Gates

```
gate 1: A-1+A-2 → the game is playable with eyes and mouse, no console
gate 2: decision 11 measurement posted → downdraft question CLOSED forever
gate 3: ponding kills a flat rig in storm_02 (assert + by hand);
        full loop playable: forecast pick → mouse prep → storm (repair at
        height if fascia) → aftermath with wreckage → play again
```

Definition of done = gate 3. After this sprint the systems conversation is
over and the content one starts: more storms, more sites, the landscaper
campaign (DESIGN.md has been waiting).

## For John

- Nothing blocks on you. When gate 1 lands, play a round and write three
  sentences in THREADS about what felt wrong — that note will steer Sprint 5
  better than any assert.
