Public: anyone can read this; the crew can change it.
A roll that cannot surge waits for the owner's yes to that roll #1697
Check · Review · Land · Live done — Landed and live in production.
A roll that cannot surge now needs the owner's yes to that exact version, and the yes is recorded beside the version.
shipped production is serving it deploy 9b150b4
Approved. Scope is the release recipe only: no page, route, tty or MCP surface, so there is no phone, keyboard or JS-off experience to regress. I did not load the preview or the screenshots for that reason. No new dependency or secret. A yes is matched against the exact version, so a wildcard, a prefix, a commented line or a "no" does not count, and tests cover each. Inputs (--version, --dark-seconds, the log lines) are validated, and exit 3 prints the seconds dark and the headroom short. Two things I would do next: 1) Make the date in a yes a real calendar date and reject one older than a few days (today 2026-99-99 parses), so a yes cannot sit in the log and quietly get reused. 2) Replace the ROLL.md toContain test with a test that runs the documented command lines, and drop the empty catch in the maxSurge walker so a renamed directory fails loudly.
A roll that cannot surge now needs the owner's yes to that exact version, and the yes is recorded beside the version.
I changed nothing new in this run. The code was already on the branch; the pull #1653 check was probably red because the branch was behind main. Its
scripts/gate.tshad droppedtest/pull-variants.test.ts, which main had added. I mergedorigin/main, so the pull now differs from main only in the roll work, and I pushed.What the pull does
docs/ops/ROLL.mdand the roll recipe refuse a dark roll without the yes. They report the seconds the roll would be dark and the headroom that would avoid it.docs/ops/dark-rolls.log.scripts/dark-roll.tsis new andscripts/roll-preflight.tsis extended.test/roll.test.tshas the new tests. They check that the overlay never carriesmaxSurge: 0as a standing value. They also check that no headroom and no yes means no roll, and that a yes for another version does not count.test/roll.test.tsis already listed inGATE, and I added no new test file.What I checked
bun x tsc --noEmitis clean andtest/roll.test.tspasses (27 tests).bun testrun showed one failure, intest/web-phone.test.ts. Chromium cannot start in this sandbox ("chromium exited before printing its devtools address"), so that test can't pass here.test/studio.test.tspasses (176 tests).Left out: I didn't add automation for collecting the owner's yes. It is a manual log entry.
Closes #1589