HardYards/SPRINT4.md
m3ultra 5d8264f13f Add Sprint 4 plan and lane prompts: face and water
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 02:03:47 +10:00

122 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 1845 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 × (1shadow) —
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
1845 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.