feat(cli): replace Completed-in with Vetted summary line - #141
Merged
Conversation
…mand The `check` command now prints an unconditional summary line to stderr: `Vetted N files [checks] — no findings. (Xs)` or with finding counts. Replaces the old `Completed in Xs` line. Griffe is conditionally included in the check list based on installation. The verbose-only `No findings.` stdout message is removed — the summary line on stderr covers it.
- Rewrite AC4 to match existing (better) UX for zero-files case - Update AC-to-Test Mapping with design decision rationale - Add CLI wiring test for summary line with findings present - Fill Code Review section and update sprint status to done
There was a problem hiding this comment.
Pull request overview
This PR improves the docvet check UX by replacing the uninformative Completed in Xs stderr line with a branded, information-rich summary (Vetted N files [checks] — … (Xs)), and updates unit tests and workflow artifacts to match.
Changes:
- Added
format_summary()insrc/docvet/reporting.pyto produce a stable one-line run summary (including findings breakdown). - Updated
check()insrc/docvet/cli.pyto emit the new summary line on stderr and build the checks list dynamically (omitgriffewhen not installed). - Updated/expanded unit tests to validate the new summary output and removed the verbose-only
No findings.stdout message.
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
src/docvet/reporting.py |
Adds format_summary() and updates docstrings for the new summary behavior. |
src/docvet/cli.py |
Replaces Completed in with format_summary() output and passes a dynamic checks list into output handling. |
tests/unit/test_reporting.py |
Adds unit coverage for format_summary() formatting branches and invariants. |
tests/unit/test_cli_timing.py |
Updates timing regex assertions and adds tests for summary formatting/conditional check listing. |
tests/unit/test_cli.py |
Updates CLI assertions/helpers to ignore the new summary line and removes No findings. expectations. |
_bmad/bmm/workflows/... (multiple) |
Updates workflow templates/checklists to include “Documentation Impact” verification steps. |
_bmad-output/planning-artifacts/epics-cli-ux.md |
Adds/records epic planning content for CLI UX improvements. |
_bmad-output/implementation-artifacts/sprint-status.yaml |
Updates sprint/epic tracking status entries. |
_bmad-output/implementation-artifacts/21-1-default-output-overhaul.md |
Adds the story artifact documenting requirements, mapping, and implementation notes for 21.1. |
- Strengthen stderr tests: assert summary on result.stderr, absent from
result.stdout (mix_stderr removed in Click 8.2; use attributes directly)
- Fix docstring: "unconditionally" → "when files are found" (zero-files
exits early without summary, per AC4 revision)
- Fix _non_timing_lines case bug: filter before lowercasing so
startswith("Vetted ") matches correctly
This was referenced Feb 26, 2026
Alberto-Codes
added a commit
that referenced
this pull request
Feb 26, 2026
🤖 I have created a release *beep* *boop* --- ## [1.5.0](v1.4.0...v1.5.0) (2026-02-26) ### Features * **cli:** add --quiet flag and dual-register --verbose on check subcommand ([#144](#144)) ([206ab22](206ab22)) * **cli:** add --verbose and --quiet flags to individual subcommands ([#145](#145)) ([ba1bbd5](ba1bbd5)) * **cli:** replace Completed-in with Vetted summary line ([#141](#141)) ([18db009](18db009)) * **cli:** replace Completed-in with Vetted summary line on check ([18db009](18db009)) * **config:** suppress overlap warnings for default warn-on values ([#143](#143)) ([384a44a](384a44a)) ### Bug Fixes * **cli:** correct --quiet flag docs and harden griffe quiet test ([#146](#146)) ([bf1ca08](bf1ca08)) * **cli:** resolve verbose/quiet dual-resolution ordering in check ([206ab22](206ab22)) * **cli:** suppress verbose header for single-check subcommands ([ba1bbd5](ba1bbd5)) * **config:** update overlap warning docs and strengthen AC3 test ([384a44a](384a44a)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
checkcommand previously printed onlyCompleted in Xsto stderr, giving no indication of what was checked or whether findings existed. First-time users had to enable verbose mode or parse exit codes to understand results. This replaces that line with a branded summary:Vetted N files [checks] — summary. (Xs).format_summary()toreporting.pywith zero-findings and findings branches, em dash separator, and category breakdownCompleted in Xsincheck()withformat_summary()call on stderr; build checks list dynamically (griffe omitted when not installed)No findings.verbose-only stdout message — summary line on stderr covers this unconditionallyformat_summary, 2 for conditional griffe, 2 for stderr independence of--format/--output, 1 CLI wiring test for findings-present pathTest:
uv run pytestfeat(cli): replace Completed-in with Vetted summary line on check command
chore(cli): code review fixes for story 21.1
PR Review
Checklist
uv run pytest) — 841 passuv run ruff check .)uv run ty check)!in title andBREAKING CHANGE:in bodyReview Focus
format_summaryinreporting.py— new public function, verify em dash and category breakdowncheck()incli.pylines 614-623 — dynamic checks list and findings flatteningRelated
_bmad-output/implementation-artifacts/21-1-default-output-overhaul.md