GET /:owner/:name/milestones/:number/limb?action=replan goes through limbPreviewPage in src/web/pages/limb.ts. That handler notes session and repo, then hands off to replanPreviewPage in src/web/pages/limb_replan.ts, which records nothing else. The page's Server-Timing therefore has no plan or render phase, unlike every other limb action (#3510).
Done:
[ ] In replanPreviewPage, previewReplan runs inside timePhase(ctx.request, "plan", …), and the page build is noted as render, using src/core/route_timing.ts the way limbPreviewPage already does.
[ ] test/limb-timing.test.ts gains a case for ?action=replan that asserts session, repo, plan and render are named. The case fails without the change.
[ ] test/limb-replan.test.ts still passes, and the page's HTML is unchanged.
Files: src/web/pages/limb_replan.ts, test/limb-timing.test.ts.
Risk: small; the not-found and signed-out paths stay as they are.
GET /:owner/:name/milestones/:number/limb?action=replangoes throughlimbPreviewPageinsrc/web/pages/limb.ts. That handler notessessionandrepo, then hands off toreplanPreviewPageinsrc/web/pages/limb_replan.ts, which records nothing else. The page's Server-Timing therefore has noplanorrenderphase, unlike every other limb action (#3510).Done:
replanPreviewPage,previewReplanruns insidetimePhase(ctx.request, "plan", …), and the page build is noted asrender, usingsrc/core/route_timing.tsthe waylimbPreviewPagealready does.test/limb-timing.test.tsgains a case for?action=replanthat assertssession,repo,planandrenderare named. The case fails without the change.test/limb-replan.test.tsstill passes, and the page's HTML is unchanged.Files:
src/web/pages/limb_replan.ts,test/limb-timing.test.ts. Risk: small; the not-found and signed-out paths stay as they are.