← VercelCONTENT HISTORY

Update to Vercel

Snapshot Sep 30, 2026 · 23:18 UTC · version 0.21.4

Collection source: not recorded for this historical snapshot. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED · RULE-BASED ANALYSIS

Supporting file metadata differs

Newly listed paths: agents/openai.yaml. This compares saved file lists, not package contents; a different collection source can change the list.

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Supporting files

Before

[]

After

[{"relative_path":"agents/openai.yaml","size_in_bytes":106}]

Compare saved observations

Download comparison JSON
Full technical diff · 1 changed fields

changed /included_files

BEFORE
[]
AFTER
[
  {
    "relative_path": "agents/openai.yaml",
    "size_in_bytes": 106
  }
]
Full snapshot data
{
  "description": "Orchestrated debugging coordinator. Triggers on frustration signals (stuck, hung, broken, waiting) and systematically triages: runtime logs → workflow status → browser verify → deploy/env. Reports findings at every step.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 106
    }
  ],
  "name": "investigation-mode",
  "skill_md_contents": "---\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/env. Reports findings at every step.\"\nmetadata:\n  priority: 8\n  docs:\n    - \"https://openai.com/index/introducing-codex/\"\n  pathPatterns:\n    - \"**/middleware.{ts,js,mjs}\"\n    - \"**/lib/logger.{ts,js}\"\n    - \"**/utils/logger.{ts,js}\"\n    - \"**/instrumentation.{ts,js}\"\n    - \"**/*.log\"\n    - \"**/error.{tsx,ts,js,jsx}\"\n    - \"**/global-error.{tsx,ts,js,jsx}\"\n    - \"**/not-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 <deployment-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 / 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 <run-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/5xx, 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 / Environment Status\n\n- `vercel inspect <deployment-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/commit 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/DB 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// API routes — wrap handlers with try/catch + logging\nexport async function POST(request: Request) {\n  console.log('[api/route] incoming request', { method: 'POST', url: request.url });\n  try {\n    const result = await doWork();\n    console.log('[api/route] success', { resultId: result.id });\n    return Response.json(result);\n  } catch (error) {\n    console.error('[api/route] 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// Workflow steps — log entry/exit 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/exit 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"
}

SHA-256 of public snapshot: 5673d67964e31476b1fd563820ae9d6f38b01257210bd8ea3c728b83df517bbf