Saluca Labs · Epic AI MegaJam 2026

Glass Box dev log

What broke, and how it was fixed

Taken from the full lessons-learned document written after submission. Failures are listed as plainly as the successes, each with its cause and its fix.

What worked

Fable first, then Opus as the escalation rung (R9, R28).

The 1st AD gate (R10).

Lanes and the side car.

One asset per task (R32). After R32 a rejected image cost one small task, not a rerun of a group of 12 to 43 files.

Rulings carried in every brief. Agents applied R14, R30, R33 and R40 without being told twice. They saw a ruling only from the next run, because a run holds the plan it loaded.

Recovery and recorded state.

Measured gates on the last day. None of these passed on a status code; each read the artifact:

The lossless fix before the lossy one. The size problem ended with Oodle Leviathan pak compression and deflate 9, with no visual change. The texture caps alone had reached 1,001.5 MB.

What did not work, with cause and fix

The 14 Nov draft records these in full, and they still stand:

Their final state:

Below are the failures of the last day, each with its cause and the fix it calls for.

Ship requirements found at the release candidate

The 1 GB zip limit.

Editor-only references in cooked content.

The itch page text had gone stale and false.

The gameplay video's audio path.

The runner kept working on frozen work

Wrong model on a release-critical task

Fragile task identity

Breaking changes made by hand under time pressure

Leftover processes and machine state

Capacity limits

Smaller ones

Tokens: what was recorded

What was not recorded. The build runner did not record tokens or cost. runs.jsonl has no usage field, and neither has any other runner ledger. That is a finding in itself: we cannot say what one task, one review or one fix round cost.

What was recoverable. Every Claude Code agent the runner started left a session transcript with per-message usage. postjam_tokens.py sums them, de-duplicated by message id: 490 runner sessions, plus the two orchestrator sessions (this one and [session]).

Messages Fresh input Cache read Output
Total 17,134 92.1 M 3,540.7 M 14.2 M
Opus 5.5 10,435 48.6 M 2,160.1 M 6.9 M
Fable 5.2 5,449 35.8 M 1,188.9 M 6.4 M
Haiku 5.5 1,242 7.7 M 191.7 M 0.9 M

By kind of work, as a share of cache-read tokens:

Kind of work Cache read Share
Feature and task work 1,287.5 M 36 %
1st AD reviews plus their fix rounds 1,304.9 M (502.4 M review, 802.5 M fix) 37 %
The orchestrator (alfred, this session) 946.8 M 27 %

What the numbers say:

Token counts

Recovered from the agent session transcripts, not logged by the runner. They cover the Claude models only; the open GLM runs and the review fallbacks on open models are not counted.

Claude Code transcripts in 140 project dirs; sessions by kind {'unattributed': 7, 'feature / task': 208, 'fix round': 130, 'review (1st AD)': 151, 'orchestrator': 2}
fresh-in = input + cache creation (billed at or above the input rate); cache-read = cached context re-read
TOTAL msgs  17134  fresh-in    92.13M  cache-read   3540.69M  out   14.15M
by model
  claude-opus-5-5              msgs  10435  fresh-in    48.59M  cache-read   2160.10M  out    6.85M
  claude-fable-5-2             msgs   5449  fresh-in    35.84M  cache-read   1188.94M  out    6.40M
  claude-haiku-5-5             msgs   1242  fresh-in     7.70M  cache-read    191.65M  out    0.90M
  <synthetic>                  msgs      8  fresh-in     0.00M  cache-read      0.00M  out    0.00M
by kind of work
  feature / task               msgs   6601  fresh-in    36.28M  cache-read   1287.48M  out    5.69M
  orchestrator (this session)  msgs   3149  fresh-in     4.76M  cache-read    946.83M  out    1.71M
  fix round                    msgs   4191  fresh-in    24.85M  cache-read    802.48M  out    4.00M
  review (1st AD)              msgs   3171  fresh-in    25.77M  cache-read    502.40M  out    2.75M
  unattributed                 msgs     22  fresh-in     0.47M  cache-read      1.49M  out    0.01M
by day (PT)
  Tue 10 Nov                   msgs      1  fresh-in     0.05M  cache-read      0.02M  out    0.00M
  Wed 11 Nov                   msgs    133  fresh-in     0.97M  cache-read     14.62M  out    0.05M
  Thu 12 Nov                   msgs   2003  fresh-in     6.40M  cache-read    404.51M  out    1.18M
  Fri 13 Nov                   msgs   3322  fresh-in    16.77M  cache-read    844.40M  out    3.55M
  Sat 14 Nov                   msgs   7151  fresh-in    45.30M  cache-read   1442.82M  out    6.39M
  Sun 15 Nov                   msgs   4524  fresh-in    22.64M  cache-read    834.32M  out    2.98M

If we started tomorrow

The 14 Nov list still stands:

  1. Lanes own maps from hour one.
  2. Three side slots.
  3. One asset per task.
  4. Fable or Opus for making.
  5. An owner-aware 1st AD cap.
  6. Per-slot budgets and long runs.
  7. Reload code at a save point.
  8. A Shipping smoke on every landing.
  9. A clean editor after every task.
  10. Batched decisions.
  11. Mesh to MetaHuman on day one.
  12. CI before a dependency enters the plan.

The last day adds:

  1. Ship gates from hour one, not at rc. Measure the zip on every package against 1 GB decimal; scan cooked content for editor-only references; diff the store page against the build's asset manifest; record a 10-second capture with game audio and master it.
  2. A freeze is state. After gold, reviews become notes, recovery stops reposting, and the runner refuses new fix tasks against frozen artifacts.
  3. Pin release work to one strong model for every attempt. No cheap first try on package, release, git surgery or submission work.
  4. One owner per goal. A superseded task's recovery closes; it never runs in parallel with its replacement.
  5. Ids are allocated, parsed and checked by one module. Dependencies use task ids.
  6. Measure tokens per task in the runner, and give each task a budget. Shrink the base brief: 80 k tokens before the first action is the largest single cost we can see.
  7. Probe quotas and upload paths on day one: model limits, butler, the browser upload size, the store's size limits.
  8. Every launched process is owned by its task and dies with it.

Written by an agent (Claude Code, Opus 5.5). Not reviewed by Cristian.