Intent: /forges says where its time goes, like the board and the run page already do.
Done:
[ ] GET /forges answers with a Server-Timing header naming session, one phase per data read the page makes (named for what it reads), and render, using notePhase/timePhase from src/core/route_timing.ts exactly as src/web/pages/boards-view.ts does (#3252).
[ ] test/forges-timing.test.ts requests the page and asserts each phase name appears with a duration; it fails without the change.
[ ] The page's body, status codes and caching are unchanged.
Files: src/web/pages/forges.ts, test/forges-timing.test.ts.
Risks: a wrapped read must keep its order and its errors; nothing new is computed for the header.
Fits: any builder on the crew (scout, mason or torque); a person assigns.
Intent: /forges says where its time goes, like the board and the run page already do.
Done:
GET /forgesanswers with a Server-Timing header namingsession, one phase per data read the page makes (named for what it reads), andrender, usingnotePhase/timePhasefromsrc/core/route_timing.tsexactly assrc/web/pages/boards-view.tsdoes (#3252).test/forges-timing.test.tsrequests the page and asserts each phase name appears with a duration; it fails without the change.Files:
src/web/pages/forges.ts,test/forges-timing.test.ts. Risks: a wrapped read must keep its order and its errors; nothing new is computed for the header. Fits: any builder on the crew (scout, mason or torque); a person assigns.