Off-chain prototype — prove the loop is fun
target: months 0–3 Built5 epics
- ✓E0.1 Monorepo scaffold
- ✓E0.2 Engine core
- ✓E0.3 Web app — playable game
- ✓E0.4 Offline progress + juice
- ✓E0.5 Fun check (Gate G0)
Phase 0 shipped a playable game and then failed its own fun gate before a single tester was recruited. Phase 0R is the rebuild. Everything past it stays locked until the gate is re-run and passes.
Not failed on the numbers — failed before recruiting. The prestige curve was a runaway: 1.02^√(gold/1e6) multiplying production that feeds gold back in. Diagnosed in doc 08 after a few hours of real play. Running ten strangers at a build already known to break would have burned ten first impressions.
balance.ts: delete PRESTIGE, add REFORGE + EMBER_TREE (doc 10 §6–7); embersForFloor() replaces embersFor(); sim/rates.ts swaps emberMultiplier() for treeMult(state, branch) (production branch only wired for now).migrate.ts step: new fields with defaults, ember cap, legacy item power (doc 10 §8); SAVE_VERSION = 2; migration tested against a captured copy of Son's real broken save.divergence.sim.test.ts per doc 11, including the old-design guard test and the mutation-duty header.pacing.sim.test.ts untouched and green.Scope contract is binding. A task that needs a second hero, a second combat stat, parallel dungeons, skills, or a combat simulation means stop and fall back to option A — not “just this once”.
Judged specifically against doc 08's through-line: did a rare drop or a risky craft feel like a fortune, and is selling rare items by hand a decision or a chore. Miss it and Phase 0R iterates — Phase 1 does not open.
The one that unlocks blockchain work. Until it passes, packages/contracts stays an empty placeholder and doc 05 stays sealed.
passport_address on player, 16+ age gate, region capture. AC: link/unlink-request flows tested; iOS/android channels unaffected.GET /meta/:itemId.json|.png with seed-renderer (layered SVG), immutability after mint. AC: testnet token renders on Immutable explorer./v1/mint/:itemId validations per doc 05, mint_requests, Minting API integration, signature-verified webhook, lock lifecycle, mint UI (webfull/desktop flags). AC: doc-05 security checklist fully ticked; 50-mint testnet rehearsal incl.…If missed: Improve onboarding before marketplace
E3.1 Orderbook integration: list (maker fee 200 bp) / cancel / fulfill via @imtbl/orderbook + Passport; item lock while listed. E3.2 Indexer: poll listings/trades → new tables → market UI (browse by rarity/affix, activity feed) + owner reconciliation ("away" items). E3.3 USD-approx display (CoinGecko cache),…
If missed: Pause fee tuning, investigate
E4.1 Capacitor Android (blockchain declaration, link-out flag) → closed track → production. E4.2 Capacitor iOS (game-only build; external-link flag only if US rules verified at submission time) → TestFlight → review. Log outcomes in docs/store-review-log.md; follow doc 06 rejection ladder. E4.3 Tauri Win/Mac/Linux +…
No build tasks. Produce docs/token-decision.md against Gate G5 criteria. Default outcome: remain token-free.
If missed: Default: never launch a token
scripts/check-copy.ts banned-language CI gate (doc 06 rule 5) — build in Phase 0, keep updated.
check-copy to the built client bundle and to store-listing metadata (Play Console / App Store copy), which doc 06 rule 5 names but the Phase 0 gate does not reach — it scans source only, and CI runs it before pnpm build. **Due…
Strike, and Sell with a resource: "ore" | "ingots" field) land in E0.3; RUN_START_GOLD drops from 400 to 0 when they do. This line…
balance: commits touching balance.ts + doc 02 together.