HardYards/LANE_PROMPTS.md
m3ultra f2fe5915c8 Add Sprint 11 plan and lane prompts: prove the corner block, then the job sheet
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 16:44:11 +10:00

615 lines
32 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.

# Lane launch prompts (Opus 4.8, run on the M1 Ultra)
Per lane: clone `git@gitea.partly.party:monster/shades.git` to
`~/Documents/shades-lane<X>`, branch `lane/<x>`, paste the prompt.
Lane A starts first; B/C/D/E can start immediately after in parallel
(they develop against contracts + selftest mocks until A's M0 merges).
---
## Lane A — world, shell & integration
> You are Lane A on SHADES 3D. Read PLAN3D.md fully (you own §5 Lane A), then
> DESIGN.md, then play prototype/ (`python3 -m http.server 8642 --directory
> prototype`). Build the M0 skeleton exactly per PLAN3D §3/§4/§5-A: vendored
> three.js copied from ~/Documents/90sDJsim/web/world/vendor/, stdlib server.py
> on 8801, contracts.js, graybox 30×20 m yard with house edge/trees/posts/garden
> bed, third-person camera, sun lighting, selftest.html harness. Merge M0 to
> main as fast as possible — every other lane rebases on you. Then build the HUD
> against mock data, and act as merge shepherd per PLAN3D §6. Log every landing
> in THREADS.md.
## Lane B — sail simulation & rigging
> You are Lane B on SHADES 3D. Read PLAN3D.md fully (you own sail.js +
> rigging.js, §5 Lane B), DESIGN.md §geometry/§hardware, and prototype/game.js —
> your job is the faithful 3D port of its cloth/load/failure behavior. Build the
> 3D verlet cloth with per-FACE wind pressure (F ∝ area·dot(wind,normal)²) so
> hypar twist genuinely sheds load — prove it with the selftest assert (twisted
> rig peak load < flat rig peak load in the same storm). Corner load = smoothed
> incident-spring stretch; break after 0.4 s sustained overload; flogging must
> be emergent from the freed node. Then the prep-phase rigging UI with the
> prototype's economy. Until Lane A's M0 merges, develop inside selftest.html
> with a stub wind function; keep every module deterministic (dt,t in — no
> Date.now, no rAF in sim code). Log in THREADS.md.
## Lane C — weather, sky & debris
> You are Lane C on SHADES 3D. Read PLAN3D.md fully (you own weather.js,
> skyfx.js, debris.js, data/storms/, §5 Lane C) and prototype/game.js's gust
> scheduler — port its telegraph/ramp/hold/fade shape. Implement
> wind.sample(pos,t) per contracts.js: base curve + gusts + direction change +
> spatial noise + tree wind-shadow. Storms are data (JSON, PLAN3D §4) — author
> storm_01_gentle and storm_02_wildnight. Then instanced rain following local
> wind, storm sky + lightning flash, WebAudio layers (wind bed, gust whoosh,
> rope creak keyed to max corner load, flog when broken), and hand-rolled
> debris (crates/tubs from models/debris/) with player knockdown + sail impulse.
> No physics engine, no deps. Selftest: telegraph lead ≥1.2 s, wind continuity,
> storm JSON validator. Log in THREADS.md.
## Lane D — player character & interaction
> You are Lane D on SHADES 3D. Read PLAN3D.md fully (you own player.js +
> interact.js, §5 Lane D) and 90sDJsim's DEVMANUAL rigged-characters section
> (~/Documents/90sDJsim/DEVMANUAL.md) — its loading rules are law
> (SkeletonUtils.clone, head-bone height normalize, never blind setScalar).
> Copy a ped from ~/Documents/90sDJsim/web/world/models/peds/ into models/
> (copies rule), merge Walk/Running/Happy Idle clips via ~/Documents/
> character_kit/ pipeline; queue Climbing Ladder / crank / dig on the
> ~/Documents/mixamo-fetch wishlist for M3. Camera-relative WASD + anim state
> machine, wind slow/shove/knockdown per PLAN3D, and hold-E interactions via
> interact.register (re-rig with spare 2.5 s, per-corner turnbuckle trim 1.2 s,
> carry-one-item from shed table). Selftest: state machine table test. Log in
> THREADS.md.
## Lane E — nature & hardware assets (Blender)
> You are Lane E on SHADES 3D. Read PLAN3D.md fully (you own tools/blender/ +
> models/, §5 Lane E). Study the house Blender-scripting idiom in
> ~/Documents/3D-STORE/build_booth_room_v23.py and racks_to_glb.py, then write
> ONE deterministic tools/blender/build_yard_assets.py that generates every
> deliverable in PLAN3D §5-E (gum trees with named canopy/branch_anchor nodes,
> fence set, house_yardside with fascia_anchor empties, shed + table, garden
> bed with 3 damage states, raked sail post, ladder, close-up shackle/
> carabiner/turnbuckle, ref_capsule) and exports meter-scale Y-up GLBs, <15 k
> tris, low-poly stylized to sit beside the 90sDJsim ped fleet. Also copy +
> scale-check the debris set from ~/Documents/3D-STORE/clean_glbs/ into
> models/debris/. Verify every export by rendering a contact sheet against the
> 1.7 m ref capsule (the 3D=models/_thumbnails pattern). Commit script AND
> GLBs. Log in THREADS.md.
---
---
# SPRINT 2 prompts (assembly — fire A/B/C/E together, D at gate 1)
Same rules: own clone (`~/Documents/shades-lane<X>` on m3ultra), branch `lane/<x>`,
rebase onto latest main FIRST (it moved: all lanes merged + importmap + path
fixes + M3 clip pack). Read THREADS.md from the [I] integrator entries down,
then SPRINT2.md in full — the six decisions at the top are final, stop
re-deciding them.
## Lane A — Sprint 2
> You are Lane A on SHADES 3D, Sprint 2. Rebase onto main, read THREADS.md's
> [I] entries and SPRINT2.md §Lane A. Your sprint IS the assembly: in main.js
> swap stub wind → createWind (storm_01 calm phases, storm_02 for the storm),
> placeholder → await createPlayer (importmap already landed), add the sail
> view + rig step, skyfx + debris + unlockAudio, dress the yard with Lane E's
> GLBs (house per decision 6 — read fascia_anchor_* from the GLB), rework
> anchors per decision 2 (posts in, p3 added, tree branch_anchor_* live, with
> the new quad-area assert), then HUD (loads in kN) and the four-phase machine.
> Post "gate 1" in THREADS.md the moment weather+player+sail are live in the
> yard so Lane D starts. Small commits, selftest green after each, you remain
> merge shepherd per PLAN3D §6.
## Lane B — Sprint 2
> You are Lane B on SHADES 3D, Sprint 2. Rebase onto main, read THREADS.md [I]
> entries and SPRINT2.md §Lane B + decisions 3/4/5. Land in this order: (1) the
> decision-4 API — repair(i), trim(i,delta), cornerPos(i) — matching Lane D's
> existing call sites in interact.js, with contract entries + asserts; (2)
> decision 5 — consume debris.pieces in sail.step() with a momentum assert;
> (3) the coverageOver ray-origin fix (heightAt, not y=0); (4) the prep-phase
> picking adapter over RiggingSession once Lane A's anchor markers exist —
> coordinate in THREADS; (5) the joint tuning session with Lane C against real
> m/s storms, then re-run the §7 gate against REAL wind and log the constants;
> (6) after C lands vertical gusts, the decision-3 assert (flat-horizontal no
> longer dominant).
## Lane C — Sprint 2
> You are Lane C on SHADES 3D, Sprint 2. Rebase onto main, read THREADS.md [I]
> entries and SPRINT2.md §Lane C + decision 3. Land: (1) vertical gust
> component in storm JSON (downdraft fraction, ~0.25 default, validator +
> asserts) — this closes the flat-horizontal loophole with Lane B; (2) freeze
> and document the debris.pieces shape in contracts.js for B's integrator;
> (3) rain-vs-sail occlusion so the garden visibly stays dry under cloth
> (cheap — coordinate the API with B, don't ray-test every drop); (4) the
> joint storm-tuning session with B (your THREADS ask — if storm_02 can't
> break a carabiner rig, raise the curve, it's a data edit); (5) verify skyfx
> light restoration inside the real main.js phase transitions once Lane A
> wires it.
## Lane D — Sprint 2 (start at gate 1)
> You are Lane D on SHADES 3D, Sprint 2. Rebase onto main FIRST — the M3 clip
> pack landed: player_anims.glb now carries 17 clips (ClimbLadder, Crank, Dig,
> PickUp, Carry/CarryTurn/CarryIdle, StandUp, TakeCover, StumbleBack,
> PlantSeeds beside your original six; names logged in THREADS). Also note the
> integrator fixed /world/ → ./ relative paths in player.js and dev_player.html.
> Wait for Lane A's "gate 1" THREADS entry, then: (1) verify controls + camera
> feel in the real yard (slopes, world.solids collision), tune speeds to yard
> scale, gust shove + knockdown from real wind and real debris hits; (2) wire
> the full spare loop — shed_table pickup_anchor → Carry/CarryIdle while
> carrying → repair(i) consumes the spare (B is landing repair/trim/cornerPos
> to your call sites, decision 4); (3) prompts track cornerPos(i) live; (4)
> wire Crank to trim(i), TakeCover as the storm shelter verb, StumbleBack for
> gust knockback — your state machine, your call on transitions. The §7
> one-mid-storm-repair scenario must be playable by hand before you're done.
## Lane E — Sprint 2 (small)
> You are Lane E on SHADES 3D, Sprint 2. Rebase onto main, read SPRINT2.md
> §Lane E. Small sprint: (1) canopy sway handles — verify your canopy_* nodes
> sway cleanly when Lane A drives them, add sway_hint props if per-tree tuning
> is needed; (2) a 512² sail cloth weave atlas + tear decal strip so the
> membrane reads as fabric; (3) storm dressing set: wheelie bin (mass_hint),
> washing line, garden gnome — same one-script determinism + contact-sheet
> acceptance; (4) when Lane A's yard is dressed, render a contact sheet of the
> assembled yard from the game camera for DESIGN.md.
---
---
# SPRINT 3 prompts (the game loop — fire all five; B+C pair on item 1)
Same rules: own clone, own branch, rebase onto latest main FIRST (Sprint 2 is
merged; main.js passes debris into rig.step; downdraft data reverted to 0.3
with B's assert self-skipping — THREADS' last [I] entry explains why). Read
SPRINT3.md in full; decisions 7/8/9 are made.
## Lane A — Sprint 3
> You are Lane A on SHADES 3D, Sprint 3. Rebase onto main, read SPRINT3.md
> §Lane A. Priority 1 is world.shedTable (unblocks D, ~15 lines). Then the
> decision-2 anchor rework with the quad-area assert, the playable prep phase
> (wire B's picking adapter, take their preview-rig force-arrows offer), the
> HUD (kN bars, telegraph, garden HP via skyfx.rainShadowOver per decision 7,
> plant damage-state swaps), forecast card + aftermath screen (score the gnome),
> and finish the yard dressing with E's GLBs and sway handles. Retitle the page.
> Merge shepherd duties continue. Small commits, selftest green after each.
## Lane B — Sprint 3
> You are Lane B on SHADES 3D, Sprint 3. Rebase onto main and read SPRINT3.md
> §B+C and THREADS' last [I] entry — the integrator measured that gust-only
> downdraft cannot satisfy your 60% bar and §7 together (0.45→42% + twisted
> loses a corner; 0.58→48% + still loses one), so decision 8 adopts your
> fraction-of-TOTAL semantics. Pair with C in THREADS: when their weather.core
> change lands, re-run your 8-direction sweep, delete the <0.5 self-skip from
> your decision-3 assert, and confirm all three §7 legs on the SAME storm JSON.
> Log final constants. Then sail UVs with E's sail_weave.png per their recipe.
> Also: A may take your preview-rig offer for prep force arrows — support them.
## Lane C — Sprint 3
> You are Lane C on SHADES 3D, Sprint 3. Rebase onto main and read SPRINT3.md
> §B+C and THREADS' last [I] entry. Decision 8: change weather.core downdraft
> to a fraction of TOTAL wind speed (keep the own-RNG determinism guarantee,
> keep speedAt() horizontal, update the validator; rename the JSON field if the
> semantics warrant it), then pair with B to land values where their 60% bar
> AND the §7 gates are green on the same data. Retune storm_01/storm_02, and
> author storm_03 between them so the campaign has a ramp. Decision 7 landed
> garden HP on your rainShadowOver — coordinate the API with A as they wire it.
## Lane D — Sprint 3
> You are Lane D on SHADES 3D, Sprint 3. Rebase onto main, read SPRINT3.md
> §Lane D. The moment A posts world.shedTable in THREADS: close the §7 loop BY
> HAND — pickup → carry through gusts (brace when needed) → hold-E repair →
> ≥3/4 corners at storm end — and RECORD the run (SHADES.step + screenshots);
> that artifact is the sprint's definition of done. Retune stumble/knockdown
> thresholds against real storm_02 gusts now that the downdraft is live.
> Stretch: the ladder loop (carry, place, ClimbLadder to fascia anchors) —
> flag early in THREADS if it's bigger than the sprint.
## Lane E — Sprint 3
> You are Lane E on SHADES 3D, Sprint 3. Rebase onto main, read SPRINT3.md
> §Lane E. Small juice pass: tear-decal hookup recipe for B (like your weave
> recipe), broken-gnome + snapped-fence-panel variants for the aftermath
> screen, and refresh the assembled-yard contact sheet once A's dressing lands.
---
---
# SPRINT 4 prompts (face & water — fire all five)
Same rules: own clone, own branch, rebase onto latest main FIRST (Sprint 3
merged; yard has 11 anchors incl. branch anchors; gate 3 was met by hand).
Read THREADS' last [I] entry (the dispute ruling) then SPRINT4.md — decisions
10/11/12 are made.
## Lane A — Sprint 4
> You are Lane A on SHADES 3D, Sprint 4. Rebase onto main, read SPRINT4.md
> §Lane A — you are the critical path and it's all UI: hud.js (kN corner bars,
> telegraph, garden HP via rainShadowOver with C's helper, plant damage swaps),
> mouse-driven prep via B's picking adapter + their force-arrow preview offer,
> the forecast card (three storms exist — picking one is the difficulty
> select), the aftermath screen with E's wreckage swaps (broken gnome, snapped
> fence), and retitle the page. Small commits, selftest green, merge shepherd
> as always. Gate 1 is A-1+A-2: playable with eyes and mouse, no console.
## Lane B — Sprint 4
> You are Lane B on SHADES 3D, Sprint 4. Rebase onto main, read THREADS' last
> [I] ruling and SPRINT4.md §Lane B. Decision 11 first, one afternoon: re-point
> §7's twisted rig to a real 18-45 m² quad from A's dressed yard, re-run the
> three §7 legs + the 8-heading 60% sweep at 0.45 and 0.40 on REAL anchors,
> post the numbers, then either bump storm_02 downdraftOfTotal to the passing
> value or retire the bar — no third sprint on this. Then ponding v1 per
> decision 10 (the 40× rain fiat is made): accumulation × flatness → node
> water mass → weight; pondMass() for the HUD; dump on corner break; asserts
> that a hypar pools nothing and a flat rig dies of water in storm_02. Then
> evaluate a per-face force clamp for D's tn-1.04 stability cliff.
## Lane C — Sprint 4
> You are Lane C on SHADES 3D, Sprint 4. Rebase onto main, read SPRINT4.md
> §Lane C. Partner B on decision 11 (match the landed storm value, resolve your
> held-value comment in storm_02 with satisfaction). Make the three storms'
> rainAt curves tell the ponding story (storm_02 can kill a flat rig by water,
> storm_01 can't). Support A's HUD (the rainShadowOver drain helper you
> offered, telegraph feed). Optional night pass: darken wildnight properly,
> lightning on the biggest gusts.
## Lane D — Sprint 4
> You are Lane D on SHADES 3D, Sprint 4. Rebase onto main, read SPRINT4.md
> §Lane D — decision 12 green-lights your ladder spec exactly as you wrote it:
> carry-ladder as a second carry type with hands-full rules, placement with a
> valid-surface test + fascia-anchor snap, code-driven climb height with
> ClimbLadder on top, work stance at height where hold-E fascia repairs land
> in shoving wind. Selftest the state legs + a scripted climb-repair-descend.
> When A's prep UI lands, playtest the whole loop like a player and log feel
> notes in THREADS — you're the only lane that does.
## Lane E — Sprint 4
> You are Lane E on SHADES 3D, Sprint 4. Rebase onto main, read SPRINT4.md
> §Lane E. Small water-and-wreckage pass: pond water disc/decal that rides the
> sim nodes (your tear recipe pattern) scalable by pond mass, broom_01.glb
> (the prop waits for the mechanic), fence_panel_snapped if not shipped, and
> refresh the assembled-yard contact sheet for DESIGN.md — the yard finally
> looks like the game.
---
---
# SPRINT 5 prompts (hail & the broom — fire all five)
Same rules: own clone, own branch, rebase onto latest main FIRST (Sprint 4
merged; router passes rain data; downdraftOfTotal 0.45; decision 13 ruled).
Read THREADS' last [I] entry then SPRINT5.md.
## Lane A — Sprint 5
> You are Lane A on SHADES 3D, Sprint 5. Rebase onto main, read SPRINT5.md
> §Lane A. Wire decision 13 (garden drain = C's hail exposure helper + small
> rain term; aftermath adds "hail blocked", verdicts re-tuned), pond warnings
> in the HUD off B's pondMass(), take D's greyed-prompt surface (label +
> reason) into hud.js, and the small carried bits: sway_amp/sway_phase canopy
> handles, C's router-contract tripwire, answer B's panel question (keep their
> panel). Keep 60 fps with hail + rain + ponding live. Shepherd as always.
## Lane B — Sprint 5
> You are Lane B on SHADES 3D, Sprint 5. Rebase onto main, read SPRINT5.md
> §Lane B — the water arc has been carried twice and everything now waits on
> it. Ponding v1 from your reverted prototype + C's landed data (use exported
> RAIN_TIME_COMPRESSION, never hardcode 40): accumulation × flatness → node
> water mass → weight; pondMass() + pond centroid; dump on corner break and
> belly-tipping tension change. Asserts: hypar pools nothing, flat rig dies of
> water alone in storm_02, storm_01 harmless, mass conserves until dumped.
> Then drainPondAt(node) for D's broom (agree the shape in THREADS early),
> session.reset() for A, and the tn-1.04 stability clamp (post §7 deltas
> before landing).
## Lane C — Sprint 5
> You are Lane C on SHADES 3D, Sprint 5. Rebase onto main, read SPRINT5.md
> §Lane C — hail is yours and it's decision 13's engine. Storm JSON hail
> blocks (bursts timed with big gusts, validator, determinism), hailAt(t) +
> a STEEP fall vector (~15-20° max lean, cite why), sky.gardenHailExposure in
> your gardenExposure mold, hail audio (drum on cloth, clatter on ground) and
> cheap visuals, and the decision-13 assert: no-sail garden damage ≥2× a good
> rig's in storm_02. storm_02 gets its burst at the change; storm_03 mild;
> storm_01 none.
## Lane D — Sprint 5
> You are Lane D on SHADES 3D, Sprint 5. Rebase onto main, read SPRINT5.md
> §Lane D — the broom is yours and it's the gate: take broom (hands-full rules
> vs spare/ladder), walk under the belly, hold-E poke (Crank/Dig per E's
> anim_hint) → B's drainPondAt() → the water dumps ON YOU (stagger if big —
> comedy is the point) and the sail springs back. Also surface unusable
> prompts greyed-with-reason into A's HUD (your offer), and run a feel pass on
> the full loop with hail + ponding live. Log everything in THREADS.
## Lane E — Sprint 5
> You are Lane E on SHADES 3D, Sprint 5. Rebase onto main, read SPRINT5.md
> §Lane E. Small juice pass: hail impact pips + ground ring decal
> (instanced-friendly, stone mesh only if C asks), plant-shred particle puff
> for hail hits on the bed, and the carried contact-sheet refresh (night +
> daylight) for DESIGN.md.
---
---
# SPRINT 6 prompts (winnable, then a week of nights)
Same rules: own clone, own branch, rebase onto latest main FIRST (Sprint 5
merged; decision 13 wired with integration-guess weights; the balance gap is
measured in THREADS' last [I] entry). Gate 1 is JOINT and comes first.
## Lane A — Sprint 6
> You are Lane A on SHADES 3D, Sprint 6. Rebase onto main, read THREADS' last
> [I] (the balance numbers) and SPRINT6.md. Gate 1 first, jointly with B+C:
> your levers are the drain weights in main.js, possibly ONE new close anchor
> for a bed-covering small quad (re-run your own smallest-full-coverage assert
> after), and verdict truthfulness (a 4/4 clean hold must never read "you
> skimped"). Then gate 2, the week: five escalating nights, money persists,
> broke = game over, survive = win screen, "play again" becomes "next night".
> Also: lift E's screenshot POST into server.py (delete tools/yardshot/),
> decide the grass atlas (take the recipe or delete it), and land the pond
> ticker + hail banner if Sprint 5 didn't. Shepherd as always.
## Lane B — Sprint 6
> You are Lane B on SHADES 3D, Sprint 6. Rebase onto main, read THREADS' last
> [I] and SPRINT6.md. You hold the pen on balance.test.js: for each storm, an
> enumerable $80 REAL-shop loadout on an in-band quad must end hp≥50 with <2
> corners lost — and storm_02's line must genuinely need the repair or the
> broom (assert it fails without them). Then fabric choice in prep: porous
> shade cloth vs waterproof membrane (porosity exists in the sim) — agree the
> hail-vs-porosity rule with C in THREADS before coding, price the tradeoff.
> And post D the typical storm_02 belly-pond mass for their douse tuning.
## Lane C — Sprint 6
> You are Lane C on SHADES 3D, Sprint 6. Rebase onto main, read THREADS' last
> [I] and SPRINT6.md. Gate 1 partner: downdraft (0.40 also passes both physics
> gates per your own sweep) and hail-burst data are your levers. Then author
> the week's two storm variants (same JSON language, one new trick each) and
> forecast uncertainty: the card shows seeded ± ranges that resolve as the
> night approaches — DESIGN.md's partial-information canon, cheaply.
## Lane D — Sprint 6
> You are Lane D on SHADES 3D, Sprint 6. Rebase onto main, read SPRINT6.md.
> Calibrate the douse comedy to B's real pond masses (thresholds vs ~450 kg
> belly ponds), then play the balanced storms end to end as gate 1 lands and
> file feel notes in THREADS before it ships — you are the playtest lane, and
> after gate 2 you play the whole week.
## Lane E — Sprint 6
> You are Lane E on SHADES 3D, Sprint 6. Rebase onto main, read SPRINT6.md.
> Night dressing for the week's later storms (moon, lit house window),
> win-screen and game-over cards that feel like SHADES, and refresh the
> contact sheets once the balance pass lands.
---
---
# SPRINT 7 prompts (one truth, then the week)
Same rules: own clone, own branch, rebase onto latest main FIRST. Read THREADS'
last [I] entry (the harness dispute) then SPRINT7.md. Gate 0 is A+B jointly
and NOTHING else lands before it.
## Lane A — Sprint 7
> You are Lane A on SHADES 3D, Sprint 7. Rebase onto main, read THREADS' last
> [I] and SPRINT7.md. Gate 0 first, paired with B on balance.test.js: reproduce
> your hp-58 win there or find why it doesn't (tension? repair timing? drain
> path?) — post the cause like B post-mortemed decision 11, delete the
> integrator skip. Then gate 1, the week: five nights (C's icenight is night
> five), persistent money, broke = game over, survive = E's win card with your
> text. Wire window_glow + moon for the night storms. Close the carried grass
> and screenshot-POST decisions — do them or write "won't do".
## Lane B — Sprint 7
> You are Lane B on SHADES 3D, Sprint 7. Rebase onto main, read THREADS' last
> [I] and SPRINT7.md. Gate 0 first, paired with A on balance.test.js — your
> suite is the single truth now; make it reproduce or refute A's win, name the
> cause. Then fabric choice per C's ruling: honest pricing + stone-size hail
> pass-through (ask C for hailBlockFor), fabric economics posted in THREADS
> before UI so A can slot prep.
## Lane C — Sprint 7
> You are Lane C on SHADES 3D, Sprint 7. Rebase onto main, read SPRINT7.md.
> Land hailBlockFor(size, porosity) when B asks; forecast uncertainty bands
> (carried — seeded ±, resolving toward the real numbers as the night nears);
> stand by on gate 0 in case the drain-wiring path is the discrepancy.
## Lane D — Sprint 7
> You are Lane D on SHADES 3D, Sprint 7. Rebase onto main, read SPRINT7.md.
> When gate 0 closes: the feel pass on the final balanced storms — it's the
> last read before John plays the week — plus the douse re-measure if pond
> masses moved (your guard assert is the tripwire). Until then, hold.
## Lane E — Sprint 7
> You are Lane E on SHADES 3D, Sprint 7. Rebase onto main, read SPRINT7.md.
> Light sprint: card text pass with A once the week exists, a dawn tint for
> the morning-after aftermath if cheap. You've earned the short one.
---
---
# SPRINT 8 prompts (ship the week)
Same rules: own clone, own branch, rebase onto latest main FIRST. Read THREADS'
last [I] entry then SPRINT8.md. Gate 0' is B+D's this time — A builds the week
uninterrupted.
## Lane A — Sprint 8
> You are Lane A on SHADES 3D, Sprint 8. Rebase onto main, read SPRINT8.md.
> THE WEEK, uninterrupted, from day one — it has slipped twice and it ships
> this sprint: five nights (01→03→03b→02→02b), persistent money (pay = base by
> severity + garden bonus + hardware refund collateral), broke = game over,
> survive = win card. E's cards, words, and dawn-tint CSS are all on disk.
> "Play again" becomes "next night". Close the carried grass-atlas and
> screenshot-POST decisions — do or "won't do" in THREADS. You answer gate-0'
> questions but you do not work it. If gate 0' outcome B lands (the pyrrhic
> win), you rule on the win wording as part of the week's scoring.
## Lane B — Sprint 8
> You are Lane B on SHADES 3D, Sprint 8. Rebase onto main, read THREADS' last
> [I] and SPRINT8.md. Gate 0' with D: three candidate variables, in order —
> settle under LIVE calm wind with sway running (not t=0 held), frozen vs live
> sway re-measured settled, repair timing at a real walk. Stop at the first
> that flips the corner count; land D's settled-at-entry guard; post numbers
> either way. If the live game honestly loses 2, say so and hand the win rule
> to A as the pyrrhic-win design question. Then: fabric economics post +
> prep-UI slot with A (C's hailBlockFor is landed on their branch).
## Lane C — Sprint 8
> You are Lane C on SHADES 3D, Sprint 8. Rebase onto main, read SPRINT8.md.
> Forecast uncertainty bands (carried twice — the week gives you five
> forecasts to make them matter on); move your skyfx camera guard below the
> shadow rebuild so headless callers can never fly a cloth-less yard again.
## Lane D — Sprint 8
> You are Lane D on SHADES 3D, Sprint 8. Rebase onto main, read THREADS' last
> [I] and SPRINT8.md. Gate 0' with B — your settle finding is one fidelity
> step from closing the repo's longest thread; drive the suite the way a
> player drives the game (live calm settle, real repair walk timing) and land
> your settled-at-entry guard. Then the full-week feel pass — the last read
> before John plays.
## Lane E — Sprint 8
> You are Lane E on SHADES 3D, Sprint 8. Rebase onto main, read SPRINT8.md.
> Light: support A's five aftermath cards as the week wires them. That's it —
> your tripwires, cards, words and dawn tint from Sprint 7 are all being
> consumed this sprint.
---
---
# SPRINT 9 prompts (the pyrrhic call, the $80 win, the second site)
Same rules: own clone, own branch, rebase onto latest main FIRST. Read
THREADS' last [I] entry then SPRINT9.md.
## Lane A — Sprint 9
> You are Lane A on SHADES 3D, Sprint 9. Rebase onto main, read SPRINT9.md.
> Rule the pyrrhic win (B and D both recommend WIN = hp>=50 with corners
> priced in aftermath — your call, wire it, give the pyrrhic ending its own
> verdict), answer C's two flagged calls in THREADS (25%-cover squeak-win,
> clean-win-without-repair), then gate 2: extract the yard into
> data/sites/backyard_01.json so world.js builds from data, and load E's
> site_02. The week gains a site per night.
## Lane B — Sprint 9
> You are Lane B on SHADES 3D, Sprint 9. Rebase onto main, read THREADS' last
> [I] and SPRINT9.md. Ship fabric choice (C's hailBlockFor + honest pricing)
> PAIRED with C's 0.40 flip in one landing; re-point balance.test's THE LINE
> to C's p1,p2,p3,p4 and assert the $80 clean win, keeping the t2-quad
> pyrrhic assert as the sacrifice-play control. With D: redesign the demoted
> settled-at-entry trend guard (held-clock windows pond forever — advance
> real storm seconds or probe rainless; integrator measurements are in the
> comment). Then build tools/site_audit/ from your quad/coverage/afford sweep
> and run it on site_02 before it ships.
## Lane C — Sprint 9
> You are Lane C on SHADES 3D, Sprint 9. Rebase onto main, read SPRINT9.md.
> Pair the 0.40 downdraft flip with B's fabric landing (your condition,
> arrived). Then site_02's wind personality: shelters/venturi as site-JSON
> data — the corner block funnels the southerly.
## Lane D — Sprint 9
> You are Lane D on SHADES 3D, Sprint 9. Rebase onto main, read SPRINT9.md.
> With B: the trend-guard redesign, and bless or amend the integrator's 600 N
> floor. Then play site_02 cold and log where the verbs break (ladder assumes
> fascia height; a carport may not have one). You remain the playtest lane.
## Lane E — Sprint 9
> You are Lane E on SHADES 3D, Sprint 9. Rebase onto main, read SPRINT9.md.
> The second site: the corner block — smaller, paling-fenced, one tree, a
> carport — anchor-poor on purpose; its personality is "nowhere to tie off".
> Deterministic factory, contact sheet, and pyrrhic-ending card support when
> A rules.
---
---
# SPRINT 10 prompts (sites are data)
Same rules: own clone, own branch, rebase onto latest main FIRST. Read
THREADS' last [I] entry then SPRINT10.md. Gate 1 is A's, uninterrupted —
everyone else's site work is already on disk waiting for it.
## Lane A — Sprint 10
> You are Lane A on SHADES 3D, Sprint 10. Rebase onto main, read SPRINT10.md.
> ONE headline, from day one: extract the yard into data/sites/backyard_01.json
> (world.js builds from data; byte-identical yard proven by the existing
> anchor tripwires and quad-band asserts), then author site_02_corner_block
> from the pieces already waiting (E's carport GLB, C's venturi schema — give
> C their two gap coordinates, D's work:"cloth"|"bracket" anchor field). The
> week gains a site per night; night 3 moves to the corner block. Nothing
> else until this lands.
## Lane B — Sprint 10
> You are Lane B on SHADES 3D, Sprint 10. Rebase onto main, read SPRINT10.md.
> Build tools/site_audit/ from your quad/coverage/afford sweep — one command,
> any site JSON, reports the winnable lines or names the blocking corner.
> Run it on site_02 the moment A's JSON exists; if there's no $80 line, tell
> E to move the tree (their standing offer). Answer C's porosity-into-
> gardenHailExposure question in THREADS.
## Lane C — Sprint 10
> You are Lane C on SHADES 3D, Sprint 10. Rebase onto main, read SPRINT10.md.
> Wire venturi from A's site JSON when it lands; decide the week's storm/site
> pairing so the corner block teaches the venturi (southerly on night 3?);
> land the porosity/gardenHailExposure one-liner if B says yes.
## Lane D — Sprint 10
> You are Lane D on SHADES 3D, Sprint 10. Rebase onto main, read SPRINT10.md.
> Land needsLadder on A's work-field (mechanism, not type — your own audit),
> then play site_02 cold and log feel notes. The carport traps should read
> tempting, not buggy.
## Lane E — Sprint 10
> You are Lane E on SHADES 3D, Sprint 10. Rebase onto main, read SPRINT10.md.
> Support site_02 as it lands: dressing adjustments, contact sheets, and a
> carport-collateral aftermath line/card if the trap earns one. If B's audit
> says the site has no winnable line, moving the tree is yours.
---
---
# SPRINT 11 prompts (the corner block is mean, then the job sheet)
Same rules: own clone, own branch, rebase onto latest main FIRST. Read
THREADS' last [I] entry then SPRINT11.md.
## Lane A — Sprint 11
> You are Lane A on SHADES 3D, Sprint 11. Rebase onto main, read SPRINT11.md.
> Gate 1 rulings first (carport collateral number — E proposes $180 with
> reasoning in the asset; widen the Anchor.type enum D flagged; answer C's
> venturi-gap question). Then gate 2, the job sheet: each night gains client
> + brief + pay schedule as data; forecast card becomes the job sheet,
> aftermath becomes the invoice. No reputation system yet — one week, five
> jobs, the framing. Shepherd as always.
## Lane B — Sprint 11
> You are Lane B on SHADES 3D, Sprint 11. Rebase onto main, read SPRINT11.md.
> Fix site_audit's headless false-negative (your setWorld ask), run it on
> site_02 WITH the venturi, and post the winnable lines. If the funnel kills
> every $80 line, C drops the gain before E moves the tree. Then support A's
> pay schedule with numbers (what does a good night on each site actually
> bank — your audit already knows).
## Lane C — Sprint 11
> You are Lane C on SHADES 3D, Sprint 11. Rebase onto main, read SPRINT11.md.
> Reconcile the venturi with A (site ships axis 2.1/gain 1.5; you measured
> 1.08/1.35 — one exchange, one edit), tune the gain to B's audit verdict,
> and land per-night forecast lead on the job sheet (your forecastLines lead
> param, waiting two sprints).
## Lane D — Sprint 11
> You are Lane D on SHADES 3D, Sprint 11. Rebase onto main, read SPRINT11.md.
> Play site_02 cold at last — the carport traps should read tempting, the
> funnelled southerly should make the ladder trip the site's thesis. File
> feel notes in THREADS. Then playtest the job-sheet week as A lands it.
## Lane E — Sprint 11
> You are Lane E on SHADES 3D, Sprint 11. Rebase onto main, read SPRINT11.md.
> Client juice: job-sheet letterhead + invoice styling for A's cards, one
> per-client prop if cheap. Stand by on the tree-move if B's audit demands
> it (C's gain drop goes first).