ForgeKitFORGEKIT

Build Log

Arcade Cartridge Grammar — from shells to primitives to a playable prototype

July 16, 2026

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.

ArcadeArchitectureAICrucible
3
schema versions (v1 to v3)
3
Council-confirmed schema gaps closed
1
playable cartridge (Solar Drift)
5
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?

Zeb, rejecting a paper-only Phase 1 review plan and forcing the pivot to a minimal playable interpreter
Arcade Cartridge Grammar — from shells to primitives to a playable prototype — July 16, 2026 · ForgeKit