fix(mcp): enforce role capability invariants (Closes #723)
This commit is contained in:
@@ -242,6 +242,32 @@ class TestResolveTaskCapability(unittest.TestCase):
|
||||
self.assertTrue(res.get("stop_required"))
|
||||
self.assertIs(res.get("mutation_performed"), False)
|
||||
|
||||
@patch("mcp_server.api_request", return_value={"login": "author-user"})
|
||||
@patch("mcp_server.get_auth_header", return_value="token author-pass")
|
||||
def test_denied_role_exclusive_resolution_does_not_stamp_role(
|
||||
self, _auth, _api
|
||||
):
|
||||
with patch.dict(os.environ, self._env("author-profile")):
|
||||
with patch.object(
|
||||
mcp_server,
|
||||
"record_preflight_check",
|
||||
wraps=mcp_server.record_preflight_check,
|
||||
) as record:
|
||||
result = mcp_server.gitea_resolve_task_capability(
|
||||
task="review_pr", remote="prgs"
|
||||
)
|
||||
|
||||
self.assertFalse(result["allowed_in_current_session"], result)
|
||||
self.assertFalse(
|
||||
any(
|
||||
len(call.args) > 1 and call.args[1] == "reviewer"
|
||||
for call in record.call_args_list
|
||||
),
|
||||
"denied reviewer resolution must never record a reviewer stamp",
|
||||
)
|
||||
self.assertIsNone(mcp_server._preflight_resolved_role)
|
||||
self.assertIsNone(mcp_server._preflight_resolved_task)
|
||||
|
||||
# Additional regression tests per #145 for permission boundaries and structured guidance
|
||||
def test_issue_comment_does_not_imply_close(self):
|
||||
# Author profile has issue.comment but not issue.close
|
||||
|
||||
Reference in New Issue
Block a user