The workspace root: the rules, the specs, the migration tool, and the multi-agent machinery. It holds no game code.
- Working rules: AGENTS.md
- Locked decisions:
docs/architecture/decisions.md - Design gate:
docs/DESIGN-GATE.md— read before proposing anything
docs/has not migrated yet. It is still in the source monorepo (plant-vs-zombie-rise-of-summoner/docs/);kvsplitroutesdocs/**here (D1) butapplyhas not run. The paths above are where the docs belong, not where they are today.
| Repo | Holds | Licence |
|---|---|---|
gk-core |
Contracts, Core, Data, Server, balance numbers | AGPL-3.0 |
gk-forge |
seedsmith + the generator family | AGPL-3.0 |
gk-web |
Browser control room | AGPL-3.0 |
gk-fusion |
Injector, hosts, launcher, live-probe | AGPL-3.0 |
gk-tests |
Test platform and gate definitions | AGPL-3.0 |
gk-content |
Original names, flavour, registries | AGPL-3.0, private |
gk-data |
Content packs / derived corpus | MIT, private |
gk-assets |
Art pipeline | MIT |
The sub-repos are independent repositories, not submodules: they are untracked here and each has its own remote. Nothing in this repo compiles.
Every repo except gk-fusion must build, run, test and make sense if Plants vs.
Zombies does not exist. gk-fusion is the single, permanent exception.
tools/kvsplit/ is a deterministic Python tool that splits the old monorepo into
the repos above.
- Reads the source repo at a pinned SHA through git. Never the working tree, so it cannot collide with work in flight.
- Writes to
staging/<repo>/. Onlyapplywrites into a sub-repo, and it refuses a dirty one. - Unclassifiable input is residue, never a silent pass-through. Residue is the work queue: an agent closes an item by adding a rule or a transform, never by editing output.
- Re-running from the same inputs is byte-identical. That is the proof.
python -m kvsplit stage --source <path> --sha <sha> --rules tools/kvsplit/rules
python -m kvsplit check
python -m kvsplit residue # the agent work queueThe topology exists; the migration has not run. Only gk-assets has content.
ownership.v1.json still names four targets, so apply would route everything to
gk-core, gk-forge, gk-fusion and gk-data — gk-web, gk-tests and
gk-content would receive nothing. Extend the rules before staging.
docs/architecture/decisions.md and docs/DESIGN-GATE.md are indexes: one row
per decision or topic, with the rule text in a per-category file. Read the index,
then open the one file the row names.