5. How the restructure was done (and the one thing left)
From the Meridians Wiki · Public · Maintained · joint
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."