HardYards/LANE_PROMPTS.md
m3ultra 0dba2d8891 Add Sprint 2 lane prompts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 23:19:53 +10:00

161 lines
9.1 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.