The rope is where the player spends most of the night and it was still coloured
primitives behind a single street plate.
- kebabShop: the moral centre of the game (design §5) was three rects and the
word KEBABS. The warm spill on the footpath stays procedural — it is the only
warm light in the scene and it is what says the shop is open.
- front:<venueId>: one facade per rung of the ladder, so a promotion is visible
from the footpath. ROOM also loses the procedural NOT TONIGHT sign, because
"no sign. no socials." is its actual entry in data/venues.ts.
- Footpath: a street lamp, a bin, a waiting cab, and brass stanchions on the
carpet. The cab is alpha'd back and depth-1 so it never looks clickable next
to the kebab shop, which is.
- poster4..poster9, so four venues stop sharing one wall of three. Mangled
lettering is correct on posters and always has been.
And a composition bug I put in this same wave: the per-venue street plates were
first prompted as "frontage", so The Royal's backdrop was a whole pub with its
own central door and the venue facade then sat on top of it — two pub fronts,
two doors. Voltage's original plate has always been a WALL, which is what a
backdrop has to be. Re-prompted all three as blank walls and regenerated. No
test would have caught that; I found it by looking at the screen.
127 sprites now, none missing.
Gate: lint clean, build clean, 821 tests passing.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 generated props -> 86. Every one of the 76 prop kinds placed across the four
venues has a sprite; nothing renders as a placeholder.
tools/gen/ is the pipeline: assets.py is the manifest (one entry per sprite —
prompt, ship size, rake, route), run_batch.py walks it, resumable, --workers N.
Cloudflare Workers AI first for its 10k free daily neurons, falling back to
MODELBEAST flux_local automatically. Today's allocation was already spent when
the run started — confirmed from Cloudflare's own error body rather than assumed
— so this batch is entirely farm-rendered.
The mesh tier is the part worth keeping: TRELLIS's defaults (1024_cascade + a
2048px metal PBR bake) cost 5-12 minutes each on a queue that runs one gpu job
at a time, which is four hours for a tileset. mb.FAST_MESH (512 + vertex baker)
lands in ~90s, and A/B'd at ship size the difference does not survive the
downscale to 32px.
Also adds the door's per-venue street plates, keyed on the venue id exactly —
'theRoyal', not a case fold, because props_import writes ':' as '_' and a
lowercased key looks for a plate nobody made.
Gate: lint clean, build clean, 821 tests passing.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>