Current output
=== Base Structure ===
[MISS] docs/ai/requirements/README.md
Run: npx ai-devkit@latest init
[MISS] docs/ai/design/README.md
Run: npx ai-devkit@latest init
...
5 required check(s) failed.
Problems
- Completely different visual language from the rest of the CLI:
=== Base Structure === headers and [MISS] tags use no ui.* components, no color, and no glyphs — every other command uses bold headers, ✔/⚠/✖ prefixes, and colored statuses. lint output looks like a different tool.
- No color anywhere:
[MISS] (required failure), warning-level checks, and the pass state are visually identical; the severity mapping only exists in LINT_STATUS_LABEL.
- Summary line has no outcome signal:
All checks passed. and 5 required check(s) failed. are plain text — no ✔/✖ glyph, no green/red, though this is the single most important line for CI and humans.
- Naive pluralization:
check(s) failed., warning(s) reported.
- Magic 7-space fix indentation:
Run: npx ai-devkit@latest init aligns to a hand-counted offset that breaks if LINT_STATUS_LABEL widths change; no dim styling to de-emphasize the hint.
=== decoration collides with the bold-header convention used by channel list (Configured Channels:), status, and agent list.
Expectation
Base Structure
✖ docs/ai/requirements/README.md
Fix: npx ai-devkit@latest init
✔ All checks passed.
- Route output through
ui.* (ui.table or styled ui.text): bold section titles (no ===), colored status glyphs (✖ red for required misses, ⚠ yellow for warnings, ✔/dim for passes when not --quiet).
- Fix hints on their own dim line with a
Fix: prefix — indentation derived from the glyph column, not a literal.
- Pluralized summary via the shared helper, colored by outcome, with the existing exit-code behavior unchanged (
process.exitCode = report.exitCode).
- Keep
--json output byte-identical (it is already a separate branch).
Files: packages/cli/src/commands/lint.ts (renderLintReport, printSection, printRows), packages/cli/src/services/lint/constants.ts (LINT_STATUS_LABEL)
Current output
Problems
=== Base Structure ===headers and[MISS]tags use noui.*components, no color, and no glyphs — every other command uses bold headers,✔/⚠/✖prefixes, and colored statuses.lintoutput looks like a different tool.[MISS](required failure), warning-level checks, and the pass state are visually identical; the severity mapping only exists inLINT_STATUS_LABEL.All checks passed.and5 required check(s) failed.are plain text — no✔/✖glyph, no green/red, though this is the single most important line for CI and humans.check(s) failed.,warning(s) reported.Run: npx ai-devkit@latest initaligns to a hand-counted offset that breaks ifLINT_STATUS_LABELwidths change; no dim styling to de-emphasize the hint.===decoration collides with the bold-header convention used bychannel list(Configured Channels:),status, andagent list.Expectation
ui.*(ui.tableor styledui.text): bold section titles (no===), colored status glyphs (✖red for required misses,⚠yellow for warnings,✔/dim for passes when not--quiet).Fix:prefix — indentation derived from the glyph column, not a literal.process.exitCode = report.exitCode).--jsonoutput byte-identical (it is already a separate branch).Files:
packages/cli/src/commands/lint.ts(renderLintReport, printSection, printRows),packages/cli/src/services/lint/constants.ts(LINT_STATUS_LABEL)