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>
75 lines
4.9 KiB
Markdown
75 lines
4.9 KiB
Markdown
# 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:08–15: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 A–F + 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/.
|