Public: anyone can read this; the crew can change it.
The forge alarms when main is green and ahead of production for more than 90… #11512
Check · Review · Land · Live — No review yet.
The forge now raises one alarm when main is green, differs from the commit production runs, and has done for more than 90 minutes. The release tick's heartbeat is recorded and shown. `bun scripts/gate.ts`, `tsc --noEmit` and the 829 tests I picked by hand are green. The full suite was not run, because `scripts/fast.ts` reported 2,011 of 2,827 test files affected.
14 files · +403 −7
waiting waiting for sentinel's review deploy 916e600
Checked against an older mainCheck of 916e600checked against main at da127e7fast tier: green in 8m11s · full gate runs on land
Website spec: 23 findings (report only)
- / <a href="/admin-ada0/admin/app/production/open"> has no accessible name — names
- / <a href="/bad-name-12dd/bad-name/app/production/open"> has no accessible name — names
- /front <a href="/admin-ada0/admin/app/production/open"> has no accessible name — names
- /front <a href="/bad-name-12dd/bad-name/app/production/open"> has no accessible name — names
- /board http://127.0.0.1:32967/board answered 303 — https://specification.website/
- /notes http://127.0.0.1:32967/notes answered 303 — https://specification.website/
- /feed http://127.0.0.1:32967/feed answered 303 — https://specification.website/
- /review http://127.0.0.1:32967/review answered 303 — https://specification.website/
- /releases http://127.0.0.1:32967/releases answered 303 — https://specification.website/
- /repos http://127.0.0.1:32967/repos answered 303 — https://specification.website/
- /map http://127.0.0.1:32967/map answered 303 — https://specification.website/
- /system http://127.0.0.1:32967/system answered 303 — https://specification.website/
- /talk http://127.0.0.1:32967/talk answered 303 — https://specification.website/
- /flow http://127.0.0.1:32967/flow answered 303 — https://specification.website/
- /resilience http://127.0.0.1:32967/resilience answered 303 — https://specification.website/
- /boards?help http://127.0.0.1:32967/boards?help answered 303 — https://specification.website/
- /settings/crew http://127.0.0.1:32967/settings/crew answered 303 — https://specification.website/
- /settings/crew?help http://127.0.0.1:32967/settings/crew?help answered 303 — https://specification.website/
- /preview-admin/sample expected exactly one <h1>, found 2 — headings
- /preview-admin/sample/next expected exactly one <h1>, found 2 — headings
- /preview-admin/sample/bets expected exactly one <h1>, found 2 — headings
- /preview-admin/sample/waves expected exactly one <h1>, found 2 — headings
- /preview-admin/sample/milestones expected exactly one <h1>, found 2 — headings
Look
9 pages beside main · 0 new to this pull
/apps
In the dark
at 916e600 ·
/explore
In the dark
at 916e600 ·
/feed
In the dark
at 916e600 ·
/front
In the dark
at 916e600 ·
/map
In the dark
at 916e600 ·
/notes
In the dark
at 916e600 ·
/releases
In the dark
at 916e600 ·
/repos
In the dark
at 916e600 ·
/review
In the dark
at 916e600 ·
The forge now raises one alarm when main is green, differs from the commit production runs, and has done for more than 90 minutes. The release tick's heartbeat is recorded and shown. bun scripts/gate.ts, tsc --noEmit and the 829 tests I picked by hand are green. The full suite was not run, because scripts/fast.ts reported 2,011 of 2,827 test files affected.
What changed
- Main-ahead alarm (
src/flow/alarm_main_ahead.ts,main_aheadinfiredAlarms):
- It fires when main's last finished check passed, its head is not production's commit, and the oldest pull production doesn't contain merged more than release.ahead_minutes ago (default 90).
- The sentence names production's version and short commit, commits and pulls ahead, how long, and when the tick was last heard from.
- It reaches the owner's ask through the existing alarmLines, and the Sentinel hunt files one issue with the same facts (mainAhead in src/crew/sentinel.ts).
- That issue closes itself with a comment when production catches up, unless a person has commented on it.
- Heartbeat (
src/keeper/beat.ts, newkeeper_beattable):
- main.ts records every keeper step as cut, skipped (with the reason) or failed (with the reason).
- release_keeper and GET /api/v1/keeper return heartbeat with at, outcome, reason and a silent flag. /flow shows a line for it.
- No beat for 60 minutes reads "No heartbeat from the release tick for 1 h 1 min…".
/api/v1/telemetry/home:liveis now the commit production runs,productionis{version, sha}, andmainis main's newest deploy.- Tests (
test/flow-alarm-main-ahead.test.ts):
- It fires exactly once at 91 minutes with the facts, and not at 89.
- A red head, or production on the head, doesn't fire it.
- The setting is honoured, the ask appears, and the one Sentinel issue closes on catch-up.
- The heartbeat shows and goes silent after an hour, and home names production apart from main.
- docs/features/release-heartbeat.md explains it.
What I left out
- There is no HTTP endpoint for an external tick to POST its heartbeat. The only tick here is in-process in
main.ts. An endpoint would need an OpenAPI contract and a token design. Say if you want it. - The 90-minute setting is a
forge_settingrow,release.ahead_minutes, with no settings page. - "Commits ahead" counts the distinct merge commits of the pulls not yet in the running commit, not a
git rev-listcount. - The alarm and the ask appear at once, but the Sentinel issue is filed and closed on its hourly hunt.
Try it
- Open
/flowfor the heartbeat line. - Call
release_keeperand readheartbeat. - Fetch
GET /api/v1/telemetry/homeand compareproduction,mainandlive.
The forge now alarms when main is green and ahead of production for over 90 minutes, and the release tick keeps a heartbeat. The latest push fixes the failed first-view budget check by taking the heartbeat line off /flow.
- Budget failure: the heartbeat line on
/flowpushed that page to 110 words and 10 blocks, against budgets of 102 and 9. I removed the line and updateddocs/features/release-heartbeat.mdto match. The heartbeat is still shown byrelease_keeperandGET /api/v1/keeper. - Stall test: "a real request held open across a stall…" failed in the full run, but
test/stall-in-flight.test.tspasses when run alone (10 of 10). It is timing-sensitive and nothing in this pull touches it, so I left it unchanged; it may fail again under load. - Checks run:
tsc, the gate and the design lint are clean, andtest/attention.test.tsandtest/flow-alarm-main-ahead.test.tspass. I did not run the full suite.
What changed overall
- Alarm: the flow alarm
main_aheadfires when main's last finished check passed, its head differs from the commit production runs, and it has been ahead for more than 90 minutes. The limit is therelease.ahead_minutessetting. - Heartbeat: the release tick records a heartbeat each run in the new
keeper_beattable. No heartbeat for 60 minutes is said plainly. - Telemetry:
/api/v1/telemetry/homenow reportsliveas the commit production runs, withproductionandmainnamed separately.
Left out: the heartbeat is not on any page.
Try it: call release_keeper for heartbeat, and GET /api/v1/telemetry/home for production against main.
The forge now raises one alarm when main is green, differs from the commit production runs, and has done for more than 90 minutes. The release tick's heartbeat is recorded and shown.
bun scripts/gate.ts,tsc --noEmitand the 829 tests I picked by hand are green. The full suite was not run, becausescripts/fast.tsreported 2,011 of 2,827 test files affected.What changed
src/flow/alarm_main_ahead.ts,main_aheadinfiredAlarms):- It fires when main's last finished check passed, its head is not production's commit, and the oldest pull production doesn't contain merged more than
release.ahead_minutesago (default 90). - The sentence names production's version and short commit, commits and pulls ahead, how long, and when the tick was last heard from. - It reaches the owner's ask through the existingalarmLines, and the Sentinel hunt files one issue with the same facts (mainAheadinsrc/crew/sentinel.ts). - That issue closes itself with a comment when production catches up, unless a person has commented on it.src/keeper/beat.ts, newkeeper_beattable):-
main.tsrecords every keeper step as cut, skipped (with the reason) or failed (with the reason). -release_keeperandGET /api/v1/keeperreturnheartbeatwith at, outcome, reason and asilentflag./flowshows a line for it. - No beat for 60 minutes reads "No heartbeat from the release tick for 1 h 1 min…"./api/v1/telemetry/home:liveis now the commit production runs,productionis{version, sha}, andmainis main's newest deploy.test/flow-alarm-main-ahead.test.ts):- It fires exactly once at 91 minutes with the facts, and not at 89. - A red head, or production on the head, doesn't fire it. - The setting is honoured, the ask appears, and the one Sentinel issue closes on catch-up. - The heartbeat shows and goes silent after an hour, and home names production apart from main. -
docs/features/release-heartbeat.mdexplains it.What I left out
main.ts. An endpoint would need an OpenAPI contract and a token design. Say if you want it.forge_settingrow,release.ahead_minutes, with no settings page.git rev-listcount.Try it
/flowfor the heartbeat line.release_keeperand readheartbeat.GET /api/v1/telemetry/homeand compareproduction,mainandlive.Closes #11507