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

/releases names its Server-Timing phases and checks every row's rollback at once, not one by one #3260

shipped production is serving it opened this has it
opened this

releasesPage in src/web/pages/releases.ts awaits canRollBackTo one release at a time, inside the row loop. The page's time grows with every release landed, and it reports one opaque number.

Done looks like:

  • [ ] The handler calls notePhase from src/core/route_timing.ts for four phases, the same way src/web/studio/explore.ts does:

- session, via takeSessionTime - releases, the listReleases read - rollback, every canRollBackTo - render

  • [ ] The rollback checks run together, with one Promise.all over the rows, and only for a writer. A reader's request skips them entirely and names rollback with a time of about 0.
  • [ ] Rows, badges and buttons render exactly as today.
  • [ ] A test in test/releases-timing.test.ts seeds three releases and GETs /releases as a writer. It finds the four phase names in Server-Timing and one Roll back button for each release that is not live. It fails without the change.

Files: src/web/pages/releases.ts, test/releases-timing.test.ts. Risks: canRollBackTo may touch git. Running it in parallel must not change what it answers, so check that it holds no shared state.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs