Gates and the acceptance list

How a run stops at a human gate; approve, send back or reject, what the next pass reruns, how the acceptance list is graded and edited, and how a conductor proposes it.

A human gate holds a run until the operator decides. The operator approves (which lands the work), sends it back with a reason, or rejects it. Review grades the run's acceptance list, and the operator can edit that list at the gate. File:line citations are in parentheses; "not checked" means the code was not read for that fact.

01the shipped gate#

The ticket template's gate is human_gate (internal/harness/ticket-completion.yaml:378-385) with this config:

key value
prompt approve this evidence-bearing ticket completion or redirect it
approve_label approve & land
approved_outlet approved, cord to land (yaml:495)
rejected_outlet revise, cord to work (yaml:494)
decision_field human_decision

The shipped gate sets none of the optional show, title or step keys. What each config key does is on nodes. Cords into the gate include second-off (yaml:486), second-gate and revise-human; a spent loop arrives with loop_exhausted (feedback loops).

02approve, send back and reject#

The statuses and journal events for these are gate.requested, gate.resolved and gate.rejected on runs. run_gates lists a run's pending gates with their payload and the decisions made. gate_summary gives one run's gate in about 2 KB: the prompt, accepted, needs_human, each acceptance item met or not, each check, the worker's doubts and the start of review_feedback.

03the acceptance list#

The planner returns review_acceptance_checks and operator_checks (yaml:105-150).

04scope edits#

At the gate the operator edits the list item by item as part of the decision.

action effect
keep the item stays; with as it is reworded
drop the item leaves the list
move the item goes to another ticket; a new ticket is filed in the run ticket's phase, an existing one gets a comment. Nothing is written until the operator presses
add the operator's own item joins the list
drop a batch ticket the ticket leaves the run whole and goes back to todo; at least one ticket stays

05can propose_send_back carry a scope edit#

No. propose_send_back takes the run, a why and a reason, and nothing else. Pressing its card sends the reason and an optional rebase only, and the desk decides the gate with the reason alone (DecideRunGate with no scope). The proposal press has no scope field for a gate (; its scope is only a permission card's "session").

A scope edit is taken from one place, the window's gate card route /api/desk/gate/decide (to), and only when the press source is the window. Discord and autopilot presses carry none.

No propose_ card or desk tool proposes a scope edit. A conductor can only say in words which items to keep, drop or move, so the operator makes the edit on the gate card.

06what the next pass reruns after a send back#

07when you're the conductor#