MeridiansMeridians

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