spec-verifier — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited spec-verifier (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.
Verifies implementation fidelity against spec-graph and signs off completed phases. This skill is the sole authority for transitioning phases to resolved.
STOP. Before proceeding with this skill, you MUST load the `spec-graph` skill.
The spec-graph skill provides the schema knowledge required to operate spec-graph correctly:
delivers, covers, mitigates, verifies, etc.)mitigates)Without `spec-graph` skill loaded, you will misinterpret validation output and sign off incomplete phases. This is non-negotiable.
To load it, invoke the skill tool with name="spec-graph" before continuing.
spec-graph CLI installed and available in PATH.spec-graph/ with active plan and phasesactive status (implementation done, ready for verification)PLN: draft → active → resolved (gated: plan_coverage)
→ deprecated (--force required)
PHS: draft → active → resolved (gated: delivery_completeness + gates)
→ deprecated (--force required)| Transition | Owner | Precondition |
|---|---|---|
| PLN: draft → active | spec-planner | Only one active plan allowed |
| PHS: draft → active | spec-executor | Predecessor phases resolved |
| PHS: active → resolved | spec-verifier (you) | All deliverables verified, gate passes |
| Any → deprecated | User (manual) | --force required |
resolved.draft, reject verification and instruct the user to activate it first via spec-executor.draft → resolved is invalid. Must pass through active.deprecated.delivers relation means verified delivery, not claimed delivery.resolved is exclusively this skill's authority.Determine scope:
# Check .spec-graph/ exists
spec-graph entity list --type plan --status activeIf no .spec-graph/ or no active plan:
No spec-graph found (or no active plan). Cannot verify.
Run spec-planner first to create a plan.Determine what to verify:
active phases in dependency orderactive status and apply selection heuristicspec-graph entity list --type phase --status active#### Phase Selection (when multiple active phases exist)
If multiple phases are in active status:
resolved first. spec-graph query neighbors PHS-XXX --depth 1 Multiple active phases found:
- PHS-001 "..." (no unresolved dependencies)
- PHS-002 "..." (depends on PHS-001)
Recommend verifying PHS-001 first (unblocks PHS-002).
Which phase should I verify?Query the phase's coverage:
spec-graph query scope PHS-XXXParse to get:
coversdelivers relations (claimed complete by spec-executor)delivers (potentially incomplete)Run spec-graph validation checks:
# Mapping layer — phase-specific
spec-graph validate --layer mapping --phase PHS-XXX
# Arch layer — coverage and unresolved
spec-graph validate --layer arch --check coverage,unresolved
# Check for unresolved items blocking this phase
spec-graph query unresolvedCollect all failures. Each failure becomes a verification finding.
For each arch entity covered by this phase, delegate verification to a sub-agent. Do NOT verify entities yourself sequentially. Spawn one sub-agent per entity, in parallel.
#### Role Separation
| Responsibility | Owner |
|---|---|
| Graph validation (Steps 0-2) | Verifier (you) |
| Code-level evidence gathering + logic analysis | Sub-agent |
| Interpreting sub-agent reports → PASS/FAIL/NEEDS_REVIEW | Verifier (you) |
| Spot-check code on ambiguous/conflicting reports | Verifier (you) |
delivers relation management | Verifier (you) |
| Verdict and sign-off | Verifier (you) |
| Cross-entity reconciliation | Verifier (you) |
The verifier does not perform routine code-level verification itself. It may inspect implementation code to adjudicate low-confidence, conflicting, incomplete, or sign-off-critical sub-agent findings.
Sub-agents NEVER run spec-graph commands or make graph decisions.
#### Sub-Agent Mission
Each sub-agent receives exactly ONE entity and must answer TWO questions:
The sub-agent must provide evidence for its conclusions — not bare verdicts.
#### What the Sub-Agent Must Do
For the assigned entity, the sub-agent:
Do not mark LOGIC=CORRECT merely because a matching name exists. Only mark correct if the implementation behavior can be traced to the entity intent.
#### What the Sub-Agent Must NOT Do
#### Verification Depth (per entity type)
| Entity Type | Structural Check | Logic Check |
|---|---|---|
| REQ (requirement) | Module/file exists for the feature | Feature logic matches requirement description |
| DEC (decision) | Architecture/config reflects the decision | No contradictions to the decided approach |
| ACT (criterion) | Code path exists for the acceptance condition | Given/When/Then satisfiable by current logic |
| RSK (risk) | Mitigation code present | Mitigation actually addresses the risk scenario |
| API (interface) | Endpoint/handler/contract defined | Request/response shape matches, error handling present |
| STT (state) | State transitions implemented | All declared transitions reachable, no dead states |
| TST (test) | Test file exists targeting the entity | Test assertions actually verify the claimed behavior |
For entity types not listed above: verify structural evidence matching the entity description and assess logical satisfaction from title, description, and relations. If insufficient context, return CANNOT_ASSESS.
#### Sub-Agent Prompt Template
For each entity, spawn a sub-agent with this prompt structure:
ROLE: You are a code verification agent. Your job is to find and analyze implementation
code for a single spec-graph entity. Report your findings — do not modify anything.
PHASE CONTEXT:
Phase ID: <phase-id>
Phase title: "<phase-title>"
Source directories: <list of source dirs, e.g., src/, internal/, cmd/>
Test directories: <list of test dirs, e.g., tests/, *_test.go>
Known relevant files (if any): <files identified in prior steps>
ENTITY:
ID: <ID>
Type: <type>
Title: "<title>"
Description: "<description>" (if available)
Metadata: <relevant metadata, e.g., priority, kind, acceptance criteria>
RELATED ENTITIES (for context only — do NOT verify these):
- <ID> <type> "<title>" (relationship: <relation type>)
- ...
TASK:
1. LOCATE: Find all source files implementing this entity.
- Search by: entity ID, title keywords, domain concepts, API routes, exported symbols.
- Check source dirs, config files, migrations, scripts — not just code files.
- Do NOT stop at the first match. Search comprehensively.
2. STRUCTURAL CHECK: Does the implementation exist?
- List file paths and relevant symbols (functions, types, handlers).
- If nothing found, report MISSING and list all directories/queries searched.
3. LOGIC CHECK: Does the implementation correctly satisfy the entity?
- Read the code and assess whether it fulfills the title/description.
- Flag: missing edge cases, incomplete flows, logic errors, contradictions.
- For tests (TST): inspect assertions, not just file/test names.
- For negative requirements: verify absence of the forbidden pattern.
- For partial implementations: report as ISSUES_FOUND with specifics.
4. REPORT using this exact format:
ENTITY: <ID> "<title>"
STRUCTURAL: FOUND | MISSING
LOGIC: CORRECT | ISSUES_FOUND | CANNOT_ASSESS
CONFIDENCE: HIGH | MEDIUM | LOW
SEARCHED:
- Queries/keywords used: [...]
- Directories inspected: [...]
- Files read but rejected: [...]
EVIDENCE:
- <file>:<symbol or line range> — <why this is relevant>
- ...
REASONING:
- Structural rationale: <why FOUND or MISSING>
- Logic rationale: <why CORRECT, ISSUES_FOUND, or CANNOT_ASSESS>
ISSUES (if any):
- [description of logic gap or error]
CROSS-ENTITY NOTES (if any):
- [mention dependencies or contradictions involving related entities — do NOT verify them]
CONSTRAINTS:
- Do NOT run spec-graph commands.
- Do NOT modify any files.
- Do NOT assess entities other than the one above.
- If you cannot determine correctness (e.g., requires runtime state, integration test,
or external service), report CANNOT_ASSESS with explanation of what would be needed.
- Do NOT mark LOGIC=CORRECT merely because a matching name/file exists.
Trace behavior to entity intent.#### Concurrency Rules
#### Result Interpretation (Verifier's job)
After all sub-agents return, classify each entity:
| Sub-Agent Report | Verifier Decision |
|---|---|
| FOUND + CORRECT + HIGH/MEDIUM confidence | PASS |
| FOUND + CORRECT + LOW confidence | NEEDS_REVIEW — verifier spot-checks code |
| FOUND + ISSUES_FOUND (any confidence) | FAIL (with specific findings) |
| FOUND + CANNOT_ASSESS | NEEDS_REVIEW — blocked until verifier inspects or user accepts risk |
| MISSING (any) | FAIL (Critical — unimplemented) |
| Malformed/incomplete report | Rerun sub-agent or NEEDS_REVIEW |
| Conflicting findings across sub-agents | NEEDS_REVIEW — verifier reconciles |
NEEDS_REVIEW resolution:
Phase sign-off requires:
#### Cross-Entity Reconciliation (Verifier's job)
After collecting all reports:
#### Behavioral Verification (after structural + logic)
# If test runner available
[run project tests]If test runner is not available, structural + logic verification alone determines the verdict.
Important: If behavioral tests fail but sub-agents reported PASS on related entities, the test failure overrides the sub-agent verdict. Mark affected entities as FAIL.
#### Test Verification (MANDATORY)
This check is non-negotiable. A phase CANNOT pass with failing tests.
Every phase must have all tests passing upon completion. Execute the project's test suite:
# Run full test suite
[run test command — e.g., make test, go test ./..., npm test, cargo test, pytest]Rules:
#### Build/Run Verification (MANDATORY)
This check is non-negotiable. A phase CANNOT pass without it.
Every phase must leave the project in a buildable or runnable state. Execute one of the following:
# Option 1: Build command (compiled languages, bundled projects)
[run build command — e.g., make build, go build ./..., npm run build, cargo build]
# Option 2: Dev server start (web apps, interpreted languages)
[start dev server and confirm it boots without errors — e.g., npm run dev, go run .]Rules:
go vet ./..., tsc --noEmit, python -m py_compile).Determine the correct command by checking project config files (Makefile, package.json, Cargo.toml, go.mod, etc.).
For entities where implementation is verified:
# Check if delivers already exists
spec-graph relation list --from PHS-XXX --type delivers
# Add delivers for verified entities (if not already present)
spec-graph relation add --from PHS-XXX --to REQ-001 --type deliversRules:
delivers when YOU have verified the implementationdelivers, verify it's accurate. Remove if not.Classify findings by severity:
| Severity | Criteria |
|---|---|
| Critical (red) | Core requirement unimplemented, blocking dependency missing, build/run fails, tests fail |
| Major (yellow) | Significant feature gap, test coverage missing |
| Minor (green) | Non-blocking issue, cosmetic, documentation gap |
Output format (failures only):
# Verification Report
**Phase**: PHS-XXX "[title]"
**Verdict**: PASS / FAIL / PARTIAL
## Failures (if any)
### 1. [short title]
- **Severity**: Critical / Major / Minor
- **Entity**: REQ-001 "..."
- **Expected**: [what spec-graph says]
- **Actual**: [what code shows]
- **Fix**: [specific action]
### 2. ...If PASS: skip to Step 7.
#### With delegation (task() available):
task()#### Without delegation:
Max 3 retry loops. If still failing after 3 attempts:
# Verification Report
**Verdict**: PARTIAL
**Resolved**: X / Y failures fixed
**Remaining** (cannot auto-fix):
- [failure description + why it can't be auto-fixed]
Manual intervention required for remaining items.#### Guardrails (never violate during auto-fix):
as any, @ts-ignore, empty catch)When all checks pass:
# Attempt resolution — gate runs automatically
spec-graph entity update PHS-XXX --status resolvedIf the gate blocks (exit 2):
# Check what's blocking
spec-graph validate --layer mapping --phase PHS-XXX --check delivery_completeness
spec-graph validate --layer mapping --phase PHS-XXX --check gates
# Fix blocking issues, then retry
spec-graph entity update PHS-XXX --status resolvedOn success:
Phase PHS-XXX: PASSED
All deliverables verified. Phase resolved.
Next phase: PHS-YYY "[title]" (if exists)Git: Commit the phase resolution:
git add .spec-graph/ && git commit -m "spec-graph: PHS-XXX resolved - verification passed"| Action | Owner | Delegate? |
|---|---|---|
| Code fixes for failed findings | Delegated agent | Yes — via task() |
| spec-graph validation | This skill (you) | Never |
| delivers relation management | This skill (you) | Never |
| Phase sign-off decision | This skill (you) | Never |
| Verdict determination | This skill (you) | Never |
Delegated agents must NOT:
| Exit Code | Meaning | Action |
|---|---|---|
| 0 | Success | Proceed |
| 1 | Runtime error | Check stderr, retry |
| 2 | Validation failure / gate blocked | Parse output, resolve issues, retry |
| 3 | Invalid input | Check arguments, fix, retry |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.