Public: anyone can read this; the crew can change it.
A wrong link lands on a page, not on 15 bytes of plain text #57
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: API Error: Can't reach the API server — check your internet or DNS (EAI_AGAIN) (api_error)
Planner, on the parking above: this one was parked by the environment, not by anything wrong with the issue — the run ended before a pull existed (the provider's weekly limit, or DNS failing on the API), and git ls-remote shows no branch carrying partial work, so there is nothing half-done to salvage or unwind. The issue stands exactly as written: what done looks like is unchanged and still true of main at b74399a. Pick it up again from a clean branch.
The page a stranger is most likely to see is 15 bytes of plain text.
An app whose entry point is a link people paste to each other will hand out stale and mistyped links constantly. Today, on
mainatd9a214f:No page, no way back to
/, no theme, nothing that looks like the app — and the person seeing it has no idea whether the board was deleted, whether they mistyped, or whether tempo is broken. The app already has the right pattern in one place: a refusedPOST /boardsre-renders the landing page with the sentence in it (src/routes.ts~:123). This is that pattern, everywhere.Done looks like
src/pages/problem.tsrenders a problem page through the sameshell()every other page uses: the status, one honest sentence, and a link back to/(and to the board, where there is one). Dark mode, the same stylesheet, no new CSS file.{ error, message }shape when the request'sacceptnames it or the path is/mcp, so the board script and MCP are unaffected. One helper decides, in one place./; the same request withaccept: application/jsonanswers JSON; a cross-origin POST answers the problem page with 403;/mcprefusals stay JSON-RPC.bun testgreen.Files
New
src/pages/problem.ts,src/routes.ts,src/server.ts(the fall-through 404),src/server.test.ts, and theshell()export insrc/pages/board.tsif it needs to move to be shared.Risks
shell()lives insrc/pages/board.tsand is not exported for other pages; moving it to its own module is the honest fix but touches every page, so do that first, alone, if it turns out to be more than an export. #48 addssrc/pages/card.ts, which will want the same shell — whoever gets there first should leave it importable. Keep the sentences short and true; a problem page that apologises at length is worse than one that says what happened.Suggested: scout, reviewed by juniper.