Skip to content

ci: make doc-lint output actionable, and reseed the baseline - #385

Merged
mvandeberg merged 1 commit into
cppalliance:developfrom
mvandeberg:pr/lint-output-actionable
Aug 25, 2026
Merged

ci: make doc-lint output actionable, and reseed the baseline#385
mvandeberg merged 1 commit into
cppalliance:developfrom
mvandeberg:pr/lint-output-actionable

Conversation

@mvandeberg

Copy link
Copy Markdown
Contributor

The gate printed its comparison as JSON -- ~250 lines of which 8 mattered, none carrying a line number or a quote, so you still had to grep the corpus to find what broke. It now prints one block per finding: severity, file:line, rule, and an excerpt. --show-baseline adds the grandfathered findings still present, as warnings; --json restores the old dump. Under Actions each gated finding is also a ::warning annotation on the diff.

Line numbers cannot live in the fingerprint -- keying on them once renamed 27 grandfathered findings from a comment-only insertion (df68f9b) -- so baseline.mjs gains --details, a sidecar the comparator requests and the reseed does not. Fingerprints are byte-identical either way. Docstring findings resolve back to the .hpp through a line map from extract-docstrings.mjs, then narrow within the block by locating the excerpt, since a doc comment can be 100 lines long.

The gate is report-only by maintainer decision. Attention keys on --gate and failure on --strict, so restoring the block is one word. The Vale steps treat exit 1 (alerts found, the steady state) as success and propagate exit 2, so an annotation from them now means Vale actually broke. selftest.mjs runs in CI, non-blocking -- it is the only thing between a silent linter regression and a green run. Step names are standardised on "Docs:", "Lint:" and "Reseed:"; the reseed locates its --gate spec by matching the gate step's name, so that anchor moves too.

Stops linting detail/ prose, which mrdocs.yml marks implementation-defined: 11 of 73 extracted files, plus 33 doc comments in namespace detail blocks inside public headers. The extractor now clears its output directory -- it never did, so a header that stopped producing output left its last .adoc linted forever.

Vale vocabulary gains the domain prose it was missing and the coroutine keywords. The keyword split is the point: io_result has a reference page, so bare in prose it is a missing cpp: link and B1 says fix it; co_await has no page, so that alert can never be actioned. One real misspelling is fixed rather than whitelisted, and STYLE_GUIDE E4's a11y carve-out is extended to the three rule classes it did not name.

Reseeds doc/lint/baseline.json from CI: retires 3845 stale fingerprints, adds
107. Eight match the gate spec and are PR #383's, accepted as backlog rather than blocking an already-merged PR. The one-shot reseed blockquote is removed as it instructed.

The gate printed its comparison as JSON -- ~250 lines of which 8 mattered, none
carrying a line number or a quote, so you still had to grep the corpus to find
what broke. It now prints one block per finding: severity, file:line, rule, and
an excerpt. --show-baseline adds the grandfathered findings still present, as
warnings; --json restores the old dump. Under Actions each gated finding is
also a ::warning annotation on the diff.

Line numbers cannot live in the fingerprint -- keying on them once renamed 27
grandfathered findings from a comment-only insertion (df68f9b) -- so
baseline.mjs gains --details, a sidecar the comparator requests and the reseed
does not. Fingerprints are byte-identical either way. Docstring findings
resolve back to the .hpp through a line map from extract-docstrings.mjs, then
narrow within the block by locating the excerpt, since a doc comment can be 100
lines long.

The gate is report-only by maintainer decision. Attention keys on --gate and
failure on --strict, so restoring the block is one word. The Vale steps treat
exit 1 (alerts found, the steady state) as success and propagate exit 2, so an
annotation from them now means Vale actually broke. selftest.mjs runs in CI,
non-blocking -- it is the only thing between a silent linter regression and a
green run. Step names are standardised on "Docs:", "Lint:" and "Reseed:"; the
reseed locates its --gate spec by matching the gate step's name, so that anchor
moves too.

Stops linting detail/ prose, which mrdocs.yml marks implementation-defined: 11
of 73 extracted files, plus 33 doc comments in `namespace detail` blocks inside
public headers. The extractor now clears its output directory -- it never did,
so a header that stopped producing output left its last .adoc linted forever.

Vale vocabulary gains the domain prose it was missing and the coroutine
keywords. The keyword split is the point: io_result has a reference page, so
bare in prose it is a missing cpp: link and B1 says fix it; co_await has no
page, so that alert can never be actioned. One real misspelling is fixed rather
than whitelisted, and STYLE_GUIDE E4's a11y carve-out is extended to the three
rule classes it did not name.

Reseeds doc/lint/baseline.json from CI: retires 3845 stale fingerprints, adds
107. Eight match the gate spec and are PR cppalliance#383's, accepted as backlog rather
than blocking an already-merged PR. The one-shot reseed blockquote is removed
as it instructed.
@cppalliance-bot

Copy link
Copy Markdown

An automated preview of the documentation is available at https://385.capy.prtest3.cppalliance.org/index.html

If more commits are pushed to the pull request, the docs will rebuild at the same URL.

2026-08-25 21:43:18 UTC

@cppalliance-bot

Copy link
Copy Markdown

GCOVR code coverage report https://385.capy.prtest3.cppalliance.org/gcovr/index.html
LCOV code coverage report https://385.capy.prtest3.cppalliance.org/genhtml/index.html
Coverage Diff Report https://385.capy.prtest3.cppalliance.org/diff-report/index.html

Build time: 2026-08-25 21:57:15 UTC

@codecov

codecov Bot commented Aug 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.09%. Comparing base (64e6c7e) to head (193a19f).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff            @@
##           develop     #385   +/-   ##
========================================
  Coverage    98.09%   98.09%           
========================================
  Files          130      130           
  Lines         6291     6291           
========================================
  Hits          6171     6171           
  Misses         120      120           
Flag Coverage Δ
linux 98.08% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 64e6c7e...193a19f. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@mvandeberg
mvandeberg merged commit 4acf05c into cppalliance:develop Aug 25, 2026
39 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Beast2 Aug 25, 2026
@mvandeberg
mvandeberg deleted the pr/lint-output-actionable branch August 25, 2026 22:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants