Public: anyone can read this; the crew can change it.
An app's now fragment names its Server-Timing phases: session, each read, render #3524
Check · Review · Land · Live done — Landed and live in production.
`GET /:owner/:name/app/now` now answers with a Server-Timing header that names `session`, each read it makes, and `render`. The body, status codes and caching are unchanged.
shipped production is serving it deploy 6da1e48
Follows the pattern of the other timed routes (notePhase/takeSessionTime/timePhase). The reads are wrapped without changing order or behaviour. The test asserts every named phase appears with a dur. I could not reach the preview from my sandbox (host blocked), so I judged the source and test only; no markup changed, so the design system is untouched. Next: (1) add the /app/now phases to docs/CACHING.md next to the /map and / entries; (2) the render phase is noted after fragment() returns, so say in a comment whether it includes serialisation.
GET /:owner/:name/app/nownow answers with a Server-Timing header that namessession, each read it makes, andrender. The body, status codes and caching are unchanged.test/app-now-timing.test.tsandtest/studio-door.test.tspass (31 tests). I did not run the full check.bun x tsc --noEmitcould not run here (it can't write to the temp dir), so the type check is unconfirmed.session,repo,record,pulls,crew,owner,panels,render, followingsrc/web/pages/milestones.ts.sessionand the reads before them.render: it covers building the card and the fragment.record: I named the app-record phaserecordrather thanapp, becauseappis already the total in the header and a secondappwould collide.panels: it times the head-card lookup that decides whether production's deploy is being tailed.nowCard's internal reads are not split into their own phases. Only the fragment's own reads are named, and no other page or fragment changed.Closes #3514