- Home
- Skills
- Testing & Debugging
- Spec Verification Audit: Did We Build What the Spec Says?
Works with the AI Agents you already use
Spec Verification Audit: Did We Build What the Spec Says?
Audits your code against the spec one requirement at a time: exists, real or stub, wired to a real entry point, and proven by a test it actually ran.
$12
Spec Verification Audit: Did We Build What the Spec Says?
Example session with this skill installed
Verify the app against program/shelflife/specs/requirements.md before we ship.
- Read your context and instructions
- Compiled the spec verification audit
- Generated the document
Scope: 19 rows: FR-1 to FR-6 split by acceptance criterion, plus 3 NFRs (performance, security, accessibility). v2 items excluded.
Verification — ShelfLife vs requirements.md
Audited at 4be81d0 · Result: 14 verified · 3 present-unverified · 2 failed · 0 blocked
Not verified (5 rows)
| ID | Verdict | Gap | Evidence | Smallest next action |
|---|---|---|---|---|
| FR-5.b | failed | unwired | isExpired() exists (households/invites.ts:41) but join/[token]/+page.server.ts:18 calls acceptInvite without it; a 9-day-old token is accepted | call isExpired first; add a rejection test asserting no membership row |
| FR-3.b | failed | semantic-contract | UI sends toss, but markItem stores both use and toss as 'used' (items/service.ts:77); the digest's waste count is always 0 | map toss → 'tossed'; add a write → reopen → read assertion |
| FR-4 | present-unverified | proof-gap | digest builder tested (5 selected); the cron route → builder → send path has no test | route-level test with a fixture mail sender |
| NFR-security | present-unverified | proof-gap | household scoping looks right; no test that member A can't read household B | cross-household rejection test |
| FR-2.b | present-unverified | proof-gap | npm test -- pantry reported green but selected 212 tests (the whole suite); nothing asserts the Expired section | scoped test via npx vitest run tests/items/pantry.test.ts |
Verified (excerpt)
| ID | Exists | Wired | Behaviour proof |
|---|---|---|---|
| FR-1.a | items/service.ts:22 | POST /api/items → +server.ts:9 → addItem | journey.test.ts: 4 selected, exit 0; real SQLite file, close/reopen |
| FR-1.b | items/service.ts:25 | same | "past date → 422, no row": 1 selected, exit 0 |
Commands run: 7 (all listed in the report with selected counts).
Limits: email delivery not exercised (no provider configured).
Written to program/shelflife/VERIFICATION.md. Two failures block shipping, and both are one-function fixes with a test.
spec-verification-audit-did-we-build-wha.pdf
PDF · document
Example file from a real run - the skill writes it into your workspace.
Connects securely to your tools. The creator never sees your data.
About this skill
"All tests pass" and "the agent says it's done" are not the same as "the feature works." This skill makes your agent audit the codebase against the spec the way a strict reviewer would: one row per requirement, evidence for every claim, and verdicts that can't be rounded up.
What it does
For every requirement in your spec, PRD or acceptance criteria:
| ID | Exists | Substantive | Wired | Behaviour proof | Verdict |
|---|
- Exists: the
path:linethat implements it. - Substantive: real logic, or a stub returning a hardcoded value?
- Wired: the real entry path that reaches it, traced through constructors and registrations, not imports.
- Behaviour proof: a test the agent ran itself, with the selected-test count and exit code.
- Verdict:
verified,present-unverified,failedorblocked.
Every gap is classified (stub, unwired, missing-adapter, contract-response, semantic-contract, proof-gap, environment) with the smallest next action and a suggested owner.
How it works
- Inventory the requirements (FR IDs, acceptance criteria, must-have NFRs) and confirm scope in one line.
- Trace each requirement from user action → entry point → service → durable write → read after restart.
- Run the covering tests with a selector that really scopes, and read the counts.
- Apply strict verdict rules and write
VERIFICATION.md, with the gaps first.
Frameworks & tools
Any language, framework and test runner (Vitest, Jest, pytest, Go, Cargo, Playwright and more). Read-only, apart from the one report file.
Why this beats prompting it yourself
Ask an agent "does this match the spec?" and it reads the code, sees plausible functions, and says yes. This skill bans that: code without an exercising test is present-unverified, a run that selected zero tests is not evidence, a filter that silently ran the whole suite is flagged, and a mock that bypasses the boundary under test proves nothing.
Use cases
- Check an AI agent's "done" before you merge.
- Run an acceptance or ship-readiness review against a PRD.
- Find features whose route exists but is never mounted.
- Catch states collapsed at the storage boundary before users do.
Known limitations
It reports and doesn't fix. Requirements that need real external services, devices or credentials are marked blocked, not guessed. Its quality depends on the spec having identifiable requirements: if yours has none, it mints R-n IDs and records its reading of each.
How to use
- 1
Connect your agent to the Agensi MCP
Copy the prompt and paste it into Claude, ChatGPT, Cursor or any agent that supports MCP. It sets up the connection for you. Manual setup
- 2
Sign in to Agensi
Your agent shows a sign-in link. Sign in and click Allow.
- 3
Ask for what you need
Your agent loads this skill and uses it on your task. It always asks before any payment.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill goes through the trust checks below.
Security scanned
Checked by our 8-point scan before listing
Fresh listing
Recently published to Agensi
Money-back guarantee
Doesn't do what its page promises? You get your money back.
Trust & safety
Security scan
Security scan passed 3 days ago
Requires