From harness-anchor
Use before claiming "done", "fixed", "complete", "passing". Default-FAIL contract — every criterion needs evidence; express uncertainty if missing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-anchor:anti-hallucination-gatesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
The most common agent failure is **declaring victory too early**. This skill is the gate between "I think it works" and "evidence proves it works".
The most common agent failure is declaring victory too early. This skill is the gate between "I think it works" and "evidence proves it works".
No claim of "done" / "fixed" / "passing" without a concrete artifact path proving it.
A claim like "I fixed the bug" is incomplete. The proper form:
"Fixed by commit
abc123. Testtests/foo.test.ts::handles-edge-casenow passes (output captured in.harness-anchor/test-2026-05-28.log). Build still passes (.build/last-build.logexit 0)."
Adapted from Anthropic's Code with Claude 2026 reference impl:
"Every criterion starts false; the agent can't mark it passing without opening evidence first."
| Criterion | What counts as evidence |
|---|---|
| Compile / build passes | Build log path + exit code 0, or compiler stdout/stderr captured |
| Type-check passes | tsc --noEmit (or equivalent) output |
| Tests pass | Test runner output showing N passed, 0 failed, 0 errored |
| Coverage obligations (non-trivial / risk-bearing features) | The spec/code obligations are exercised by tests the run actually executes — for features with real logic or risk constructs, a /test-plan report (.harness-anchor/coverage-<ts>.md) with no open gaps. A green suite that skips the risk path is a false pass. |
| Static analysis | Lint report file, OR explicit "no warnings" line in output |
| Test integrity (when tests changed in the same diff) | The claim names why each test change happened (new coverage vs adjusted expectation) — /verify reports this as ### Integrity; a weakened assertion that makes failing behavior "pass" is a red flag |
| Deliverable committed & reproducible (when claiming "done / shipped / committed") | Full git status reviewed (the whole tree, not just state files) and the committed HEAD builds — not only the dirty working tree. A feature marked pass whose source isn't committed is not delivered: HEAD won't reproduce the evidence. |
| Manual smoke | Concrete steps + observed result (only if the above can't cover) |
feature_list.json{
"id": "doc-list-rendering",
"status": "pass",
"evidence": {
"timestamp": "2026-05-28T13:45:21Z",
"commit": "abc123def456",
"artifacts": [
".harness-anchor/build-2026-05-28T13-44.log",
".harness-anchor/test-2026-05-28T13-45.txt"
],
"notes": "All 47 tests pass. Build clean. clang-tidy: 0 warnings on changed files."
},
"completedAt": "2026-05-28T13:45:21Z"
}
evidence: null ⇒ status cannot be "pass". This is enforced by feature_list.schema.json.
When evidence is missing or partial, do NOT bluff. The 2026 LLM-hallucination research consensus is:
"Aim for calibrated uncertainty: systems that transparently signal doubt and can safely refuse to answer when unsure."
Templates for expressing uncertainty:
npm test -- --testPathPattern foo to verify."cmake --build .build && echo BUILD_OK."./repro.sh before and after the change."These statements earn user trust. Confident-but-wrong claims destroy it.
Do NOT say:
git diff to confirm — verify before you dismiss; this is how a pass's own source gets left behind)Say instead:
When you find yourself typing "should", "probably", "I think", or "looks like" about a behavioural claim, pause. Either:
Before saying ANY of {"done", "fixed", "ready", "complete", "passing", "working"}:
- [ ] I ran the build/compile, observed exit code 0
- [ ] I ran the test suite, observed N passed / 0 failed
- [ ] the passing tests exercise the spec's edge cases / risk paths — not just the happy path (run `/test-plan` if unsure)
- [ ] if tests changed alongside source: I explained each test change (new coverage vs adjusted expectation)
- [ ] I have a file path for each piece of evidence
- [ ] feature_list.json is updated with evidence object + timestamp + commit
- [ ] if I claimed "committed / shipped / delivered": I reviewed the **full** `git status` and confirmed the committed HEAD builds (not just the working tree)
If any box is unchecked: state uncertainty explicitly, do NOT flip status to pass.
feature_list.json status to "pass"self-correction-loopWhen the project uses a test/lint framework you don't have committed to memory (Catch2, doctest, ruff, deno test, etc.) — invoke the docs-lookup skill before constructing the verification command. The lookup result becomes part of the evidence trail.
Bluffing the command and not actually running it is the anti-pattern this skill exists to prevent — that's why lookup precedes execution here.
verification-before-completion (superpowers) — the same Iron Law (no completion claim without fresh evidence). This skill is its harness-anchor counterpart and superset: it adds the on-disk evidence record (feature_list.json) and the /verify subagent. One verification run satisfies both gates — capture the evidence once, don't re-verify.feature-state-keeper — actual writes to feature_list.jsontest-coverage-design / /test-plan — derive the coverage obligations this gate checks (are the right things tested, and actually run?)self-correction-loop — what to do when evidence shows failure/verify command — full automated verification pass via verification-runner subagentnpx claudepluginhub redtropig/harness-anchor --plugin harness-anchorEnforces evidence-before-claims discipline: requires fresh verification (test, build, lint) before any completion claim. Prevents premature sign-offs.
Enforces evidence-based completion discipline: run verification commands (tests, lints, type checks, builds) before claiming work is done. Prevents false completion by requiring captured output.
Enforces running verification commands before claiming work is complete. Useful for preventing false success claims and ensuring evidence-based completion.