Skip to content

feat(agents): govern implement with the mctl-api approvals backend - #2105

Merged
mashkovd merged 1 commit into
mainfrom
feat/policy-approvals-implement
Oct 23, 2026
Merged

mashkovd merged 1 commit into
mainfrom
feat/policy-approvals-implement

Conversation

@mashkovd

Copy link
Copy Markdown
Member

Draft: prod behaviour flip, waits for an explicit owner OK for this surface (mctlhq/.github#181 governance tails).

Refs #1980. Image on the surface: mctl-agents 1.95.0 >= min_approvals_version 1.86.1.

Rollback: revert this PR (the surface returns to NO_APPROVALS, fail closed) and mark the manifest entry governed: false, boundary: bypass-open with a tracked_by.

Verification after merge: one live run of the surface; POLICY_DECISION lines name the mctl-api backend and no legitimate run is refused.

What changes: the implementer's model session has mcp__mctl__* tools; a non-read one now creates or redeems a durable approval in mctl-api instead of being blocked outright. Its own GitHub actions (push, PR create) are ALLOW rules and do not change. No implementer prompt directs the model to a governed mctl tool today, so no run is expected to hit it.

🤖 Generated with Claude Code

Sets MCTL_POLICY_APPROVALS=mctl-api on the implement template and drops
its rollout: staged marker, as investigate did. A non-read mcp__mctl__*
call from the implementer then creates or redeems a durable approval in
mctl-api instead of being blocked outright.

Refs #1980
@mashkovd
mashkovd marked this pull request as ready for review October 23, 2026 22:21
@claude

claude Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Claude finished @mashkovd's task in 16s —— View job


Review of #2105

  • Read the diff and surrounding context

Verdict: approved, 0 P1 / 0 P2 / 0 P3.

  • MCTL_POLICY_APPROVALS: mctl-api is a literal, as the coverage manifest requires. It is in the run-implementer main container's env, next to MCTL_TOKEN, which it uses to authenticate.
  • It matches the existing investigate surface (cwft-mctl-agents-investigate.yaml:865).
  • Removing rollout: staged from the implement entry in policy-checkpoint-coverage.yaml is consistent with the env change.
  • Rollback is fail-closed, as the PR body describes.
  • I did not run any checks (static review only).
  • The PR is marked as waiting on an explicit owner OK for this surface. Please get that before merging.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No P1/P2 findings (0 P3). Env literal sits in run-implementer main container, mirrors investigate, and the manifest rollout: staged marker is dropped consistently. Merge waits on the owner OK stated in the PR body.

@github-actions

Copy link
Copy Markdown
Contributor

Antigravity (agy) review — informational

Model: gemini-3.8-flash-high · commit 948d5de.

No significant issues found.

@mashkovd

Copy link
Copy Markdown
Member Author

Owner OK given on 2026-10-24 for all five staged-surface PRs (#2105 implement, #2106 run, #2107 shepherd, #2108 worker-control; #2109 keeps reconcile non-governed). Merging one at a time; each governed surface is then checked on a live run for POLICY_DECISION lines with the mctl-api backend, and rolled back if it breaks.

@mashkovd
mashkovd merged commit 8612f05 into main Oct 23, 2026
34 checks passed
@mashkovd
mashkovd deleted the feat/policy-approvals-implement branch October 23, 2026 22:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant