What: discovery.py, health.py, membership.py, tombstones.py, migration.py, scaffolding/ all live flat next to routes/.
Why: The mental model "discovery → DB → routes → docker_client" is implicit. The codebase will get harder to navigate as it grows.
Approach: Reshape into mcontrol/{routes,domain,infra}/. infra/ holds db, docker_client, rcon; domain/ holds discovery, lifecycle_state, membership, tombstones. Pure mechanical move — no behaviour change.
What:
discovery.py,health.py,membership.py,tombstones.py,migration.py,scaffolding/all live flat next toroutes/.Why: The mental model "discovery → DB → routes → docker_client" is implicit. The codebase will get harder to navigate as it grows.
Approach: Reshape into
mcontrol/{routes,domain,infra}/.infra/holds db, docker_client, rcon;domain/holds discovery, lifecycle_state, membership, tombstones. Pure mechanical move — no behaviour change.