Slice 49 - CLI Admin Edge Split
Date: 2026-06-29
Scope#
Split the admin command adapter out of the broad CLI dispatch/render roots.
Decisions#
- Keep
cli/main.pyas the executable entrypoint andcli/parser/as the command parser package. - Move
doctor,update,jobs, andautomationdispatch tocli/dispatch/admin.py. - Move admin output rendering to
cli/render/admin.py. - Move shared CLI config/duration resolution to
cli/dispatch/config.py. - Keep services and workflows unchanged; the CLI remains an adapter that builds
request models and calls
CodeAlmanac. - Do not split wiki and lifecycle dispatch until the next concrete command change creates pressure.
Cosmic Python Transfer#
Cosmic Python chapter 4 frames the service layer as the use-case boundary between entrypoints and the domain. Chapter 13 moves setup responsibility out of entrypoints and into a composition root. This slice applies that by keeping admin command modules as entrypoint adapters only:
def dispatch(args, app):
if is_admin_command(args.command):
return dispatch_admin(args, app)
def dispatch_admin(args, app):
plan = app.updates.check(CheckUpdateRequest())
render_update_plan(plan, json_output=args.json)dispatch_admin() does not own update, diagnostics, run, or automation product
logic. It delegates to app.updates, app.diagnostics, app.runs, and
app.automation.
Files#
src/codealmanac/cli/dispatch/root.pysrc/codealmanac/cli/dispatch/admin.pysrc/codealmanac/cli/dispatch/config.pysrc/codealmanac/cli/render/root.pysrc/codealmanac/cli/render/admin.pytests/test_architecture.py
Verification#
- Focused architecture and admin CLI tests.
- Focused ruff over CLI modules and related tests.
- Live CLI dogfood for
update --check --json,doctor --json,automation status --json,jobs --json --limit 1, and--help. - Full pytest, full ruff, diff check, package build, and wheel inspection.