122 lines
6.9 KiB
Markdown
122 lines
6.9 KiB
Markdown
# 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.
|