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

The release smoke loads /boards and the heaviest public pages, then watches /healthz for 60 s before it calls a release live #6898

shipped production is serving it opened this has it
opened this

0.7.277 reported live, then hung once someone loaded /boards: /readyz never touches the database, so nothing caught it. This guards the release, not the code that hung.

Done:

  • [ ] src/release/smoke.ts loads /boards (signed in with its token), /, /explore, /search?q=a and one repository's home. Each must answer, not merely not error.
  • [ ] For 60 s after go-live it polls /healthz once a second, and fails the smoke when any answer takes over 1 s or fails. The failure names the slow page, and a failed smoke stops the release the way a failed smoke already does.
  • [ ] The duration and the page list are constants in smoke.ts. The test runs it in a few hundred milliseconds by passing a shorter window, never by sleeping.
  • [ ] test/release-smoke.test.ts: a server whose /boards blocks for 2 s fails the smoke and names /boards; a healthy one passes.

The release workflow and the chart are not touched; this is only the forge's own smoke module.

Files: src/release/smoke.ts, the test.

Part of the person's incident #6840 (0.7.277 hung the forge). Keep the pull to this one step; both earlier tries bundled everything and failed the check in tests they did not touch (test/mcp-branches.test.ts, the per-account spend ceilings). If the check fails in a test this pull does not touch, name it in the pull rather than widening the change.

Before pushing: bun x tsc --noEmit and the tests you add or touch.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs