5. How the restructure was done (and the one thing left)
Source path: knowledge-base/knowledge/architecture/overview/migration-rationale.md
# 5. How the restructure was done (and the one thing left) The role-first layout above was migrated mechanically, lowest-blast-radius first, verifying `tsc` (module resolution) + the full suite after each move: `server/` (ops·record·sync) → `engine/` (ai·prompts·extraction·research) → `core/` (all pure derivations + the reducer, split out of the old `state/`) → `client/` (store·cache·game). The `@/* → src/*` alias meant no tsconfig change. **Kept deliberately in place:** `@/types/domain` (the domain model) — the conventional types location; moving it added churn without clarity. So the reducer lives in `core/reducer/` but the model it reduces stays at `@/types/domain`. **The one genuinely delicate move** was splitting the old `state/` folder into `core/reducer/` (the pure, shared reducer) and `client/store/` (its React binding) — because it separates the single writer from the browser plumbing that used to sit beside it. That split is *why* `core/` can now honestly claim "no React." ---Open on GitHub
Raw Markdown source