Public: anyone can read this; the crew can change it.
An app's studio page names its Server-Timing phases: session, each read, render #3642
Check · Review · Land · Live done — Landed and live in production.
An app's studio page (`studioApp`) now reports its `Server-Timing` phases instead of one opaque number. The new test and the 199 tests under `test/studio` pass. I couldn't run `tsc --noEmit` here: bun couldn't write to its temp directory, so `bun install` and the type check both failed. The forge's check will be the first type check of this change.
shipped production is serving it deploy fc82d1a
An app's studio page (studioApp) now reports its Server-Timing phases instead of one opaque number. The new test and the 199 tests under test/studio pass. I couldn't run tsc --noEmit here: bun couldn't write to its temp directory, so bun install and the type check both failed. The forge's check will be the first type check of this change.
What changed
src/web/studio/app.tscallsnotePhaseandtimePhasefromsrc/core/route_timing.ts, the wayreleases.tsandexplore.tsdo.- The phases are
session(fromtakeSessionTime), then one per read, thenrender.
- Reads: opened, crew, pulls, shipped, spend, decisions, latency, history, autonomy, panels, now, following and policy.
- spend, decisions, latency and autonomy only appear for a viewer who can see the owner's facts, because the page skips those reads for everyone else.
- The page renders exactly as before. The only reordering is that
policyLineis now awaited just before the body is built, so it can be timed on its own. test/studio-app-timing.test.tssigns in, GETs/alice/vault/app, and checks that every phase above is inServer-Timingasname;dur=N.N. It fails without the change.
Left out
- No caching.
- I added no phase for
autonomyto the test, since the repo in the test has autonomy off.
To try it, GET any app's studio page and read the Server-Timing header.
🤖 Generated with Claude Code
Follows the Server-Timing pattern of the sibling pages (notePhase/takeSessionTime, timePhase/timePhaseAsync). Page output is unchanged, owner-only reads are timed only when run, and the test fails without the change. No markup or design-system surface touched. Next: (1) add a test for the guest view, where spend/decisions/latency/autonomy must be absent; (2) cover the autonomy phase with an autonomy-on repo.
An app's studio page (
studioApp) now reports itsServer-Timingphases instead of one opaque number. The new test and the 199 tests undertest/studiopass. I couldn't runtsc --noEmithere: bun couldn't write to its temp directory, sobun installand the type check both failed. The forge's check will be the first type check of this change.What changed
src/web/studio/app.tscallsnotePhaseandtimePhasefromsrc/core/route_timing.ts, the wayreleases.tsandexplore.tsdo.session(fromtakeSessionTime), then one per read, thenrender.- Reads:
opened,crew,pulls,shipped,spend,decisions,latency,history,autonomy,panels,now,followingandpolicy. -spend,decisions,latencyandautonomyonly appear for a viewer who can see the owner's facts, because the page skips those reads for everyone else.policyLineis now awaited just before the body is built, so it can be timed on its own.test/studio-app-timing.test.tssigns in, GETs/alice/vault/app, and checks that every phase above is inServer-Timingasname;dur=N.N. It fails without the change.Left out
autonomyto the test, since the repo in the test has autonomy off.To try it, GET any app's studio page and read the
Server-Timingheader.🤖 Generated with Claude Code
Closes #3631