Outcome Checklist
Last reviewed: 2026-03-10
Purpose
- Product requirements live in Vision.
- High-level delivery tracking lives in Execution Tracker.
- This page is the outcome-by-outcome checklist used to close the gap from a demoable prototype to full V1 outcome coverage.
Rule For Marking An Outcome Complete
- Mark an item
[x]only when the current checkout fully matches the requirement as written in Vision. - Mark an item
[x]only when its listed validation gates are passing. - Mark an item
[x]only when there is no known blocker that would break the user-facing outcome in normal use.
Current Snapshot
- Short-term outcomes at full-spec coverage:
5 / 13 - Short-term outcomes still partial:
8 / 13 - App quality gate blocker: resolved (
npm --prefix packages/app run buildis now passing) - Automated validation on 2026-03-10:
npm --prefix packages/app run lintpassednpm --prefix packages/app run testpassednpm --prefix packages/app run tscpassednpm --prefix packages/app run buildpassed (includes PWAgenerateSW)npm --prefix packages/app run test:e2epassed with8 passed / 2 skippednpm --prefix packages/contracts testpassed with1stub contract testnpm --prefix packages/app run test:coveragepassed with33.10%statement coverage- Offline smoke validation passed against preview build (
serviceWorker.ready=true, offline reload renders login shell)
V1 Proof Loop
- Onboarding -> add plant -> record care -> earn energy -> nurture/evolve creature -> play a game
Current state: Demoable and exercised by
packages/app/e2e/core-loop.spec.cjs. Needed for 100%:- remove remaining skipped realtime E2E cases
- confirm the loop works in both same-device and true two-device play without manual caveats Validation gate:
npm --prefix packages/app run buildnpm --prefix packages/app run test:e2ewith zero skips
Short-Term Outcomes
-
1. Player can login with either passkey or Ethereum wallet Current state: Partial. Passkey is real WebAuthn and Pimlico-aware. Wallet login exists, but wallet restore only succeeds when the wallet is still connected and the automated suite does not prove the full wallet success path. Needed for 100%:
- make wallet return-after-refresh behavior satisfy the definition of done
- add automated wallet login coverage, not just passkey coverage
- decide whether offline return is required for wallet mode or only for local profile access after prior auth Validation gate:
- wallet login and restore covered in E2E
- no webdriver-only auth fallback required for the default suite Evidence:
packages/app/src/views/Login.tsxpackages/app/src/providers/AuthProvider.tsxpackages/app/src/modules/auth/passkey.ts
-
2. Player can onboard after first login and select their element, location details, and user info Current state: Partial. Element, biome, location label, optional geolocation, and resume-friendly XState flow are present. Separate user info beyond the login name is not collected, and geolocation is not used downstream. Needed for 100%:
- define the minimum user info fields required by v1 and add them explicitly
- either use geolocation in creature/environment logic or narrow the requirement
- keep the onboarding resume behavior intact Validation gate:
- onboarding state-machine tests remain green
- E2E covers interruption + resume Evidence:
packages/app/src/views/Onboard.tsxpackages/app/src/machines/onboardingMachine.ts
-
3. Player can generate creature based on selected element and local environment Current state: Partial. Creature generation is implemented, but the generator currently varies by element only; biome is stored on the creature but does not meaningfully change output. Needed for 100%:
- make biome/environment influence generation output in a visible way
- document which inputs are real in v1 and which remain stubs
- add tests that prove environment changes the output Validation gate:
- generator tests cover element + biome variation
- onboarding E2E verifies environment-driven output differences or labeled fallback behavior Evidence:
packages/app/src/views/Onboard.tsxpackages/app/src/modules/creature-generator/seed-pack.ts
-
4. Player can nurture creature with resources earned from plant care Current state: Implemented. Plant care awards energy, nurture spends energy to raise XP and stats, and gameplay reads creature state for initiative and reward bonuses. Keep watching:
- maintain gameplay stat integration as rules change Validation gate:
- machine and gameplay tests stay green Evidence:
packages/app/src/hooks/plants/usePlantCare.tspackages/app/src/hooks/creatures/useNurture.tspackages/app/src/machines/gameSessionMachine.ts
-
5. Players can evolve creature once they have enough XP and unlock new capabilities and more developed visuals Current state: Partial. Explicit evolution works and changes stage/stats, but it does not currently change signature move text or evolve the visual asset in a clear v1-complete way. Needed for 100%:
- update signature move on evolve
- update the creature visual or frame in a way the player can clearly see
- add regression tests for evolved move/visual metadata Validation gate:
- evolution tests cover metadata changes
- UI test verifies the updated stage and evolved presentation Evidence:
packages/app/src/hooks/creatures/useEvolve.tspackages/app/src/views/Deck.tsx
-
6. Player can select a plant in their local environment to care for and add it to inventory with details and initial health Current state: Implemented with stubbed health/species logic. Photo, nickname, biome, location tag, notes, first photo timestamp, and health score are stored locally. Keep watching:
- if species verification becomes mandatory for v1, wire the verifier into the add flow Validation gate:
- add-plant flow remains covered in E2E Evidence:
packages/app/src/views/Deck.tsxpackages/app/src/hooks/plants/useAddPlant.ts
-
7. Player can nurture plants with daily photos to earn resources for their creature Current state: Implemented. Daily photo is required, checklist actions are recorded, streak decay is soft, energy is granted, and care events are queued locally for later reporting/proof work. Keep watching:
- maintain queueing behavior for offline-first care submission Validation gate:
- plant care machine tests stay green
- core loop E2E keeps the daily photo requirement Evidence:
packages/app/src/views/Deck.tsxpackages/app/src/hooks/plants/usePlantCare.tspackages/app/src/modules/job-queue/handlers.ts
-
8. Player can start a game in the play tab in AR, choose Tic-Tac-Toe, Ludo, or Mancala, and play with a local peer using creatures as game assets Current state: Partial. Garden is the play hub, all three games are present, AR rendering exists, and device/local/world modes exist. Realtime setup sync now includes seat ownership, creature selection profiles, and match start signaling, but two-device realtime reliability remains environment-sensitive in automation. Needed for 100%:
- remove environment-dependent realtime skips by stabilizing transport for two-context automation
- prove AR works on supported devices beyond capability detection
- add deterministic two-device coverage for Local and World paths Validation gate:
- zero-skipped realtime E2E
- AR smoke validation on supported hardware Evidence:
packages/app/src/views/Garden.tsxpackages/app/src/components/game/GameCanvas.tsxpackages/app/src/modules/yjs.ts
-
9. Player can join game started by another player and select the creature to use Current state: Partial. Join codes, seat ownership, and per-player creature selection sync are implemented; each peer now selects only their own seat creature in network modes, and setup readiness is enforced before start. Remaining gap is deterministic two-context proof in environments where realtime transport is unavailable. Needed for 100%:
- keep the seat-owned selection flow green in two-context E2E without skip conditions Validation gate:
- separate-browser-context E2E proves host and guest each choose their own creature Evidence:
packages/app/src/views/Garden.tsxpackages/app/src/hooks/games/useGameSession.tspackages/app/src/modules/yjs.ts
-
10. Player in an active game can make a game move when it is their turn Current state: Implemented. Turn enforcement and move validation are handled in the state machine and pure game rules. Keep watching:
- preserve parity across Tic-Tac-Toe, Ludo, and Mancala Validation gate:
- rules and session tests remain green Evidence:
packages/app/src/machines/gameSessionMachine.tspackages/app/src/modules/games/*.test.ts
-
11. Player who completes game can claim their game reward based on the result Current state: Partial. Reward attribution is now seat-aware (
p0/p1) and persisted with multiplayer context; local energy/badge updates and event payloads now use the local player’s actual seat result. Remaining gap is deterministic two-context E2E proof in runs where realtime transport is available. Needed for 100%:- keep multiplayer reward attribution assertions green in non-skipped two-context E2E Validation gate:
- separate-context E2E confirms correct host and guest reward attribution Evidence:
packages/app/src/views/Garden.tsx
-
12. Player can publish and remix UGC with clear ownership metadata Current state: Implemented as a local-first foundation. Publish/remix/flag/canonize flows exist in the Profile view, and items receive content hashes, lineage, moderation state, and proof references. Keep watching:
- clarify whether simulated AT publishing is acceptable for v1 or must be made real Validation gate:
- UGC service tests remain green Evidence:
packages/app/src/views/Profile.tsxpackages/app/src/modules/ugc/service.ts
-
13. Community can promote UGC into canonized world content through transparent proof-based rules Current state: Partial. Local canonization and reproducibility checks exist, but onchain verification is read-only and depends on an external registry already being configured and populated. Needed for 100%:
- define whether v1 requires write-path integration or only reproducible verification
- if write-path is required, add registry publish/update support
- add tests that cover configured onchain registry behavior Validation gate:
- canon reproducibility passes with configured registry
- integration test covers registry-backed verification Evidence:
packages/app/src/views/Profile.tsxpackages/app/src/modules/autonomous-world/registry.tspackages/app/src/modules/autonomous-world/onchain.ts
Output Coverage
-
Fully functional and usable PWA able to be deployed Current state: Implemented for v1 deployability. Build is green, service worker generation succeeds, and offline smoke was validated by loading preview, waiting for
serviceWorker.ready, forcing offline mode, and reloading successfully. Keep watching:- reduce large bundle chunks to improve install/update performance Validation gate:
npm --prefix packages/app run build- offline smoke validation
-
Semi-integrated with Green Goods protocol for reporting plant care Current state: Partial. A report interface and local queue are present, but it falls back to a stub when config is absent and there is no direct test coverage. Needed for 100%:
- decide whether a stubbed interface is sufficient for v1
- if not, add live endpoint integration and tests Validation gate:
- direct tests for report success and failure paths Evidence:
packages/app/src/modules/green-goods/reporting.ts
-
README documentation outlining core aspects Current state: Present in root and app README files. Keep watching:
- keep docs aligned when behavior changes Evidence:
README.mdpackages/app/README.md
-
UGC and autonomous world framework documented Current state: Partial. The structure is documented, but story/canon content in the app code is still explicitly marked TODO. Needed for 100%:
- finish the v1 canon/story content and onboarding copy
- ensure youth-safety/moderation/promotion rules are fully documented in one place Validation gate:
- docs and app copy match the intended v1 canon Evidence:
- Protocol Stack
packages/app/src/data/story.ts
Path To 100% Outcome Coverage
-
1. Restore the green deployment path Steps:
- fixed
npm --prefix packages/app run build(type errors + PWA runtime/deploy config) - reran lint, tests, typecheck, coverage, E2E, contracts, and build
- added and executed an explicit offline smoke validation pass
- fixed
-
2. Close the multiplayer correctness gaps Steps:
- [done] synchronize host/guest setup state, including creature ownership and readiness
- [done] fix reward attribution for true two-device play
- [remaining] replace skipped realtime coverage with deterministic passing coverage
-
3. Finish the “real vs stubbed” decisions for identity and proofs Steps:
- decide whether AT Protocol remains a local v1 stub or becomes a real provider flow
- decide whether EAS remains offchain for v1 or must reach live registry/timestamping
- decide whether Green Goods stub reporting satisfies the outcome or must hit a real endpoint
-
4. Complete the creature growth spec Steps:
- make environment affect creature generation in a visible way
- make evolution update signature move and visual presentation
- add regression tests for both behaviors
-
5. Complete the story/canon layer Steps:
- replace placeholder story content in
packages/app/src/data/story.ts - align onboarding copy, lore, and creature metadata with the v1 narrative
- verify the story constraints in Vision are actually represented in the app
- replace placeholder story content in
-
6. Strengthen validation to match the claims Steps:
- raise statement coverage in the highest-risk runtime code:
views,hooks, auth, sync, AR, Green Goods - add offline/PWA runtime verification
- add AR smoke validation on supported hardware
- expand contract coverage beyond the current stub test
- raise statement coverage in the highest-risk runtime code:
Immediate Next Actions
- Remove realtime transport-dependent E2E skips for two-context multiplayer
- Convert two-context multiplayer reward assertions from conditional-skip to always-on
- Decide the required v1 bar for AT Protocol, EAS, and Green Goods integrations
- Replace placeholder story/canon content
- Validate AR gameplay path on supported hardware and capture smoke evidence