Public: anyone can read this; the crew can change it.

The home's archived list names its Server-Timing phases: session, each read, render #3546

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

`GET /home/archived/:op` (`homeArchived` in `src/web/studio/home_archive.ts`) now sends a Server-Timing header with the phases `session`, `op` and `render`, using `notePhase`/`timePhase` the same way `src/web/pages/milestones.ts` does.

shipped production is serving it deploy fb6f20c

opened this

GET /home/archived/:op (homeArchived in src/web/studio/home_archive.ts) now sends a Server-Timing header with the phases session, op and render, using notePhase/timePhase the same way src/web/pages/milestones.ts does.

  • session is the time the server already recorded, read with takeSessionTime. As on the milestones page, it is noted after the sign-in check, so a signed-out request redirects without phases.
  • op wraps getFleetOp, the page's only data read. The call order and the not-found path are the same as before.
  • render times building the body and calling page(...).

The handler now keeps the signed-in user in a local variable so the wrapped read can use it after the sign-in check; the value is the same as before. The body, status codes and caching are unchanged, and the header uses only times the handler already measures.

test/home-archived-timing.test.ts archives one app as an admin and fetches the receipt page. It checks the status is 200, the <h1>Archived</h1> heading, and that app, session, op and render each appear as name;dur=N.N. It checks names only, never a wall-clock time. It fails with the handler change removed and passes with it; test/home-archive.test.ts still passes and tsc --noEmit is clean. No other page was touched.

To try it, archive an app from the home as an admin and look at the Server-Timing header on the page you are redirected to.

🤖 Generated with Claude Code

Closes #3528

commented

GET /home/archived/:op (homeArchived in src/web/studio/home_archive.ts) now sends a Server-Timing header with the phases session, op and render, using notePhase/timePhase the same way src/web/pages/milestones.ts does.

  • session is the time the server already recorded, read with takeSessionTime. As on the milestones page, it is noted after the sign-in check, so a signed-out request redirects without phases.
  • op wraps getFleetOp, the page's only data read. The call order and the not-found path are the same as before.
  • render times building the body and calling page(...).

The handler now keeps the signed-in user in a local variable so the wrapped read can use it after the sign-in check; the value is the same as before. The body, status codes and caching are unchanged, and the header uses only times the handler already measures.

test/home-archived-timing.test.ts archives one app as an admin and fetches the receipt page. It checks the status is 200, the <h1>Archived</h1> heading, and that app, session, op and render each appear as name;dur=N.N. It checks names only, never a wall-clock time. It fails with the handler change removed and passes with it; test/home-archive.test.ts still passes and tsc --noEmit is clean. No other page was touched.

To try it, archive an app from the home as an admin and look at the Server-Timing header on the page you are redirected to.

🤖 Generated with Claude Code

Approved

Matches the milestones pattern (notePhase/takeSessionTime/timePhase). Session is noted after the sign-in check, op wraps the only read, render covers body and page(). Behaviour, status codes and the 404 path are unchanged, no markup or design-system surface touched, and the test checks phase names only, never a wall-clock time. The preview receipt page needs a signed-in session, so I did not exercise it by curl. Two things next: (1) the test header cites #3528 but the pull is #3546; (2) add the same phases to the undo POST redirect path only if it renders, otherwise leave it.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs