Repository navigation
feat: refuse system-wide partition writes while holds exist - #1941
Merged
Merged
Conversation
Owner
Author
|
verdict: approve Forge whole-branch reviewReview exit payloads
|
…tem-write-hold-fence-1887
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.
System-wide operations can currently change held partitions through their managed system. This change makes six tools—system modify, power on/off, system-profile activation, profile restore and firmware update—and their three existing CLI mirrors refuse with
system_heldwhenever the selected system has a local hold. Holders release every hold first; caller identity, a hold token and ownership override cannot waive the rule.A registry marker flows through the existing call context and managed-system resolver into the existing hold-store reader. Handoff coverage and consumer documentation reflect the six checked tools. ADR 0343 records the operator-approved refusal policy and supersedes only ADR 0327 Decision 5 for this set. No schema migration, command, public token parameter or dependency is added.
Validation: 104 focused tests and 467 bounded integration tests passed. A controlled resolver-check bypass failed at the mocked mutation boundary, then exact source was restored. The final candidate passed
just verify(one full local run, 1,319.100 seconds) and pinneduv run --no-sync prek run --all-files(114.862 seconds). CI will be checked separately before handoff. No live HMC run was performed.The two combined-design phases, both scope audits, whole-branch review and static security pass approved without findings. Simplification made no changes. The original 230–360-line estimate understated the required composed-call/selector tests; the measured 408-line implementation received a corrected 390–440 estimate and fresh review/audit under the unchanged scope.
This is resolver-time admission: a hold placed after admission does not cancel an in-flight operation. Rename-only modifications and validate-only profile calls are deliberately blocked while held. ADR 0193's library, other-host, GUI and raw-command exclusions remain; resource-only and new-partition creation tools outside the six-tool inventory remain outside this extension.
Provenance: issue #1887 and its frozen WORK:SCOPE, including the operator's explicit “Refuse while any system hold exists” decision. Implemented through the invoked campaign/quest workflow.
Closes #1887
Review exit payloads