So the owner hears of a slowing restore a week before it turns red, not after.
Done looks like:
[ ] A pure function in src/snapshot/verdict.ts takes the newest drill. It returns one board line when the drill was green and its ms passed 80% of budgetMs, naming the slowest phase: "The last restore drill passed with 2 min to spare; bundles took 9 min of it." It returns none otherwise, and none for an older drill without a budget.
[ ] The line uses the same cause (drill) and href (/settings/backups) as the red drill's line, and goes away once a drill passes under 80%.
[ ] Tests: 79%, 81%, red, and no budget.
[ ] Run bun x tsc --noEmit and the drill verdict and board tests.
So the owner hears of a slowing restore a week before it turns red, not after.
Done looks like:
src/snapshot/verdict.tstakes the newest drill. It returns one board line when the drill was green and itsmspassed 80% ofbudgetMs, naming the slowest phase: "The last restore drill passed with 2 min to spare; bundles took 9 min of it." It returns none otherwise, and none for an older drill without a budget.drill) and href (/settings/backups) as the red drill's line, and goes away once a drill passes under 80%.bun x tsc --noEmitand the drill verdict and board tests.