"""One directory per domain (D-263). Each domain is split by role, and the split is what makes this a codebase that shares rather than 123 scripts in twelve folders: router.py CONTROLLER — args in, delegate, format out. No logic. service.py LOGIC — transport-agnostic, importable by anything. schemas.py this domain's data shapes (pydantic). helpers.py domain-local pure helpers. dependencies.py resolved collaborators (DB handle, paths, launchers). The invariant that makes it work: `router.py` holds no logic and `service.py` holds no Typer. A service must not know it was called from a CLI — that is what lets one domain's service call another's, lets tests call services directly without a CLI round-trip, and leaves a second front end possible without a rewrite. It is also what keeps lazy loading achievable: routers are cheap, services are not, and only the invoked domain's service is ever imported. Not every domain needs every file. `schemas.py` and `dependencies.py` appear when a domain has data shapes or collaborators worth naming. The layering is a vocabulary, not a quota — a folder of five empty modules is worse than a folder of two full ones. """