Use when reviewing code changes, auditing documentation accuracy, validating technical claims before merge, or user says "verify claims", "factcheck", "audit documentation", "validate comments", "are...
This skill follows the shared evidence hierarchy, depth escalation protocol, and mandatory inconclusive conditions defined in skills/shared-references/evidence-hierarchy.md. Verification agents must cite evidence tiers in every verdict. The depth escalation protocol governs re-verification requirements.
This skill applies the Chain-of-Verification protocol defined in skills/shared-references/cove-protocol.md during claim extraction (Phases 2-3). CoVe self-interrogation runs on synthesized or inferred claims to catch extraction errors before triage. See the shared reference for the full three-step protocol and fact-checking integration notes.
.fact-checking/state.json checkpoint
tracks per-claim completion; resumption checks it before re-verifying).| Pattern | Action |
|---|---|
| RESEARCH_REQUEST ("research", "check", "verify") | Dispatch research subagent |
| UNKNOWN ("don't know", "not sure") | Dispatch analysis subagent |
| CLARIFICATION (ends with ?) | Answer, then re-ask |
| SKIP ("skip", "move on") | Proceed to next item |
| Input | Required | Description |
|---|---|---|
scope |
Yes | branch changes, uncommitted, or full repo |
modes |
No | Missing Facts, Extraneous Info, Clarity (default: all) |
autonomous |
No | Skip prompts, use defaults |
| Output | Type | Description |
|---|---|---|
verification_report |
Inline | Summary, findings, bibliography |
implementation_plan |
Inline | Fixes for refuted/stale claims |
glossary |
Inline | Key facts (Clarity Mode) |
state_checkpoint |
File | .fact-checking/state.json |
| Verdict | Meaning | Evidence Required |
|---|---|---|
| Verified | Claim is accurate | test output, code trace, docs, benchmark |
| Refuted | Claim is false | failing test, contradicting code |
| Incomplete | True but missing context | base verified + missing elements |
| Inconclusive | Cannot determine | document attempts, why insufficient |
| Ambiguous | Wording unclear | multiple interpretations explained |
| Misleading | Technically true, implies falsehood | what reader assumes vs reality |
| Jargon-heavy | Too technical for audience | unexplained terms, accessible version |
| Stale | Was true, no longer applies | when true, what changed, current state |
| Extraneous | Unnecessary/redundant | value analysis shows no added info |
| Type | Format |
|---|---|
| Code trace | file:lines - finding |
| Test | command - result |
| Web source | Title - URL - "excerpt" |
| Git history | commit/issue - finding |
| Documentation | Docs: source section - URL |
| Benchmark | Benchmark: method - results |
| Paper/RFC | Citation - section - URL |
Present three optional modes (default: all enabled):
Autonomous mode detected ("Mode: AUTONOMOUS")? Enable all automatically.
| Option | Method |
|---|---|
| A. Branch changes | git diff $(git merge-base HEAD main)...HEAD --name-only + unstaged |
| B. Uncommitted | git diff --name-only + git diff --cached --name-only |
| C. Full repo | All code/doc patterns |
Subagent dispatch: Invoke fact-check-extract command.
Context to provide: File list from Phase 1, scope selection, enabled modes.
Subagent dispatch: Invoke fact-check-verify command.
Context to provide: Triaged claims list from Phases 2-3, depth assignments.
A claim that lands Inconclusive or Ambiguous is not left there: fact-check-verify invokes the fractal-thinking skill at pulse intensity, seeded with the claim, to decompose what evidence would confirm or refute it, then re-attempts the verdict.
When spawning verification agents, provide:
Subagent dispatch: Invoke fact-check-report command.
Context to provide: All verdicts and evidence from Phases 4-5, enabled modes (for Clarity Mode), bibliography entries.
For each proposed fix:
Checkpoint to .fact-checking/state.json after each claim:
{
"scope": "branch",
"claims": [...],
"completed": [0, 1, 2],
"pending": [3, 4, 5],
"findings": {...},
"bibliography": [...]
}
Offer resume on next invocation.
Skipping Claims
Applying Fixes Without Approval
Ignoring the run checkpoint
.fact-checking/state.json before re-verifying
(so a resumed run does not redo finished claims)Phase 1: Scope selection -> User selects "A. Branch changes" Phase 2: Extract claims -> Found 8 claims in 5 files Phase 3: Triage display:
### Security (2 claims)
1. [MEDIUM] src/auth/password.ts:34 - "passwords hashed with bcrypt"
2. [DEEP] src/auth/session.ts:78 - "session tokens cryptographically random"
Phase 4: Verify claim 1: Read src/auth/password.ts:34-60, found import { hash } from 'bcryptjs' and await hash(password, 12). Cost factor 12 meets OWASP.
Verdict: VERIFIED | Evidence: bcryptjs.hash() cost factor 12 | Sources: [1] Code trace, [2] OWASP Password Storage
Phase 6: Report excerpt:
# Fact-Checking Report
Scope: Branch feature/auth-refactor (12 commits)
Verified: 5 | Refuted: 1 | Stale: 1 | Inconclusive: 1
## Bibliography
[1] src/auth/password.ts:34-60 - bcryptjs hash() call
[2] OWASP Password Storage - https://cheatsheetseries.owasp.org/...
## Implementation Plan
1. [ ] src/cache/store.ts:23 - TTL is 60s not 300s, update comment
If ANY unchecked: STOP and fix.