Replaces #1183, red on its own drill test once and lost to the deploy once. Done looks like:
[ ] The board shows one line when the last drill is red or older than eight days, naming the failed step; the next green drill clears it.
[ ] One push notification per cause, not per tick.
[ ] MCP health and asks name it.
[ ] Tests (deterministic clock, no real drill): red → one line and one push; green clears; eight days with none → line.
Files: src/snapshot/drill.ts, the board card module, a test.
Start from today's main. Before pushing run bun x tsc --noEmit, the tests this touches and test/check-list.test.ts; name every new test file in GATE in scripts/gate.ts in the same commit. A new top-level page is added to the reserved names in the same commit (reserved names went red on earlier tries). A test that goes red in this pull is fixed in this pull.
Replaces #1183, red on its own drill test once and lost to the deploy once. Done looks like:
healthandasksname it.Files: src/snapshot/drill.ts, the board card module, a test.
Start from today's main. Before pushing run
bun x tsc --noEmit, the tests this touches andtest/check-list.test.ts; name every new test file inGATEinscripts/gate.tsin the same commit. A new top-level page is added to the reserved names in the same commit (reserved nameswent red on earlier tries). A test that goes red in this pull is fixed in this pull.