fix: authoritative cross-role generic queue allocation (Closes #840)
Add controller-owned cross_role allocation mode that inspects the full queue and returns one selection with required role/profile/action and lease evidence. Document process_work_queue routing, normalize controller role metadata, and keep the dashboard explanatory only. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
@@ -81,6 +81,12 @@ AUTHOR_TASKS = frozenset({
|
||||
"reconcile_landed_pr",
|
||||
})
|
||||
|
||||
CONTROLLER_TASKS = frozenset({
|
||||
"process_work_queue",
|
||||
"process-work-queue",
|
||||
"cross_role_allocate",
|
||||
})
|
||||
|
||||
RECONCILER_TASKS = frozenset({
|
||||
"cleanup_merged_pr_branch",
|
||||
# #729: delete_branch is reconciler-owned (gitea.branch.delete is granted
|
||||
@@ -132,6 +138,10 @@ TASK_REQUIRED_ROLE = {
|
||||
"reconcile_close_superseded_pr": "reconciler",
|
||||
"reconcile_close_satisfied_issue": "reconciler",
|
||||
"reconcile_create_followup_issue": "reconciler",
|
||||
# #840: controller-owned generic queue allocation / routing.
|
||||
"process_work_queue": "controller",
|
||||
"process-work-queue": "controller",
|
||||
"cross_role_allocate": "controller",
|
||||
}
|
||||
|
||||
WRONG_ROLE_REVIEWER_MSG = (
|
||||
@@ -147,6 +157,10 @@ WRONG_ROLE_MERGER_MSG = (
|
||||
"Wrong role/session for merger task. Launch merger MCP namespace."
|
||||
)
|
||||
|
||||
WRONG_ROLE_CONTROLLER_MSG = (
|
||||
"Wrong role/session for controller task. Launch controller MCP namespace."
|
||||
)
|
||||
|
||||
_session_last_route: dict | None = None
|
||||
|
||||
|
||||
@@ -281,6 +295,27 @@ def route_task_session(
|
||||
_record_route(result)
|
||||
return result
|
||||
|
||||
if required_role == "controller":
|
||||
result = {
|
||||
"task_type": task_type,
|
||||
"required_role": required_role,
|
||||
"active_role": active_role_kind,
|
||||
"active_profile": active_profile,
|
||||
"route_result": ROUTE_WRONG_ROLE,
|
||||
"downstream_allowed": False,
|
||||
"reasons": [
|
||||
WRONG_ROLE_CONTROLLER_MSG,
|
||||
"Controller tasks (process_work_queue / cross-role allocate) "
|
||||
"cannot run in author, reviewer, merger, or reconciler "
|
||||
"worker sessions.",
|
||||
],
|
||||
"message": WRONG_ROLE_CONTROLLER_MSG,
|
||||
"runtime_switching_supported": runtime_switching_supported,
|
||||
"profile_switch_blocked": not runtime_switching_supported,
|
||||
}
|
||||
_record_route(result)
|
||||
return result
|
||||
|
||||
if required_role == "author":
|
||||
route = ROUTE_TO_AUTHOR
|
||||
message = (
|
||||
|
||||
Reference in New Issue
Block a user