[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-vercel-verification":3,"mdc-dusstm-key":34,"related-repo-vercel-verification":771,"related-org-vercel-verification":885},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"verification","verify application flows end-to-end","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"vercel","Vercel","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fvercel.png",[12,16,17,20],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"E2E Testing","e2e-testing",{"name":21,"slug":22,"type":15},"Testing","testing",226,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fvercel-plugin","2026-04-06T18:56:10.478467",null,36,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Comprehensive Vercel ecosystem plugin — relational knowledge graph, skills for every major product, specialized agents, and Vercel conventions. Turns any AI agent into a Vercel expert.","https:\u002F\u002Fgithub.com\u002Fvercel\u002Fvercel-plugin\u002Ftree\u002FHEAD\u002Fskills\u002Fverification","---\nname: verification\ndescription: \"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.\"\nsummary: \"Verify full user story: browser + server + data flow + env\"\nmetadata:\n  priority: 7\n  docs:\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fprojects\u002Fproject-configuration\"\n  sitemap: \"https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml\"\n  pathPatterns: []\n  bashPatterns:\n    - '\\bnext\\s+dev\\b'\n    - '\\bnpm\\s+run\\s+dev\\b'\n    - '\\bpnpm\\s+dev\\b'\n    - '\\bbun\\s+run\\s+dev\\b'\n    - '\\byarn\\s+dev\\b'\n    - '\\bvite\\s*(dev)?\\b'\n    - '\\bvercel\\s+dev\\b'\n    - '\\bastro\\s+dev\\b'\n  importPatterns: []\n  promptSignals:\n    phrases:\n      - \"verify the flow\"\n      - \"verify everything works\"\n      - \"test the whole thing\"\n      - \"does it actually work\"\n      - \"check end to end\"\n      - \"end to end test\"\n      - \"why isn't it working right\"\n      - \"why doesn't it work\"\n      - \"it's not working correctly\"\n      - \"something's off\"\n      - \"not quite right\"\n      - \"almost works but\"\n      - \"works locally but\"\n      - \"verify the feature\"\n      - \"make sure it works\"\n      - \"full verification\"\n    allOf:\n      - [verify, flow]\n      - [verify, works]\n      - [check, everything]\n      - [test, end, end]\n      - [not, working, right]\n      - [something, off]\n      - [almost, works]\n      - [make, sure, works]\n    anyOf:\n      - \"verify\"\n      - \"verification\"\n      - \"end-to-end\"\n      - \"full flow\"\n      - \"works\"\n      - \"working\"\n    noneOf:\n      - \"unit test\"\n      - \"jest\"\n      - \"vitest\"\n      - \"playwright test\"\n      - \"cypress test\"\n    minScore: 6\nretrieval:\n  aliases:\n    - end to end test\n    - full stack verify\n    - flow test\n    - integration check\n  intents:\n    - verify full flow\n    - test end to end\n    - check if app works\n    - validate implementation\n  entities:\n    - browser\n    - API\n    - data flow\n    - end-to-end\n    - verification\nchainTo:\n  -\n    pattern: 'process\\.env\\.\\w+|NEXT_PUBLIC_\\w+'\n    targetSkill: env-vars\n    message: 'Environment variable references detected during verification — loading Env Vars guidance for proper configuration, vercel env pull, and branch scoping.'\n    skipIfFileContains: 'vercel\\s+env\\s+pull|\\.env\\.local'\n  -\n    pattern: 'middleware\\.(ts|js)|proxy\\.(ts|js)|clerkMiddleware|NextResponse\\.redirect'\n    targetSkill: routing-middleware\n    message: 'Middleware\u002Fproxy detected during verification — loading Routing Middleware guidance for request interception, auth checks, and proxy.ts migration.'\n  -\n    pattern: 'streamText\\s*\\(|generateText\\s*\\(|useChat\\s*\\('\n    targetSkill: ai-sdk\n    message: 'AI SDK calls detected during verification — loading AI SDK v6 guidance for streaming, transport, and error handling patterns.'\n    skipIfFileContains: 'toUIMessageStreamResponse|DefaultChatTransport'\n\n---\n\n# Full-Story Verification\n\nYou 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.\n\nYour focus is the **end-to-end story**, not any single layer.\n\n## When This Triggers\n\n- A dev server just started and the user wants to know if things work\n- The user says something \"isn't quite right\" or \"almost works\"\n- The user asks you to verify a feature or check the full flow\n\n## Step 1 — Infer the User Story\n\nBefore checking anything, determine **what is being built**:\n\n1. Read recently edited files (check git diff or recent Write\u002FEdit tool calls)\n2. Identify the feature boundary: which routes, components, API endpoints, and data sources are involved\n3. Scan `package.json` scripts, route structure (`app\u002F` or `pages\u002F`), and environment files (`.env*`)\n4. State the story in one sentence: _\"The user is building [X] which flows from [UI entry point] → [API route] → [data source] → [response rendering]\"_\n\n**Do not skip this step.** Every subsequent check must be anchored to the inferred story.\n\n## Step 2 — Establish Evidence Baseline\n\nGather the current state across all layers:\n\n| Layer | How to check | What to capture |\n|-------|-------------|-----------------|\n| **Browser** | Open the relevant page, check console, take screenshots | Visual state, console errors, network failures |\n| **Server terminal** | Read the terminal output from the dev server process | Startup errors, request logs, compilation warnings |\n| **Runtime logs** | Run `vercel logs` (if deployed) or check server stdout | API response codes, error traces, timing |\n| **Environment** | Check `.env.local`, `vercel env ls`, compare expected vs actual | Missing vars, wrong values, production vs development mismatch |\n\nReport what you find at each layer before proceeding. Use this reporting contract:\n\n> **Checking**: [what you're looking at]\n> **Evidence**: [what you found — quote actual output]\n> **Next**: [what this means for the next step]\n\n## Step 3 — Walk the Data Flow\n\nTrace the feature's data path from trigger to completion:\n\n1. **UI trigger** — What user action initiates the flow? (button click, page load, form submit)\n2. **Client → Server** — What request is made? Check the fetch\u002Faction call, verify the URL, method, and payload match the API route\n3. **API route handler** — Read the route file. Does it handle the method? Does it validate input? Does it call the right service\u002Fdatabase?\n4. **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\n5. **Response → UI** — Does the response format match what the client expects? Is error handling present on both sides?\n\nAt each boundary, check for these common breaks:\n- **Missing `await`** on async operations\n- **Wrong HTTP method** (GET handler but POST fetch)\n- **Env var absent** in runtime but present in `.env.local`\n- **Import mismatch** (server module imported in client component or vice versa)\n- **Type mismatch** between API response and client expectation\n- **Missing error boundary** — unhandled rejection crashes the page silently\n\n## Step 4 — Report With Evidence\n\nSummarize findings in a structured report:\n\n```\n## Verification Report: [Feature Name]\n\n**Story**: [one-sentence description of the user story]\n\n### Flow Status\n| Boundary | Status | Evidence |\n|----------|--------|----------|\n| UI renders | ✅\u002F❌ | [screenshot or console output] |\n| Client → API | ✅\u002F❌ | [request\u002Fresponse or error] |\n| API → Data | ✅\u002F❌ | [log output or error trace] |\n| Data → Response | ✅\u002F❌ | [response shape or error] |\n| Response → UI | ✅\u002F❌ | [rendered output or error] |\n\n### Issues Found\n1. [Issue]: [evidence] → [fix]\n\n### Verified Working\n- [What was confirmed working with evidence]\n```\n\n## Stop Conditions\n\n**Stop verifying when**:\n- All boundaries in the flow are confirmed working with evidence — report success\n- You find the **first broken boundary** — report it with evidence and a specific fix, do not continue past the break\n- 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\n\n**Do not**:\n- Run the same check more than twice\n- Continue past a confirmed broken boundary\n- Verify unrelated features — stay on the inferred story\n- Spend time on cosmetic issues (styling, spacing) unless the user specifically asked\n\n## Suggest Verification After Implementation\n\nWhen 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.\n\n",{"data":35,"body":134},{"name":4,"description":6,"summary":36,"metadata":37,"retrieval":105,"chainTo":119},"Verify full user story: browser + server + data flow + env",{"priority":38,"docs":39,"sitemap":41,"pathPatterns":42,"bashPatterns":43,"importPatterns":52,"promptSignals":53},7,[40],"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fprojects\u002Fproject-configuration","https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml",[],[44,45,46,47,48,49,50,51],"\\bnext\\s+dev\\b","\\bnpm\\s+run\\s+dev\\b","\\bpnpm\\s+dev\\b","\\bbun\\s+run\\s+dev\\b","\\byarn\\s+dev\\b","\\bvite\\s*(dev)?\\b","\\bvercel\\s+dev\\b","\\bastro\\s+dev\\b",[],{"phrases":54,"allOf":71,"anyOf":95,"noneOf":98,"minScore":104},[55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70],"verify the flow","verify everything works","test the whole thing","does it actually work","check end to end","end to end test","why isn't it working right","why doesn't it work","it's not working correctly","something's off","not quite right","almost works but","works locally but","verify the feature","make sure it works","full verification",[72,75,77,80,83,87,90,92],[73,74],"verify","flow",[73,76],"works",[78,79],"check","everything",[81,82,82],"test","end",[84,85,86],"not","working","right",[88,89],"something","off",[91,76],"almost",[93,94,76],"make","sure",[73,4,96,97,76,85],"end-to-end","full flow",[99,100,101,102,103],"unit test","jest","vitest","playwright test","cypress test",6,{"aliases":106,"intents":110,"entities":115},[60,107,108,109],"full stack verify","flow test","integration check",[111,112,113,114],"verify full flow","test end to end","check if app works","validate implementation",[116,117,118,96,4],"browser","API","data flow",[120,125,129],{"pattern":121,"targetSkill":122,"message":123,"skipIfFileContains":124},"process\\.env\\.\\w+|NEXT_PUBLIC_\\w+","env-vars","Environment variable references detected during verification — loading Env Vars guidance for proper configuration, vercel env pull, and branch scoping.","vercel\\s+env\\s+pull|\\.env\\.local",{"pattern":126,"targetSkill":127,"message":128},"middleware\\.(ts|js)|proxy\\.(ts|js)|clerkMiddleware|NextResponse\\.redirect","routing-middleware","Middleware\u002Fproxy detected during verification — loading Routing Middleware guidance for request interception, auth checks, and proxy.ts migration.",{"pattern":130,"targetSkill":131,"message":132,"skipIfFileContains":133},"streamText\\s*\\(|generateText\\s*\\(|useChat\\s*\\(","ai-sdk","AI SDK calls detected during verification — loading AI SDK v6 guidance for streaming, transport, and error handling patterns.","toUIMessageStreamResponse|DefaultChatTransport",{"type":135,"children":136},"root",[137,146,160,172,179,199,205,217,314,324,330,335,476,481,522,528,533,586,591,665,671,676,688,694,703,728,737,760,766],{"type":138,"tag":139,"props":140,"children":142},"element","h1",{"id":141},"full-story-verification",[143],{"type":144,"value":145},"text","Full-Story Verification",{"type":138,"tag":147,"props":148,"children":149},"p",{},[150,152,158],{"type":144,"value":151},"You are a verification orchestrator. Your job is not to run a single check — it is to ",{"type":138,"tag":153,"props":154,"children":155},"strong",{},[156],{"type":144,"value":157},"infer the complete user story",{"type":144,"value":159}," being built and verify every boundary in the flow with evidence.",{"type":138,"tag":147,"props":161,"children":162},{},[163,165,170],{"type":144,"value":164},"Your focus is the ",{"type":138,"tag":153,"props":166,"children":167},{},[168],{"type":144,"value":169},"end-to-end story",{"type":144,"value":171},", not any single layer.",{"type":138,"tag":173,"props":174,"children":176},"h2",{"id":175},"when-this-triggers",[177],{"type":144,"value":178},"When This Triggers",{"type":138,"tag":180,"props":181,"children":182},"ul",{},[183,189,194],{"type":138,"tag":184,"props":185,"children":186},"li",{},[187],{"type":144,"value":188},"A dev server just started and the user wants to know if things work",{"type":138,"tag":184,"props":190,"children":191},{},[192],{"type":144,"value":193},"The user says something \"isn't quite right\" or \"almost works\"",{"type":138,"tag":184,"props":195,"children":196},{},[197],{"type":144,"value":198},"The user asks you to verify a feature or check the full flow",{"type":138,"tag":173,"props":200,"children":202},{"id":201},"step-1-infer-the-user-story",[203],{"type":144,"value":204},"Step 1 — Infer the User Story",{"type":138,"tag":147,"props":206,"children":207},{},[208,210,215],{"type":144,"value":209},"Before checking anything, determine ",{"type":138,"tag":153,"props":211,"children":212},{},[213],{"type":144,"value":214},"what is being built",{"type":144,"value":216},":",{"type":138,"tag":218,"props":219,"children":220},"ol",{},[221,226,231,269],{"type":138,"tag":184,"props":222,"children":223},{},[224],{"type":144,"value":225},"Read recently edited files (check git diff or recent Write\u002FEdit tool calls)",{"type":138,"tag":184,"props":227,"children":228},{},[229],{"type":144,"value":230},"Identify the feature boundary: which routes, components, API endpoints, and data sources are involved",{"type":138,"tag":184,"props":232,"children":233},{},[234,236,243,245,251,253,259,261,267],{"type":144,"value":235},"Scan ",{"type":138,"tag":237,"props":238,"children":240},"code",{"className":239},[],[241],{"type":144,"value":242},"package.json",{"type":144,"value":244}," scripts, route structure (",{"type":138,"tag":237,"props":246,"children":248},{"className":247},[],[249],{"type":144,"value":250},"app\u002F",{"type":144,"value":252}," or ",{"type":138,"tag":237,"props":254,"children":256},{"className":255},[],[257],{"type":144,"value":258},"pages\u002F",{"type":144,"value":260},"), and environment files (",{"type":138,"tag":237,"props":262,"children":264},{"className":263},[],[265],{"type":144,"value":266},".env*",{"type":144,"value":268},")",{"type":138,"tag":184,"props":270,"children":271},{},[272,274],{"type":144,"value":273},"State the story in one sentence: ",{"type":138,"tag":275,"props":276,"children":277},"em",{},[278,280,286,288,293,295,300,301,306,307,312],{"type":144,"value":279},"\"The user is building ",{"type":138,"tag":281,"props":282,"children":283},"span",{},[284],{"type":144,"value":285},"X",{"type":144,"value":287}," which flows from ",{"type":138,"tag":281,"props":289,"children":290},{},[291],{"type":144,"value":292},"UI entry point",{"type":144,"value":294}," → ",{"type":138,"tag":281,"props":296,"children":297},{},[298],{"type":144,"value":299},"API route",{"type":144,"value":294},{"type":138,"tag":281,"props":302,"children":303},{},[304],{"type":144,"value":305},"data source",{"type":144,"value":294},{"type":138,"tag":281,"props":308,"children":309},{},[310],{"type":144,"value":311},"response rendering",{"type":144,"value":313},"\"",{"type":138,"tag":147,"props":315,"children":316},{},[317,322],{"type":138,"tag":153,"props":318,"children":319},{},[320],{"type":144,"value":321},"Do not skip this step.",{"type":144,"value":323}," Every subsequent check must be anchored to the inferred story.",{"type":138,"tag":173,"props":325,"children":327},{"id":326},"step-2-establish-evidence-baseline",[328],{"type":144,"value":329},"Step 2 — Establish Evidence Baseline",{"type":138,"tag":147,"props":331,"children":332},{},[333],{"type":144,"value":334},"Gather the current state across all layers:",{"type":138,"tag":336,"props":337,"children":338},"table",{},[339,363],{"type":138,"tag":340,"props":341,"children":342},"thead",{},[343],{"type":138,"tag":344,"props":345,"children":346},"tr",{},[347,353,358],{"type":138,"tag":348,"props":349,"children":350},"th",{},[351],{"type":144,"value":352},"Layer",{"type":138,"tag":348,"props":354,"children":355},{},[356],{"type":144,"value":357},"How to check",{"type":138,"tag":348,"props":359,"children":360},{},[361],{"type":144,"value":362},"What to capture",{"type":138,"tag":364,"props":365,"children":366},"tbody",{},[367,389,410,439],{"type":138,"tag":344,"props":368,"children":369},{},[370,379,384],{"type":138,"tag":371,"props":372,"children":373},"td",{},[374],{"type":138,"tag":153,"props":375,"children":376},{},[377],{"type":144,"value":378},"Browser",{"type":138,"tag":371,"props":380,"children":381},{},[382],{"type":144,"value":383},"Open the relevant page, check console, take screenshots",{"type":138,"tag":371,"props":385,"children":386},{},[387],{"type":144,"value":388},"Visual state, console errors, network failures",{"type":138,"tag":344,"props":390,"children":391},{},[392,400,405],{"type":138,"tag":371,"props":393,"children":394},{},[395],{"type":138,"tag":153,"props":396,"children":397},{},[398],{"type":144,"value":399},"Server terminal",{"type":138,"tag":371,"props":401,"children":402},{},[403],{"type":144,"value":404},"Read the terminal output from the dev server process",{"type":138,"tag":371,"props":406,"children":407},{},[408],{"type":144,"value":409},"Startup errors, request logs, compilation warnings",{"type":138,"tag":344,"props":411,"children":412},{},[413,421,434],{"type":138,"tag":371,"props":414,"children":415},{},[416],{"type":138,"tag":153,"props":417,"children":418},{},[419],{"type":144,"value":420},"Runtime logs",{"type":138,"tag":371,"props":422,"children":423},{},[424,426,432],{"type":144,"value":425},"Run ",{"type":138,"tag":237,"props":427,"children":429},{"className":428},[],[430],{"type":144,"value":431},"vercel logs",{"type":144,"value":433}," (if deployed) or check server stdout",{"type":138,"tag":371,"props":435,"children":436},{},[437],{"type":144,"value":438},"API response codes, error traces, timing",{"type":138,"tag":344,"props":440,"children":441},{},[442,450,471],{"type":138,"tag":371,"props":443,"children":444},{},[445],{"type":138,"tag":153,"props":446,"children":447},{},[448],{"type":144,"value":449},"Environment",{"type":138,"tag":371,"props":451,"children":452},{},[453,455,461,463,469],{"type":144,"value":454},"Check ",{"type":138,"tag":237,"props":456,"children":458},{"className":457},[],[459],{"type":144,"value":460},".env.local",{"type":144,"value":462},", ",{"type":138,"tag":237,"props":464,"children":466},{"className":465},[],[467],{"type":144,"value":468},"vercel env ls",{"type":144,"value":470},", compare expected vs actual",{"type":138,"tag":371,"props":472,"children":473},{},[474],{"type":144,"value":475},"Missing vars, wrong values, production vs development mismatch",{"type":138,"tag":147,"props":477,"children":478},{},[479],{"type":144,"value":480},"Report what you find at each layer before proceeding. Use this reporting contract:",{"type":138,"tag":482,"props":483,"children":484},"blockquote",{},[485],{"type":138,"tag":147,"props":486,"children":487},{},[488,493,495,500,505,506,511,516,517],{"type":138,"tag":153,"props":489,"children":490},{},[491],{"type":144,"value":492},"Checking",{"type":144,"value":494},": ",{"type":138,"tag":281,"props":496,"children":497},{},[498],{"type":144,"value":499},"what you're looking at",{"type":138,"tag":153,"props":501,"children":502},{},[503],{"type":144,"value":504},"Evidence",{"type":144,"value":494},{"type":138,"tag":281,"props":507,"children":508},{},[509],{"type":144,"value":510},"what you found — quote actual output",{"type":138,"tag":153,"props":512,"children":513},{},[514],{"type":144,"value":515},"Next",{"type":144,"value":494},{"type":138,"tag":281,"props":518,"children":519},{},[520],{"type":144,"value":521},"what this means for the next step",{"type":138,"tag":173,"props":523,"children":525},{"id":524},"step-3-walk-the-data-flow",[526],{"type":144,"value":527},"Step 3 — Walk the Data Flow",{"type":138,"tag":147,"props":529,"children":530},{},[531],{"type":144,"value":532},"Trace the feature's data path from trigger to completion:",{"type":138,"tag":218,"props":534,"children":535},{},[536,546,556,566,576],{"type":138,"tag":184,"props":537,"children":538},{},[539,544],{"type":138,"tag":153,"props":540,"children":541},{},[542],{"type":144,"value":543},"UI trigger",{"type":144,"value":545}," — What user action initiates the flow? (button click, page load, form submit)",{"type":138,"tag":184,"props":547,"children":548},{},[549,554],{"type":138,"tag":153,"props":550,"children":551},{},[552],{"type":144,"value":553},"Client → Server",{"type":144,"value":555}," — What request is made? Check the fetch\u002Faction call, verify the URL, method, and payload match the API route",{"type":138,"tag":184,"props":557,"children":558},{},[559,564],{"type":138,"tag":153,"props":560,"children":561},{},[562],{"type":144,"value":563},"API route handler",{"type":144,"value":565}," — Read the route file. Does it handle the method? Does it validate input? Does it call the right service\u002Fdatabase?",{"type":138,"tag":184,"props":567,"children":568},{},[569,574],{"type":138,"tag":153,"props":570,"children":571},{},[572],{"type":144,"value":573},"External dependencies",{"type":144,"value":575}," — 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",{"type":138,"tag":184,"props":577,"children":578},{},[579,584],{"type":138,"tag":153,"props":580,"children":581},{},[582],{"type":144,"value":583},"Response → UI",{"type":144,"value":585}," — Does the response format match what the client expects? Is error handling present on both sides?",{"type":138,"tag":147,"props":587,"children":588},{},[589],{"type":144,"value":590},"At each boundary, check for these common breaks:",{"type":138,"tag":180,"props":592,"children":593},{},[594,610,620,635,645,655],{"type":138,"tag":184,"props":595,"children":596},{},[597,608],{"type":138,"tag":153,"props":598,"children":599},{},[600,602],{"type":144,"value":601},"Missing ",{"type":138,"tag":237,"props":603,"children":605},{"className":604},[],[606],{"type":144,"value":607},"await",{"type":144,"value":609}," on async operations",{"type":138,"tag":184,"props":611,"children":612},{},[613,618],{"type":138,"tag":153,"props":614,"children":615},{},[616],{"type":144,"value":617},"Wrong HTTP method",{"type":144,"value":619}," (GET handler but POST fetch)",{"type":138,"tag":184,"props":621,"children":622},{},[623,628,630],{"type":138,"tag":153,"props":624,"children":625},{},[626],{"type":144,"value":627},"Env var absent",{"type":144,"value":629}," in runtime but present in ",{"type":138,"tag":237,"props":631,"children":633},{"className":632},[],[634],{"type":144,"value":460},{"type":138,"tag":184,"props":636,"children":637},{},[638,643],{"type":138,"tag":153,"props":639,"children":640},{},[641],{"type":144,"value":642},"Import mismatch",{"type":144,"value":644}," (server module imported in client component or vice versa)",{"type":138,"tag":184,"props":646,"children":647},{},[648,653],{"type":138,"tag":153,"props":649,"children":650},{},[651],{"type":144,"value":652},"Type mismatch",{"type":144,"value":654}," between API response and client expectation",{"type":138,"tag":184,"props":656,"children":657},{},[658,663],{"type":138,"tag":153,"props":659,"children":660},{},[661],{"type":144,"value":662},"Missing error boundary",{"type":144,"value":664}," — unhandled rejection crashes the page silently",{"type":138,"tag":173,"props":666,"children":668},{"id":667},"step-4-report-with-evidence",[669],{"type":144,"value":670},"Step 4 — Report With Evidence",{"type":138,"tag":147,"props":672,"children":673},{},[674],{"type":144,"value":675},"Summarize findings in a structured report:",{"type":138,"tag":677,"props":678,"children":682},"pre",{"className":679,"code":681,"language":144},[680],"language-text","## Verification Report: [Feature Name]\n\n**Story**: [one-sentence description of the user story]\n\n### Flow Status\n| Boundary | Status | Evidence |\n|----------|--------|----------|\n| UI renders | ✅\u002F❌ | [screenshot or console output] |\n| Client → API | ✅\u002F❌ | [request\u002Fresponse or error] |\n| API → Data | ✅\u002F❌ | [log output or error trace] |\n| Data → Response | ✅\u002F❌ | [response shape or error] |\n| Response → UI | ✅\u002F❌ | [rendered output or error] |\n\n### Issues Found\n1. [Issue]: [evidence] → [fix]\n\n### Verified Working\n- [What was confirmed working with evidence]\n",[683],{"type":138,"tag":237,"props":684,"children":686},{"__ignoreMap":685},"",[687],{"type":144,"value":681},{"type":138,"tag":173,"props":689,"children":691},{"id":690},"stop-conditions",[692],{"type":144,"value":693},"Stop Conditions",{"type":138,"tag":147,"props":695,"children":696},{},[697,702],{"type":138,"tag":153,"props":698,"children":699},{},[700],{"type":144,"value":701},"Stop verifying when",{"type":144,"value":216},{"type":138,"tag":180,"props":704,"children":705},{},[706,711,723],{"type":138,"tag":184,"props":707,"children":708},{},[709],{"type":144,"value":710},"All boundaries in the flow are confirmed working with evidence — report success",{"type":138,"tag":184,"props":712,"children":713},{},[714,716,721],{"type":144,"value":715},"You find the ",{"type":138,"tag":153,"props":717,"children":718},{},[719],{"type":144,"value":720},"first broken boundary",{"type":144,"value":722}," — report it with evidence and a specific fix, do not continue past the break",{"type":138,"tag":184,"props":724,"children":725},{},[726],{"type":144,"value":727},"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",{"type":138,"tag":147,"props":729,"children":730},{},[731,736],{"type":138,"tag":153,"props":732,"children":733},{},[734],{"type":144,"value":735},"Do not",{"type":144,"value":216},{"type":138,"tag":180,"props":738,"children":739},{},[740,745,750,755],{"type":138,"tag":184,"props":741,"children":742},{},[743],{"type":144,"value":744},"Run the same check more than twice",{"type":138,"tag":184,"props":746,"children":747},{},[748],{"type":144,"value":749},"Continue past a confirmed broken boundary",{"type":138,"tag":184,"props":751,"children":752},{},[753],{"type":144,"value":754},"Verify unrelated features — stay on the inferred story",{"type":138,"tag":184,"props":756,"children":757},{},[758],{"type":144,"value":759},"Spend time on cosmetic issues (styling, spacing) unless the user specifically asked",{"type":138,"tag":173,"props":761,"children":763},{"id":762},"suggest-verification-after-implementation",[764],{"type":144,"value":765},"Suggest Verification After Implementation",{"type":138,"tag":147,"props":767,"children":768},{},[769],{"type":144,"value":770},"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.",{"items":772,"total":884},[773,790,810,827,842,859,874],{"slug":774,"name":774,"fn":775,"description":776,"org":777,"tags":778,"stars":23,"repoUrl":24,"updatedAt":789},"ai-gateway","configure and manage Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[779,782,785,788],{"name":780,"slug":781,"type":15},"AI Infrastructure","ai-infrastructure",{"name":783,"slug":784,"type":15},"Cost Optimization","cost-optimization",{"name":786,"slug":787,"type":15},"LLM","llm",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:06.57787",{"slug":791,"name":791,"fn":792,"description":793,"org":794,"tags":795,"stars":23,"repoUrl":24,"updatedAt":809},"auth","integrate authentication in Next.js apps","Authentication integration guidance — Clerk (native Vercel Marketplace), Descope, and Auth0 setup for Next.js applications. Covers middleware auth patterns, sign-in\u002Fsign-up flows, and Marketplace provisioning. Use when implementing user authentication.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[796,799,802,805,808],{"name":797,"slug":798,"type":15},"Auth0","auth0",{"name":800,"slug":801,"type":15},"Authentication","authentication",{"name":803,"slug":804,"type":15},"Next.js","next-js",{"name":806,"slug":807,"type":15},"Security","security",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:17.050565",{"slug":811,"name":811,"fn":812,"description":813,"org":814,"tags":815,"stars":23,"repoUrl":24,"updatedAt":826},"bootstrap","bootstrap Vercel-linked repositories","Project bootstrapping orchestrator for repos that depend on Vercel-linked resources (databases, auth, and managed integrations). Use when setting up or repairing a repository so linking, environment provisioning, env pulls, and first-run db\u002Fdev commands happen in the correct safe order.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[816,819,822,825],{"name":817,"slug":818,"type":15},"Configuration","configuration",{"name":820,"slug":821,"type":15},"Deployment","deployment",{"name":823,"slug":824,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:18.297868",{"slug":828,"name":828,"fn":829,"description":830,"org":831,"tags":832,"stars":23,"repoUrl":24,"updatedAt":841},"cdn-caching","debug Vercel CDN caching behavior","Debug Vercel CDN caching — cache hit rate, stale content, revalidation behavior, ISR + PPR, per-request cache reasons (cacheReason) and PPR state (ppr_state), and costs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[833,836,837,840],{"name":834,"slug":835,"type":15},"Caching","caching",{"name":13,"slug":14,"type":15},{"name":838,"slug":839,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-07-30T05:31:34.628944",{"slug":843,"name":843,"fn":844,"description":845,"org":846,"tags":847,"stars":23,"repoUrl":24,"updatedAt":858},"chat-sdk","build multi-platform chatbots with Vercel","Vercel Chat SDK expert guidance. Use when building multi-platform chat bots — Slack, Telegram, Microsoft Teams, Discord, Google Chat, GitHub, Linear — with a single codebase. Covers the Chat class, adapters, threads, messages, cards, modals, streaming, state management, and webhook setup.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[848,851,854,857],{"name":849,"slug":850,"type":15},"Agents","agents",{"name":852,"slug":853,"type":15},"Messaging","messaging",{"name":855,"slug":856,"type":15},"SDK","sdk",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:26.921901",{"slug":860,"name":860,"fn":861,"description":862,"org":863,"tags":864,"stars":23,"repoUrl":24,"updatedAt":873},"deployments-cicd","manage Vercel deployments and CI\u002FCD","Vercel deployment and CI\u002FCD expert guidance. Use when deploying, promoting, rolling back, inspecting deployments, building with --prebuilt, or configuring CI workflow files for Vercel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[865,868,869,872],{"name":866,"slug":867,"type":15},"CI\u002FCD","ci-cd",{"name":820,"slug":821,"type":15},{"name":870,"slug":871,"type":15},"Operations","operations",{"name":9,"slug":8,"type":15},"2026-04-06T18:56:22.054263",{"slug":122,"name":122,"fn":875,"description":876,"org":877,"tags":878,"stars":23,"repoUrl":24,"updatedAt":883},"manage Vercel environment variables","Vercel environment variable expert guidance. Use when working with .env files, vercel env commands, OIDC tokens, or managing environment-specific configuration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[879,880,881,882],{"name":817,"slug":818,"type":15},{"name":870,"slug":871,"type":15},{"name":806,"slug":807,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:56:28.150777",29,{"items":886,"total":1046},[887,905,917,934,945,958,971,985,997,1016,1026,1036],{"slug":888,"name":888,"fn":889,"description":890,"org":891,"tags":892,"stars":902,"repoUrl":903,"updatedAt":904},"next-cache-components-adoption","enable and migrate to Next.js Cache Components","Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the `cacheComponents` flag, work through a flood of blocking-prerender \u002F instant validation errors, run the `cache-components-instant-false` codemod, or decide between opting routes out with `export const instant = false` and fixing them in place.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[893,894,897,900,901],{"name":834,"slug":835,"type":15},{"name":895,"slug":896,"type":15},"Frontend","frontend",{"name":898,"slug":899,"type":15},"Migration","migration",{"name":803,"slug":804,"type":15},{"name":9,"slug":8,"type":15},141208,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fnext.js","2026-07-24T05:38:30.118542",{"slug":906,"name":906,"fn":907,"description":908,"org":909,"tags":910,"stars":902,"repoUrl":903,"updatedAt":916},"next-cache-components-optimizer","optimize Next.js cache components","Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components \u002F PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next\u002Fplaywright instant() e2e and work it to green, one verified route at a time; the shipped test then guards against regression. Use when asked to make a route's navigation instant (its static shell commits immediately), fix a route whose static shell isn't prerendered\u002Fserved\u002Fprefetched, grow a route's static shell or fix its slow first paint, diagnose which Suspense boundary keeps a route out of its static shell, or write the instant() e2e guard for one. Requires Next.js 16.3+ with cacheComponents; directs an upgrade if older.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[911,912,913,914,915],{"name":834,"slug":835,"type":15},{"name":895,"slug":896,"type":15},{"name":803,"slug":804,"type":15},{"name":838,"slug":839,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:31:10.674078",{"slug":918,"name":918,"fn":919,"description":920,"org":921,"tags":922,"stars":902,"repoUrl":903,"updatedAt":933},"next-dev-loop","verify Next.js runtime behavior","Verify Next.js runtime behavior after editing app code. Use this skill to confirm a change actually works in a running app — not just that it compiles or type-checks. Combines \u002F_next\u002Fmcp (Next.js's view) with agent-browser (the browser's view). Requires a running `next dev`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[923,926,927,928,929,930],{"name":924,"slug":925,"type":15},"Debugging","debugging",{"name":895,"slug":896,"type":15},{"name":823,"slug":824,"type":15},{"name":803,"slug":804,"type":15},{"name":9,"slug":8,"type":15},{"name":931,"slug":932,"type":15},"Web Development","web-development","2026-05-22T06:45:28.627735",{"slug":935,"name":935,"fn":936,"description":937,"org":938,"tags":939,"stars":902,"repoUrl":903,"updatedAt":944},"next-partial-prefetching-adoption","adopt Partial Prefetching in Next.js apps","Turn on Partial Prefetching in a Next.js app and work through the insights it surfaces. Use when the user wants to enable or adopt Partial Prefetching, flip the `partialPrefetching` flag, opt routes in with `export const prefetch = 'partial'`, audit `\u003CLink prefetch={true}>` calls, or resolve the link-prefetch-partial and instant-shell-url-data insights.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[940,941,942,943],{"name":895,"slug":896,"type":15},{"name":803,"slug":804,"type":15},{"name":838,"slug":839,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:31:11.591864",{"slug":946,"name":946,"fn":947,"description":948,"org":949,"tags":950,"stars":955,"repoUrl":956,"updatedAt":957},"turborepo","manage monorepos with Turborepo","Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines,\ndependsOn, caching, remote cache, the \"turbo\" CLI, --filter, --affected, CI optimization, environment\nvariables, internal packages, monorepo structure\u002Fbest practices, and boundaries.\n\nUse when user: configures tasks\u002Fworkflows\u002Fpipelines, creates packages, sets up\nmonorepo, shares code between apps, runs changed\u002Faffected packages, debugs cache,\nor has apps\u002Fpackages directories.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[951,952,953],{"name":866,"slug":867,"type":15},{"name":838,"slug":839,"type":15},{"name":954,"slug":946,"type":15},"Turborepo",30809,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fturborepo","2026-07-30T05:32:14.920116",{"slug":959,"name":959,"fn":960,"description":961,"org":962,"tags":963,"stars":968,"repoUrl":969,"updatedAt":970},"add-function-examples","add AI function examples for testing","Guide for adding new AI function examples, for testing specific features against the actual provider APIs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[964,966,967],{"name":965,"slug":131,"type":15},"AI SDK",{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},25670,"https:\u002F\u002Fgithub.com\u002Fvercel\u002Fai","2026-04-06T18:55:51.318866",{"slug":972,"name":972,"fn":973,"description":974,"org":975,"tags":976,"stars":968,"repoUrl":969,"updatedAt":984},"add-harness-package","add AI SDK harness packages","Guide for adding new AI SDK harness packages. Use when creating a new @ai-sdk\u002Fharness-\u003Cname> package that adapts a coding-agent runtime to HarnessV1.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[977,978,979,982,983],{"name":849,"slug":850,"type":15},{"name":965,"slug":131,"type":15},{"name":980,"slug":981,"type":15},"Harness","harness",{"name":855,"slug":856,"type":15},{"name":9,"slug":8,"type":15},"2026-06-18T08:29:19.858737",{"slug":986,"name":986,"fn":987,"description":988,"org":989,"tags":990,"stars":968,"repoUrl":969,"updatedAt":996},"add-provider-package","add new provider packages to AI SDK","Guide for adding new AI provider packages to the AI SDK. Use when creating a new @ai-sdk\u002F\u003Cprovider> package to integrate an AI service into the SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[991,992,995],{"name":965,"slug":131,"type":15},{"name":993,"slug":994,"type":15},"API Development","api-development",{"name":9,"slug":8,"type":15},"2026-04-06T18:55:47.45549",{"slug":998,"name":998,"fn":999,"description":1000,"org":1001,"tags":1002,"stars":968,"repoUrl":969,"updatedAt":1015},"adr-skill","create and maintain architecture decision records","Create and maintain Architecture Decision Records (ADRs) optimized for agentic coding workflows. Use when you need to propose, write, update, accept\u002Freject, deprecate, or supersede an ADR; bootstrap an adr folder and index; consult existing ADRs before implementing changes; or enforce ADR conventions. This skill uses Socratic questioning to capture intent before drafting, and validates output against an agent-readiness checklist.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1003,1006,1009,1012],{"name":1004,"slug":1005,"type":15},"ADR","adr",{"name":1007,"slug":1008,"type":15},"Architecture","architecture",{"name":1010,"slug":1011,"type":15},"Documentation","documentation",{"name":1013,"slug":1014,"type":15},"Engineering","engineering","2026-04-06T18:55:50.043694",{"slug":131,"name":131,"fn":1017,"description":1018,"org":1019,"tags":1020,"stars":968,"repoUrl":969,"updatedAt":1025},"build AI features with Vercel AI SDK","Answer questions about the AI SDK and help build AI-powered features. Use when developers: (1) Ask about AI SDK functions like generateText, streamText, ToolLoopAgent, embed, or tools, (2) Want to build AI agents, chatbots, RAG systems, or text generation features, (3) Have questions about AI providers (OpenAI, Anthropic, Google, etc.), streaming, tool calling, structured output, or embeddings, (4) Use React hooks like useChat or useCompletion. Triggers on: \"AI SDK\", \"Vercel AI SDK\", \"generateText\", \"streamText\", \"add AI to my app\", \"build an agent\", \"tool calling\", \"structured output\", \"useChat\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1021,1022,1023,1024],{"name":849,"slug":850,"type":15},{"name":965,"slug":131,"type":15},{"name":786,"slug":787,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:55:48.739463",{"slug":1027,"name":1027,"fn":1028,"description":1029,"org":1030,"tags":1031,"stars":968,"repoUrl":969,"updatedAt":1035},"capture-api-response-test-fixture","capture API response test fixtures","Capture API response test fixture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1032,1033,1034],{"name":993,"slug":994,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:55:56.374433",{"slug":1037,"name":1037,"fn":1038,"description":1039,"org":1040,"tags":1041,"stars":968,"repoUrl":969,"updatedAt":1045},"develop-ai-functions-example","develop AI SDK function examples","Develop examples for AI SDK functions. Use when creating, running, or modifying examples under examples\u002Fai-functions\u002Fsrc to validate provider support, demonstrate features, or create test fixtures.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1042,1043,1044],{"name":965,"slug":131,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:55:55.088956",68]