# PROCESS — lanes, rounds, and how not to step on each other

This repo is built by parallel Claude sessions ("lanes"), each with a fixed territory,
coordinated in numbered rounds by an integrator (Fable, = Lane F). The workflow is inherited
from PROCITY, where it shipped a whole town in 12 rounds — follow it exactly.

## The cast

| lane | territory | charter |
|---|---|---|
| **A — World** | canal geometry, biome shaders, arenas | [LANE_A_WORLD.md](LANES/LANE_A_WORLD.md) |
| **B — Flight & Combat** | controls, collision response, weapons, enemies | [LANE_B_FLIGHT.md](LANES/LANE_B_FLIGHT.md) |
| **C — Levels & Encounters** | level data, encounter design, bosses, pacing | [LANE_C_LEVELS.md](LANES/LANE_C_LEVELS.md) |
| **D — Assets** | FLUX textures, GLB meshes, audio pack, manifest | [LANE_D_ASSETS.md](LANES/LANE_D_ASSETS.md) |
| **E — UI/HUD/Audio-engine** | HUD, menus, gut-map, WebAudio engine | [LANE_E_UIHUD.md](LANES/LANE_E_UIHUD.md) |
| **F — Integration** (Fable) | shell (`index.html`, `boot.js`), core/, contracts, QA, round instructions | [LANE_F_INTEGRATION.md](LANES/LANE_F_INTEGRATION.md) |

## A lane session, step by step

1. Read, in order: `README.md` → `docs/TECH.md` → your lane charter → the **current**
   `docs/LANES/ROUND<N>_INSTRUCTIONS.md` (highest N not marked SUPERSEDED) → your own
   `docs/LANES/LANE_<X>_NOTES.md` and any "→ Lane <X>" sections in the other lanes' NOTES.
2. `git pull` first. Check `git status`; if another lane's uncommitted work is present, touch
   nothing of theirs.
3. Do the round's work **inside your territory only** (ownership map in TECH.md §Ownership).
   If you need a change in someone else's file, write the request in your NOTES under a
   `### → Lane <X>` heading (include exact code if you can — see PROCITY LANE_B_NOTES for the
   house style: offer the wiring, let the owner paste it).
4. Evidence: screenshots into `docs/shots/lane<x>/` (use `?shots=1` for clean frames). For
   audio: spectrogram sheet + numeric loop-seam check. Numbers you claim (draw calls, fps,
   gen-times) must be **measured**, and say how you measured them.
5. Update `docs/LANES/LANE_<X>_NOTES.md` (what landed, measured results, contract offers,
   open questions) and append a dated entry to `docs/progress/<x>-progress.md`.
6. `bash tools/qa.sh` — leave it green.
7. Commit **only your exact paths** (`git add <file> <file>` — never `git add .` / `-a`),
   message `[lane X] <what>`, and **push**.

## Rounds

- F writes `ROUND<N>_INSTRUCTIONS.md` after reviewing all lanes' NOTES + progress + shots.
  Old round files get a `⚠ SUPERSEDED` banner — never action a superseded round.
- Rounds are sized so a lane session finishes comfortably in one context window. If you're
  running long: land what's solid, document the rest as "next round" in NOTES, push.
- Blocked on another lane? Build against the **stub** (`?stub=1`, `js/stub/world_stub.js`)
  or the contract in TECH.md; never idle-wait, never implement the other lane's side.
- Integrator decisions in round instructions are **settled** — don't relitigate in-lane;
  argue in NOTES for next round if you must.

## Git specifics

- Remote: `ssh://git@100.71.119.27:222/monster/guts.git`, single branch `main`.
- Lanes may share one working tree (PROCITY style) or run from separate clones — either way
  the exact-path staging rule and pull-before-work rule are what keep it safe.
- Generated artifacts that are re-derivable (raw gen output, staging GLBs, WAV scratch) are
  git-ignored; shipped assets (`web/assets/**` webp/ogg/m4a/glb) are committed. See
  `.gitignore` + PIPELINE.md §Artifacts.
