Build Log · July 16, 2026
Arcade Cartridge Grammar — from shells to primitives to a playable prototype
Designed a generative game grammar for Arcade, pressure-tested it through the Crucible, and proved the first primitive set with a real playable game — Solar Drift, tuned live against Zeb's feedback.
- Arcade
- Architecture
- AI
- Crucible
- schema versions (v1 to v3)
- 3
- Council-confirmed schema gaps closed
- 3
- playable cartridge (Solar Drift)
- 1
- live playtest tuning passes
- 5
schema versions (v1 to v3)
Council-confirmed schema gaps closed
playable cartridge (Solar Drift)
live playtest tuning passes
Timeline
Start
Doc sync
ignition.md §4 deploy path — 5 of 9 deploy scripts listed, synced to match package.json
Charge
Arcade: 12 static games → 9 generated per session
"Don't get attached" — ephemeral, TikTok-adjacent novelty without the compulsion
Anvil 1
Shells vs. primitives
Zeb corrected Claude's first answer (reusable game shells) — collapsed 'today's architecture can't do this' into 'this can't be done'
Anvil 2
Description language vs. execution language
v1 cartridge schema was syntactically complete but causally empty — prose was carrying logic the JSON never expressed
Crucible
Architect persona, council mode
Confirmed both self-flagged gaps as real blockers, surfaced a third (traits-matching) unprompted
v3
Schema patched
out-of-bounds + trait-match/trait-mismatch interactions, lifespanMs on entities
Build
Minimal runtime + Solar Drift cartridge
Generic interpreter, zero per-title conditionals, throws on unimplemented primitives instead of silently guessing
Playtest
5 live tuning passes with Zeb
Bounce physics bug found and fixed, flare count/speed/direction tuned to 'fun, not too easy, not too hard'
What shipped
ignition.md §4 DEPLOY PATH synced to all 9 actual npm run deploy:* scripts
Anvil + Strike logged for the shells-vs-primitives and description-vs-execution-language reframes
experiments/arcade/docs/cartridge-grammar-draft.md — v3 GameCartridge grammar (primitive vocabulary, TypeScript schema, 5 example cartridges, diversity audit, Crucible synthesis)
experiments/arcade/lib/cartridge/types.ts — GameCartridge TypeScript types matching the v3 schema
experiments/arcade/lib/cartridge/runtime.ts — minimal generic interpreter (entities, orbit/linear behaviors, flick control, collision/threshold/timer interactions, lose-life/end-round/apply-modifier effects)
experiments/arcade/lib/cartridge/cartridges/solar-drift.ts — hand-authored, live-tuned cartridge data (not hand-coded game logic)
experiments/arcade/app/cartridge-lab/page.tsx — standalone proving-ground route (not yet in the game registry), canvas render + pointer input wired to the runtime
“How do we get to runtime/renderer with any confidence until I play the actual game?”