Problem
UI-layer convention/hygiene items found during the repo-wide audit (bundled):
- ConsoleWriter bypasses —
cli_main.py:117 (print_banner(Console())), :159 (click.echo(ctx.get_help())), :163 (console = Console()), cli/commands/export.py:162 (click.echo(tasks_data)). Project convention is all CLI output through ConsoleWriter; these four write raw stdout, so they can't be captured/width-controlled/silenced. Consider a ConsoleWriter.raw(text) for payload output.
audit list builds its Rich table inline (cli/commands/audit/list.py:169-206) — the only CLI view not using a renderer; the same per-cell decisions are re-made in tui/widgets/audit_log_entry_builder.py:33-60 with a different truncation width (MAX_ERROR_LENGTH = 40 vs AUDIT_CHANGES_WIDTH). Extract a RichAuditLogRenderer and share the constant.
- Stale TCSS selectors —
tui/styles/components.tcss:120,129 (#filterable-task-table) and tui/styles/main.tcss:13 (#table-title) match no widget id in the codebase. Delete.
Found during repo-wide audit, 2026-07-25.
Problem
UI-layer convention/hygiene items found during the repo-wide audit (bundled):
cli_main.py:117(print_banner(Console())),:159(click.echo(ctx.get_help())),:163(console = Console()),cli/commands/export.py:162(click.echo(tasks_data)). Project convention is all CLI output throughConsoleWriter; these four write raw stdout, so they can't be captured/width-controlled/silenced. Consider aConsoleWriter.raw(text)for payload output.audit listbuilds its Rich table inline (cli/commands/audit/list.py:169-206) — the only CLI view not using a renderer; the same per-cell decisions are re-made intui/widgets/audit_log_entry_builder.py:33-60with a different truncation width (MAX_ERROR_LENGTH = 40vsAUDIT_CHANGES_WIDTH). Extract aRichAuditLogRendererand share the constant.tui/styles/components.tcss:120,129(#filterable-task-table) andtui/styles/main.tcss:13(#table-title) match no widget id in the codebase. Delete.Found during repo-wide audit, 2026-07-25.