Page 8 of 8~104 min topic

API errors & retries

Mastery: ship checklist

A second person can reproduce 429 + Retry-After:2 → sleep once → 200 with attempts=2 from a clean checkout and name the owner for INC-429-2026-07-11.

~13 min this pageMastery check

1Learn the idea

Read

Clean-room demo

From a fresh clone/directory, run the commands that prove 429 + Retry-After:2 → sleep once → 200 with attempts=2. A second person plays mobile client waiting on a grounded answer and follows your script without coaching. The demo includes limitations: what resilient TypeScript fetch wrapper around POST /v1/chat still will not do.

Read

Evidence pack

Bundle: contract snippet, passing tests, metric snapshot for retry_attempts_total{outcome} and p95 wall_ms ≤ 8000, security negative probe, rollback note, owner name. Reference INC-429-2026-07-11 as the drill you rehearsed. If any item is missing, the ship gate fails even if the happy path dazzles.

Read

Implementation artifact

test("429 once then success", async () => {
  const fake = sequence([status(429, { "Retry-After": "1" }), json(200, { answer: "ok" })]);
  const r = await retryingFetch("/v1/chat", { method: "POST", body: "{}" }, gate);
  expect(r).toMatchObject({ ok: true, attempts: 2 });
});

Read

Ownership and next review

For API errors & retries, name the human who gets paged, the review date for thresholds, and the condition that triggers reevaluation. Endpoint POST /v1/chat remains the production surface you operate for resilient TypeScript fetch wrapper around POST /v1/chat — not a slide. Keep INC-429-2026-07-11 in the handoff template so the next owner inherits the drill.

Read

Stage depth

After the peer demo, schedule the next threshold review date. File a short changelog that mentions INC-429-2026-07-11 and the control that addresses it. Archive the evidence pack where your team already stores launch records. Resist rewriting everything “for real production” in one weekend — operate this slice until the metrics bore you, then widen. Final self-check: if telemetry vanished, would you still know to hold? If yes, you learned the operating posture this lane teaches.

Read

Field notes for `api-error-handling` / `mastery-ship`

Trim the demo script until every command is necessary. Record a peer signature line: name, date UTC, pass/fail. File known limitations as bullets, not apologies. Link the evidence pack from the README. Schedule the next game day on a calendar, even if it is solo. Archive the branch tag or release digest you actually shipped. In this chapter the product is resilient TypeScript fetch wrapper around POST /v1/chat, the human stakeholder is mobile client waiting on a grounded answer, and the incident id you design against is INC-429-2026-07-11. Re-state the oracle in your notes — 429 + Retry-After:2 → sleep once → 200 with attempts=2 — and keep the invariant visible: attempts ≤ 3, wall budget ≤ 8s, non-idempotent POSTs never replay without Idempotency-Key. Track retry_attempts_total{outcome} and p95 wall_ms ≤ 8000 as the scoreboard. Surface under change control: POST /v1/chat. If you only have forty minutes, finish the fixture for 429 storm with missing Retry-After that would amplify to 40 calls before polishing UI. Promotion language stays ternary: promote, hold, or roll back based on evidence, not hope.

Go deeper

Before you start

Why this matters

Draft a two-minute demo script that proves 429 + Retry-After:2 → sleep once → 200 with attempts=2 from a clean directory. Include the failure rehearsal for 429 storm with missing Retry-After that would amplify to 40 calls and the rollback/owner line. If the script needs tribal knowledge, the lab is not shipped.

In the wild

See how this idea shows up as a product and a company — then come back to the lesson. Skills transfer across vendors.

Check your understanding

Page assessment

Answer from memory. Completion is saved from this evidence, not from opening the next page.

1. Can a peer reproduce without coaching?
2. Does the pack include retry_attempts_total{outcome} and p95 wall_ms ≤ 8000 and rollback?
3. Is ownership for INC-429-2026-07-11-class events explicit?

All responses are required.