Repo: forge-assets (the Forge 3D asset library). You work in your own git worktree; commit on your branch there (small
commits, clear messages). Do not push or deploy. Touch only the files your brief lists (new files you create are fine).
Read first: omg/kit/building/SETTLEMENT.md (FROZEN interfaces for this round: follow them exactly; extend with
optional fields only and say so in your report), omg/kit/building/TYPES.md, omg/kit/building/BLUEPRINT.md sections
you need, and the existing modules you build on (spec.mjs, layout.mjs, render.mjs, village.mjs, styles/medieval.mjs,
kits-src/medieval/style.json, browse/buildings.html).
Kits: browse/kits/<kit>/ (kit.glb + kit.json + materials.json). The NEW kits (medieval-trades, medieval-church,
medieval-cathedral, medieval-walls) are being made in Blender right now and will NOT exist while you work: every atom
you place must fall back to a plain grey box of the size SETTLEMENT.md gives (and a finding), so your code runs and
your page renders without them. Never make the code depend on a kit being present.
Code style: plain modern JS ES modules, no build step, no dependencies beyond three.js (only render files and pages
touch THREE; everything else is pure JS under `node --test`). Compact, commented where the reason is not obvious.
No em dashes anywhere (code, comments, docs). Every relative import stays inside omg/kit/building (a test checks it).
Setup: browse/vendor (three.js) is not in git: `ln -s ~/forge-build/forge-assets/browse/vendor browse/vendor` in your
worktree (never commit it; tools/gpu/run.sh follows it). Pages: browse/ pages import copies made by `tools/sync_building.sh` (browse/building/ and browse/kits/*/style.json).
Run it to test your page, but do NOT commit those copies (the root re-syncs). Serve browse/ locally with
`python3 -m http.server <port> --bind 127.0.0.1` (port given in your brief) and stop ONLY the server PID you started.
Headless GPU look: `FAL_PORT=<port> tools/gpu/run.sh <probe.py> /tmp/<your-id>-shots` runs a playwright probe on the
GPU box (read tools/gpu/buildings_probe.py for the pattern) and copies screenshots back; LOOK at them with your image
tool. Scratch only under /tmp/<your-id>-*; delete it when done.
Tests: `node --test omg/kit/building/test/` must pass before you finish.
Finish with a short report: what you built, test summary, screenshots path, what is NOT done, interfaces extended.
Time box: 75 minutes. Stop at the time box with what works committed.
