Clarify and enforce reviewer-vs-merger role boundaries (#483) #486

Merged
sysadmin merged 9 commits from feat/issue-483-role-boundaries into master 2026-07-09 08:09:47 -05:00
Owner

Closes #483

Policy Enforcement Verification Proof

As part of Issue #483, reviewer-only profiles and merger-capable profiles have been strictly separated. Below are the execution proofs showing that merge authorization is blocked for reviewer-only profiles and allowed for merger profiles:

  • Reviewer Profile (prgs-reviewer) + merge_pr -> Denied

    • Eligibility check:
      gitea_check_pr_eligibility(pr_number=8, action='merge') -> eligible: False
      Reason: Reviewer profile cannot merge. Use a merger profile/session after formal approval at current head.
    • Mutation attempt:
      gitea_merge_pr(pr_number=8, ...) -> Raises RuntimeError: Reviewer profile cannot merge. Use a merger profile/session after formal approval at current head.
  • Merger Profile (prgs-merger) + merge_pr -> Allowed

    • Eligibility check:
      gitea_check_pr_eligibility(pr_number=8, action='merge') passes permission check (missing_permission: None).

Verification & Validation Proof

  • All changed Python source files successfully compile without syntax errors.
  • The full project test suite was executed:
    • Result: 1737 passed, 6 skipped, 1 warning, 33 subtests passed in 14.70s
    • Targeted Validator Tests: 35 passed, 3 subtests passed
    • Targeted MCP Server / Merge Tests: 8 passed
    • Targeted Operator Guide Tests: 25 passed
    • Targeted Task Capability Tests: 21 passed
    • Targeted Runtime Clarity Tests: 10 passed

No PR merge was performed during this session.

Closes #483 ### Policy Enforcement Verification Proof As part of Issue #483, reviewer-only profiles and merger-capable profiles have been strictly separated. Below are the execution proofs showing that merge authorization is blocked for reviewer-only profiles and allowed for merger profiles: - **Reviewer Profile (`prgs-reviewer`) + `merge_pr` -> Denied** - **Eligibility check**: `gitea_check_pr_eligibility(pr_number=8, action='merge')` -> `eligible: False` Reason: `Reviewer profile cannot merge. Use a merger profile/session after formal approval at current head.` - **Mutation attempt**: `gitea_merge_pr(pr_number=8, ...)` -> Raises `RuntimeError: Reviewer profile cannot merge. Use a merger profile/session after formal approval at current head.` - **Merger Profile (`prgs-merger`) + `merge_pr` -> Allowed** - **Eligibility check**: `gitea_check_pr_eligibility(pr_number=8, action='merge')` passes permission check (`missing_permission: None`). ### Verification & Validation Proof - All changed Python source files successfully compile without syntax errors. - The full project test suite was executed: - **Result**: `1737 passed, 6 skipped, 1 warning, 33 subtests passed in 14.70s` - **Targeted Validator Tests**: `35 passed, 3 subtests passed` - **Targeted MCP Server / Merge Tests**: `8 passed` - **Targeted Operator Guide Tests**: `25 passed` - **Targeted Task Capability Tests**: `21 passed` - **Targeted Runtime Clarity Tests**: `10 passed` No PR merge was performed during this session.
jcwalker3 added 1 commit 2026-07-08 01:13:34 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #486
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 98052-58b8ece749d8
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr486
phase: claimed
candidate_head: a863928661
target_branch: master
target_branch_sha: none
last_activity: 2026-07-08T06:17:07Z
expires_at: 2026-07-08T08:17:07Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #486 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 98052-58b8ece749d8 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr486 phase: claimed candidate_head: a863928661e3d83d450e5e9c57519feeb3e78f0f target_branch: master target_branch_sha: none last_activity: 2026-07-08T06:17:07Z expires_at: 2026-07-08T08:17:07Z blocker: none
sysadmin requested changes 2026-07-08 01:17:15 -05:00
Dismissed
sysadmin left a comment
Owner

PR #486 Review Findings (REQUEST_CHANGES)

We successfully verified the implementation of Issue #483 in the isolated worktree:

  • Safety Gates: All expected head SHA, approval requirements, mergeability, issue locking, and root checkout guards are preserved.
  • Testing: Compiled all modified python files and ran the test suite: 1737 passed, 6 skipped, 1 warning, 33 subtests passed.
  • Policy Enforcement: Verified that prgs-reviewer profile is blocked from merging, and dedicated prgs-merger and mdcps-merger profiles function correctly.

Blocker / Required Change:
The repository-owned gitea-mcp.v2-contexts.example.json file has not been updated to align with the new reviewer-vs-merger role-boundary policy. It still configures the reviewer profile (example-reviewer) with the "merge" allowed operation and does not define an example-merger profile or a default_merger_profile mapping.

Please update gitea-mcp.v2-contexts.example.json to match the new role boundary policy so that the deployment is self-contained and reproducible.

### PR #486 Review Findings (REQUEST_CHANGES) We successfully verified the implementation of Issue #483 in the isolated worktree: - **Safety Gates**: All expected head SHA, approval requirements, mergeability, issue locking, and root checkout guards are preserved. - **Testing**: Compiled all modified python files and ran the test suite: `1737 passed, 6 skipped, 1 warning, 33 subtests passed`. - **Policy Enforcement**: Verified that `prgs-reviewer` profile is blocked from merging, and dedicated `prgs-merger` and `mdcps-merger` profiles function correctly. **Blocker / Required Change**: The repository-owned `gitea-mcp.v2-contexts.example.json` file has not been updated to align with the new reviewer-vs-merger role-boundary policy. It still configures the reviewer profile (`example-reviewer`) with the `"merge"` allowed operation and does not define an `example-merger` profile or a `default_merger_profile` mapping. Please update `gitea-mcp.v2-contexts.example.json` to match the new role boundary policy so that the deployment is self-contained and reproducible.
jcwalker3 added 1 commit 2026-07-08 01:19:44 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #486
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 98052-58b8ece749d8
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr486
phase: claimed
candidate_head: 76d1417c28
target_branch: master
target_branch_sha: none
last_activity: 2026-07-08T06:21:06Z
expires_at: 2026-07-08T08:21:06Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #486 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 98052-58b8ece749d8 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr486 phase: claimed candidate_head: 76d1417c284172621e42a3bbdf54e319d8a5a6a1 target_branch: master target_branch_sha: none last_activity: 2026-07-08T06:21:06Z expires_at: 2026-07-08T08:21:06Z blocker: none
sysadmin approved these changes 2026-07-08 01:21:14 -05:00
Dismissed
sysadmin left a comment
Owner

PR #486 Review Findings (APPROVE)

The author has successfully resolved the example configuration blocker at the head commit 76d1417c284172621e42a3bbdf54e319d8a5a6a1:

  • Example config: gitea-mcp.v2-contexts.example.json has been updated to remove merge from example-reviewer allowed operations, define example-merger with merge permission, and configure the default merger profile mapping for the project.
  • Documentation: Updated execution profiles, dual-namespace deployment documentation, and the operator wiki.
  • Testing: Added unit test test_repo_example_file_reviewer_vs_merger_boundaries in tests/test_config_v2_contexts.py to ensure that example configuration files are strictly verified for reviewer-vs-merger boundaries.
  • Safety Gates & Purity: All tests pass (1738 passed), and safety gates (expected head SHA, Gitea mergeability, lease checks, etc.) remain intact.

No local config dependency or config drift remains. The implementation is fully self-contained. APPROVED.

### PR #486 Review Findings (APPROVE) The author has successfully resolved the example configuration blocker at the head commit `76d1417c284172621e42a3bbdf54e319d8a5a6a1`: - **Example config**: `gitea-mcp.v2-contexts.example.json` has been updated to remove `merge` from `example-reviewer` allowed operations, define `example-merger` with `merge` permission, and configure the default merger profile mapping for the project. - **Documentation**: Updated execution profiles, dual-namespace deployment documentation, and the operator wiki. - **Testing**: Added unit test `test_repo_example_file_reviewer_vs_merger_boundaries` in `tests/test_config_v2_contexts.py` to ensure that example configuration files are strictly verified for reviewer-vs-merger boundaries. - **Safety Gates & Purity**: All tests pass (`1738 passed`), and safety gates (expected head SHA, Gitea mergeability, lease checks, etc.) remain intact. No local config dependency or config drift remains. The implementation is fully self-contained. APPROVED.
jcwalker3 added 1 commit 2026-07-08 02:59:19 -05:00
Merge prgs/master and preserve reviewer/reconciler/merger branches-only
exemption (#483) with reconciler close_pr guard context from #468.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
jcwalker3 added 1 commit 2026-07-08 03:08:54 -05:00
Merge prgs/master; preserve reviewer-merge block (#483) with explicit
merge_pr preflight task binding.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
jcwalker3 added 1 commit 2026-07-08 10:10:18 -05:00
Merge prgs/master into feat/issue-483-role-boundaries and preserve PR intent
alongside compatible master guardrails.
Author
Owner

pr: #486
branch: feat/issue-483-role-boundaries
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries
profile: prgs-author
session_id: unknown
phase: claimed
head_before: 3b4f222a7d
expires_at: 2026-07-09T04:30:43Z
reviewer_active: no

<!-- mcp-conflict-fix-lease:v1 --> pr: #486 branch: feat/issue-483-role-boundaries worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries profile: prgs-author session_id: unknown phase: claimed head_before: 3b4f222a7dfdd755435a2efb80b522f6c402e15e expires_at: 2026-07-09T04:30:43Z reviewer_active: no
jcwalker3 added 1 commit 2026-07-08 21:32:22 -05:00
Merge prgs/master into PR branch to restore mergeability.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Author
Owner

pr: #486
branch: feat/issue-483-role-boundaries
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries
profile: prgs-author
session_id: conflict-fix-release-batch
phase: released
head_before: 3b4f222a7d
expires_at: 2026-07-09T02:50:00Z
reviewer_active: no
blocker: post-push-release

<!-- mcp-conflict-fix-lease:v1 --> pr: #486 branch: feat/issue-483-role-boundaries worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries profile: prgs-author session_id: conflict-fix-release-batch phase: released head_before: 3b4f222a7dfdd755435a2efb80b522f6c402e15e expires_at: 2026-07-09T02:50:00Z reviewer_active: no blocker: post-push-release
sysadmin added 1 commit 2026-07-08 21:51:41 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #486
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 94309-45f3c41b9a83
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr486-reapprove-live
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-09T02:54:44Z
expires_at: 2026-07-09T04:54:44Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #486 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 94309-45f3c41b9a83 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr486-reapprove-live phase: claimed candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-09T02:54:44Z expires_at: 2026-07-09T04:54:44Z blocker: none
jcwalker3 added 1 commit 2026-07-09 07:13:06 -05:00
Keep reviewer-vs-merger role boundary wording and master's #533
pre-merge baseline proof section in review-pr template.
Author
Owner

Author conflict resolution (issue #483 / PR #486)

Merged current master into feat/issue-483-role-boundaries and pushed bc16f66.

Head

  • old: 32f1f3486f9424c795a56ba12e3e21d99fcd58b0
  • new: bc16f6652b02539183acddffefb2d5de69dd89dc

Conflict resolution

  • File: skills/llm-project-workflow/templates/review-pr.md
  • Kept PR role-boundary wording: reviewer approval is not merge authorization
  • Kept master #533 pre-merge baseline proof section
  • Step 10 also retains the role-boundary line from this PR

Validation

python3 -m pytest tests/ -k "role_bound or role_boundary or reviewer_vs_merger or review_pr_template" -q
# 4 passed

Ready for re-pin + review at head bc16f66.

## Author conflict resolution (issue #483 / PR #486) Merged current `master` into `feat/issue-483-role-boundaries` and pushed `bc16f66`. ### Head - old: `32f1f3486f9424c795a56ba12e3e21d99fcd58b0` - new: `bc16f6652b02539183acddffefb2d5de69dd89dc` ### Conflict resolution - File: `skills/llm-project-workflow/templates/review-pr.md` - Kept PR role-boundary wording: reviewer approval is not merge authorization - Kept master `#533` pre-merge baseline proof section - Step 10 also retains the role-boundary line from this PR ### Validation ``` python3 -m pytest tests/ -k "role_bound or role_boundary or reviewer_vs_merger or review_pr_template" -q # 4 passed ``` Ready for re-pin + review at head `bc16f66`.
jcwalker3 added 1 commit 2026-07-09 07:35:33 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #486
issue: #483
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 26689-f39d274d1cef
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries
phase: claimed
candidate_head: ce0fb42bef
target_branch: master
target_branch_sha: none
last_activity: 2026-07-09T13:08:06Z
expires_at: 2026-07-09T15:08:06Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #486 issue: #483 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 26689-f39d274d1cef worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries phase: claimed candidate_head: ce0fb42befbe726143bd76be32a90f5684ad135b target_branch: master target_branch_sha: none last_activity: 2026-07-09T13:08:06Z expires_at: 2026-07-09T15:08:06Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #486
issue: #483
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 26689-f39d274d1cef
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries
phase: claimed
candidate_head: ce0fb42bef
target_branch: master
target_branch_sha: none
last_activity: 2026-07-09T13:08:53Z
expires_at: 2026-07-09T15:08:53Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #486 issue: #483 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 26689-f39d274d1cef worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries phase: claimed candidate_head: ce0fb42befbe726143bd76be32a90f5684ad135b target_branch: master target_branch_sha: none last_activity: 2026-07-09T13:08:53Z expires_at: 2026-07-09T15:08:53Z blocker: none
sysadmin approved these changes 2026-07-09 08:09:08 -05:00
sysadmin left a comment
Owner

APPROVE PR #486 (Closes #483)

Head: ce0fb42befbe726143bd76be32a90f5684ad135b
Reviewer: sysadmin / prgs-reviewer
Author: jcwalker3 (not self-review)

Scope

  • Separate reviewer vs merger roles (merge_pr → merger)
  • Reviewer-only profiles hard-blocked from merge
  • Config/docs/tests aligned

Validation

pytest targeted suites: 22 TestMergePR passed; broader suite green after clearing durable lock pollution.

Canonical PR State

STATE: approved at current head; ready for merger
WHO_IS_NEXT: merger
NEXT_ACTION: adopt reviewer lease and merge PR #486 with prgs-merger after formal approval at pinned head
NEXT_PROMPT:

Use prgs-merger on remote=prgs. Adopt lease for PR #486 at expected_head_sha=ce0fb42befbe726143bd76be32a90f5684ad135b and merge with confirmation MERGE PR 486.

WHAT_HAPPENED: Reviewed role-boundary changes for #483; scope clean; tests pass
WHY: Enforces reviewer-vs-merger separation already used in profiles
ISSUE: #483
HEAD_SHA: ce0fb42bef
REVIEW_STATUS: APPROVED
MERGE_READY: yes
BLOCKERS: none
VALIDATION: pytest TestMergePR 22 passed; targeted role/capability tests passed
LAST_UPDATED_BY: sysadmin / prgs-reviewer

## APPROVE PR #486 (Closes #483) **Head:** `ce0fb42befbe726143bd76be32a90f5684ad135b` **Reviewer:** sysadmin / prgs-reviewer **Author:** jcwalker3 (not self-review) ### Scope - Separate reviewer vs merger roles (`merge_pr` → merger) - Reviewer-only profiles hard-blocked from merge - Config/docs/tests aligned ### Validation pytest targeted suites: 22 TestMergePR passed; broader suite green after clearing durable lock pollution. ## Canonical PR State STATE: approved at current head; ready for merger WHO_IS_NEXT: merger NEXT_ACTION: adopt reviewer lease and merge PR #486 with prgs-merger after formal approval at pinned head NEXT_PROMPT: ```text Use prgs-merger on remote=prgs. Adopt lease for PR #486 at expected_head_sha=ce0fb42befbe726143bd76be32a90f5684ad135b and merge with confirmation MERGE PR 486. ``` WHAT_HAPPENED: Reviewed role-boundary changes for #483; scope clean; tests pass WHY: Enforces reviewer-vs-merger separation already used in profiles ISSUE: #483 HEAD_SHA: ce0fb42befbe726143bd76be32a90f5684ad135b REVIEW_STATUS: APPROVED MERGE_READY: yes BLOCKERS: none VALIDATION: pytest TestMergePR 22 passed; targeted role/capability tests passed LAST_UPDATED_BY: sysadmin / prgs-reviewer
Owner

adopted_at: 2026-07-09T13:09:31Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 26689-f39d274d1cef
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 7954
adoption_reason: merger-handoff-approved-head

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #486
issue: #483
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 28608-db7094552ca7
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries
phase: adopted
candidate_head: ce0fb42bef
target_branch: master
target_branch_sha: none
last_activity: 2026-07-09T13:09:31Z
expires_at: 2026-07-09T15:09:31Z
blocker: none

<!-- mcp-review-lease-adoption:v1 --> adopted_at: 2026-07-09T13:09:31Z adopted_by_identity: sysadmin adopted_by_profile: prgs-merger adopted_from_session_id: 26689-f39d274d1cef adopted_from_profile: prgs-reviewer adopted_from_reviewer_identity: sysadmin adopted_from_comment_id: 7954 adoption_reason: merger-handoff-approved-head <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #486 issue: #483 reviewer_identity: sysadmin profile: prgs-merger session_id: 28608-db7094552ca7 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/issue-483-role-boundaries phase: adopted candidate_head: ce0fb42befbe726143bd76be32a90f5684ad135b target_branch: master target_branch_sha: none last_activity: 2026-07-09T13:09:31Z expires_at: 2026-07-09T15:09:31Z blocker: none
sysadmin merged commit b52fa2060f into master 2026-07-09 08:09:47 -05:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Scaled-Tech-Consulting/Gitea-Tools#486