feat(mcp): implement graceful maintenance-drain mode (Closes #659)
Add durable per-repo drain state, allocator assignment stop, mutation deferral with a safety allowlist, observable status, and capability-gated enter/exit tools. Drain proof/restart gate remain #661. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
@@ -397,6 +397,24 @@ TASK_CAPABILITY_MAP: dict[str, dict[str, str]] = {
|
||||
"role": "controller",
|
||||
},
|
||||
|
||||
# #659 maintenance drain. Same reasoning as the lifecycle controls above:
|
||||
# entering/exiting drain quiesces a whole namespace, so it carries a
|
||||
# non-``gitea.*`` permission that no configured Gitea profile satisfies by
|
||||
# accident (AC1 — capability-gated and audited). Reading drain state is
|
||||
# ordinary read authority: every session must be able to see the drain (AC4).
|
||||
"enter_maintenance_drain": {
|
||||
"permission": "runtime.maintenance_drain",
|
||||
"role": "controller",
|
||||
},
|
||||
"exit_maintenance_drain": {
|
||||
"permission": "runtime.maintenance_drain",
|
||||
"role": "controller",
|
||||
},
|
||||
"maintenance_drain_status": {
|
||||
"permission": "gitea.read",
|
||||
"role": "author",
|
||||
},
|
||||
|
||||
# #601 first-class lease lifecycle — inspect/list need read; mutations gate on
|
||||
# ownership in the control-plane DB (not a separate Gitea write permission).
|
||||
"list_workflow_leases": {
|
||||
|
||||
Reference in New Issue
Block a user