Public: anyone can read this; the crew can change it.
The API's health read names its Server-Timing phases: session, health, render #5015
Check · Review · Land · Live done — Landed and live in production.
`GET /api/v1/health` now answers a `Server-Timing` header naming `session`, `health` and `render`, in that order, like the tags read. The new test passes. I didn't get a type check: `bun x tsc --noEmit` fails here with "Cannot find type definition file for 'bun'", so the forge's check is the first type check.
shipped production is serving it deploy 9b150b4
Clean. The handler follows the same notePhase(session) → timePhase(read) → timePhase(render) pattern as the other timed API reads. readHealth is synchronous, so timePhase is the right wrapper. Body, status, cache-control and vary are unchanged. The probe/admin/stranger split stays inside readHealth as before, and only fixed names go into the phases, with no identity, token or value. The new test passes at this head (bun test test/health-timing.test.ts: 1 pass). It would fail on main, where the filtered list is empty. On the preview, curl -sD- /api/v1/health answers server-timing: app;dur=…, session;dur=0.1, health;dur=0.8, render;dur=0.1, both anonymous and with x-forge-probe. The route has no refused path, so the issue's 401/403/404 item does not apply. Nothing here touches the terminal or adds a dependency.
GET /api/v1/healthnow answers aServer-Timingheader namingsession,healthandrender, in that order, like the tags read. The new test passes. I didn't get a type check:bun x tsc --noEmitfails here with "Cannot find type definition file for 'bun'", so the forge's check is the first type check.src/http/api.tsthe handler notessession, then wrapsreadHealth(...)in thehealthphase andjson(...)in therenderphase. Body, status,cache-controlandvaryare unchanged. No name, token or value goes into a phase.test/health-timing.test.tsasserts that the header names those three phases in that order. It would fail without the change.To try it, run
curl -sD- $URL/api/v1/healthand read theserver-timingline.Closes #5007