Full-Story Verification
You are a verification orchestrator. Your job is not to run a single check — it is to infer the complete user story being built and verify every boundary in the flow with evidence.
This skill coordinates with agent-browser-verify (browser-side visual checks), investigation-mode (reactive debugging), and observability (logging/monitoring) — but your focus is the end-to-end story, not any single layer.
When This Triggers
- A dev server just started and the user wants to know if things work
- The user says something "isn't quite right" or "almost works"
- The user asks you to verify a feature or check the full flow
Step 1 — Infer the User Story
Before checking anything, determine what is being built:
- Read recently edited files (check git diff or recent Write/Edit tool calls)
- Identify the feature boundary: which routes, components, API endpoints, and data sources are involved
- Scan
package.json scripts, route structure (app/ or pages/), and environment files (.env*)
- State the story in one sentence: "The user is building [X] which flows from [UI entry point] → [API route] → [data source] → [response rendering]"
Do not skip this step. Every subsequent check must be anchored to the inferred story.
Step 2 — Establish Evidence Baseline
Gather the current state across all layers:
| Layer |
How to check |
What to capture |
| Browser |
Use agent-browser — open the relevant page, screenshot, check console |
Visual state, console errors, network failures |
| Server terminal |
Read the terminal output from the dev server process |
Startup errors, request logs, compilation warnings |
| Runtime logs |
Run vercel logs (if deployed) or check server stdout |
API response codes, error traces, timing |
| Environment |
Check .env.local, vercel env ls, compare expected vs actual |
Missing vars, wrong values, production vs development mismatch |
Report what you find at each layer before proceeding. Use the investigation-mode reporting contract:
Checking: [what you're looking at]
Evidence: [what you found — quote actual output]
Next: [what this means for the next step]
Step 3 — Walk the Data Flow
Trace the feature's data path from trigger to completion:
- UI trigger — What user action initiates the flow? (button click, page load, form submit)
- Client → Server — What request is made? Check the fetch/action call, verify the URL, method, and payload match the API route
- API route handler — Read the route file. Does it handle the method? Does it validate input? Does it call the right service/database?
- External dependencies — If the route calls a database, third-party API, or Vercel service (KV, Blob, Postgres, AI SDK): verify the client is initialized, credentials are present, and the call shape matches the SDK docs
- Response → UI — Does the response format match what the client expects? Is error handling present on both sides?
At each boundary, check for these common breaks:
- Missing
await on async operations
- Wrong HTTP method (GET handler but POST fetch)
- Env var absent in runtime but present in
.env.local
- Import mismatch (server module imported in client component or vice versa)
- Type mismatch between API response and client expectation
- Missing error boundary — unhandled rejection crashes the page silently
Step 4 — Report With Evidence
Summarize findings in a structured report:
## Verification Report: [Feature Name]
**Story**: [one-sentence description of the user story]
### Flow Status
| Boundary | Status | Evidence |
|----------|--------|----------|
| UI renders | ✅/❌ | [screenshot or console output] |
| Client → API | ✅/❌ | [request/response or error] |
| API → Data | ✅/❌ | [log output or error trace] |
| Data → Response | ✅/❌ | [response shape or error] |
| Response → UI | ✅/❌ | [rendered output or error] |
### Issues Found
1. [Issue]: [evidence] → [fix]
### Verified Working
- [What was confirmed working with evidence]
Stop Conditions
Stop verifying when:
- All boundaries in the flow are confirmed working with evidence — report success
- You find the first broken boundary — report it with evidence and a specific fix, do not continue past the break
- Two consecutive layers return no useful signal (e.g., no logs, no errors, no output) — flag the observability gap and recommend adding logging before continuing
Do not:
- Run the same check more than twice
- Continue past a confirmed broken boundary
- Verify unrelated features — stay on the inferred story
- Spend time on cosmetic issues (styling, spacing) unless the user specifically asked
Suggest Verification After Implementation
When you finish building or implementing a feature (wrote code, created routes, set up a project), briefly let the user know they can ask you to verify everything works — e.g. browser verification or end-to-end flow check. One sentence is enough. Don't force it if only a small fix or question was involved.
Coordination With Other Skills
agent-browser-verify — Handles browser screenshots and console checks. Defer to it for visual verification. If it has already run and found issues, start from its findings rather than re-checking the browser.
investigation-mode — Handles reactive debugging when things are stuck/hung. If the user is frustrated and nothing loads at all, investigation-mode takes the lead. Verification takes over when things partially work.
observability — Handles logging/monitoring setup. If you find an observability gap (no logs for a route, no error tracking), reference its guidance for adding structured logging.
1---2name: verification3description: "Full-story verification — infers what the user is building, then verifies the complete flow end-to-end: browser → API → data → response. Triggers on dev server start and 'why isn't this working' signals."4summary: "Verify full user story: browser + server + data flow + env"5metadata:6 priority: 77 docs:8 - "https://vercel.com/docs/projects/project-configuration"9 sitemap: "https://vercel.com/sitemap/docs.xml"10 pathPatterns: []11 bashPatterns:12 - '\bnext\s+dev\b'13 - '\bnpm\s+run\s+dev\b'14 - '\bpnpm\s+dev\b'15 - '\bbun\s+run\s+dev\b'16 - '\byarn\s+dev\b'17 - '\bvite\s*(dev)?\b'18 - '\bvercel\s+dev\b'19 - '\bastro\s+dev\b'20 importPatterns: []21 promptSignals:22 phrases:23 - "verify the flow"24 - "verify everything works"25 - "test the whole thing"26 - "does it actually work"27 - "check end to end"28 - "end to end test"29 - "why isn't it working right"30 - "why doesn't it work"31 - "it's not working correctly"32 - "something's off"33 - "not quite right"34 - "almost works but"35 - "works locally but"36 - "verify the feature"37 - "make sure it works"38 - "full verification"39 allOf:40 - [verify, flow]41 - [verify, works]42 - [check, everything]43 - [test, end, end]44 - [not, working, right]45 - [something, off]46 - [almost, works]47 - [make, sure, works]48 anyOf:49 - "verify"50 - "verification"51 - "end-to-end"52 - "full flow"53 - "works"54 - "working"55 noneOf:56 - "unit test"57 - "jest"58 - "vitest"59 - "playwright test"60 - "cypress test"61 minScore: 662retrieval:63 aliases:64 - end to end test65 - full stack verify66 - flow test67 - integration check68 intents:69 - verify full flow70 - test end to end71 - check if app works72 - validate implementation73 entities:74 - browser75 - API76 - data flow77 - end-to-end78 - verification79chainTo:80 -81 pattern: 'process\.env\.\w+|NEXT_PUBLIC_\w+'82 targetSkill: env-vars83 message: 'Environment variable references detected during verification — loading Env Vars guidance for proper configuration, vercel env pull, and branch scoping.'84 skipIfFileContains: 'vercel\s+env\s+pull|\.env\.local'85 -86 pattern: 'middleware\.(ts|js)|proxy\.(ts|js)|clerkMiddleware|NextResponse\.redirect'87 targetSkill: routing-middleware88 message: 'Middleware/proxy detected during verification — loading Routing Middleware guidance for request interception, auth checks, and proxy.ts migration.'89 -90 pattern: 'streamText\s*\(|generateText\s*\(|useChat\s*\('91 targetSkill: ai-sdk92 message: 'AI SDK calls detected during verification — loading AI SDK v6 guidance for streaming, transport, and error handling patterns.'93 skipIfFileContains: 'toUIMessageStreamResponse|DefaultChatTransport'9495---9697# Full-Story Verification9899You are a verification orchestrator. Your job is not to run a single check — it is to **infer the complete user story** being built and verify every boundary in the flow with evidence.100101This skill coordinates with `agent-browser-verify` (browser-side visual checks), `investigation-mode` (reactive debugging), and `observability` (logging/monitoring) — but your focus is the **end-to-end story**, not any single layer.102103## When This Triggers104105- A dev server just started and the user wants to know if things work106- The user says something "isn't quite right" or "almost works"107- The user asks you to verify a feature or check the full flow108109## Step 1 — Infer the User Story110111Before checking anything, determine **what is being built**:1121131. Read recently edited files (check git diff or recent Write/Edit tool calls)1142. Identify the feature boundary: which routes, components, API endpoints, and data sources are involved1153. Scan `package.json` scripts, route structure (`app/` or `pages/`), and environment files (`.env*`)1164. State the story in one sentence: _"The user is building [X] which flows from [UI entry point] → [API route] → [data source] → [response rendering]"_117118**Do not skip this step.** Every subsequent check must be anchored to the inferred story.119120## Step 2 — Establish Evidence Baseline121122Gather the current state across all layers:123124| Layer | How to check | What to capture |125|-------|-------------|-----------------|126| **Browser** | Use `agent-browser` — open the relevant page, screenshot, check console | Visual state, console errors, network failures |127| **Server terminal** | Read the terminal output from the dev server process | Startup errors, request logs, compilation warnings |128| **Runtime logs** | Run `vercel logs` (if deployed) or check server stdout | API response codes, error traces, timing |129| **Environment** | Check `.env.local`, `vercel env ls`, compare expected vs actual | Missing vars, wrong values, production vs development mismatch |130131Report what you find at each layer before proceeding. Use the investigation-mode reporting contract:132133> **Checking**: [what you're looking at]134> **Evidence**: [what you found — quote actual output]135> **Next**: [what this means for the next step]136137## Step 3 — Walk the Data Flow138139Trace the feature's data path from trigger to completion:1401411. **UI trigger** — What user action initiates the flow? (button click, page load, form submit)1422. **Client → Server** — What request is made? Check the fetch/action call, verify the URL, method, and payload match the API route1433. **API route handler** — Read the route file. Does it handle the method? Does it validate input? Does it call the right service/database?1444. **External dependencies** — If the route calls a database, third-party API, or Vercel service (KV, Blob, Postgres, AI SDK): verify the client is initialized, credentials are present, and the call shape matches the SDK docs1455. **Response → UI** — Does the response format match what the client expects? Is error handling present on both sides?146147At each boundary, check for these common breaks:148- **Missing `await`** on async operations149- **Wrong HTTP method** (GET handler but POST fetch)150- **Env var absent** in runtime but present in `.env.local`151- **Import mismatch** (server module imported in client component or vice versa)152- **Type mismatch** between API response and client expectation153- **Missing error boundary** — unhandled rejection crashes the page silently154155## Step 4 — Report With Evidence156157Summarize findings in a structured report:158159```160## Verification Report: [Feature Name]161162**Story**: [one-sentence description of the user story]163164### Flow Status165| Boundary | Status | Evidence |166|----------|--------|----------|167| UI renders | ✅/❌ | [screenshot or console output] |168| Client → API | ✅/❌ | [request/response or error] |169| API → Data | ✅/❌ | [log output or error trace] |170| Data → Response | ✅/❌ | [response shape or error] |171| Response → UI | ✅/❌ | [rendered output or error] |172173### Issues Found1741. [Issue]: [evidence] → [fix]175176### Verified Working177- [What was confirmed working with evidence]178```179180## Stop Conditions181182**Stop verifying when**:183- All boundaries in the flow are confirmed working with evidence — report success184- You find the **first broken boundary** — report it with evidence and a specific fix, do not continue past the break185- Two consecutive layers return no useful signal (e.g., no logs, no errors, no output) — flag the observability gap and recommend adding logging before continuing186187**Do not**:188- Run the same check more than twice189- Continue past a confirmed broken boundary190- Verify unrelated features — stay on the inferred story191- Spend time on cosmetic issues (styling, spacing) unless the user specifically asked192193## Suggest Verification After Implementation194195When you finish building or implementing a feature (wrote code, created routes, set up a project), briefly let the user know they can ask you to verify everything works — e.g. browser verification or end-to-end flow check. One sentence is enough. Don't force it if only a small fix or question was involved.196197## Coordination With Other Skills198199- **`agent-browser-verify`** — Handles browser screenshots and console checks. Defer to it for visual verification. If it has already run and found issues, start from its findings rather than re-checking the browser.200- **`investigation-mode`** — Handles reactive debugging when things are stuck/hung. If the user is frustrated and nothing loads at all, investigation-mode takes the lead. Verification takes over when things _partially_ work.201- **`observability`** — Handles logging/monitoring setup. If you find an observability gap (no logs for a route, no error tracking), reference its guidance for adding structured logging.