Repository navigation
chore(ci): basic CI with a non-blocking docs-surface warning - #38
Conversation
cargo check, test, doc and a non-failing clippy step, plus a docs-surface job that reports public items added by a diff which appear nowhere in docs/API.md, and new modules missing from ARCHITECTURE.md or the CLAUDE.md layer table. The docs job always exits 0. Merging stays a human decision; drift is caught and corrected in a later documentation round, for which the same script runs by hand against any base.
Independent read of Verdict: REQUEST CHANGES
Not blocking, worth a line in the script's comment block
Verified
Process (PM, not a review finding): #37 had no milestone and was not on the board; it is now in M2 and on the board as In Review, so the issue-first rule we are about to encode holds for its own first instance. |
…only The by-hand form compared a range's diff against whatever the working tree held, so running it from master against a branch reported drift the branch had already fixed. Documents are now read at the head ref when one is given explicitly, and from the working tree only in the no-argument round. Two smaller corrections: a name is only counted as documented when it appears in a code span or fenced block, since hit, mark and articulation are ordinary English words that pass a prose grep by coincidence; and public items added inside a mod tests hunk are skipped rather than being counted as public surface.
Fixed at
|
| Range | Result |
|---|---|
origin/master vs origin/master |
clean |
#33 (documented its surface) |
clean |
#34 |
clean |
#35 at 5c58614, current tip |
clean, which is the fix working |
#35 at d909592, the drifting tip |
7 findings, which is detection still working |
That pair is the falsification test worth keeping: the same script reports drift at the revision that drifted and reports nothing at the revision that fixed it. Before the fix it reported seven at both.
Ready for your re-read at d09b68c.
Re-read at Re-run from a clean archive of the tip, each range with the revision it was measured at: Two synthetic probes on top, in a throwaway clone at Merge is Soushi's. |
…1.5 issues The seven were left out on the reasoning that #38 would catch them, which is wrong: that check is a set difference over a diff, so it reports what a PR adds and never sees what master already fails to document. The by-hand round is the only thing that finds them, and this is that round. Letter gains ALL and index, Accidental gains from_offset, ChromaticPitch gains from_midi and with_letter, Scale gains from_mode, and PitchClassSet gains len. The roadmap now cites #39 to #47 for M1.5 and #49 for the crate split. Twelve em dashes in API.md are gone, since the file was open.
Closes #37
What this adds
Two jobs.
testrunscargo check --all-targets,cargo test,cargo doc --no-deps, andcargo clippyas a non-failing step, since three clippy warnings already exist on untouched lines.docs-surfaceruns only on pull requests and never fails: it exits 0 whatever it finds, reporting through::warningannotations and the job summary.Why warning and not gate
Merging stays a human decision. The job exists so that drift is visible and a later documentation round has a list to work from, not so that a merge can be refused on documentation grounds.
What it checks
Two set differences over the diff, both computable, neither a judgment about prose quality:
pubitem added undermusecode_core/srcis named somewhere indocs/API.mddocs/ARCHITECTURE.mdand in theCLAUDE.mdlayer tableHow to test
The script takes any base, so it can be run against a merged PR to check its behaviour:
Measured on this branch: PR #35 reports
Stress,stress,mark,from_mark,accents,accent_grid,AccentError, which is exactly the surface two independent reviews missed. PR #33, which documented its surface, reports nothing.masteragainst itself reports nothing.For the later documentation round the same script runs with no second argument:
Documentation
No documentation changes. This PR adds tooling only and introduces no public Rust surface, so
docs/API.mdand the layer table are unaffected.Review note
I wrote this, so I should not be the one who reviews it. It needs an independent reader.