High-level project phases. The phase marked [CURRENT] is the active focus. Sub-task IDs (e.g. 0.3) are atomic units of work — a sub-task closes when its commit lands.
- 0.1 Create GitHub repo & local structure (done — repo initialized, structure in place)
- 0.2 Create Unity 6 URP project (done in commit 0d89b19)
- 0.3 Install Unity packages (VContainer, UniTask, MessagePipe, DOTween, Cinemachine) (+ MessagePipe.VContainer integration)
- 0.4 Create folder structure & assembly definitions for the five layers (2026-05-01)
- 0.5 Wire up Node.js Express server skeleton (endpoints come in Phase 3.5)
- 0.6 README skeleton at repo root
Single pass to align GDD / architecture.md / Roadmap.md / CLAUDE.md after the persistence/backend redesign locked in IScheduleStore + authoritative server.
- 0.7.1 Sweep 9 doc inconsistencies (event names,
ISessionUploadervsISessionResultsUploader,DeckAssetvsDeckScriptableObject, strayIRandomProvider,Resources/DatavsScriptableObjects/, stalememory-foyer-plan.mdreference, Phase 1.2 date format, commit-hash check, Card/Deck-as-records confirmation) (2026-05-02) - 0.7.2 Rewrite GDD §8 (5 endpoints, SQLite, idempotency) (2026-05-02)
- 0.7.3 Rewrite GDD §12 Architectural Mapping (replace uploader/stats with
IScheduleStoretriple; canon event names) (2026-05-02) - 0.7.4 Rewrite GDD §15 Limitations (authoritative server, degraded offline, last-write-wins) (2026-05-02)
- 0.7.5 GDD §4.5 — drop
IRandomProvider, keep onlyIClock(2026-05-02) - 0.7.6 architecture.md — Composition root + Project-specific conventions (2026-05-02)
- 0.7.7 CLAUDE.md — drop
Resources/Data/, dropIRandomProvider, refresh Backend section (2026-05-02) - 0.7.8 Roadmap.md — Phase 2/3/3.5 restructure (this file) (2026-05-02)
Tag: v0.0.7-docs.
- 1.1
Card,Deckmodels +CardId,DeckIdrecord structs (2026-05-01) - 1.2
ReviewGradeenum (Again=0, Hard=3, Good=4, Easy=5) (2026-05-01) - 1.3
Sm2Statevalue object (2026-05-02) - 1.4
IClockinterface +SystemClockimplementation (2026-05-02) - 1.5
Sm2Algorithm.Schedule(state, grade, reviewedAt)— pure SM-2 (2026-05-02) - 1.6 EditMode test asmdef setup (2026-05-02)
- 1.7 SM-2 tests: NewCard & first review (~9 cases) (2026-05-02)
- 1.8 SM-2 tests: subsequent reviews & EF bounds (~5 cases) (2026-05-02)
- 1.9 SM-2 tests: failure & reset paths (~4 cases) (2026-05-02)
Tag: v0.1-domain.
- 2.1
IDeckRepositoryinterface (2026-05-02) - 2.2
IScheduleStoreinterface +SessionResult/CardReviewrecords (Application/Persistence/) (2026-05-02) - 2.3
ServerConfigrecord (Application/Configuration/) (2026-05-02) - 2.4
CachingScheduleStorecomposite (HTTP primary + JSON cache fallback) (2026-05-02) - 2.5
IAnalyticsService(2026-05-02) - 2.6
IReviewSessionServiceinterface +SessionStateenum (2026-05-02) - 2.7
ReviewSessionServiceimplementation (depends onIScheduleStore) (2026-05-02) - 2.8 Session events (
SessionStartedEvent,CardReviewedEvent,SessionFinishedEvent,DeckSelectedEvent) (2026-05-02) - 2.9
ReviewSessionServicetests with fakes (~7 cases) (2026-05-02)
Tag: v0.2-application.
- 3.1 Schedule DTOs (
Sm2StateDto,CardScheduleDto,DeckScheduleDto,SessionResultDto,CardReviewDto) (2026-05-03) - 3.2 Domain ↔ DTO mappers (
Infrastructure/Dtos/ScheduleMappers.cs) (2026-05-03) - 3.3
IHttpClient(Application) +UnityWebRequestHttpClient(Infrastructure) (2026-05-03) - 3.4
HttpScheduleStore(Infrastructure/Persistence/) (2026-05-03) - 3.5
JsonFileScheduleCache(Infrastructure/Persistence/,Application.persistentDataPath) (2026-05-03) - 3.6
ServerConfigAssetScriptableObject (2026-05-03) - 3.7
DeckAsset+ScriptableObjectDeckRepository(2026-05-03) - 3.8
ConsoleAnalyticsService,NoOpAnalyticsService(2026-05-03) - 3.9 Mapper tests (8 cases) (2026-05-03)
Tag: v0.3-infrastructure.
May proceed in parallel with Phase 1 — no shared files with the Unity client.
- 3.5.1
server/package.json+ deps (express,better-sqlite3,zod; dev:vitestornode:test) (2026-05-03) - 3.5.2
server/schema.sql+ migration loader inserver.js(2026-05-03) - 3.5.3
— dropped 2026-05-04 in commitserver/seed.js7f9b3fe; seeding replaced byserver/decks.json(see 3.5.12) (2026-05-03 → dropped) - 3.5.4
server/sm2.js(port of GDD §4) +server/sm2.test.js(2026-05-03) - 3.5.5
server/server.js— Express scaffold,zodvalidation, error middleware (2026-05-03) - 3.5.6
GET /health,GET /decks,GET /decks/:id/schedule(2026-05-03) - 3.5.7
POST /sessions(server-side SM-2 + idempotency onsessionId) (2026-05-03) - 3.5.8
GET /sessions/:id(2026-05-03) - 3.5.9
server/server.test.js— integration tests (~7 cases) (2026-05-03) - 3.5.10
server/openapi.yaml(2026-05-03) - 3.5.11
server/README.md— run, curl, schema, why-authoritative (2026-05-03) - 3.5.12
DeckExportereditor tool (Tools → Memory Foyer → Export Decks) — generatesserver/decks.jsonfrom DeckAssets (2026-05-04 → superseded 2026-05-16 by Phase 7.5: export folded into the Deck Author window, standalone menu item removed)
Tag: v0.3.5-backend.
- 4.1
ProjectLifetimeScopewith all bindings (incl.IScheduleStoretriple,ServerConfig) + MessagePipe registration (2026-05-04) - 4.2
FoyerLifetimeScope(initially empty, populated in Phase 5/6) (2026-05-04) - 4.3 Composition smoke-test
IStartable(2026-05-04)
- 5.1 Scene setup (floor, walls, lighting) (2026-05-06)
- 5.2 URP post-processing (bloom, vignette) (2026-05-06)
- 5.3 Deck-button prefab (UGUI: name + stats label + disabled state) (2026-05-06)
- 5.4
DeckSelectionViewMonoBehaviour (3 deck buttons + offline banner) (2026-05-06) - 5.5
FoyerPresenterpullsIDeckRepository+IScheduleStore, feedsDeckSelectionView(2026-05-06) - [~] 5.6 ~~Cinemachine virtual camera with slow dolly (~6 s loop, non-interactive)~~ — cancelled 2026-05-10: dolly motion looked off; replaced with Cinemachine Basic Multi Channel Perlin (idle breath). See GDD.md.
- 5.7 EventSystem + GraphicRaycaster sanity check (UGUI overlay) (2026-05-06)
Tag: v0.4-foyer-mvp.
- 6.1 (2026-05-11 → 2026-05-11) Canvas layout with card display + 4 grade buttons
- 6.2 (2026-05-12 → 2026-05-12)
ReviewViewMonoBehaviour - 6.3 (2026-05-12 → 2026-05-12)
ReviewPresenterwired toIReviewSessionService - 6.4 (2026-05-12 → 2026-05-12) Register both presenters in
FoyerLifetimeScope - 6.5 (2026-05-12 → 2026-05-12) Deck-button stats refresh on
SessionFinishedEvent— subscription wired in commit 32af3eb (alongside 6.3/6.4);FoyerPresenterre-runsRefreshAsyncand rebindsDeckButtonModelfor every deck. Event publication is covered byReviewSessionServiceTests. - 6.6 (2026-05-12 → 2026-05-12) End-to-end smoke (server + Unity Play; verify offline-cache fallback by stopping server mid-session)
Tag: v0.5-mvp.
The deck → server sync path (originally DeckExporter, 3.5.12) is folded into the DeckAuthorWindow Export button (7.5). Phase 7 is the single authoring surface.
- 7.1
DeckAuthorWindowscaffold (Tools → Memory Foyer → Deck Author) (2026-05-16) - 7.2 Deck list pane (ListView from
AssetDatabase.FindAssets) (2026-05-16) - 7.3 Card editor pane (2026-05-16)
- 7.4
CSV import button— cut 2026-05-16, stretch goal not pursued (stretch → cut) - 7.5 Export button —
DeckExportService+DeckJsonSerializer(folds in 3.5.12DeckExporter; standalone menu item removed) (2026-05-16)
- 8.1 Capture
docs/demo.gif(full cycle: foyer → review → summary) (2026-05-19) - 8.2 Architecture mermaid diagram in
docs/architecture.md - 8.3 Full README with highlights, trade-offs, what's next (2026-05-19)
- 8.4 Repo settings (description, topics, pin) (2026-05-19)
Tag: v1.0.
- 9.1
.github/workflows/tests.ymlwithgame-ci/unity-test-runner - 9.2 Unity license activation flow
- 9.3 README badge
- 10.1 DOTween animations — completed 2026-05-17: card flip & deck-button press pre-existed; this pass added the broader motion layer (reusable
UIButtonFeedbackon grade/return buttons,CanvasTransitionscreen fade-in for Foyer/Review/Summary, staggered deck-card & grade-button entrances, review card dismiss+deal replacing the overloaded flip-as-advance). Subsumes Backlog I-1.