← Portfolio overviewbudget exhausted

Phaser browser roguelite

The Adventures of Foxman: Rotten Run

A protected authored campaign gained a separate, deterministic three-stage roguelite mode without replacing or corrupting the original game.

Outcome

Five leaves accepted; boss and final gates remain

This report separates accepted product truth from preserved candidate work. A missing critic or device proof is treated as an open gate, not a semantic technicality.

Before

Campaign was the only playable run; Rotten Run had no loop, economy, build matrix, death contract, or boss boundary.

After

A seed-addressable mode with three two-wave stages, planned routes, markets, four weapons, three skills, upgrades, enemy roles, elites, death/retry, and an honest inert Commissioner dossier.

Accepted boundary

  • LEAF-001 through LEAF-005 and product commit d849c4f
  • Complete Stage 1–3 combat, rewards, routing, and same-seed retry
  • Campaign remains intact with 23 authored regression routes
  • Numeric release barrier prevents a rejected market key cascading into the next scene

Held, candidate, or unstarted

  • Commissioner combat and boss patterns do not exist yet
  • Results, local records, settings, accessibility, and complete audio remain
  • Final integration, three-seed boss proof, and human acceptance were not opened

Gate history

Decision timeline

The useful unit is not the turn. It is the gate: a bounded claim, its evidence, and the verdict that controlled promotion.

LEAF-001

Deterministic Rotten shell and route docket.

LEAF-002

Stage 1 combat and same-seed death retry.

LEAF-003

Market reducer, build ownership, and Stage 2.

Repair

Smoke automation isolated behind explicit smokeAuto=1.

LEAF-004

Stage 2 roles, elites, and eight effects.

LEAF-005

Stage 3 and inert Commissioner dossier accepted.

Wind-down

Boss leaf withheld when budget signal reached the stop threshold.

Existing evidence

Frames from the run.

No images were generated for this report. These are existing repository artifacts with shortened SHA-256 anchors. Candidate frames remain visibly labeled.

Testable now

Reproduce the current truth.

Commands are repository-root commands from the project's canonical debrief. They are shown for technical review, not as a public playable deployment claim.

npm ci
npm test
npm run typecheck
npm run build
npm run smoke
FOXMAN_SMOKE_ONLY=cdpLifecycle npm run smoke:browser
FOXMAN_SMOKE_ONLY=rottenStageThreeRetry npm run smoke:browser
npm run smoke:browser

The final browser command is a roughly 15-minute production matrix. Use focused routes for the inner loop.

61/61unit suite
40/40final browser matrix
899,327 msbroad matrix duration
23Campaign routes preserved

Git anchors

  • Accepted product d849c4f
  • Wind-down checkpoint e57d041
  • Final matrix 13a3d594…fa5

Known token floor

3,052,620

Known visible lead/project telemetry; descendant-specific model usage was unavailable.

Candid postmortem

Failures that changed the run.

The point of the case study is not that agents wrote code. It is that the system found reasons not to trust its own first answer.

Loops, stalls, and defects

  • A force-quit required recovery from Git and evidence receipts.
  • Closing a CDP websocket but not its browser target leaked 32+ Chrome pages and stalled the matrix.
  • Wrong native key-code fields generated thousands of spurious CDP events.
  • A rejected Stage 2 number key crossed the phase boundary into Stage 3 before a release barrier was added.

What carries forward

  • A green suite did not guarantee a green game; blind browser critics found floor, softlock, and input defects.
  • Browser lifecycle is product infrastructure for agentic testing.
  • An honest inert boss dossier was more useful than fabricating completion.
Exact next safe action

Verify clean main and the d849c4f ancestor, then frame the smallest Commissioner combat leaf. Do not repeat accepted leaves or pay for the broad matrix until the boss contract is bounded.