[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-investigation-mode":3,"mdc-8unb6j-key":33,"related-repo-openai-investigation-mode":1664,"related-org-openai-investigation-mode":1788},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"investigation-mode","coordinate systematic debugging and triage","Orchestrated debugging coordinator. Triggers on frustration signals (stuck, hung, broken, waiting) and systematically triages: runtime logs → workflow status → browser verify → deploy\u002Fenv. Reports findings at every step.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19],{"name":13,"slug":14,"type":15},"Observability","observability","tag",{"name":17,"slug":18,"type":15},"Triage","triage",{"name":20,"slug":21,"type":15},"Debugging","debugging",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-04-06T18:40:50.844051",null,465,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":30},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fvercel\u002Fskills\u002Finvestigation-mode","---\nname: investigation-mode\ndescription: \"Orchestrated debugging coordinator. Triggers on frustration signals (stuck, hung, broken, waiting) and systematically triages: runtime logs → workflow status → browser verify → deploy\u002Fenv. Reports findings at every step.\"\nmetadata:\n  priority: 8\n  docs:\n    - \"https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-codex\u002F\"\n  pathPatterns:\n    - \"**\u002Fmiddleware.{ts,js,mjs}\"\n    - \"**\u002Flib\u002Flogger.{ts,js}\"\n    - \"**\u002Futils\u002Flogger.{ts,js}\"\n    - \"**\u002Finstrumentation.{ts,js}\"\n    - \"**\u002F*.log\"\n    - \"**\u002Ferror.{tsx,ts,js,jsx}\"\n    - \"**\u002Fglobal-error.{tsx,ts,js,jsx}\"\n    - \"**\u002Fnot-found.{tsx,ts,js,jsx}\"\n  bashPatterns:\n    - '\\bvercel\\s+logs?\\b'\n    - '\\bvercel\\s+inspect\\b'\n    - '\\btail\\s+-f\\b.*\\.log'\n    - '\\bworkflow\\s+runs?\\b'\n    - '\\bvercel\\s+ls\\b'\n    - '\\bcurl\\s+-[vI]'\n  importPatterns: []\n  promptSignals:\n    phrases:\n      - \"nothing happened\"\n      - \"still waiting\"\n      - \"it's stuck\"\n      - \"it's hung\"\n      - \"nothing is happening\"\n      - \"not responding\"\n      - \"just sitting there\"\n      - \"just sits there\"\n      - \"seems frozen\"\n      - \"is it frozen\"\n      - \"frozen\"\n      - \"why is it hanging\"\n      - \"check the logs\"\n      - \"check logs\"\n      - \"where are the logs\"\n      - \"how do I debug\"\n      - \"how to debug\"\n      - \"white screen\"\n      - \"blank page\"\n      - \"spinning forever\"\n      - \"timed out\"\n      - \"keeps timing out\"\n      - \"no response\"\n      - \"no output\"\n      - \"not loading\"\n      - \"debug this\"\n      - \"investigate why\"\n      - \"what went wrong\"\n      - \"why did it fail\"\n      - \"why is it failing\"\n      - \"something is broken\"\n      - \"something broke\"\n      - \"seems broken\"\n      - \"check what happened\"\n      - \"check the status\"\n      - \"where is the error\"\n      - \"where did it fail\"\n      - \"find the error\"\n      - \"show me the error\"\n      - \"why is it slow\"\n      - \"taking forever\"\n      - \"still loading\"\n      - \"not finishing\"\n      - \"seems dead\"\n      - \"been waiting\"\n      - \"waiting forever\"\n      - \"stuck on\"\n      - \"hung up\"\n      - \"not progressing\"\n      - \"stalled out\"\n      - \"is it running\"\n      - \"did it crash\"\n      - \"keeps failing\"\n      - \"why no response\"\n      - \"where did it go\"\n      - \"lost connection\"\n      - \"never finishes\"\n      - \"pending forever\"\n      - \"queue stuck\"\n      - \"job stuck\"\n      - \"build stuck\"\n      - \"request hanging\"\n      - \"api not responding\"\n    allOf:\n      - [stuck, workflow]\n      - [stuck, deploy]\n      - [stuck, loading]\n      - [stuck, build]\n      - [stuck, queue]\n      - [stuck, job]\n      - [hung, request]\n      - [hung, api]\n      - [frozen, page]\n      - [frozen, app]\n      - [check, why]\n      - [check, broken]\n      - [check, error]\n      - [check, status]\n      - [check, logs]\n      - [debug, workflow]\n      - [debug, deploy]\n      - [debug, api]\n      - [debug, issue]\n      - [investigate, error]\n      - [logs, error]\n      - [logs, check]\n      - [slow, response]\n      - [slow, loading]\n      - [timeout, api]\n      - [timeout, request]\n      - [waiting, response]\n      - [waiting, forever]\n      - [waiting, deploy]\n      - [not working, why]\n      - [not, responding]\n      - [hanging, for]\n      - [been, hanging]\n      - [been, stuck]\n      - [been, waiting]\n      - [why, slow]\n      - [why, failing]\n      - [why, stuck]\n      - [why, hanging]\n      - [job, failing]\n      - [queue, processing]\n    anyOf:\n      - \"stuck\"\n      - \"hung\"\n      - \"frozen\"\n      - \"broken\"\n      - \"failing\"\n      - \"timeout\"\n      - \"slow\"\n      - \"debug\"\n      - \"investigate\"\n      - \"check\"\n      - \"logs\"\n      - \"error\"\n      - \"hanging\"\n      - \"waiting\"\n      - \"stalled\"\n      - \"pending\"\n      - \"processing\"\n      - \"loading\"\n      - \"unresponsive\"\n    noneOf:\n      - \"css stuck\"\n      - \"sticky position\"\n      - \"position: sticky\"\n      - \"z-index\"\n      - \"sticky nav\"\n      - \"sticky header\"\n      - \"sticky footer\"\n      - \"overflow: hidden\"\n      - \"add a button\"\n      - \"create a button\"\n      - \"style the button\"\n    minScore: 4\n---\n\n# Investigation Mode — Orchestrated Debugging\n\nWhen a user reports something stuck, hung, broken, or not responding, you are the **diagnostic coordinator**. Do not guess. Follow the triage order, report what you find at every step, and stop when you have a high-confidence root cause.\n\n## Reporting Contract\n\nEvery investigation step MUST follow this pattern:\n\n1. **Tell the user what you are checking** — \"I'm checking the runtime logs for errors…\"\n2. **Share the evidence you found** — paste the relevant log line, status, error, or screenshot\n3. **Explain the next step** — \"The logs show a timeout on the DB call. I'll check the connection pool next.\"\n\nNever silently move between steps. The user is already frustrated — silence makes it worse.\n\n## Triage Order\n\nWork through these in order. Stop as soon as you find the root cause.\n\n### 1. Runtime Logs (check first — most issues leave traces here)\n\n- **Dev server**: Check terminal output for errors, warnings, unhandled rejections\n- **Vercel logs**: `vercel logs --follow` (production) or `vercel logs \u003Cdeployment-url>`\n- **Browser console**: Open DevTools → Console tab for client-side errors\n- **If no logs exist**: This is the problem. Add logging before continuing (see \"Add Logging\" below)\n\nTell the user: \"Checking runtime logs…\" → share what you found → explain next step.\n\n### 2. Workflow \u002F Background Job Status\n\nIf the app uses workflows, queues, or cron jobs:\n\n- Run `vercel workflow runs list` to check recent run statuses\n- Look for runs stuck in `running` state — likely a missing `await` or unresolved promise\n- Check individual run details: `vercel workflow runs get \u003Crun-id>`\n- Look for failed steps, retry exhaustion, or timeout errors\n\nTell the user: \"Checking workflow run status…\" → share the run state → explain next step.\n\n### 3. Browser Verification\n\nUse agent-browser to visually verify what the user sees:\n\n- Take a screenshot of the current page state\n- Check the browser console for JavaScript errors\n- Check the Network tab for failed requests (4xx\u002F5xx, CORS errors, hanging requests)\n- Look for hydration mismatches or React error boundaries\n\nTell the user: \"Taking a browser screenshot to see the current state…\" → share the screenshot → explain what you see.\n\n### 4. Deploy \u002F Environment Status\n\n- `vercel inspect \u003Cdeployment-url>` — check build output, function regions, environment\n- `vercel ls` — verify the latest deployment succeeded\n- Check for environment variable mismatches between local and production\n- Verify the correct branch\u002Fcommit is deployed\n\nTell the user: \"Checking deployment status…\" → share the deployment state → explain findings.\n\n## Stop Condition\n\n**Stop investigating when:**\n- You find a high-confidence root cause (specific error, missing env var, failed step, etc.)\n- Two consecutive triage steps produce no signal — report what you checked and that you found no evidence, then ask the user for more context\n\n**Do not** keep cycling through steps hoping something appears. If logs are empty and workflows look fine, say so and ask the user what they expected to happen.\n\n## Common Hang Causes\n\nWhen logs point to code issues, check for these frequent culprits:\n\n- **Missing `await`**: Async functions called without await cause silent failures\n- **Infinite loops**: `while(true)` without break conditions, recursive calls without base cases\n- **Unresolved promises**: `new Promise()` that never calls `resolve()` or `reject()`\n- **Missing env vars**: `process.env.X` returning `undefined` causing silent auth\u002FDB failures\n- **Connection pool exhaustion**: Database connections not being released\n- **Middleware chains**: A middleware that never calls `next()` or returns a response\n- **Timeout misconfigs**: Function timeout too short for the operation (check `vercel.json` maxDuration)\n\n## Add Logging (If Missing)\n\nIf the investigation reveals insufficient observability, **add structured logging immediately** — you cannot debug what you cannot see.\n\n```typescript\n\u002F\u002F API routes — wrap handlers with try\u002Fcatch + logging\nexport async function POST(request: Request) {\n  console.log('[api\u002Froute] incoming request', { method: 'POST', url: request.url });\n  try {\n    const result = await doWork();\n    console.log('[api\u002Froute] success', { resultId: result.id });\n    return Response.json(result);\n  } catch (error) {\n    console.error('[api\u002Froute] failed', { error: String(error), stack: (error as Error).stack });\n    return Response.json({ error: 'Internal error' }, { status: 500 });\n  }\n}\n```\n\n```typescript\n\u002F\u002F Workflow steps — log entry\u002Fexit of every step\nconst result = await step.run('process-data', async () => {\n  console.log('[workflow:process-data] step started');\n  const data = await fetchData();\n  console.log('[workflow:process-data] step completed', { count: data.length });\n  return data;\n});\n```\n\n**Key principle**: Every async boundary, every external call, every step entry\u002Fexit should have a log line. When something hangs, the last log line tells you exactly where it stopped.\n\n> **Cross-reference**: For comprehensive logging setup (OpenTelemetry, log drains, Sentry, Vercel Analytics), see the **observability** skill. For workflow-specific debugging, see the **workflow** skill.\n",{"data":34,"body":214},{"name":4,"description":6,"metadata":35},{"priority":36,"docs":37,"pathPatterns":39,"bashPatterns":48,"importPatterns":55,"promptSignals":56},8,[38],"https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-codex\u002F",[40,41,42,43,44,45,46,47],"**\u002Fmiddleware.{ts,js,mjs}","**\u002Flib\u002Flogger.{ts,js}","**\u002Futils\u002Flogger.{ts,js}","**\u002Finstrumentation.{ts,js}","**\u002F*.log","**\u002Ferror.{tsx,ts,js,jsx}","**\u002Fglobal-error.{tsx,ts,js,jsx}","**\u002Fnot-found.{tsx,ts,js,jsx}",[49,50,51,52,53,54],"\\bvercel\\s+logs?\\b","\\bvercel\\s+inspect\\b","\\btail\\s+-f\\b.*\\.log","\\bworkflow\\s+runs?\\b","\\bvercel\\s+ls\\b","\\bcurl\\s+-[vI]",[],{"phrases":57,"allOf":121,"anyOf":197,"noneOf":201,"minScore":213},[58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120],"nothing happened","still waiting","it's stuck","it's hung","nothing is happening","not responding","just sitting there","just sits there","seems frozen","is it frozen","frozen","why is it hanging","check the logs","check logs","where are the logs","how do I debug","how to debug","white screen","blank page","spinning forever","timed out","keeps timing out","no response","no output","not loading","debug this","investigate why","what went wrong","why did it fail","why is it failing","something is broken","something broke","seems broken","check what happened","check the status","where is the error","where did it fail","find the error","show me the error","why is it slow","taking forever","still loading","not finishing","seems dead","been waiting","waiting forever","stuck on","hung up","not progressing","stalled out","is it running","did it crash","keeps failing","why no response","where did it go","lost connection","never finishes","pending forever","queue stuck","job stuck","build stuck","request hanging","api not responding",[122,125,127,129,131,133,135,138,140,142,144,147,149,151,153,155,157,158,159,161,163,164,165,168,169,171,172,174,176,177,179,182,185,187,188,189,190,192,193,194,195],[123,124],"stuck","workflow",[123,126],"deploy",[123,128],"loading",[123,130],"build",[123,132],"queue",[123,134],"job",[136,137],"hung","request",[136,139],"api",[68,141],"page",[68,143],"app",[145,146],"check","why",[145,148],"broken",[145,150],"error",[145,152],"status",[145,154],"logs",[156,124],"debug",[156,126],[156,139],[156,160],"issue",[162,150],"investigate",[154,150],[154,145],[166,167],"slow","response",[166,128],[170,139],"timeout",[170,137],[173,167],"waiting",[173,175],"forever",[173,126],[178,146],"not working",[180,181],"not","responding",[183,184],"hanging","for",[186,183],"been",[186,123],[186,173],[146,166],[146,191],"failing",[146,123],[146,183],[134,191],[132,196],"processing",[123,136,68,148,191,170,166,156,162,145,154,150,183,173,198,199,196,128,200],"stalled","pending","unresponsive",[202,203,204,205,206,207,208,209,210,211,212],"css stuck","sticky position","position: sticky","z-index","sticky nav","sticky header","sticky footer","overflow: hidden","add a button","create a button","style the button",4,{"type":215,"children":216},"root",[217,226,240,247,252,287,292,298,303,310,369,374,380,385,438,443,449,454,477,482,488,523,528,534,542,555,565,571,576,713,719,731,1352,1622,1632,1658],{"type":218,"tag":219,"props":220,"children":222},"element","h1",{"id":221},"investigation-mode-orchestrated-debugging",[223],{"type":224,"value":225},"text","Investigation Mode — Orchestrated Debugging",{"type":218,"tag":227,"props":228,"children":229},"p",{},[230,232,238],{"type":224,"value":231},"When a user reports something stuck, hung, broken, or not responding, you are the ",{"type":218,"tag":233,"props":234,"children":235},"strong",{},[236],{"type":224,"value":237},"diagnostic coordinator",{"type":224,"value":239},". Do not guess. Follow the triage order, report what you find at every step, and stop when you have a high-confidence root cause.",{"type":218,"tag":241,"props":242,"children":244},"h2",{"id":243},"reporting-contract",[245],{"type":224,"value":246},"Reporting Contract",{"type":218,"tag":227,"props":248,"children":249},{},[250],{"type":224,"value":251},"Every investigation step MUST follow this pattern:",{"type":218,"tag":253,"props":254,"children":255},"ol",{},[256,267,277],{"type":218,"tag":257,"props":258,"children":259},"li",{},[260,265],{"type":218,"tag":233,"props":261,"children":262},{},[263],{"type":224,"value":264},"Tell the user what you are checking",{"type":224,"value":266}," — \"I'm checking the runtime logs for errors…\"",{"type":218,"tag":257,"props":268,"children":269},{},[270,275],{"type":218,"tag":233,"props":271,"children":272},{},[273],{"type":224,"value":274},"Share the evidence you found",{"type":224,"value":276}," — paste the relevant log line, status, error, or screenshot",{"type":218,"tag":257,"props":278,"children":279},{},[280,285],{"type":218,"tag":233,"props":281,"children":282},{},[283],{"type":224,"value":284},"Explain the next step",{"type":224,"value":286}," — \"The logs show a timeout on the DB call. I'll check the connection pool next.\"",{"type":218,"tag":227,"props":288,"children":289},{},[290],{"type":224,"value":291},"Never silently move between steps. The user is already frustrated — silence makes it worse.",{"type":218,"tag":241,"props":293,"children":295},{"id":294},"triage-order",[296],{"type":224,"value":297},"Triage Order",{"type":218,"tag":227,"props":299,"children":300},{},[301],{"type":224,"value":302},"Work through these in order. Stop as soon as you find the root cause.",{"type":218,"tag":304,"props":305,"children":307},"h3",{"id":306},"_1-runtime-logs-check-first-most-issues-leave-traces-here",[308],{"type":224,"value":309},"1. Runtime Logs (check first — most issues leave traces here)",{"type":218,"tag":311,"props":312,"children":313},"ul",{},[314,324,349,359],{"type":218,"tag":257,"props":315,"children":316},{},[317,322],{"type":218,"tag":233,"props":318,"children":319},{},[320],{"type":224,"value":321},"Dev server",{"type":224,"value":323},": Check terminal output for errors, warnings, unhandled rejections",{"type":218,"tag":257,"props":325,"children":326},{},[327,332,334,341,343],{"type":218,"tag":233,"props":328,"children":329},{},[330],{"type":224,"value":331},"Vercel logs",{"type":224,"value":333},": ",{"type":218,"tag":335,"props":336,"children":338},"code",{"className":337},[],[339],{"type":224,"value":340},"vercel logs --follow",{"type":224,"value":342}," (production) or ",{"type":218,"tag":335,"props":344,"children":346},{"className":345},[],[347],{"type":224,"value":348},"vercel logs \u003Cdeployment-url>",{"type":218,"tag":257,"props":350,"children":351},{},[352,357],{"type":218,"tag":233,"props":353,"children":354},{},[355],{"type":224,"value":356},"Browser console",{"type":224,"value":358},": Open DevTools → Console tab for client-side errors",{"type":218,"tag":257,"props":360,"children":361},{},[362,367],{"type":218,"tag":233,"props":363,"children":364},{},[365],{"type":224,"value":366},"If no logs exist",{"type":224,"value":368},": This is the problem. Add logging before continuing (see \"Add Logging\" below)",{"type":218,"tag":227,"props":370,"children":371},{},[372],{"type":224,"value":373},"Tell the user: \"Checking runtime logs…\" → share what you found → explain next step.",{"type":218,"tag":304,"props":375,"children":377},{"id":376},"_2-workflow-background-job-status",[378],{"type":224,"value":379},"2. Workflow \u002F Background Job Status",{"type":218,"tag":227,"props":381,"children":382},{},[383],{"type":224,"value":384},"If the app uses workflows, queues, or cron jobs:",{"type":218,"tag":311,"props":386,"children":387},{},[388,401,422,433],{"type":218,"tag":257,"props":389,"children":390},{},[391,393,399],{"type":224,"value":392},"Run ",{"type":218,"tag":335,"props":394,"children":396},{"className":395},[],[397],{"type":224,"value":398},"vercel workflow runs list",{"type":224,"value":400}," to check recent run statuses",{"type":218,"tag":257,"props":402,"children":403},{},[404,406,412,414,420],{"type":224,"value":405},"Look for runs stuck in ",{"type":218,"tag":335,"props":407,"children":409},{"className":408},[],[410],{"type":224,"value":411},"running",{"type":224,"value":413}," state — likely a missing ",{"type":218,"tag":335,"props":415,"children":417},{"className":416},[],[418],{"type":224,"value":419},"await",{"type":224,"value":421}," or unresolved promise",{"type":218,"tag":257,"props":423,"children":424},{},[425,427],{"type":224,"value":426},"Check individual run details: ",{"type":218,"tag":335,"props":428,"children":430},{"className":429},[],[431],{"type":224,"value":432},"vercel workflow runs get \u003Crun-id>",{"type":218,"tag":257,"props":434,"children":435},{},[436],{"type":224,"value":437},"Look for failed steps, retry exhaustion, or timeout errors",{"type":218,"tag":227,"props":439,"children":440},{},[441],{"type":224,"value":442},"Tell the user: \"Checking workflow run status…\" → share the run state → explain next step.",{"type":218,"tag":304,"props":444,"children":446},{"id":445},"_3-browser-verification",[447],{"type":224,"value":448},"3. Browser Verification",{"type":218,"tag":227,"props":450,"children":451},{},[452],{"type":224,"value":453},"Use agent-browser to visually verify what the user sees:",{"type":218,"tag":311,"props":455,"children":456},{},[457,462,467,472],{"type":218,"tag":257,"props":458,"children":459},{},[460],{"type":224,"value":461},"Take a screenshot of the current page state",{"type":218,"tag":257,"props":463,"children":464},{},[465],{"type":224,"value":466},"Check the browser console for JavaScript errors",{"type":218,"tag":257,"props":468,"children":469},{},[470],{"type":224,"value":471},"Check the Network tab for failed requests (4xx\u002F5xx, CORS errors, hanging requests)",{"type":218,"tag":257,"props":473,"children":474},{},[475],{"type":224,"value":476},"Look for hydration mismatches or React error boundaries",{"type":218,"tag":227,"props":478,"children":479},{},[480],{"type":224,"value":481},"Tell the user: \"Taking a browser screenshot to see the current state…\" → share the screenshot → explain what you see.",{"type":218,"tag":304,"props":483,"children":485},{"id":484},"_4-deploy-environment-status",[486],{"type":224,"value":487},"4. Deploy \u002F Environment Status",{"type":218,"tag":311,"props":489,"children":490},{},[491,502,513,518],{"type":218,"tag":257,"props":492,"children":493},{},[494,500],{"type":218,"tag":335,"props":495,"children":497},{"className":496},[],[498],{"type":224,"value":499},"vercel inspect \u003Cdeployment-url>",{"type":224,"value":501}," — check build output, function regions, environment",{"type":218,"tag":257,"props":503,"children":504},{},[505,511],{"type":218,"tag":335,"props":506,"children":508},{"className":507},[],[509],{"type":224,"value":510},"vercel ls",{"type":224,"value":512}," — verify the latest deployment succeeded",{"type":218,"tag":257,"props":514,"children":515},{},[516],{"type":224,"value":517},"Check for environment variable mismatches between local and production",{"type":218,"tag":257,"props":519,"children":520},{},[521],{"type":224,"value":522},"Verify the correct branch\u002Fcommit is deployed",{"type":218,"tag":227,"props":524,"children":525},{},[526],{"type":224,"value":527},"Tell the user: \"Checking deployment status…\" → share the deployment state → explain findings.",{"type":218,"tag":241,"props":529,"children":531},{"id":530},"stop-condition",[532],{"type":224,"value":533},"Stop Condition",{"type":218,"tag":227,"props":535,"children":536},{},[537],{"type":218,"tag":233,"props":538,"children":539},{},[540],{"type":224,"value":541},"Stop investigating when:",{"type":218,"tag":311,"props":543,"children":544},{},[545,550],{"type":218,"tag":257,"props":546,"children":547},{},[548],{"type":224,"value":549},"You find a high-confidence root cause (specific error, missing env var, failed step, etc.)",{"type":218,"tag":257,"props":551,"children":552},{},[553],{"type":224,"value":554},"Two consecutive triage steps produce no signal — report what you checked and that you found no evidence, then ask the user for more context",{"type":218,"tag":227,"props":556,"children":557},{},[558,563],{"type":218,"tag":233,"props":559,"children":560},{},[561],{"type":224,"value":562},"Do not",{"type":224,"value":564}," keep cycling through steps hoping something appears. If logs are empty and workflows look fine, say so and ask the user what they expected to happen.",{"type":218,"tag":241,"props":566,"children":568},{"id":567},"common-hang-causes",[569],{"type":224,"value":570},"Common Hang Causes",{"type":218,"tag":227,"props":572,"children":573},{},[574],{"type":224,"value":575},"When logs point to code issues, check for these frequent culprits:",{"type":218,"tag":311,"props":577,"children":578},{},[579,594,611,642,667,677,695],{"type":218,"tag":257,"props":580,"children":581},{},[582,592],{"type":218,"tag":233,"props":583,"children":584},{},[585,587],{"type":224,"value":586},"Missing ",{"type":218,"tag":335,"props":588,"children":590},{"className":589},[],[591],{"type":224,"value":419},{"type":224,"value":593},": Async functions called without await cause silent failures",{"type":218,"tag":257,"props":595,"children":596},{},[597,602,603,609],{"type":218,"tag":233,"props":598,"children":599},{},[600],{"type":224,"value":601},"Infinite loops",{"type":224,"value":333},{"type":218,"tag":335,"props":604,"children":606},{"className":605},[],[607],{"type":224,"value":608},"while(true)",{"type":224,"value":610}," without break conditions, recursive calls without base cases",{"type":218,"tag":257,"props":612,"children":613},{},[614,619,620,626,628,634,636],{"type":218,"tag":233,"props":615,"children":616},{},[617],{"type":224,"value":618},"Unresolved promises",{"type":224,"value":333},{"type":218,"tag":335,"props":621,"children":623},{"className":622},[],[624],{"type":224,"value":625},"new Promise()",{"type":224,"value":627}," that never calls ",{"type":218,"tag":335,"props":629,"children":631},{"className":630},[],[632],{"type":224,"value":633},"resolve()",{"type":224,"value":635}," or ",{"type":218,"tag":335,"props":637,"children":639},{"className":638},[],[640],{"type":224,"value":641},"reject()",{"type":218,"tag":257,"props":643,"children":644},{},[645,650,651,657,659,665],{"type":218,"tag":233,"props":646,"children":647},{},[648],{"type":224,"value":649},"Missing env vars",{"type":224,"value":333},{"type":218,"tag":335,"props":652,"children":654},{"className":653},[],[655],{"type":224,"value":656},"process.env.X",{"type":224,"value":658}," returning ",{"type":218,"tag":335,"props":660,"children":662},{"className":661},[],[663],{"type":224,"value":664},"undefined",{"type":224,"value":666}," causing silent auth\u002FDB failures",{"type":218,"tag":257,"props":668,"children":669},{},[670,675],{"type":218,"tag":233,"props":671,"children":672},{},[673],{"type":224,"value":674},"Connection pool exhaustion",{"type":224,"value":676},": Database connections not being released",{"type":218,"tag":257,"props":678,"children":679},{},[680,685,687,693],{"type":218,"tag":233,"props":681,"children":682},{},[683],{"type":224,"value":684},"Middleware chains",{"type":224,"value":686},": A middleware that never calls ",{"type":218,"tag":335,"props":688,"children":690},{"className":689},[],[691],{"type":224,"value":692},"next()",{"type":224,"value":694}," or returns a response",{"type":218,"tag":257,"props":696,"children":697},{},[698,703,705,711],{"type":218,"tag":233,"props":699,"children":700},{},[701],{"type":224,"value":702},"Timeout misconfigs",{"type":224,"value":704},": Function timeout too short for the operation (check ",{"type":218,"tag":335,"props":706,"children":708},{"className":707},[],[709],{"type":224,"value":710},"vercel.json",{"type":224,"value":712}," maxDuration)",{"type":218,"tag":241,"props":714,"children":716},{"id":715},"add-logging-if-missing",[717],{"type":224,"value":718},"Add Logging (If Missing)",{"type":218,"tag":227,"props":720,"children":721},{},[722,724,729],{"type":224,"value":723},"If the investigation reveals insufficient observability, ",{"type":218,"tag":233,"props":725,"children":726},{},[727],{"type":224,"value":728},"add structured logging immediately",{"type":224,"value":730}," — you cannot debug what you cannot see.",{"type":218,"tag":732,"props":733,"children":738},"pre",{"className":734,"code":735,"language":736,"meta":737,"style":737},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F API routes — wrap handlers with try\u002Fcatch + logging\nexport async function POST(request: Request) {\n  console.log('[api\u002Froute] incoming request', { method: 'POST', url: request.url });\n  try {\n    const result = await doWork();\n    console.log('[api\u002Froute] success', { resultId: result.id });\n    return Response.json(result);\n  } catch (error) {\n    console.error('[api\u002Froute] failed', { error: String(error), stack: (error as Error).stack });\n    return Response.json({ error: 'Internal error' }, { status: 500 });\n  }\n}\n","typescript","",[739],{"type":218,"tag":335,"props":740,"children":741},{"__ignoreMap":737},[742,754,813,927,939,977,1053,1093,1125,1248,1334,1343],{"type":218,"tag":743,"props":744,"children":747},"span",{"class":745,"line":746},"line",1,[748],{"type":218,"tag":743,"props":749,"children":751},{"style":750},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[752],{"type":224,"value":753},"\u002F\u002F API routes — wrap handlers with try\u002Fcatch + logging\n",{"type":218,"tag":743,"props":755,"children":757},{"class":745,"line":756},2,[758,764,770,775,781,787,792,797,803,808],{"type":218,"tag":743,"props":759,"children":761},{"style":760},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[762],{"type":224,"value":763},"export",{"type":218,"tag":743,"props":765,"children":767},{"style":766},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[768],{"type":224,"value":769}," async",{"type":218,"tag":743,"props":771,"children":772},{"style":766},[773],{"type":224,"value":774}," function",{"type":218,"tag":743,"props":776,"children":778},{"style":777},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[779],{"type":224,"value":780}," POST",{"type":218,"tag":743,"props":782,"children":784},{"style":783},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[785],{"type":224,"value":786},"(",{"type":218,"tag":743,"props":788,"children":790},{"style":789},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[791],{"type":224,"value":137},{"type":218,"tag":743,"props":793,"children":794},{"style":783},[795],{"type":224,"value":796},":",{"type":218,"tag":743,"props":798,"children":800},{"style":799},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[801],{"type":224,"value":802}," Request",{"type":218,"tag":743,"props":804,"children":805},{"style":783},[806],{"type":224,"value":807},")",{"type":218,"tag":743,"props":809,"children":810},{"style":783},[811],{"type":224,"value":812}," {\n",{"type":218,"tag":743,"props":814,"children":816},{"class":745,"line":815},3,[817,823,828,833,838,843,849,853,858,863,868,872,877,882,886,890,895,899,904,908,913,918,922],{"type":218,"tag":743,"props":818,"children":820},{"style":819},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[821],{"type":224,"value":822},"  console",{"type":218,"tag":743,"props":824,"children":825},{"style":783},[826],{"type":224,"value":827},".",{"type":218,"tag":743,"props":829,"children":830},{"style":777},[831],{"type":224,"value":832},"log",{"type":218,"tag":743,"props":834,"children":836},{"style":835},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[837],{"type":224,"value":786},{"type":218,"tag":743,"props":839,"children":840},{"style":783},[841],{"type":224,"value":842},"'",{"type":218,"tag":743,"props":844,"children":846},{"style":845},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[847],{"type":224,"value":848},"[api\u002Froute] incoming request",{"type":218,"tag":743,"props":850,"children":851},{"style":783},[852],{"type":224,"value":842},{"type":218,"tag":743,"props":854,"children":855},{"style":783},[856],{"type":224,"value":857},",",{"type":218,"tag":743,"props":859,"children":860},{"style":783},[861],{"type":224,"value":862}," {",{"type":218,"tag":743,"props":864,"children":865},{"style":835},[866],{"type":224,"value":867}," method",{"type":218,"tag":743,"props":869,"children":870},{"style":783},[871],{"type":224,"value":796},{"type":218,"tag":743,"props":873,"children":874},{"style":783},[875],{"type":224,"value":876}," '",{"type":218,"tag":743,"props":878,"children":879},{"style":845},[880],{"type":224,"value":881},"POST",{"type":218,"tag":743,"props":883,"children":884},{"style":783},[885],{"type":224,"value":842},{"type":218,"tag":743,"props":887,"children":888},{"style":783},[889],{"type":224,"value":857},{"type":218,"tag":743,"props":891,"children":892},{"style":835},[893],{"type":224,"value":894}," url",{"type":218,"tag":743,"props":896,"children":897},{"style":783},[898],{"type":224,"value":796},{"type":218,"tag":743,"props":900,"children":901},{"style":819},[902],{"type":224,"value":903}," request",{"type":218,"tag":743,"props":905,"children":906},{"style":783},[907],{"type":224,"value":827},{"type":218,"tag":743,"props":909,"children":910},{"style":819},[911],{"type":224,"value":912},"url",{"type":218,"tag":743,"props":914,"children":915},{"style":783},[916],{"type":224,"value":917}," }",{"type":218,"tag":743,"props":919,"children":920},{"style":835},[921],{"type":224,"value":807},{"type":218,"tag":743,"props":923,"children":924},{"style":783},[925],{"type":224,"value":926},";\n",{"type":218,"tag":743,"props":928,"children":929},{"class":745,"line":213},[930,935],{"type":218,"tag":743,"props":931,"children":932},{"style":760},[933],{"type":224,"value":934},"  try",{"type":218,"tag":743,"props":936,"children":937},{"style":783},[938],{"type":224,"value":812},{"type":218,"tag":743,"props":940,"children":942},{"class":745,"line":941},5,[943,948,953,958,963,968,973],{"type":218,"tag":743,"props":944,"children":945},{"style":766},[946],{"type":224,"value":947},"    const",{"type":218,"tag":743,"props":949,"children":950},{"style":819},[951],{"type":224,"value":952}," result",{"type":218,"tag":743,"props":954,"children":955},{"style":783},[956],{"type":224,"value":957}," =",{"type":218,"tag":743,"props":959,"children":960},{"style":760},[961],{"type":224,"value":962}," await",{"type":218,"tag":743,"props":964,"children":965},{"style":777},[966],{"type":224,"value":967}," doWork",{"type":218,"tag":743,"props":969,"children":970},{"style":835},[971],{"type":224,"value":972},"()",{"type":218,"tag":743,"props":974,"children":975},{"style":783},[976],{"type":224,"value":926},{"type":218,"tag":743,"props":978,"children":980},{"class":745,"line":979},6,[981,986,990,994,998,1002,1007,1011,1015,1019,1024,1028,1032,1036,1041,1045,1049],{"type":218,"tag":743,"props":982,"children":983},{"style":819},[984],{"type":224,"value":985},"    console",{"type":218,"tag":743,"props":987,"children":988},{"style":783},[989],{"type":224,"value":827},{"type":218,"tag":743,"props":991,"children":992},{"style":777},[993],{"type":224,"value":832},{"type":218,"tag":743,"props":995,"children":996},{"style":835},[997],{"type":224,"value":786},{"type":218,"tag":743,"props":999,"children":1000},{"style":783},[1001],{"type":224,"value":842},{"type":218,"tag":743,"props":1003,"children":1004},{"style":845},[1005],{"type":224,"value":1006},"[api\u002Froute] success",{"type":218,"tag":743,"props":1008,"children":1009},{"style":783},[1010],{"type":224,"value":842},{"type":218,"tag":743,"props":1012,"children":1013},{"style":783},[1014],{"type":224,"value":857},{"type":218,"tag":743,"props":1016,"children":1017},{"style":783},[1018],{"type":224,"value":862},{"type":218,"tag":743,"props":1020,"children":1021},{"style":835},[1022],{"type":224,"value":1023}," resultId",{"type":218,"tag":743,"props":1025,"children":1026},{"style":783},[1027],{"type":224,"value":796},{"type":218,"tag":743,"props":1029,"children":1030},{"style":819},[1031],{"type":224,"value":952},{"type":218,"tag":743,"props":1033,"children":1034},{"style":783},[1035],{"type":224,"value":827},{"type":218,"tag":743,"props":1037,"children":1038},{"style":819},[1039],{"type":224,"value":1040},"id",{"type":218,"tag":743,"props":1042,"children":1043},{"style":783},[1044],{"type":224,"value":917},{"type":218,"tag":743,"props":1046,"children":1047},{"style":835},[1048],{"type":224,"value":807},{"type":218,"tag":743,"props":1050,"children":1051},{"style":783},[1052],{"type":224,"value":926},{"type":218,"tag":743,"props":1054,"children":1056},{"class":745,"line":1055},7,[1057,1062,1067,1071,1076,1080,1085,1089],{"type":218,"tag":743,"props":1058,"children":1059},{"style":760},[1060],{"type":224,"value":1061},"    return",{"type":218,"tag":743,"props":1063,"children":1064},{"style":819},[1065],{"type":224,"value":1066}," Response",{"type":218,"tag":743,"props":1068,"children":1069},{"style":783},[1070],{"type":224,"value":827},{"type":218,"tag":743,"props":1072,"children":1073},{"style":777},[1074],{"type":224,"value":1075},"json",{"type":218,"tag":743,"props":1077,"children":1078},{"style":835},[1079],{"type":224,"value":786},{"type":218,"tag":743,"props":1081,"children":1082},{"style":819},[1083],{"type":224,"value":1084},"result",{"type":218,"tag":743,"props":1086,"children":1087},{"style":835},[1088],{"type":224,"value":807},{"type":218,"tag":743,"props":1090,"children":1091},{"style":783},[1092],{"type":224,"value":926},{"type":218,"tag":743,"props":1094,"children":1095},{"class":745,"line":36},[1096,1101,1106,1111,1115,1120],{"type":218,"tag":743,"props":1097,"children":1098},{"style":783},[1099],{"type":224,"value":1100},"  }",{"type":218,"tag":743,"props":1102,"children":1103},{"style":760},[1104],{"type":224,"value":1105}," catch",{"type":218,"tag":743,"props":1107,"children":1108},{"style":835},[1109],{"type":224,"value":1110}," (",{"type":218,"tag":743,"props":1112,"children":1113},{"style":819},[1114],{"type":224,"value":150},{"type":218,"tag":743,"props":1116,"children":1117},{"style":835},[1118],{"type":224,"value":1119},") ",{"type":218,"tag":743,"props":1121,"children":1122},{"style":783},[1123],{"type":224,"value":1124},"{\n",{"type":218,"tag":743,"props":1126,"children":1128},{"class":745,"line":1127},9,[1129,1133,1137,1141,1145,1149,1154,1158,1162,1166,1171,1175,1180,1184,1188,1192,1196,1201,1205,1209,1213,1218,1223,1227,1231,1236,1240,1244],{"type":218,"tag":743,"props":1130,"children":1131},{"style":819},[1132],{"type":224,"value":985},{"type":218,"tag":743,"props":1134,"children":1135},{"style":783},[1136],{"type":224,"value":827},{"type":218,"tag":743,"props":1138,"children":1139},{"style":777},[1140],{"type":224,"value":150},{"type":218,"tag":743,"props":1142,"children":1143},{"style":835},[1144],{"type":224,"value":786},{"type":218,"tag":743,"props":1146,"children":1147},{"style":783},[1148],{"type":224,"value":842},{"type":218,"tag":743,"props":1150,"children":1151},{"style":845},[1152],{"type":224,"value":1153},"[api\u002Froute] failed",{"type":218,"tag":743,"props":1155,"children":1156},{"style":783},[1157],{"type":224,"value":842},{"type":218,"tag":743,"props":1159,"children":1160},{"style":783},[1161],{"type":224,"value":857},{"type":218,"tag":743,"props":1163,"children":1164},{"style":783},[1165],{"type":224,"value":862},{"type":218,"tag":743,"props":1167,"children":1168},{"style":835},[1169],{"type":224,"value":1170}," error",{"type":218,"tag":743,"props":1172,"children":1173},{"style":783},[1174],{"type":224,"value":796},{"type":218,"tag":743,"props":1176,"children":1177},{"style":777},[1178],{"type":224,"value":1179}," String",{"type":218,"tag":743,"props":1181,"children":1182},{"style":835},[1183],{"type":224,"value":786},{"type":218,"tag":743,"props":1185,"children":1186},{"style":819},[1187],{"type":224,"value":150},{"type":218,"tag":743,"props":1189,"children":1190},{"style":835},[1191],{"type":224,"value":807},{"type":218,"tag":743,"props":1193,"children":1194},{"style":783},[1195],{"type":224,"value":857},{"type":218,"tag":743,"props":1197,"children":1198},{"style":835},[1199],{"type":224,"value":1200}," stack",{"type":218,"tag":743,"props":1202,"children":1203},{"style":783},[1204],{"type":224,"value":796},{"type":218,"tag":743,"props":1206,"children":1207},{"style":835},[1208],{"type":224,"value":1110},{"type":218,"tag":743,"props":1210,"children":1211},{"style":819},[1212],{"type":224,"value":150},{"type":218,"tag":743,"props":1214,"children":1215},{"style":760},[1216],{"type":224,"value":1217}," as",{"type":218,"tag":743,"props":1219,"children":1220},{"style":799},[1221],{"type":224,"value":1222}," Error",{"type":218,"tag":743,"props":1224,"children":1225},{"style":835},[1226],{"type":224,"value":807},{"type":218,"tag":743,"props":1228,"children":1229},{"style":783},[1230],{"type":224,"value":827},{"type":218,"tag":743,"props":1232,"children":1233},{"style":819},[1234],{"type":224,"value":1235},"stack",{"type":218,"tag":743,"props":1237,"children":1238},{"style":783},[1239],{"type":224,"value":917},{"type":218,"tag":743,"props":1241,"children":1242},{"style":835},[1243],{"type":224,"value":807},{"type":218,"tag":743,"props":1245,"children":1246},{"style":783},[1247],{"type":224,"value":926},{"type":218,"tag":743,"props":1249,"children":1251},{"class":745,"line":1250},10,[1252,1256,1260,1264,1268,1272,1277,1281,1285,1289,1294,1298,1303,1307,1312,1316,1322,1326,1330],{"type":218,"tag":743,"props":1253,"children":1254},{"style":760},[1255],{"type":224,"value":1061},{"type":218,"tag":743,"props":1257,"children":1258},{"style":819},[1259],{"type":224,"value":1066},{"type":218,"tag":743,"props":1261,"children":1262},{"style":783},[1263],{"type":224,"value":827},{"type":218,"tag":743,"props":1265,"children":1266},{"style":777},[1267],{"type":224,"value":1075},{"type":218,"tag":743,"props":1269,"children":1270},{"style":835},[1271],{"type":224,"value":786},{"type":218,"tag":743,"props":1273,"children":1274},{"style":783},[1275],{"type":224,"value":1276},"{",{"type":218,"tag":743,"props":1278,"children":1279},{"style":835},[1280],{"type":224,"value":1170},{"type":218,"tag":743,"props":1282,"children":1283},{"style":783},[1284],{"type":224,"value":796},{"type":218,"tag":743,"props":1286,"children":1287},{"style":783},[1288],{"type":224,"value":876},{"type":218,"tag":743,"props":1290,"children":1291},{"style":845},[1292],{"type":224,"value":1293},"Internal error",{"type":218,"tag":743,"props":1295,"children":1296},{"style":783},[1297],{"type":224,"value":842},{"type":218,"tag":743,"props":1299,"children":1300},{"style":783},[1301],{"type":224,"value":1302}," },",{"type":218,"tag":743,"props":1304,"children":1305},{"style":783},[1306],{"type":224,"value":862},{"type":218,"tag":743,"props":1308,"children":1309},{"style":835},[1310],{"type":224,"value":1311}," status",{"type":218,"tag":743,"props":1313,"children":1314},{"style":783},[1315],{"type":224,"value":796},{"type":218,"tag":743,"props":1317,"children":1319},{"style":1318},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1320],{"type":224,"value":1321}," 500",{"type":218,"tag":743,"props":1323,"children":1324},{"style":783},[1325],{"type":224,"value":917},{"type":218,"tag":743,"props":1327,"children":1328},{"style":835},[1329],{"type":224,"value":807},{"type":218,"tag":743,"props":1331,"children":1332},{"style":783},[1333],{"type":224,"value":926},{"type":218,"tag":743,"props":1335,"children":1337},{"class":745,"line":1336},11,[1338],{"type":218,"tag":743,"props":1339,"children":1340},{"style":783},[1341],{"type":224,"value":1342},"  }\n",{"type":218,"tag":743,"props":1344,"children":1346},{"class":745,"line":1345},12,[1347],{"type":218,"tag":743,"props":1348,"children":1349},{"style":783},[1350],{"type":224,"value":1351},"}\n",{"type":218,"tag":732,"props":1353,"children":1355},{"className":734,"code":1354,"language":736,"meta":737,"style":737},"\u002F\u002F Workflow steps — log entry\u002Fexit of every step\nconst result = await step.run('process-data', async () => {\n  console.log('[workflow:process-data] step started');\n  const data = await fetchData();\n  console.log('[workflow:process-data] step completed', { count: data.length });\n  return data;\n});\n",[1356],{"type":218,"tag":335,"props":1357,"children":1358},{"__ignoreMap":737},[1359,1367,1442,1482,1516,1590,1606],{"type":218,"tag":743,"props":1360,"children":1361},{"class":745,"line":746},[1362],{"type":218,"tag":743,"props":1363,"children":1364},{"style":750},[1365],{"type":224,"value":1366},"\u002F\u002F Workflow steps — log entry\u002Fexit of every step\n",{"type":218,"tag":743,"props":1368,"children":1369},{"class":745,"line":756},[1370,1375,1380,1385,1389,1394,1398,1403,1407,1411,1416,1420,1424,1428,1433,1438],{"type":218,"tag":743,"props":1371,"children":1372},{"style":766},[1373],{"type":224,"value":1374},"const",{"type":218,"tag":743,"props":1376,"children":1377},{"style":819},[1378],{"type":224,"value":1379}," result ",{"type":218,"tag":743,"props":1381,"children":1382},{"style":783},[1383],{"type":224,"value":1384},"=",{"type":218,"tag":743,"props":1386,"children":1387},{"style":760},[1388],{"type":224,"value":962},{"type":218,"tag":743,"props":1390,"children":1391},{"style":819},[1392],{"type":224,"value":1393}," step",{"type":218,"tag":743,"props":1395,"children":1396},{"style":783},[1397],{"type":224,"value":827},{"type":218,"tag":743,"props":1399,"children":1400},{"style":777},[1401],{"type":224,"value":1402},"run",{"type":218,"tag":743,"props":1404,"children":1405},{"style":819},[1406],{"type":224,"value":786},{"type":218,"tag":743,"props":1408,"children":1409},{"style":783},[1410],{"type":224,"value":842},{"type":218,"tag":743,"props":1412,"children":1413},{"style":845},[1414],{"type":224,"value":1415},"process-data",{"type":218,"tag":743,"props":1417,"children":1418},{"style":783},[1419],{"type":224,"value":842},{"type":218,"tag":743,"props":1421,"children":1422},{"style":783},[1423],{"type":224,"value":857},{"type":218,"tag":743,"props":1425,"children":1426},{"style":766},[1427],{"type":224,"value":769},{"type":218,"tag":743,"props":1429,"children":1430},{"style":783},[1431],{"type":224,"value":1432}," ()",{"type":218,"tag":743,"props":1434,"children":1435},{"style":766},[1436],{"type":224,"value":1437}," =>",{"type":218,"tag":743,"props":1439,"children":1440},{"style":783},[1441],{"type":224,"value":812},{"type":218,"tag":743,"props":1443,"children":1444},{"class":745,"line":815},[1445,1449,1453,1457,1461,1465,1470,1474,1478],{"type":218,"tag":743,"props":1446,"children":1447},{"style":819},[1448],{"type":224,"value":822},{"type":218,"tag":743,"props":1450,"children":1451},{"style":783},[1452],{"type":224,"value":827},{"type":218,"tag":743,"props":1454,"children":1455},{"style":777},[1456],{"type":224,"value":832},{"type":218,"tag":743,"props":1458,"children":1459},{"style":835},[1460],{"type":224,"value":786},{"type":218,"tag":743,"props":1462,"children":1463},{"style":783},[1464],{"type":224,"value":842},{"type":218,"tag":743,"props":1466,"children":1467},{"style":845},[1468],{"type":224,"value":1469},"[workflow:process-data] step started",{"type":218,"tag":743,"props":1471,"children":1472},{"style":783},[1473],{"type":224,"value":842},{"type":218,"tag":743,"props":1475,"children":1476},{"style":835},[1477],{"type":224,"value":807},{"type":218,"tag":743,"props":1479,"children":1480},{"style":783},[1481],{"type":224,"value":926},{"type":218,"tag":743,"props":1483,"children":1484},{"class":745,"line":213},[1485,1490,1495,1499,1503,1508,1512],{"type":218,"tag":743,"props":1486,"children":1487},{"style":766},[1488],{"type":224,"value":1489},"  const",{"type":218,"tag":743,"props":1491,"children":1492},{"style":819},[1493],{"type":224,"value":1494}," data",{"type":218,"tag":743,"props":1496,"children":1497},{"style":783},[1498],{"type":224,"value":957},{"type":218,"tag":743,"props":1500,"children":1501},{"style":760},[1502],{"type":224,"value":962},{"type":218,"tag":743,"props":1504,"children":1505},{"style":777},[1506],{"type":224,"value":1507}," fetchData",{"type":218,"tag":743,"props":1509,"children":1510},{"style":835},[1511],{"type":224,"value":972},{"type":218,"tag":743,"props":1513,"children":1514},{"style":783},[1515],{"type":224,"value":926},{"type":218,"tag":743,"props":1517,"children":1518},{"class":745,"line":941},[1519,1523,1527,1531,1535,1539,1544,1548,1552,1556,1561,1565,1569,1573,1578,1582,1586],{"type":218,"tag":743,"props":1520,"children":1521},{"style":819},[1522],{"type":224,"value":822},{"type":218,"tag":743,"props":1524,"children":1525},{"style":783},[1526],{"type":224,"value":827},{"type":218,"tag":743,"props":1528,"children":1529},{"style":777},[1530],{"type":224,"value":832},{"type":218,"tag":743,"props":1532,"children":1533},{"style":835},[1534],{"type":224,"value":786},{"type":218,"tag":743,"props":1536,"children":1537},{"style":783},[1538],{"type":224,"value":842},{"type":218,"tag":743,"props":1540,"children":1541},{"style":845},[1542],{"type":224,"value":1543},"[workflow:process-data] step completed",{"type":218,"tag":743,"props":1545,"children":1546},{"style":783},[1547],{"type":224,"value":842},{"type":218,"tag":743,"props":1549,"children":1550},{"style":783},[1551],{"type":224,"value":857},{"type":218,"tag":743,"props":1553,"children":1554},{"style":783},[1555],{"type":224,"value":862},{"type":218,"tag":743,"props":1557,"children":1558},{"style":835},[1559],{"type":224,"value":1560}," count",{"type":218,"tag":743,"props":1562,"children":1563},{"style":783},[1564],{"type":224,"value":796},{"type":218,"tag":743,"props":1566,"children":1567},{"style":819},[1568],{"type":224,"value":1494},{"type":218,"tag":743,"props":1570,"children":1571},{"style":783},[1572],{"type":224,"value":827},{"type":218,"tag":743,"props":1574,"children":1575},{"style":819},[1576],{"type":224,"value":1577},"length",{"type":218,"tag":743,"props":1579,"children":1580},{"style":783},[1581],{"type":224,"value":917},{"type":218,"tag":743,"props":1583,"children":1584},{"style":835},[1585],{"type":224,"value":807},{"type":218,"tag":743,"props":1587,"children":1588},{"style":783},[1589],{"type":224,"value":926},{"type":218,"tag":743,"props":1591,"children":1592},{"class":745,"line":979},[1593,1598,1602],{"type":218,"tag":743,"props":1594,"children":1595},{"style":760},[1596],{"type":224,"value":1597},"  return",{"type":218,"tag":743,"props":1599,"children":1600},{"style":819},[1601],{"type":224,"value":1494},{"type":218,"tag":743,"props":1603,"children":1604},{"style":783},[1605],{"type":224,"value":926},{"type":218,"tag":743,"props":1607,"children":1608},{"class":745,"line":1055},[1609,1614,1618],{"type":218,"tag":743,"props":1610,"children":1611},{"style":783},[1612],{"type":224,"value":1613},"}",{"type":218,"tag":743,"props":1615,"children":1616},{"style":819},[1617],{"type":224,"value":807},{"type":218,"tag":743,"props":1619,"children":1620},{"style":783},[1621],{"type":224,"value":926},{"type":218,"tag":227,"props":1623,"children":1624},{},[1625,1630],{"type":218,"tag":233,"props":1626,"children":1627},{},[1628],{"type":224,"value":1629},"Key principle",{"type":224,"value":1631},": Every async boundary, every external call, every step entry\u002Fexit should have a log line. When something hangs, the last log line tells you exactly where it stopped.",{"type":218,"tag":1633,"props":1634,"children":1635},"blockquote",{},[1636],{"type":218,"tag":227,"props":1637,"children":1638},{},[1639,1644,1646,1650,1652,1656],{"type":218,"tag":233,"props":1640,"children":1641},{},[1642],{"type":224,"value":1643},"Cross-reference",{"type":224,"value":1645},": For comprehensive logging setup (OpenTelemetry, log drains, Sentry, Vercel Analytics), see the ",{"type":218,"tag":233,"props":1647,"children":1648},{},[1649],{"type":224,"value":14},{"type":224,"value":1651}," skill. For workflow-specific debugging, see the ",{"type":218,"tag":233,"props":1653,"children":1654},{},[1655],{"type":224,"value":124},{"type":224,"value":1657}," skill.",{"type":218,"tag":1659,"props":1660,"children":1661},"style",{},[1662],{"type":224,"value":1663},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1665,"total":1787},[1666,1685,1701,1713,1733,1755,1775],{"slug":1667,"name":1667,"fn":1668,"description":1669,"org":1670,"tags":1671,"stars":22,"repoUrl":23,"updatedAt":1684},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1672,1675,1678,1681],{"name":1673,"slug":1674,"type":15},"Accessibility","accessibility",{"name":1676,"slug":1677,"type":15},"Charts","charts",{"name":1679,"slug":1680,"type":15},"Data Visualization","data-visualization",{"name":1682,"slug":1683,"type":15},"Design","design","2026-06-30T19:00:57.102",{"slug":1686,"name":1686,"fn":1687,"description":1688,"org":1689,"tags":1690,"stars":22,"repoUrl":23,"updatedAt":1700},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1691,1694,1697],{"name":1692,"slug":1693,"type":15},"Agents","agents",{"name":1695,"slug":1696,"type":15},"Browser Automation","browser-automation",{"name":1698,"slug":1699,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":1702,"name":1702,"fn":1703,"description":1704,"org":1705,"tags":1706,"stars":22,"repoUrl":23,"updatedAt":1712},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1707,1708,1711],{"name":1695,"slug":1696,"type":15},{"name":1709,"slug":1710,"type":15},"Local Development","local-development",{"name":1698,"slug":1699,"type":15},"2026-04-06T18:41:17.526867",{"slug":1714,"name":1714,"fn":1715,"description":1716,"org":1717,"tags":1718,"stars":22,"repoUrl":23,"updatedAt":1732},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1719,1720,1723,1726,1729],{"name":1692,"slug":1693,"type":15},{"name":1721,"slug":1722,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":1724,"slug":1725,"type":15},"SDK","sdk",{"name":1727,"slug":1728,"type":15},"Serverless","serverless",{"name":1730,"slug":1731,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":1734,"name":1734,"fn":1735,"description":1736,"org":1737,"tags":1738,"stars":22,"repoUrl":23,"updatedAt":1754},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1739,1742,1745,1748,1751],{"name":1740,"slug":1741,"type":15},"Frontend","frontend",{"name":1743,"slug":1744,"type":15},"React","react",{"name":1746,"slug":1747,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":1749,"slug":1750,"type":15},"UI Components","ui-components",{"name":1752,"slug":1753,"type":15},"Vercel","vercel","2026-04-06T18:40:59.619419",{"slug":1756,"name":1756,"fn":1757,"description":1758,"org":1759,"tags":1760,"stars":22,"repoUrl":23,"updatedAt":1774},"ai-gateway","configure 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},[1761,1764,1767,1770,1773],{"name":1762,"slug":1763,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1765,"slug":1766,"type":15},"Cost Optimization","cost-optimization",{"name":1768,"slug":1769,"type":15},"LLM","llm",{"name":1771,"slug":1772,"type":15},"Performance","performance",{"name":1752,"slug":1753,"type":15},"2026-04-06T18:40:44.377464",{"slug":1776,"name":1776,"fn":1777,"description":1778,"org":1779,"tags":1780,"stars":22,"repoUrl":23,"updatedAt":1786},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1781,1782,1785],{"name":1765,"slug":1766,"type":15},{"name":1783,"slug":1784,"type":15},"Database","database",{"name":1768,"slug":1769,"type":15},"2026-04-06T18:41:08.513425",600,{"items":1789,"total":1986},[1790,1811,1834,1851,1867,1884,1903,1915,1929,1943,1955,1970],{"slug":1791,"name":1791,"fn":1792,"description":1793,"org":1794,"tags":1795,"stars":1808,"repoUrl":1809,"updatedAt":1810},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1796,1799,1802,1805],{"name":1797,"slug":1798,"type":15},"Documents","documents",{"name":1800,"slug":1801,"type":15},"Healthcare","healthcare",{"name":1803,"slug":1804,"type":15},"Insurance","insurance",{"name":1806,"slug":1807,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":1812,"name":1812,"fn":1813,"description":1814,"org":1815,"tags":1816,"stars":1831,"repoUrl":1832,"updatedAt":1833},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1817,1820,1822,1825,1828],{"name":1818,"slug":1819,"type":15},".NET","dotnet",{"name":1821,"slug":1812,"type":15},"ASP.NET Core",{"name":1823,"slug":1824,"type":15},"Blazor","blazor",{"name":1826,"slug":1827,"type":15},"C#","csharp",{"name":1829,"slug":1830,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":1835,"name":1835,"fn":1836,"description":1837,"org":1838,"tags":1839,"stars":1831,"repoUrl":1832,"updatedAt":1850},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1840,1843,1846,1849],{"name":1841,"slug":1842,"type":15},"Apps SDK","apps-sdk",{"name":1844,"slug":1845,"type":15},"ChatGPT","chatgpt",{"name":1847,"slug":1848,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":1852,"name":1852,"fn":1853,"description":1854,"org":1855,"tags":1856,"stars":1831,"repoUrl":1832,"updatedAt":1866},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1857,1860,1863],{"name":1858,"slug":1859,"type":15},"API Development","api-development",{"name":1861,"slug":1862,"type":15},"CLI","cli",{"name":1864,"slug":1865,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":1868,"name":1868,"fn":1869,"description":1870,"org":1871,"tags":1872,"stars":1831,"repoUrl":1832,"updatedAt":1883},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1873,1876,1879,1880],{"name":1874,"slug":1875,"type":15},"Cloudflare","cloudflare",{"name":1877,"slug":1878,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":1721,"slug":1722,"type":15},{"name":1881,"slug":1882,"type":15},"Deployment","deployment","2026-04-12T05:07:14.275118",{"slug":1885,"name":1885,"fn":1886,"description":1887,"org":1888,"tags":1889,"stars":1831,"repoUrl":1832,"updatedAt":1902},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1890,1893,1896,1899],{"name":1891,"slug":1892,"type":15},"Productivity","productivity",{"name":1894,"slug":1895,"type":15},"Project Management","project-management",{"name":1897,"slug":1898,"type":15},"Strategy","strategy",{"name":1900,"slug":1901,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":1904,"name":1904,"fn":1905,"description":1906,"org":1907,"tags":1908,"stars":1831,"repoUrl":1832,"updatedAt":1914},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1909,1910,1912,1913],{"name":1682,"slug":1683,"type":15},{"name":1911,"slug":1904,"type":15},"Figma",{"name":1740,"slug":1741,"type":15},{"name":1847,"slug":1848,"type":15},"2026-04-12T05:06:47.939943",{"slug":1916,"name":1916,"fn":1917,"description":1918,"org":1919,"tags":1920,"stars":1831,"repoUrl":1832,"updatedAt":1928},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1921,1922,1925,1926,1927],{"name":1682,"slug":1683,"type":15},{"name":1923,"slug":1924,"type":15},"Design System","design-system",{"name":1911,"slug":1904,"type":15},{"name":1740,"slug":1741,"type":15},{"name":1749,"slug":1750,"type":15},"2026-05-10T05:59:52.971881",{"slug":1930,"name":1930,"fn":1931,"description":1932,"org":1933,"tags":1934,"stars":1831,"repoUrl":1832,"updatedAt":1942},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1935,1936,1937,1940,1941],{"name":1682,"slug":1683,"type":15},{"name":1923,"slug":1924,"type":15},{"name":1938,"slug":1939,"type":15},"Documentation","documentation",{"name":1911,"slug":1904,"type":15},{"name":1740,"slug":1741,"type":15},"2026-05-16T06:07:47.821474",{"slug":1944,"name":1944,"fn":1945,"description":1946,"org":1947,"tags":1948,"stars":1831,"repoUrl":1832,"updatedAt":1954},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1949,1950,1951,1952,1953],{"name":1682,"slug":1683,"type":15},{"name":1911,"slug":1904,"type":15},{"name":1740,"slug":1741,"type":15},{"name":1749,"slug":1750,"type":15},{"name":1829,"slug":1830,"type":15},"2026-05-16T06:07:40.583615",{"slug":1956,"name":1956,"fn":1957,"description":1958,"org":1959,"tags":1960,"stars":1831,"repoUrl":1832,"updatedAt":1969},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1961,1964,1965,1968],{"name":1962,"slug":1963,"type":15},"Animation","animation",{"name":1864,"slug":1865,"type":15},{"name":1966,"slug":1967,"type":15},"Creative","creative",{"name":1682,"slug":1683,"type":15},"2026-05-02T05:31:48.48485",{"slug":1971,"name":1971,"fn":1972,"description":1973,"org":1974,"tags":1975,"stars":1831,"repoUrl":1832,"updatedAt":1985},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1976,1977,1978,1981,1984],{"name":1966,"slug":1967,"type":15},{"name":1682,"slug":1683,"type":15},{"name":1979,"slug":1980,"type":15},"Image Generation","image-generation",{"name":1982,"slug":1983,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]