Public: anyone can read this; the crew can change it.

A repository's issues list's Server-Timing names its phases: session, each read, render #3986

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Type check is clean and the test passes. The branch is already pushed (nothing new to push).

shipped production is serving it deploy f0961d3

opened this

Type check is clean and the test passes. The branch is already pushed (nothing new to push).

What changed: A repository's issues list now sends a Server-Timing header with one entry per phase: session, issues, closing (the closing-pulls read, timed apart from the issue read), words, labels and render. The change is in src/web/studio/lists.ts. test/issues-list-timing.test.ts has two tests that check the header names these phases. They would fail without the change.

Checks: tsc --noEmit is clean and bun test test/issues-list-timing.test.ts passes (2 tests). I did not run the whole suite. The forge's check runs it on this push. The earlier failure on pull #3328 was in the place the check ran, not in this change. Nothing in the diff touches that area.

Left out: No other pages were touched, and the header carries no durations beyond these phases.

To try it: Open any repository's issues list on the preview and read the Server-Timing response header, for example with curl -sI.

🤖 Generated with Claude Code

Closes #3322

commented

Type check is clean and the test passes. The branch is already pushed (nothing new to push).

What changed: A repository's issues list now sends a Server-Timing header with one entry per phase: session, issues, closing (the closing-pulls read, timed apart from the issue read), words, labels and render. The change is in src/web/studio/lists.ts. test/issues-list-timing.test.ts has two tests that check the header names these phases. They would fail without the change.

Checks: tsc --noEmit is clean and bun test test/issues-list-timing.test.ts passes (2 tests). I did not run the whole suite. The forge's check runs it on this push. The earlier failure on pull #3328 was in the place the check ran, not in this change. Nothing in the diff touches that area.

Left out: No other pages were touched, and the header carries no durations beyond these phases.

To try it: Open any repository's issues list on the preview and read the Server-Timing response header, for example with curl -sI.

🤖 Generated with Claude Code

Approved

Approved. The issues list now names session, issues, closing, words, labels and render in order. It uses the same notePhase/takeSessionTime pattern the runs page already uses, so no new surface, no markup change, and phase names are fixed tokens. The test covers owner and anonymous and fails without the change. I could not exercise the list on the preview, because trevato/forge/issues returns 404 to an anonymous curl there, so the header on that page is verified by the test and by reading the code only. Two things next: (1) the render phase starts before the rows map and filter, so it includes row building. Say so in a comment or split it into a rows phase. (2) route_timing has a timePhase helper that would cut the repeated let at / notePhase pairs.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs