HardYards/LANE_PROMPTS.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

16 KiB
Raw Blame History

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.