chore(0204): complete and archive — four ops alarms live and verified on prod - #233
Merged
Merged
Conversation
…ched alarm All four gaps are deployed on production and every acceptance criterion is met, including the one that could not be met before a deploy: alarms verified by inducing the condition rather than by reading the CDK. Gap 1 induced by raising the bound to 30% against a measured 24.43% free. It fired at 13:10 with real values in its StateReason, restored, OK at 13:18. Gap 2 induced with 1/10/50 dummy DLQ messages: rungs fired at 12:17, 12:27 and 12:34 while rungs 1 and 2 never re-notified — the 2026-08-13 defect reproduced deliberately, beside its fix. All three cleared at 13:14 after a purge. Two deploys failed first and both are recorded rather than smoothed over. CloudWatch caps AlarmDescription at 1024 characters and synth cannot catch it. And "deploy Observability only" shipped the alarms without the probe that feeds them, so ten of thirteen went live blind — seven of those settling to OK on no data at all, which is this task's founding failure produced by its own deploy plan. The three MvDrift alarms held at INSUFFICIENT_DATA instead, because the code review had moved them to treatMissingData MISSING: same deploy, same absent data, an accidental controlled experiment for a change argued on paper the day before. Also measured: the probe runs in 653 ms of a 60 s budget, closing the open Lambda-config question; and an emptied DLQ takes ~25 minutes to clear its alarms because the SQS metric lags the queue. Spawns 0214. A sibling alarm has been latched in ALARM for 24 days and was found only because verification listed every alarm rather than only ours. That prices gap 3's "latching only costs somebody-may-forget" decision at 24 days, and gap 3 ships two alarms designed to latch. Open follow-ups: 0209, 0212, 0213, 0214.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closed
All four gaps from the 2026-08-13 outage are deployed on production, and the acceptance criterion that could not be met before a deploy — alarms verified by inducing the condition, not by reading the CDK — is now met for all of them.
StateReason; restored to 20,OKat 13:180/0, 38 visible objects, "all in sync") — the first time 0142's check has ever runGap 2's verification is the interesting one: rung 1 watched the queue go 1 → 10 → 50 and said nothing after its first message. That is exactly what it did on 2026-08-13 while the queue climbed to 91, and why nobody reading Slack could tell one dropped ledger from an outage. The defect was reproduced deliberately, next to its fix.
Two deploys failed first, and both are recorded
1. CloudWatch caps⚠️ The text that blew the limit was text the same day's investigation had falsified.
AlarmDescriptionat 1024 characters, and synth cannot catch it. Valid CloudFormation, green CI,cdk diffclean — rejected by the API mid-deploy after some alarms had already been created. Now guarded byassertAlarmDescriptionsFitCloudWatch()at synth.2. 🔴 "Deploy Observability only" shipped the alarms without the probe that feeds them. Ten of thirteen went live blind, and seven settled to
OKon no data at all — the console read "disk is watched" while nothing watched. That is this task's founding failure, produced by its own deploy plan.MvDrift*alarms held atINSUFFICIENT_DATAfor 43 minutes instead, because the earlier code review moved them totreatMissingData: MISSING. Same deploy, same absent data — an accidental controlled experiment for a change argued on paper the day before.Fixing that required deploying
eventbridge-stack, soCleanupRuleis nowenabled: falsein code (it assertedENABLEDwhile live wasDISABLED, meaning every deploy silently re-enabled it) backed byassertCleanupRuleStaysDisabled(), a synth-time throw. All ten Lambda assets were also rebuilt — every local bootstrap was a 2026-08-13 build predating the 0172 oracle deploy, so deploying as-is would have rolled back live fixes.Measured along the way
eventbridge-stackchange needed.get-queue-attributesreads 0 immediately; the CloudWatch metric kept publishing 50. On a real redrive the ladder keeps firing well after the operator has fixed things.Spawns 0214
prices-production-enrichment-errorshas been latched inALARMsince 2026-07-27 — 24 days — and was found only because verification listed every alarm rather than only this task's own.Still open
0209 (the USDT pivot has never priced a
_1mrow), 0212 (1.56M peg-valued rows), 0213 (the peg check reads the repaired tier), 0214 (the latched alarm). None block this task — 0204's scope is that the alarms exist and are verified, and that the data is currently wrong is what they are for.