Context
PR 1 of the init-wizard arc (#94) locked rich as the framework's canonical operator-facing CLI rendering library (spec/35 1C decision). The wizard uses rich for prompts and table rendering; the rest of the operator-facing CLI surface (doctor, bundle, corpus list/show/query) still uses plain print() with PASS/FAIL strings.
Per CLAUDE.md aesthetic ("the framework should feel like one thing, not a stack of seven libraries glued together"), the CLI surfaces should feel coherent. This issue tracks the migration.
What
Migrate three operator-facing CLI surfaces to rich rendering:
-
atomic-agents doctor output: render_human currently produces plain-text check results with [PASS] / [FAIL] / [SKIP] / [WARN] badges. Migrate to rich.table.Table with colored status badges. render_json stays unchanged (machine-readable contract).
-
atomic-agents bundle output: current bundle.py rendering is plain print. Use rich.panel.Panel + colored status for the section-by-section bundle preview.
-
atomic-agents corpus list/show/query output: current _cmd_corpus_* functions in cli.py use plain print. Use rich.table.Table for list and query, rich.panel.Panel for show.
Each surface can ship as its own small PR or all three bundled. spec/35 already names rich as the canonical primitive; no spec update needed.
Why
Effort
human ~3 days total / CC ~6 hours total (each surface ~1 day human / ~2 hours CC).
Acceptance
doctor output uses rich.table.Table with colored status; tests assert rendered output contains expected substrings (using Console(file=StringIO()) capture).
bundle output uses rich.panel.Panel.
corpus list / show / query use rich.
- No regressions to
--json output paths (still machine-readable).
- spec/27 (doctor catalogue) updated to note the rendering migration.
Deferred from
PR 1 of #94 office-hours TODO-3 + spec/35 canonical primitive lock: #317
Context
PR 1 of the init-wizard arc (#94) locked
richas the framework's canonical operator-facing CLI rendering library (spec/35 1C decision). The wizard uses rich for prompts and table rendering; the rest of the operator-facing CLI surface (doctor,bundle,corpus list/show/query) still uses plainprint()with PASS/FAIL strings.Per CLAUDE.md aesthetic ("the framework should feel like one thing, not a stack of seven libraries glued together"), the CLI surfaces should feel coherent. This issue tracks the migration.
What
Migrate three operator-facing CLI surfaces to rich rendering:
atomic-agents doctoroutput:render_humancurrently produces plain-text check results with[PASS]/[FAIL]/[SKIP]/[WARN]badges. Migrate torich.table.Tablewith colored status badges.render_jsonstays unchanged (machine-readable contract).atomic-agents bundleoutput: currentbundle.pyrendering is plain print. Use rich.panel.Panel + colored status for the section-by-section bundle preview.atomic-agents corpus list/show/queryoutput: current_cmd_corpus_*functions in cli.py use plain print. Use rich.table.Table forlistandquery, rich.panel.Panel forshow.Each surface can ship as its own small PR or all three bundled. spec/35 already names rich as the canonical primitive; no spec update needed.
Why
Effort
human ~3 days total / CC ~6 hours total (each surface ~1 day human / ~2 hours CC).
Acceptance
doctoroutput uses rich.table.Table with colored status; tests assert rendered output contains expected substrings (usingConsole(file=StringIO())capture).bundleoutput uses rich.panel.Panel.corpus list / show / queryuse rich.--jsonoutput paths (still machine-readable).Deferred from
PR 1 of #94 office-hours TODO-3 + spec/35 canonical primitive lock: #317