feat: quorum enforcement for governed repos
Repos with governance.json at HEAD now require threshold-many approved reviews from declared quorum members before a proposal can merge.
- musehub_governance.py: load_governance reads governance.json from repo HEAD object store; check_quorum counts member fingerprint approvals - proposals.py merge route: loads governance then blocks with 403 when quorum not met - test_quorum_enforcement.py: 10 TDD tests covering load_governance, check_quorum, and the merge API hook; all green
sha256:83803f8369d519d0147dc9f955d47a4aa18c53589da50b774d0e2cfe13a0d92e
sha
+45
~1
symbols
sha256:7eab2d10015d2ee130ea9775726d0a69c4fe406c40f467cbfa1795043cab9e43
snapshot
+45
symbols added
~1
symbol modified
0
dead code introduced
Semantic Changes
46 symbols
+
test_check_quorum_2of3_partial_not_met
function
async_function test_check_quorum_2of3_partial_not_met L344–367
+
test_check_quorum_changes_requested_not_counted
function
async_function test_check_quorum_changes_requested_not_counted L318–340
+
test_check_quorum_member_approval_counts
function
async_function test_check_quorum_member_approval_counts L291–314
+
test_check_quorum_no_approvals_not_met
function
async_function test_check_quorum_no_approvals_not_met L243–261
+
test_check_quorum_nonmember_approval_not_counted
function
async_function test_check_quorum_nonmember_approval_not_counted L265–287
+
test_load_governance_returns_none_when_no_file
function
async_function test_load_governance_returns_none_when_no_file L144–156
+
test_load_governance_returns_parsed_json
function
async_function test_load_governance_returns_parsed_json L160–234
+
test_merge_allowed_when_quorum_met
function
async_function test_merge_allowed_when_quorum_met L410–457
+
test_merge_blocked_when_quorum_not_met
function
async_function test_merge_blocked_when_quorum_not_met L376–406
+
test_merge_unaffected_without_governance
function
async_function test_merge_unaffected_without_governance L461–488
0 comments
To add a comment, use the Muse CLI:
muse hub commit comment sha256:83803f8369d519d0147dc9f955d47a4aa18c53589da50b774d0e2cfe13a0d92e --body "your comment"
No comments yet. Be the first to start the discussion.