done-gate — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited done-gate (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.
A read-only gate for the completion boundary: "I just said this is done — is it built-done or useful-done?" Diagnosis only; it never fixes.
Only when the user types /done-gate. Never auto-invoke.
Run it at the completion boundary — right after the user declares work "done." Not during work, not on a hunch, not on a timer. The trigger is the user's own declaration.
compass and done-gate are siblings, not duplicates. Conflating them removes the value of both.
Different trigger moment, different question, different baseline. done-gate must not re-implement compass's rot scan.
Before any check, establish what this work was supposed to deliver.
Draft the baseline from recent git diff/commits plus any spec or plan file present. Show the inferred baseline to the user; ask them to confirm, correct, or narrow it. Do not silently lock in a model-drafted scope.
Mandatory scope-confirm above a size threshold: for large, multi-session, or squashed diffs (many dozens of files), require the user to name the subtree or intended change before inferring — a giant diff contains no usable "should-have" signal.
Refusal floor: if no baseline is inferable AND the user cannot confirm a concrete one, refuse to emit a verdict. Output exactly:
cannot judge useful-done here; missing signal: <what is missing>That is the correct, valuable output. A confident verdict without signal is the bug, not the feature. On refusal, emit no verdict; checks 2-3 (canonical-sync, drift) are baseline-independent and may still be reported as observations.
Classify the declared deliverable before running any check. This prevents false-red on shelved work and false-green on figures.
| Type | useful-done assessable? |
|---|---|
| runnable-deliverable (server, CLI, service, wired entry point) | Yes — check 1 runs |
| library / skill (consumer is a future caller or session) | Partial — "reachable / importable / registered?" only; never "inert" as a defect if deferral was intended |
| figure / manuscript / doc | No — state "useful-done is not mechanically assessable for a <type>; consumer is a human reader." Check 1 is skipped; checks 2-3 (canonical-sync, drift) still run — they are baseline-independent (§3). |
| throwaway / one-off (ran once, intentionally not wired) | No — "ran-once-and-parked is its done state"; do not flag as inert |
If a deliverable matches more than one row, classify by how its primary declared consumer (from the baseline, §3) reaches it — a future caller/session ⇒ library/skill; an end user invoking it now ⇒ runnable-deliverable. When intent (wired vs parked) isn't observable, ask the user rather than assuming.
For any non-runnable type, state plainly that useful-done is out of scope rather than faking it.
Can a real consumer invoke this against real (not fixture) data or path?
Mechanically decidable cases:
Prefer a non-mutating probe of reachability: grep host/registry configs, check the entry point is wired, confirm an importable/published path, or invoke a dry-run / --help / read-only subcommand. If confirming useful-done would require a mutating run (a CLI that writes, a migration, a network call), do NOT execute it — report "useful-done not verifiable without a side-effecting run" as a limit and let the user run it. The gate stays read-only.
DONE-but-inert is a STATE, not always a defect. If the human intended "inert pending Phase 2 registration," that is a legitimate landing. Surface it ("built-done; not yet useful-done because no host registers it") and let the user judge. Do not auto-conclude it is broken.
Do the canonical docs match repo reality? Diff claims, not timestamps:
git log reality (commits for Phase X already on the branch).This is the one check compass does not do and that is fully mechanizable.
Cross-file numeric, term, or dimension drift plus declared-change tree state.
Cross-file: a number, term, or dimension stated in file A contradicts file B (README score table differs from the linked scorecard; a dimension named in the task spec absent from the rubric). Applicable to every artifact type, including figures.
Tree state: git status scoped to the declared change. "Just declared done" inverts the prior — a dirty tree defaults to legit WIP, not debris. Untracked files are listed and the user is asked about each (intentional-will-gitignore vs stray). Never auto-classify as debris.
Optionally list at most three unranked candidate next steps. Prefix them explicitly: "You judge cost/value — these are not ranked and may be wrong."
Never write "the cheapest next step is X." If nothing is confidently identifiable, omit this section entirely.
Emit a severity-ranked report followed by a single-line verdict:
Diagnosis only, read-only. Fixing is the user's or /team's job.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.