You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(merge-guard): bind privileged flags (--admin/-R/--no-verify) to the approval (#1042) (#1048)
* fix(merge-guard): add privileged-flag scanner + denylist to shared SSOT (#1042)
Add PRIVILEGED_FLAGS (op-class-scoped MUST-BIND denylist) and a linear extract_privileged_flags scanner, surfaced as a bound_flags key on extract_command_context (computed once; both hook arms inherit). Behaviour-neutral foundation for never-escalate flag binding.
* fix(merge-guard): enforce never-escalate flag set-equality in read gate (#1042)
_token_matches_command refuses when executed bound_flags differ from approved (added privilege or dropped constraint), checked after op-type and before target. Closes the --admin/-R/--no-verify ride-past bypass. Repairs 10 pre-existing tests that incidentally used now-bound flags; axis-under-test preserved.
* fix(merge-guard): scan full approval surface for bound flags at mint (#1042)
_mint_context_from_bundle widens the privileged-flag scan to the full selected-option text so a flag after a quoted argument is not lost to region truncation; op/target stay region-anchored. Restores read/mint scan symmetry.
* test(merge-guard): RED bypass matrix + non-vacuity for privileged-flag binding (#1042)
Add the privileged-flag bypass RED matrix (read-arm REFUSE for --admin / -R / --no-verify / git-abbreviation / combined-short clusters; positive AUTHORIZE form-invariance; scanner canonical-form pins; multiplicity-attribute), A1 mint-symmetry through the real mint seam, an extract_privileged_flags linearity witness, and restore non-vacuity to 5 PR-mismatch siblings. Per-mechanism non-vacuity measured by source-revert (C2 gate -> 22 RED, C3 mint -> 1 RED, is_git_surface mutation -> 9 RED). Full suite 9756 passed, 0 errors.
* chore(release): 4.4.44 — merge-guard privileged-flag binding (#1042)
* test(merge-guard): cover -R=value short =-joined + a CLOSE real-mint witness (#1042)
Review-cycle coverage hardening from the coverage-matrix pass: add the previously-uncovered -R=value short =-joined scanner branch (read-arm bypass + merge/close scanner pins + positive form-invariance) and a governed CLOSE -R real-mint witness (round-trip AUTHORIZE + redirect-add REFUSE), removing the op-agnostic-transfer dependency for the value-flag class on a second op-class.
* fix(merge-guard): bind --match-head-commit to close the dropped-constraint case (#1042)
Add --match-head-commit (value-taking) to the merge denylist. An approval carrying --match-head-commit <sha> that is then executed without it now REFUSES via set-equality on the bound flag, closing the silent head-SHA-constraint drop.
* test(merge-guard): dropped-constraint REFUSE coverage for --match-head-commit (#1042)
Add TestMatchHeadCommitDroppedConstraint: approve-with/execute-without REFUSE, added-direction REFUSE, value-mismatch REFUSE (proves the value binds), identical AUTHORIZE, plus spaced + =-joined scanner pins. Non-vacuity measured: a source-only revert of the denylist entry reds exactly 5 of these. The approval token is scanner-derived (not hand-built) so the refusal is provably coupled to the binding.
0 commit comments