ci: adopt nc-review - #26
Merged
Merged
Conversation
Third repository onto the shared review workflow. Two files: the caller, and
this project's own rubric. The reviewing method is fetched from
Nano-Collective/.github at run time rather than copied.
The rubric is built around the one failure mode that matters for an auditing
tool: a green report over a broken estate. Sentinel's entire output is a claim
about someone else's code, so a run that quietly fails to scan something is
worse than no tool, because a tool gets trusted. It names the ways that has
actually happened here:
- errors collected and never rendered — packLoadErrors unread, targetErrors
persisted to every run record and displayed on no surface, so a run where
every repo failed to clone looked identical to a clean estate
- distinct failures conflated into one message, which sent readers hunting
for a file that was already on disk
- auto-resolution closing live findings when scanned scope changes, which is
the tool reporting a vulnerability fixed because it stopped looking
- trusting any existing directory as a checkout of the right repository
- treating model output as trustworthy; Infinity, NaN and fractional line
numbers all passed the original range check
It also records the review question that catches the whole class: where does
this error surface? "It is returned" is not an answer.
Two repo-specific things a reviewer carrying another project's conventions
would get wrong: test:types typechecks the specs here, so a fixture missing a
newly required field is a real error; and clone.ts and gh-client.ts carry
c8 ignore blocks, so logic buried inside one is invisible to coverage and
belongs outside behind an injected seam.
architecture-doc points at docs/workflow/index.md, which the source already
cites by section as the design of record. There is no CLAUDE.md here.
Copilot review stays until nc-review is producing verdicts on this repo.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PZY52ePXLjwG9TaQgq2cHT
Contributor
No changeset foundThis PR does not add a changeset, so it will not appear in the changelog or trigger a release. If the change is user-facing, add one: pnpm changesetPick a bump (patch / minor / major) and write the changelog entry in our usual voice ("Added X... Thanks to @you. Closes #123."), then commit the generated If this PR is docs-only or a chore that needs no release note, you can ignore this — or run |
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.
Third repository onto the shared review workflow. Two files: the caller, and this project's own rubric — the reviewing method is fetched from
Nano-Collective/.githubat run time rather than copied.Why this rubric is not boilerplate
Sentinel's entire output is a claim about someone else's code, so it has one failure mode worse than the rest: a green report over a broken estate. A run that silently fails to scan something tells the operator their repositories are clean when nobody looked — worse than no tool, because a tool gets trusted.
The rubric names the ways that has actually happened here:
packLoadErrorslived on the run report unread;targetErrorswas persisted to every run record and displayed on no surface, so a run where every repo failed to clone rendered as "0 findings across 0 repos" in the same calm grey as a clean estate.depends_onchain reported identically, sending readers hunting for a file already on disk.Infinity,NaNand fractional line numbers all passed the original range check.It also gives the review question that catches the whole class: where does this error surface? "It is returned" is not an answer — follow it to the run report, the CLI summary, the run record or the dashboard, or it is discarded.
Two things a reviewer carrying another repo's conventions would get wrong
test:typestypechecks the specs here (since fix(ci): typecheck specs so contract breaks reach the gate #21), so a fixture constructing an exported type without a newly required field is a real error, not a warning.clone.tsandgh-client.tscarry/* c8 ignore */blocks. Logic buried inside one is invisible to coverage and belongs outside it behind an injected seam — which is exactly what fix: validate checkouts before auditing, and honour repeated --rule-pack #23 had to do.Config
architecture-docpoints atdocs/workflow/index.md, which the source already cites by section as the design of record. There is noCLAUDE.mdhere.Rollout note
Copilot review stays on this repo until nc-review is producing verdicts here — removing it first would leave the repo with no automated review at all, inverting Q7.
pull_request_targetresolves the workflow from the base branch, so this PR will not be reviewed by it; the first PR opened after merge will.