Skip to main content

sync-error-docs

Detect new platform error codes in warp-server that are missing documentation pages in the docs repo. Creates doc pages, sidebar entries, and redirects for any gaps. Use on a weekly schedule or when error codes change.

Source facts

Repository
warpdotdev/docs
Last source activity
October 6, 2026 at 05:43
Detected SKILL.md language
English
Stars
44
Forks
27

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
sync-error-docs
description
Detect new platform error codes in warp-server that are missing documentation pages in the docs repo. Creates doc pages, sidebar entries, and redirects for any gaps. Use on a weekly schedule or when error codes change.
# Sync Error Docs Ensure every `ErrorCode` in `platformerrors.go` has a corresponding documentation page, sidebar entry, and redirect. ## Agent-doc quality contract The PR this skill opens or updates follows the shared v1 agent-doc quality contract in `.agents/references/doc-quality-policy.md`: apply the `warpy-factory` label and add the `## Documentation risk` block (`.agents/skills/doc_quality_policy/finalize_pr_contract.py build`). New error pages are `engineering-review-required` (new page, technical claims) unless generated verbatim from `platformerrors.go` with no invented prose. ## Repos This skill requires two repos in the agent's environment: - `warpdotdev/warp-server` — source of truth for error codes - `warpdotdev/docs` — documentation pages All paths below are relative to the **docs repo root**, with `warp-server` checked out as a sibling directory (`../warp-server`), matching the convention used by `sync-openapi-spec`. ## Workflow ### Step 1: Extract error codes from warp-server Grep the `ErrorCode` constants from `platformerrors.go`: ```bash grep 'ErrorCode = "' ../warp-server/logic/ai/ambient_agents/platformerrors/platformerrors.go ``` Each match yields a line like `InsufficientCredits ErrorCode = "insufficient_credits"`. Extract the quoted string — that is the canonical error code (underscore format). ### Step 2: List existing doc pages List the markdown files in the errors directory: ```bash ls src/content/docs/factories/api-and-sdk/troubleshooting/errors/*.mdx ``` Each file is named `{hyphen-code}.mdx` (e.g., `insufficient-credits.mdx`). Ignore `index.mdx`. ### Step 3: Compare and find missing pages For each error code from Step 1, convert underscores to hyphens (e.g., `insufficient_credits` → `insufficient-credits`) and check whether a corresponding `.mdx` file exists. ### Step 4: Create missing doc pages For each missing code, read `references/error-page-template.md` in this skill directory for the template. **Heading case:** All headings (H1–H4) must use sentence case — capitalize only the first word and proper feature names. ✅ `## When does this occur?` ❌ `## When Does This Occur?` To fill in the template accurately: 1. Read the error code's doc comment and `FromError()` case in `platformerrors.go` to determine: - HTTP status code - Whether it's retryable - Whether it's a user error (FAILED) or platform error (ERROR) - The user-facing message 2. If the code has a dedicated constructor (e.g., `NewExternalAuthRequired`), read it for additional context Place the new file at: ``` src/content/docs/factories/api-and-sdk/troubleshooting/errors/{hyphen-code}.mdx ``` ### Step 5: Add to the sidebar The sidebar lives in `src/sidebar.ts`. (`astro.config.mjs` only imports it via `starlightSidebarTopics(sidebarTopics)` — do not edit the sidebar there.) Find the `Errors` group inside the `API Troubleshooting` group, under the `Reference` topic. Its `items` array begins with the index entry: ```ts { slug: 'factories/api-and-sdk/troubleshooting/errors', label: 'Errors' }, 'factories/api-and-sdk/troubleshooting/errors/insufficient-credits', 'factories/api-and-sdk/troubleshooting/errors/feature-not-available', ``` Add the new page as a bare slug string using the **hyphenated** code: ```ts 'factories/api-and-sdk/troubleshooting/errors/{hyphen-code}', ``` Rules: - Use a plain slug string. Do not use Markdown link syntax — `* [name](path.md)` is GitBook-era format and will not build. - No `.md`/`.mdx` extension and no leading slash. - Only add an explicit `{ slug, label }` object if the auto-derived title is wrong; the existing error entries all rely on the derived title. - Append after the last existing error entry unless a grouping order is obvious from the surrounding entries. The list is not alphabetized and has no section labels. ### Step 6: Add the underscore-to-hyphen redirects (only when the forms differ) Error codes are underscored (`insufficient_credits`) but page slugs are hyphenated (`insufficient-credits`). Add redirects to `vercel.json` (at the repo root) so the underscore form resolves. **Skip this step entirely for a code that contains no underscore.** Its hyphenated slug is the same string as the code, so there is nothing to redirect: the no-slash entry would be a redundant trailing-slash normalization, and the trailing-slash entry would have `source` equal to `destination` — a self-redirect, which is an infinite loop. `conflict` is the current example. It has no redirect entries in `vercel.json`, and that is correct, not a gap. Only add redirects when `{underscore_code}` and `{hyphen-code}` actually differ. **Otherwise add two entries, not one.** Every multi-word error code currently in `vercel.json` has both a no-trailing-slash and a trailing-slash source (34 entries covering 17 codes, with no code having only one form). Adding a single variant leaves the new code with half the coverage of every existing one, and the `/errors/:code/` catch-all forwards a trailing slash through, so the slashed underscore path would not resolve. Check for existing entries first, to stay idempotent across re-runs: ```bash grep -F '"/factories/api-and-sdk/troubleshooting/errors/{underscore_code}"' vercel.json grep -F '"/factories/api-and-sdk/troubleshooting/errors/{underscore_code}/"' vercel.json ``` Add whichever variant is missing to the `redirects` array, alongside the other error-code redirects: ```json { "source": "/factories/api-and-sdk/troubleshooting/errors/{underscore_code}", "destination": "/factories/api-and-sdk/troubleshooting/errors/{hyphen-code}/", "statusCode": 308 }, { "source": "/factories/api-and-sdk/troubleshooting/errors/{underscore_code}/", "destination": "/factories/api-and-sdk/troubleshooting/errors/{hyphen-code}/", "statusCode": 308 } ``` Both `destination` values carry a trailing slash — every existing error redirect does, regardless of its source form. ### Step 7: Confirm the site-level `/errors/` route (usually no action) The API's `type` URI uses `https://docs.warp.dev/errors/{underscore_code}`. **Catch-all redirects already cover every code**, in both slash forms, so no per-code work is normally needed: ```json { "source": "/errors/:code", "destination": "/factories/api-and-sdk/troubleshooting/errors/:code/", "statusCode": 308 }, { "source": "/errors/:code/", "destination": "/factories/api-and-sdk/troubleshooting/errors/:code/", "statusCode": 308 } ``` These forward `:code` unchanged, so `/errors/insufficient_credits` lands on the underscored path and is then picked up by the step 6 redirects. Completing step 6 is therefore sufficient — which is why step 6 must add both slash variants. Verify both catch-alls are still present: ```bash grep -F '"/errors/:code"' vercel.json grep -F '"/errors/:code/"' vercel.json ``` If either is missing, restore it rather than adding per-code entries. Read `references/redirect-patterns.md` for background. This step no longer uses the GitBook API. The former `docs_redirects.py` / `GITBOOK_TOKEN` flow was left over from the GitBook era and does not apply to the Astro Starlight site. ### Step 8: Commit and open PR If any pages were created, follow the "One standing PR per automation" contract in `.agents/references/skill-authoring-guidelines.md` — new error codes trickle in over time and each dated PR would edit the same `src/sidebar.ts` and `vercel.json`, so they would conflict. 1. Look for an existing open PR, then check out the stable branch: ```bash gh pr list --repo warpdotdev/docs --state open \ --search 'add error code pages for new platform errors in:title' \ --json number,headRefName git fetch origin git checkout sync-error-docs 2>/dev/null || git checkout -b sync-error-docs origin/main git rebase origin/main ``` 2. Commit all changes with a descriptive message. 3. Push. If a PR already exists the push updates it — append the new codes under the existing `## New error code pages` heading rather than adding a duplicate heading, which `check_pr_body.py` rejects. If none exists, open one. Write the body to a file: ```bash cat > /tmp/sync-error-docs-pr-body.md << 'EOF' ## New error code pages [list each new error code and the doc page created] Co-Authored-By: Oz <oz-agent@warp.dev> EOF python3 .agents/skills/create_pr/check_pr_body.py /tmp/sync-error-docs-pr-body.md gh pr create \ --title "docs: add error code pages for new platform errors" \ --body-file /tmp/sync-error-docs-pr-body.md ``` 4. Use `report_pr` to surface the PR link ### Step 9: Report Summarize what was found: - Total error codes in `platformerrors.go` - Number of existing doc pages - New codes that were missing pages (list them) - Pages created, `src/sidebar.ts` entries added, redirects configured - Any codes skipped for redirects because they contain no underscore - Or confirm everything is already in sync Follow the actionable-only Slack rule in `.agents/references/skill-authoring-guidelines.md`: a run that finds everything already in sync writes this report to the run output and posts nothing. ## References - `references/error-page-template.md` — template for new error doc pages - `references/redirect-patterns.md` — detailed redirect setup instructions
View on GitHub