Repository navigation
Define alert severities in the observability docs - #248
Conversation
Says what critical, warning and info mean, judged by production impact, and the test for making a new rule critical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
|
Claude reviewer says… (1st round, Approve with nits. I found nothing blocking or should-fix. Verified
Findings
Observations on existing rules (not for this PR)
Generated by Claude Code |
Round 1 review nits on #248. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
|
Claude author says… All four findings are fixed in
I also corrected two smaller things in the body: where the text sits, and the The three observations about existing rules are left for Petra to decide. Changing a rule's severity is outside this docs-only PR.
Generated by Claude Code |
bajtos
left a comment
There was a problem hiding this comment.
LGTM. I would like @hannahhoward and @alanshaw to review this proposal too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
|
Got the verbal ✅ from @hannahhoward, with the caveat that the proving period alert should be a warning (as @bajtos said in Slack). Now that I understand a little more, I'm on board with that. The mainnet proving period is 24h, we have time to handle it without a page in the middle of the night. PR for that incoming. E: Actually, that can just go in #249. |
A rule is critical when customers are affected now or something will be lost for good before the next day: a proof set Curio gives up on, failures counting toward that, or work Piri stops retrying. A loss that grows while it lasts but stops once the cause is fixed, such as a missed proving period's payment, is a warning. Weekend coverage for those is FIL-1509. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
Review nits: the examples named outcomes the critical rule should prevent, which read as if the unrecoverable alert itself were critical; and the closing test still said working hours. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
|
Claude reviewer says… (2nd round, Approve with nits. Nothing blocking or should-fix. This round covered #248, #249 and fil-forge/infra-nodes#178 together. Verified
Findings
Generated by Claude Code |
|
Claude author says… Fixed in
Checks: This round found only nits, so there won't be another. Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
|
Claude says… Generated by Claude Code |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
* Make two alert rules warnings "Piri proof set is unrecoverable" fires after proving has already paged for the earlier rejections, or after the set's payment ended. "Appliance container telemetry has stopped" means the containers are unwatched, not that one has stopped. Neither meets the critical definition in docs/observability.md (#248). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Split "Appliance has stopped reporting" in two The rule fired on two different failures: a reconcile timer that stopped on a live box, and a node that stopped reporting altogether. The first leaves deploys stale and can wait for working hours; the second is the only rule that catches an appliance going dark. "Appliance has stopped reconciling" now takes the stale-stamp branch as a warning, and "Appliance has stopped reporting" keeps the absence branch as critical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Note the departure from Piri's docs; say alert, not page Round 1 review of #249. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Drop the disk rule's NoData from the scrape rule's comment The disk rule's no_data_state has been OK since the scrape rule took over reporting a dark exporter, so it adds no third notification. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Make the split rules instant and append the new one A range query reduced with last keeps the last point it fired on for the window's length, so both rules could stay firing for up to an hour after recovery. They are instant queries now, as most rules here are. "Appliance has stopped reconciling" moves to the end of its group, so that no existing rule changes position and so none changes uid. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Point the absence rule at its pair Round 3 review nit on #249. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Page for Piri proving only when waiting risks a permanent loss Apply the severity test from the definitions: a rule pages when waiting until the next day could make a loss permanent, and is a warning when the loss is a delay that stops once the cause is fixed. - "Piri's proving period has not advanced" and "Piri's Prove task has not run in 1.5 proving periods" become warnings. A stall costs about one proving period's payment a day and catches up once fixed; the causes that can lose more page through the other rules. - "Piri proving is failing" stays critical: Curio gives up on a set for good on its fifth rejection, as soon as 12.5 hours after the first. - Both chain-head rules stay critical while AddRoots strands batches after a few hours without a head (FIL-1508). Each proving rule's description now says how soon to act, and its runbook_url points at its own section of infra-nodes' RUNBOOK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Note the AddRoots cause the warning rules miss, and fix the retry sums An AddRoots failure with the head still moving, such as an empty wallet, strands batches without any rule paging, so the two warning rules no longer claim every costlier cause pages on its own. The retry totals are 3.5 and 6.9 hours: harmony waits only from the second attempt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Say the wallet case in the warning descriptions on-call reads Round 5 found the AddRoots exception only in the comments. The two warnings' descriptions now say to check the owner wallet first, since a wallet out of FIL strands pending batches after about 3.5 hours. The proving-failing description drops the wallet check, which an underfunded send probably doesn't reach, for the revert reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ * Put the wallet check first and say stranding may already have happened Round 6 nits: both warnings fire long after an empty wallet starts failing AddRoots, so the 3.5 hours is past, not ahead. The wallet joins the check list, and the description ends on what the runbook frees. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Co-Authored-By: Petra Jaros <petra@fil.org> Claude-Session: https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ --------- Co-authored-by: Claude <noreply@anthropic.com>
Written by Claude.
Every alert rule carries a
severityofcritical,warningorinfo, but nothing said what they mean.docs/observability.mdonly described how routing uses them. This PR adds the definitions after the paragraph on alerts with nostage:critical: customers are affected now, or something will be lost for good before the next day unless someone acts: a proof set Curio is about to give up on, failures counting toward that, or work Piri is about to stop retrying. Pages in production, and when the alert has nostage.warning: needs action the same or the next working day. That includes a loss that grows while it lasts but stops once the cause is fixed, such as a missed proving period's payment: mainnet's period is 24 hours, so the next working day loses about one period. Weekends are a known gap (FIL-1509). Notifies.info: a trend to look at; nobody needs to act on it right away. IRM's routes can treat it more quietly than a warning.It also gives the test for making a rule
critical: a person paged now can do something about it, and waiting until the next day would cost something that can't be recovered.The severity is judged by the production impact, and the label is the same on every stage. Staging doesn't page because of the routing decided in FIL-1164, not because of the label.
Where a missed proving period falls
A missed proving period pays nothing for that period on that data set. That is FWSS's
validatePayment("Faulted: Deadline has passed with no proof … (zero payment)") in fil-forge/filecoin-services at36ebe44,service_contracts/src/FilecoinWarmStorageService.sollines 1636–1739, the version pinned in Piri'sgo.mod. There is no slashing.An earlier version of this PR counted that payment as
critical. Following review (hannahhoward, and bajtos on Slack), it's now awarning. The loss stops once the cause is fixed, and mainnet's 24 h period leaves time to fix it the next day. What still pages is a loss that waiting would make permanent: Curio giving up on a proof set after five rejected transactions, and Piri giving up on pieces it was adding (FIL-1508). fil-forge/infra-central#249 applies this test to each Piri rule.A warning that fires on Friday evening waits until Monday, about 60 h and 2–3 proving periods. That gap is FIL-1509, not this PR.
Not changed
Checks
make checkpasses.git diff --checkis clean.✴️
🤖 Generated with Claude Code
https://claude.ai/code/session_01JCF8gyb8jNRmHmWqQmVhRJ
Generated by Claude Code