Repository navigation
Conversation
monitor poll follows each incident's fix: owned once its ticket exists, mitigating once it merges, verifying once a deploy observation's commit has the merge commit as an ancestor (assumed, deploy_lag_minutes after the merge, only when no monitor reports deploys). Quiet for verify_hours, or 3 times the fingerprint's usual gap, resolves it with an outcome (unverified below 3 occurrences). A recurrence in the window is fix-regressed: the incident reopened, a problem on the decision, and one owner question (wrong call or sound call, failed fix), never a correction; wait wakes on it. A resolved incident that comes back opens a new one that refs it. A new error first seen in a release whose merge changed its top frame is a suspected escaped defect on that ticket. Findings fix-unverified and probe-missed, a Production line in the retro, the merged and regressed board columns and the verify window in the drawer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T5z3hZtpGaQUGsTaAMQrAg
A status the owner set is left alone, so verification never writes a line every poll. Regressions go by the provider's last_seen, not the kit's fetch time. Suspected escapes need the release from the observation itself and the previous deploy, and walk only the merges between them, 50 observations a poll from a high-water mark, after the poll has printed what wait needs; wait reads a killed poll's alerts. Assumed deploys only when no deploy since the merge names a commit this repo knows, and fix-unverified says which. The window uses the kit's own counts and is capped at 7 days; the seen count is kept at its start. Recurrence is for incidents the kit resolved, skips ignores, and doesn't stack titles. A regression that died half-way is finished on the next poll. The regression question blocks its incident. Fix tickets follow superseded_by; deploy commits are validated and lowercased; fingerprints are read once per process; probe-missed only for problems about production. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T5z3hZtpGaQUGsTaAMQrAg
An assumed window moves to the real deploy when it turns up, so a slow pipeline isn't a regression. A regression writes its problem and question before it reopens the incident, each once, so a run that dies part-way is finished by the next poll. The release before a suspected escape is the latest earlier deploy from the same monitor whose commit is an ancestor. A deploy's own time starts the window. The escape marker reads an old file. fix-unverified follows superseded tickets. The owner-held test has a merged fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T5z3hZtpGaQUGsTaAMQrAg
…commit - a deploy event's release is a version name and its time an ISO time, so neither can carry a '(commit <sha>)' that verification reads back - deploys count only from the monitors' own lines - verify_hours is at least 1 and deploy_lag_minutes never negative - the fix ticket comes from live incident-fix decisions only (from #110) - an event's provider link is shown without userinfo or query - answer --from-chat refuses a question asked for an owner-only reason Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
Upstream loop: merged #110's update, adversarial review of this PR's diffI merged I found no blocker: nothing in this diff reaches an owner_only class, runs a command or URL from settings, or opens a path traversal. Findings
Tests: the full |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Builds on #110 (merge that first). Monitoring, part 4 of 5: an incident's fix is followed into production and checked, and a fix that doesn't hold comes back to the owner.
What
monitor pollmoves each incident with a fix through:deployobservation's commit has the merge commit as an ancestor. When no deploy since the merge names a commit this repo knows, the window startsdeploy_lag_minutes(15) after the merge, as "assumed deployed".verify_hours(24) or three times the fingerprint's usual gap in the kit's own hourly counts, whichever is longer, capped at 7 days. Resolution writes anoutcome: valence +1, or 0 and "unverified" when the incident was seen fewer than 3 times.last_seen, so an old event fetched late doesn't count. It writesfix-regressed(severity 3), reopens the incident, opens a problem on the decision, and asks the owner one question with no default: was it a wrong call, which they correct and the class drops to rung 1, or a sound call whose fix failed, which is a problem and changes no trust? The question recommends the second, and the kit never corrects.waitwakes on a regression. The next fix comes from a new decision.suspected-escaped-defecton that ticket at severity 1. The supervisor promotes it when the fix shows the cause. This runs at most 50 a poll, after the poll has printed whatwaitneeds;waitreads a killed poll's alerts.fix-unverified: merged a day past the lag with no deploy seen, and it says why: no deploy, deploys without commits, or a commit this repo doesn't have.probe-missed: an escaped defect, or a problem the owner opened about production, that no monitor saw in the 48h before.problem.verifygainsfrom,until,assumed,seen,unverifiedandregressed, and the supervisor may set it.Why
Tests
The incidents subtest goes on to:
Suite: everything passes except the tmux session test, which fails on main in this environment too.
Generated by Claude Code