guts/docs/progress/f-progress.md
jing 29cca53675 [lane F] Mid-round-2 recovery: the glue that makes L2 a game
All round-2 lane sessions were cut off 15:08-15:16 before NOTES/commits; the three prior
commits preserve their work verbatim. This commit is the wiring B was cut off inside of,
plus the run-state boot owes per ruling #4:

- combat/index.js: fiction-id -> archetype resolve via C's getEnemy() (the round's declared
  ONE blocker), theta-array + spread fan-out for group spawns, hazards + pickups constructed
  and updated (order: enemies -> weapons -> hazards -> pickups, so a torpedo can neutralize
  a surge the frame it detonates), pickup score/samples onto the combat:state scoreboard,
  combat.reset(fromS) for respawn.
- flight/player.js: kill/shove/refill — the API B's new modules call; kill ignores iframes
  by design (boost-dodging through C's lethal acid wall is not a read). Deleted the
  crestSpeed fallback guard per its own comment — A's law landed.
- boot.js: run state. checkpoint crossed -> remembered; death -> 2s -> respawn at it +
  combat.reset() re-arms hazard timelines (pump deliberately does NOT rewind: no
  double-spawns, collected stays collected); gate -> level:complete {stats, par} for E's
  medal card. Exported step(dt) so the stepped-sim harness drives the REAL loop.
- ROUND2_INSTRUCTIONS: MID-ROUND STATUS box for the resuming lanes; f-progress entry.

Verified (deterministic stepped sim via boot.step, :8140): full L2 run fires all 47 events
with ZERO console warns (was: 11 spawn no-ops), all 5 hazard telegraphs, 2400 proximity
ticks, 14 pickups collected, finish 157s vs par 180 while surfing 94s of it. Death path:
throttle 0.7 into the finale -> killed by acid s=3386 -> respawn at Cardia Approach 2980 ->
surge re-arms -> second attempt escapes -> level:complete {deaths: 1}. Survivable AND
losable. Evidence: docs/shots/laneF/round2_L2_integrated_full_run.png. qa.sh GREEN.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 16:39:44 +10:00

4.9 KiB
Raw Blame History

Lane F (Fable) — progress

2026-07-16 (evening) — Mid-round-2 recovery: cut-off triage + the glue that makes L2 a game

All round-2 lane sessions (A/B/C + one more that left no files) were cut off 15:0815:16, mid-work, before NOTES/progress/commits. Reviewed the orphaned tree file by file, verified it (qa GREEN, both selfchecks, 60s stepped sim clean), then committed each lane's work path-scoped on their behalf: A f0982e7 (crest law, taper, schema-v2 wave, TBN walls — essentially done), B 4ed3433 (surf speed-lock + hazards/pickups modules — written but UNWIRED), C 2e85ec0 (schema v2, par retune, chase analysis, --probe — done). Details in each commit message.

Then landed the integration glue as F (B's unfinished wiring was the round's critical path): fiction-id → archetype resolve via C's getEnemy() + theta-array/spread fan-out (combat/index.js), hazards + pickups constructed and updated there too, player.kill/shove/ refill (the API B's new modules call — it didn't exist), boot run-state (checkpoint → death → 2s → respawn at last checkpoint + combat.reset() re-arms hazard timelines; gate → level:complete {stats, par}), deleted B's crestSpeed fallback guard (A landed the real one), and exported boot.step(dt) so the stepped-sim harness drives the REAL loop, pump included.

Verified on :8140, deterministic stepped sim through boot.step:

  • Full run at throttle 1.38: all 47 L2 events fire, 0 console warns (the round-2 blocker — 11 spawn no-ops — is gone), all 5 hazard telegraphs, 2400 hazard:proximity ticks, 14 pickups collected, gate → level:complete {time 157s vs par 180, score 2650, kills 15}.
  • Death path: dawdle at 0.7 into the finale → killed by acid at s=3386 → respawns at checkpoint 2980 (Cardia Approach, exactly as C authored) → surge re-arms → second attempt escapes → level:complete {deaths: 1}. L2 is survivable AND losable. Evidence: docs/shots/laneF/round2_L2_integrated_full_run.png (posted via the 8143 sink).

Still open for the resumed lanes: see ROUND2_INSTRUCTIONS §MID-ROUND STATUS. Port note: 8143 (laneF sink) and 8144 (laneA sink) are still held by the cut-off sessions' processes.

2026-07-16 — Round 1 review + integration (round 2 opened)

Reviewed all four lanes; every checked claim held (A's hash cefc4f83 + 8-draw sweep, B's node --check ESM no-op — reproduced, C's 3/3 selfcheck + sim, D's manifest + seam numbers).

Integrated (this commit): B's player/combat wiring + level-event pump into boot.js · D's assets into boot + world · C's ?stub=1&lvl= composition · qa.sh ESM-gate fix (was a no-op on every module in the repo) + spline selfcheck gate · TECH world contract FROZEN v1.1 (project hint, flowPulse, crestSpeed, hash, dispose, level) + bus ratifications (player:state, combat:state, player:surf, hazard:warn, hazard:proximity, level:neutralize)

  • assets.texture/audioUrl/audio promotion + Shader-law (colorspace) + crest-speed law (CREST_FACTOR 1.6, from B's surf finding) · stub: crestSpeed + CREST wave + colorspace.

Verified integrated build (guts-f server, :8141): default boot = A world + C L2 + D pack + B ship. 60 sim-seconds stepped (rAF is paused in the hidden pane — deterministic dt loop via the boot module exports instead): s→777, checkpoints+pickups fired, 9 draws / 61k tris, 0 console errors, 0 asset misses. ONE gap: all 11 spawns no-op on fiction ids ("unknown enemy type bolus_chunk") — exactly C's predicted → B item; top of B's round 2. Evidence: docs/shots/laneF/round1_integrated_s777.png. fps/feel still needs John (checklist in ROUND2 §John).

shot_sink usage that works from the pane: python3 pipeline/shot_sink.py --dir docs/shots/laneF --port 8143 then POST canvas blob (DBG.shot download no-ops, as A warned).

2026-07-16 — Round 0: scaffold

Repo initialized from empty. Landed:

  • Full doc set: README, PROCESS (lane/round law, inherited from PROCITY), GDD v1 (movement = flow-locked hybrid; 5 levels + secret; enemy roster; bosses), TECH (world contract, level schema v0, bus events, manifest contract, flags, budgets), ART_BIBLE (synthetic scanner look, palettes, emissive code, FLUX prompt kit), PIPELINE (MODELBEAST operator map — verified live on m3ultra@100.89.131.57 2026-07-16: flux_local, mflux_image_edit, sf3d, trellis_mac, seedvr2_upscale; fal.ai gated fallback), V2_IDEAS.
  • Lane charters AF + ROUND1_INSTRUCTIONS.
  • Seed code: index.html shell + boot.js (world pick w/ stub fallback, drift/fly debug cam, window.DBG, resize/loop), core/{rng,bus,flags}.js, stub/world_stub.js (executable world contract: analytic centreline, parallel-transport-style frames, inward tube mesh with peristalsis vertex shader + fresnel rim + fog, project/collide/wallRho/hash).
  • three r175 vendored from PROCITY (module + core + addons).
  • tools/qa.sh: node --check, Math.random grep, level JSON checks, selfcheck/manifest hooks, vendor gate.

Verification: qa.sh GREEN; booted ?stub=1&dbg=1 in browser — see docs/shots/laneF/.