fix(ci): clear the lint, test, and doc gates - #1476
Open
John-David Dalton (jdalton) wants to merge 1 commit into
Open
fix(ci): clear the lint, test, and doc gates#1476John-David Dalton (jdalton) wants to merge 1 commit into
John-David Dalton (jdalton) wants to merge 1 commit into
Conversation
main's CI has been red on three repo-owned causes since before today's merges. All three are pre-existing; none came from a recent PR. The lint check reported 18 max-comment-block-lines errors across 14 files, from a newly cascaded 20-line cap on inline comment blocks. Each is restructured on its own merits rather than suppressed: - The ~70 lines of pasted `cdxgen --help` output move to docs/references/repo/cdxgen-flags.md, leaving a one-line pointer above the yargs config it documents. The version in the heading is the point of keeping it at all. - Comment runs holding several independent facts are split at the paragraph boundaries a reader already sees: the bazel exit-code taxonomy, the python directory layouts, and the meow flag-type mapping. - Two docblocks had been shredded by an earlier JSDoc reflow. npm-packages.mts lost its archive tree into a bogus `@cyclonedx` tag; both are rewritten as prose that says the same thing. - vfs-extract.mts had extractExternalTools' docblock stranded above MAX_EXTRACTION_DEPTH instead of above the function; it now sits on the function it documents. - The rest keep their contract and drop @example blocks that only restated the signature, folding any fact unique to the example into @param or @returns. Two unit test files read the options bag at argument index 2, but spawnCoanaDlx is called with two arguments, so every read was undefined and threw on property access. Production is correct; the tests move to index 1. Five assertions across perform-reachability-analysis.test.mts and its -coana sibling. Only one surfaced in CI because the Test job shards. CLAUDE.md's releasing-v1x section had one 230-char bullet against the 200 cap. It stated two rules — the prerelease hint and the CHANGELOG section — so it becomes two bullets.
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.
LLM Description written by Claude Code:claude-fable-5
Actions needed
mainruleset has no required status checks, so--autowould merge immediately instead of waiting for CI. A CI-repair PR should not land unverified.mainare NOT fixable here — see What this does not fix below.mainstays red on the Check job until a cascade lands.What was red
mainhas been failing since before today's merges. The same failure set appears at0bd8b9e98and atfb25a3ffe, so none of it came from a recent PR. Five independent causes; this PR fixes the three that live in repo-owned code.1. lint — 18
max-comment-block-lineserrors across 14 filesA newly cascaded rule caps an inline comment block at 20 lines. Nothing is suppressed and the rule is untouched — each site is restructured on its own merits:
cmd-manifest-cdxgen.mts(~70 lines of pastedcdxgen --help)bazel-repo-discovery.mts,external-tools-install.mts,meow.mtsnpm-packages.mts(×2),vfs-extract.mtsspawn.mts,builder.mts(×2),checkpoint-manager.mts,platform-targets.mts,compress-facts.mts,cli-execution.mts(×2),workspace-helper.mts,basics/vfs-extract.mtsTwo of these turned up real defects rather than just long prose:
dlx/vfs-extract.mtshadextractExternalTools' docblock stranded aboveMAX_EXTRACTION_DEPTHinstead of above the function. It now sits on the function it documents.npm-packages.mtshad two docblocks shredded by an earlier JSDoc reflow. One lost itsnode_modules/archive tree into a bogus@cyclonedxJSDoc tag, so half the tree rendered as an unknown tag's body. Both are rewritten as prose saying the same thing.2. Test — five assertions reading the wrong argument index
perform-reachability-analysis.mts:288callsspawnCoanaDlx(coanaArgs, { … })with two arguments. Two test files read the options bag atmock.calls[0][2], which is alwaysundefined, so every one threwTypeError: Cannot read properties of undefined. Production is correct; the tests move to index1.The diagnosis I started from named one assertion in
perform-reachability-analysis-coana.test.mts. There are five, across two files — four more in the siblingperform-reachability-analysis.test.mts. Only one surfaced in CI because the Test job shards: that run executed 55 of 646 test files. A local full-suite run shows all five.3. claude-md-repo-section-is-a-bullet-index — one over-long bullet
CLAUDE.md:151ran 230 chars against the 200 cap. It stated two separate rules — theX.Y.Z-prereleasehint inpackage.jsonand the notes accruing under CHANGELOG's## [Unreleased]— so it becomes two bullets, which is what the check asks for anyway ("one rule per bullet").What this does not fix
The remaining two failures are cascade lag on fleet-canonical files, and the fixes already exist in the shared template.
scripts/fleetislinguist-generated=truein this repo's.gitattributes— the marker the fleet fork guard reads — and every change to it in this repo's history arrived as achore(wheelhouse): cascade template@<sha>commit. Hand-authoring a fix here would be a local fork that the next cascade overwrites.check-registrations-resolveandcommits-have-no-ai-attributioncheck-registrations-resolvefails becausescripts/fleet/check/tests-read-canonical-sources.mtsis wired into no runner. The template already registers it, with a note that it no-ops cleanly in member repos that have notemplate/tree. This repo's mirror predates that line.commits-have-no-ai-attributionfails in CI for a shallow-clone reason. It cannot be fixed by fetching full history: with full history it finds 20 old, already-published commits carryingCo-authored-by:and🤖 Generated with [Claude Code]tag lines. Rewriting publishedmainhistory is out of scope. The template has already rewritten this check — its default scope now readsorigin/<default>and drops every finding at or below the release boundary, with full history moved behind a new--allflag. That clears exactly this case.Scope of the lag: 115 files differ between this repo's
scripts/fleetand the template's copy. The last cascade in wastemplate@79a0d8d03; the template is now attemplate@f6cf95d3c.Judgment calls
The comment restructuring. The rule's own message says to keep the constraint at the code and move the discussion into a doc behind a one-line pointer, so that is what the
cdxgen --helpdump got —docs/references/repo/cdxgen-flags.md, next to the existing repo reference doc. Splitting a run at its existing paragraph breaks is not a dodge here: the rule already ends a block at a blank line specifically because that is how a reader sees them, and the split blocks are genuinely separate facts. Where a block was one long JSDoc, only@examplebodies that restated the signature came out, with any fact unique to the example folded into@paramor@returns.compress-facts.mtslooked like the one case worth an inlinesocket-lint: allow long-comment-blocksuppression — every paragraph is a distinct constraint a caller can break. That turned out to be impossible by design:no-malformed-bypass-markerrequires the marker within 12 lines of the code it exempts, which a 29-line block cannot satisfy. So it was tightened instead, and all five constraints survive — why compression is streamed off-thread, why the.bris a sibling rather than a temp-dir path, that it adds no new race, and the mandatorycleanup(). No suppression was added anywhere in this PR.Scoping the attribution check rather than unshallowing. Confirmed and left alone. Unshallowing swaps the shallow-clone failure for 20 findings in published history, and rewriting
mainis not on the table. Scoping is the right shape — and the template already implements it, with a release-boundary freeze that is better than the--unpushednarrowing I had been pointed at. That is why it belongs in a cascade rather than here.Verification
Run locally against this branch:
pnpm run lint --all→ passes, 0 errors (was 129 warnings / 18 errors).pnpm run test→ 7533 passed, 625 of 646 files. The single failure isconstants.test.mtsassertingrootPathcontainssocket-cli, which is false only because the verification worktree is not named that. It passes in CI and in a normal checkout. That test is coupled to the checkout directory name, which is worth fixing separately.pnpm run check --all→lint.mtsandclaude-md-repo-section-is-a-bullet-index.mtsnow pass. Still failing: the two cascade-lag checks above, plusdispatch-table-is-currentandpath-tools-are-at-pinned-version, which are local-environment artifacts and did not fail in CI.Note
Low Risk
Comment/doc/test-only changes plus a reference doc move; no runtime behavior changes except corrected test mocks aligned with existing
spawnCoanaDlxarity.Overview
Clears three independent
mainfailures in repo-owned code: themax-comment-block-lineslint rule, reachability unit tests, and theCLAUDE.mdbullet-length check.Lint (18 errors, 14 files) — Long comment/JSDoc blocks are shortened or relocated without disabling the rule. The pasted cdxgen 11.2.7
--helptext moves fromcmd-manifest-cdxgen.mtstodocs/references/repo/cdxgen-flags.md, with a one-line pointer in source. Other sites are split at paragraph breaks, trimmed to the API contract, or rewritten where prior reflow damaged docs (e.g.npm-packages.mtsbogus@cyclonedxtag;dlx/vfs-extract.mtsdocblock moved ontoextractExternalTools).Tests — Five assertions in
perform-reachability-analysis*.test.mtsreadspawnCoanaDlxoptions atmock.calls[0][2]; production passes options at index1, so they now match(coanaArgs, { … }).Docs —
CLAUDE.mdv1.x release bullet is split into two bullets (prerelease hint vs CHANGELOG## [Unreleased]) to satisfy the 200-character cap.Does not fix cascade-lag fleet checks (
check-registrations-resolve,commits-have-no-ai-attribution) onmain.Reviewed by Cursor Bugbot for commit b03b5fb. Configure here.