The tpm charter grants merge but not close or revert, so the seat that owns the review gate can only ever say yes #321

Open
opened 2026-08-22 22:14:02 +00:00 by coilyco-ops · 0 comments
Member

Requested by Kai on 2026-08-22.

The gap

Directors exercise PR merge. They should also exercise PR close and PR revert. Right now the charter and the lane vocabulary describe merge as the only outcome a review gate can produce.

A gate with one exit is not a gate. Reviewing a pull request has three honest outcomes:

  • merge - the work is good, land it
  • close - the work should not land at all: superseded, wrong approach, obsolete, or the branch is empty
  • revert - the work landed and turned out to be wrong, so undo it on main

Granting only the first means a seat that judges a change unfit has no charter-sanctioned action to take. In practice that leaves the pull request open indefinitely, which is exactly the litter the pull-request-and-merge lane exists to prevent - it just relocates the litter from "pushed branch with no PR" to "open PR nobody will merge or close."

This lands on tpm, not director

Kai's guess was right. agent-compose@12c7198 landed the v3 Core Roster reflow and director and exec merge into tpm. Cross-repo detail in coilyco-flight-deck/agentic-os#1176, design in #317.

Two consequences make this issue sharper than it looks:

  1. qa is cut and its code review moved into tpm as a gate decision. So tpm is now the seat that reviews code and the seat that lands it. A reviewer who can only approve is a rubber stamp by construction, and this is the seat where that matters most.
  2. exec is folding in too, which means whatever this charter says about reversibility and decision authority inherits from both predecessors and should be reconciled rather than concatenated - the same reconciliation agentic-os#1176 flags for the two composed-skill allowlists.

Write this against tpm. Do not add it to role-director, which is on its way out.

#286 - "Director defers no execution boundary, so a competent seat quietly absorbs execution." That issue is about a seat taking on work it should hand off. This one is the mirror image: a seat that cannot take an action it should own, and so lets the decision rot instead. Worth resolving together, because both are answered by stating the seat's action surface explicitly rather than leaving it implied.

#312 (closed) recorded the earlier boundary mess where director and then exec were writing and shipping. The fix here must not re-open that: close and revert are decisions about other people's work, not licence to author it.

What close and revert are not

Guard against the obvious over-read:

  • Close is not a way to avoid reviewing. It is a judgment that the change should not land, and it carries the same obligation to say why as a merge carries to say it is green.
  • Revert is not a rollback button for anything that looks wrong. It is for a landed change that is causing harm, where undoing is safer than fixing forward. That judgment is the seat's to make; the bar should be stated.
  • Neither is licence to touch another seat's in-progress work. A PR still open and being worked is not a close candidate.

Asymmetry worth encoding

Close is cheap and reversible. aosguard ops forgejo pr close is a state flip with pr reopen as its exact inverse, and the verb's own documentation says a wrong close is not a wall.

Revert is neither. Reverting a merged PR is a new commit on main - it mutates the shared branch, and Forgejo exposes no revert API, so it is a git operation plus a follow-up pull request rather than a single call. The charter should reflect that these two sit at different levels of consequence rather than listing them as a pair.

The tooling half of this - whether pr revert becomes a composite verb, and how the lane slugs describe the wider action surface - is filed separately at coilyco-flight-deck/agentic-os and cross-linked below.

Acceptance

  1. The tpm role body states that the seat owns merge, close, and revert on pull requests, with the reversibility asymmetry made explicit.
  2. The bar for each is stated in one line, so the seat is not left inferring when close beats leaving-open and when revert beats fixing forward.
  3. The #312 boundary holds: these are decisions about work the seat did not author, and none of them grant authoring rights.
  4. Reconciled against the merged director and exec bodies rather than appended to either.
  5. Cross-checked against #286 so the two are answered consistently instead of contradicting.

Not in scope

The AOSguard verb surface, the workflow lane slugs, and whether a pr revert verb should exist. Those are agentic-os' and are filed there.

