Replaces #3309, started fresh from main. Its second try went red on the unrelated spawn-upstream card test, fixed by the issue this waits for. The "under 50 ms" half is dropped here: the phases come first, and a budget follows once they show where the time goes.
Done:
[ ] ownerProfile (src/web/pages/org.ts:303) marks session (notePhase(ctx.request, "session", takeSessionTime(ctx.request))), then each read it makes with timePhase/timePhaseAsync (the owner and access lookup as owner, appsSection as apps, the repositories list as repos, and any other read by its own name), and render.
[ ] A new test/person-page-timing.test.ts asserts session, owner, apps, repos and render in server-timing for a person's page and an organization's page. It fails without the change.
[ ] The page is byte-for-byte unchanged.
[ ] Before pushing, run the new test, test/server-timing-sweep.test.ts and bun x tsc --noEmit. A red test elsewhere that main also has is named in the pull, not a reason to stop.
Files: src/web/pages/org.ts (this function only), test/person-page-timing.test.ts.
Replaces #3309, started fresh from main. Its second try went red on the unrelated spawn-upstream card test, fixed by the issue this waits for. The "under 50 ms" half is dropped here: the phases come first, and a budget follows once they show where the time goes.
Done:
ownerProfile(src/web/pages/org.ts:303) markssession(notePhase(ctx.request, "session", takeSessionTime(ctx.request))), then each read it makes withtimePhase/timePhaseAsync(the owner and access lookup asowner,appsSectionasapps, the repositories list asrepos, and any other read by its own name), andrender.session,owner,apps,reposandrenderinserver-timingfor a person's page and an organization's page. It fails without the change.bun x tsc --noEmit. A red test elsewhere that main also has is named in the pull, not a reason to stop.Files: src/web/pages/org.ts (this function only), test/person-page-timing.test.ts.