audit-pr — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited audit-pr (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The manager's "can this ship?" gate. A read-first audit over the entire PR — its SPEC, all phases, docs, tests, CI, and review axes — that returns a single verdict: merge-ready or a ranked list of blockers. Findings only — never merges, never edits, never refactors. The human decides and merges.
review-changeis clean and all phases are committed.
trusting that every loose end was tied off.
review-change reviews the diff for quality; audit-pr audits the PR as a unit of delivery — that everything the SPEC promised is present, traceable, and green.
The whole pull request: the branch vs. the default base, plus its SPEC and planning artifacts, the roadmap entry, the doc map, the PR body, issue links, and CI. Default target is the current branch's PR; accept a PR number to target another.
documentation map, then read what THIS skill needs: the roadmap, the feature/fix templates, and the project's verification gate (type-check / tests / build / CI).
Workflow conventions — examples use gh):
gh pr view <N> --json number,title,body,baseRefName,headRefName,isDraft,mergeable,mergeStateStatus,files,commits,statusCheckRollup,closingIssuesReferencesIf no PR number is given, resolve the current branch's PR (gh pr view --json ...). If none exists yet, audit the branch vs. the default base and say "no PR open yet" — the contract still applies.
docs/features/<NN>-<slug>/ (feature)or docs/fix/<n>-<topic>/ (fix) — and its planning artifacts (PLAN.md, TASKS.md, progress.md, testing.md, known-issues.md, decisions.md) when present. The SPEC is the source of truth for what "done" means.
Check each gate; cite evidence (file:line, criterion, check name, issue number). A gate that can't be confirmed is a blocker, not a pass — never assume green.
| Gate | What it means | Blocker when |
|---|---|---|
| Acceptance criteria | Every SPEC acceptance criterion is satisfied, each mapped to concrete evidence (code, test, or doc). | Any criterion unmet, unverifiable, or silently dropped. |
| All phases complete | Feature: every phase in PLAN.md/TASKS.md is done and logged in progress.md. Fix: the SPEC is fully implemented. | Any unchecked task or unimplemented phase without an explicit, tracked deferral. |
| Scope integrity | The PR implements the SPEC and no more; out-of-scope work was split out. | Undocumented scope creep, or in-scope work missing. |
| Docs updated | Every "Affected docs" criterion is satisfied; per-phase docs (progress/testing/known-issues/decisions) reflect reality; the doc map still resolves. Never merge with documentation still pending. | A doc the map or SPEC requires is stale, missing, pending, or contradicts the code. |
| Traceability | Closes #N is in the PR body when the work is issue-born (from plan-feature-from-issue or plan-fix); the roadmap/fix-index entry matches and is still present (the issue/fix-index entry is removed only after merge, never before). | Issue-born work without Closes #N; a roadmap/index entry out of sync; or the issue/fix-index entry dropped before merge. |
| Tests | New behavior is covered at the right layer (prefer integration); acceptance criteria map to tests; no regression-risk tests left red. | New behavior untested, or tests assert nothing meaningful. |
| Verification gate / CI | The project's gate passes — type-check, tests, build — and statusCheckRollup is green. | Any required check failing, pending, or absent where the project requires one. |
| Mergeability | Branch is off the default base, independently mergeable (no conflicts), not stacked on another PR, not draft. | Wrong base, conflicts, stacked dependency, or still draft. |
| Review axes clean | The applicable review-change axes are clean or every remaining finding is consciously deferred to a tracked issue with a trigger. | A fix-now finding still open, or a deferral with no issue/trigger behind it. |
Run review-change for the axis check if it hasn't been run on the final state, or read its latest report. Don't re-litigate findings already classified — verify each open one is either resolved or has a real, tracked home.`done` ≠ merge-ready. A unit flips todonewhen its PR opens (built, not merged — merge state lives in the forge). So adoneroadmap row is not evidence of merge-readiness: this gate still has to pass on its own. The two things this gate most often catches on adone-but-unmerged unit are pending docs and a prematurely-removed issue/fix-index entry — both are blockers.
record pass / blocker / n-a with the specific artifact or check that proves it.
review finding, a known issue), verify a tracked issue + trigger exists. A deferral with no destination is a blocker, not a pass.
should still eyeball (the manual-verification items review-change surfaced).
PR #<N> — <title>
Base: <default> ← Head: <branch> CI: <green|failing|pending>
VERDICT: MERGE-READY | BLOCKED (<count> blockers)
Blockers (ranked):
1. [<gate>] <what's wrong> — evidence: <file:line | check | criterion>
→ fix: <smallest action to clear it> (<route>)
...
Non-blocking nits:
- <minor item> — <pointer>
Before merge, a human should still verify:
- <manual-verification item from review-change>If MERGE-READY, omit the blocker list and state it plainly: nothing blocks merge.
Example (generic — substitute your project's numbers and gates):
PR #142 — Add CSV export to the reports view
Base: main ← Head: feat/14-csv-export CI: green
VERDICT: BLOCKED (2 blockers)
Blockers (ranked):
1. [Tests] Export handler has no test — acceptance criterion "export
round-trips the rows" is unverified
→ fix: add an integration test for the handler (fold into the current phase)
2. [Traceability] PR body is missing `Closes #131` for issue-born work
→ fix: add `Closes #131` to the PR body (execute-phase)
Non-blocking nits:
- Help text wording diverges from the other commands — docs/USAGE.md
Before merge, a human should still verify:
- The exported file opens cleanly in a spreadsheet app (visual)execute-phase(the relevant phase or --fix); re-run audit-pr after.
plan-fix (new fix entry), not this PR.triage-issue to file + classify it.execute-phasedoc commit), then re-audit.
review-change and verify itsopen findings are resolved or tracked.
every blocker cites file:line/check/criterion/issue — track-don't-inline: out-of-scope problems become issues/fix entries, never silent additions here).
execute-phase (all phases done) ─▶ review-change (axes clean) ─▶ audit-pr ─▶ merge
│
blockers ─┬─ in-scope ▶ execute-phase ──┘ (re-audit)
├─ out-of-scope ▶ plan-fix
└─ deferral ▶ triage-issuereview-change (axis cleanliness) and the artifacts of plan-feature /plan-fix / execute-phase (SPEC, phases, docs, Closes #N).
audit-docs is the cross-document coherence check; audit-pr is per-PR mergereadiness; product-audit is the periodic, product-wide full sweep.
reported, each blocker routed, with the human's manual-verification list explicit.
then re-audit).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.