Requested by Kai on 2026-08-22. ## The gap Directors exercise **PR merge**. They should also exercise **PR close** and **PR revert**. Right now the charter and the lane vocabulary describe merge as the only outcome a review gate can produce. A gate with one exit is not a gate. Reviewing a pull request has three honest outcomes: * **merge** - the work is good, land it * **close** - the work should not land at all: superseded, wrong approach, obsolete, or the branch is empty * **revert** - the work landed and turned out to be wrong, so undo it on `main` Granting only the first means a seat that judges a change unfit has no charter-sanctioned action to take. In practice that leaves the pull request open indefinitely, which is exactly the litter the `pull-request-and-merge` lane exists to prevent - it just relocates the litter from "pushed branch with no PR" to "open PR nobody will merge or close." ## This lands on `tpm`, not `director` Kai's guess was right. `agent-compose@12c7198` landed the v3 Core Roster reflow and **`director` and `exec` merge into `tpm`**. Cross-repo detail in `coilyco-flight-deck/agentic-os#1176`, design in #317. Two consequences make this issue sharper than it looks: 1. **`qa` is cut and its code review moved into `tpm`** as a gate decision. So `tpm` is now the seat that reviews code *and* the seat that lands it. A reviewer who can only approve is a rubber stamp by construction, and this is the seat where that matters most. 2. **`exec` is folding in too**, which means whatever this charter says about reversibility and decision authority inherits from both predecessors and should be reconciled rather than concatenated - the same reconciliation `agentic-os#1176` flags for the two composed-skill allowlists. Write this against `tpm`. Do not add it to `role-director`, which is on its way out. ## Related, and probably the same conversation **#286 - "Director defers no execution boundary, so a competent seat quietly absorbs execution."** That issue is about a seat taking on work it should hand off. This one is the mirror image: a seat that cannot take an action it should own, and so lets the decision rot instead. Worth resolving together, because both are answered by stating the seat's action surface explicitly rather than leaving it implied. **#312** (closed) recorded the earlier boundary mess where director and then exec were writing and shipping. The fix here must not re-open that: **close and revert are decisions about other people's work, not licence to author it.** ## What close and revert are not Guard against the obvious over-read: * **Close is not a way to avoid reviewing.** It is a judgment that the change should not land, and it carries the same obligation to say why as a merge carries to say it is green. * **Revert is not a rollback button for anything that looks wrong.** It is for a landed change that is causing harm, where undoing is safer than fixing forward. That judgment is the seat's to make; the bar should be stated. * **Neither is licence to touch another seat's in-progress work.** A PR still open and being worked is not a close candidate. ## Asymmetry worth encoding **Close is cheap and reversible.** `aosguard ops forgejo pr close` is a state flip with `pr reopen` as its exact inverse, and the verb's own documentation says a wrong close is not a wall. **Revert is neither.** Reverting a merged PR is a new commit on `main` - it mutates the shared branch, and Forgejo exposes no revert API, so it is a git operation plus a follow-up pull request rather than a single call. The charter should reflect that these two sit at different levels of consequence rather than listing them as a pair. The tooling half of this - whether `pr revert` becomes a composite verb, and how the lane slugs describe the wider action surface - is filed separately at `coilyco-flight-deck/agentic-os` and cross-linked below. ## Acceptance 1. The `tpm` role body states that the seat owns **merge, close, and revert** on pull requests, with the reversibility asymmetry made explicit. 2. The bar for each is stated in one line, so the seat is not left inferring when close beats leaving-open and when revert beats fixing forward. 3. The `#312` boundary holds: these are decisions about work the seat did not author, and none of them grant authoring rights. 4. Reconciled against the merged `director` and `exec` bodies rather than appended to either. 5. Cross-checked against #286 so the two are answered consistently instead of contradicting. ## Not in scope The AOSguard verb surface, the workflow lane slugs, and whether a `pr revert` verb should exist. Those are `agentic-os`' and are filed there.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose#321
No description provided.