Repository navigation
Conversation
remediations (owner settings, governance-edit) name reviewed scripts under project/remediations/ with their params, access and undo. remediate <action> --decision <d-…> runs main's blob of one, once per decision, redacted and scrubbed, logs the act in production-remediation (start 1, ceiling 2, so the owner always sees one coming or it runs at its default) and observes what happened. A decision names exactly one remediation:<action>; an act in the class only comes from remediate. A rollback across a production-migration act since its target release is a one-way door: it needs the owner's own answer to a question with no default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T5z3hZtpGaQUGsTaAMQrAg
remediations (owner settings, governance-edit) name reviewed scripts under project/remediations/, each pinned by its blob sha, with params, access, undo and valid_minutes. A question and a decision in production-remediation name one remediation:<action> (and a rollback its release:<version>), and the answer must be the recommendation; a standing rule never covers the class and its default can't fire before its deadline. remediate <action> --decision <d-…> runs main's blob only if it is still the pinned one, once per decision (a lock while it runs), within valid_minutes of the answer, redacted and scrubbed, logs the act (start 1, ceiling 2) and observes what happened; a timeout says its effect is unknown and names the undo. A rollback across a production-migration act since its release went out needs the owner's own answer, not from chat, to a one-way-door question with no default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T5z3hZtpGaQUGsTaAMQrAg
observe refuses the kit's own detectors, so a deploy line can't be written by hand to dodge the rollback door. A remediation's default is its recommendation or nothing, and a defaulted answer counts only when it is. Asking follows Upkeep's hold, and a rollback is never asked about a release no monitor saw. The lock is taken once the script is about to run and released if it never started. Settings entries are validated up front. The pinned blob's exact bytes run. Output past 1 MB says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T5z3hZtpGaQUGsTaAMQrAg
…s decision to the question - remediate re-checks the question a decision rests on: an owner's answer or a default only (no standing rule, no rung), asked in production-remediation about this remediation and release, answered with its recommendation, or defaulted no sooner than its deadline; a decision line written by hand on the owner's no runs nothing - the script pin is the full 40-character blob id, compared exactly - a rollback's deploy counts only from the monitors' own lines - --deadline is for incident-fix and production-remediation 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>
Upstream loop: merged #111's update, adversarial review of this PR's diffI merged
What I checked. Remediate is the PR that acts on production, so I checked whether it can act beyond what the owner approved. Findings
Tests: the full |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Builds on #111 (merge that first). Monitoring, part 5 of 5: the one place monitoring writes to production. It makes reviewed remediations, on the ladder, with a rollback across a migration as a one-way door.
What
remediations. An owner setting,governance-edit. Each entry names a reviewed script underproject/remediations/, pinned by its blobsha, with its params, the access it uses (usesCLIs,credentials), itsundoandvalid_minutes(60).production-remediation, a ladder class: start 1, ceiling 2. No standing rule covers it, and its default can't fire before its deadline, so the owner always sees a remediation coming, or it runs at its default after an outage's--deadline 15m.The answer is bound to what it approves.
remediation:<action>; a rollback also namesrelease:<version>.deciderefuses an answer about another remediation or release, and an answer that isn't the recommendation.remediate.remediate <action> --decision <d-…> [--to <version>]:valid_minutesof the answerremediationorremediation-failedA writing script isn't killed for printing too much, and a timeout says its effect is unknown and names the undo.
A rollback across a
production-migrationact since its target release first went out (by a deploy a monitor's poll observed, at the deploy's own time) is a one-way door. It needs the owner's own answer, never from chat, to anask --kind one-way-doorwith no default.Docs. supervisor.md gets the steps, the constitution gets the class and its row, and quality.md gets the remediation script checklist.
Why
Tests
The remediation subtest covers:
--blocks, an answer about another action, a "no" answer, and--toon a restartSuite: everything passes except the tmux session test, which fails on main in this environment too.
Generated by Claude Code