Generated from cat-harness/processes/sdlc/merge-refusal.bpmn by gen-processes-viz.ts — do not edit here. All processes

A refused merge-train member

Process_MergeRefusal · strict · 10 step(s)

What a merge steward does with a PR it dropped from a merge train: its merge (merge-base.bpmn, run with --no-regen) refused an authored or undeclared conflict, or the train’s combined result failed a gate. Owner, 2026-10-02: “create a new bean (under appropriate epic/story…), hand it back to the sibling (use the agent-to-agent handoff process with a fail condition) for resolution, or dispatch an agent as appropriate.” Bean zacz; the discipline is in merge-conflict-patterns §”When a merge-train member is refused”.

ONE INSTANCE PER REFUSED PR, started with bean: set to the refusal bean. The steward finds or creates that bean BEFORE starting the instance, because creating a bean is the agent’s own beans create call, deduplicated by the PR number in its title; the engine has no create op (bean-lifecycle.bpmn). A second refusal of the same PR loops back into this instance rather than opening a second bean.

BPMN diagram: A refused merge-train member

How it connects

Lanes — who acts

lanerolewhat it does here
Merge stewardsession-coordinatorCoordinator and verifier of the hand-back: records, hands back, takes back when the fail condition fires, and closes. Never edits the bean’s instructions after the executor claims it; later facts go to the PR.
Owning sessionsibling-sessionThe session named in the PR’s Claude-Session: trailer. The executor of the hand-back: claims the refusal bean, fixes the PR, reports on the PR in the bean’s one-line formats.
Dispatched agentauthoring-agentONE agent with a modest budget, reached only when no live owner can be. May do what a declared pattern would have done; may NOT decide an authored conflict, which goes to the owner as a question.

Steps

2 of 10 step(s) carry no documentation — activity-documented lists them.

steplaneskill / sub-processwhat it does
Record the refusal on the bean
Task_Record
Merge stewardmerge-conflict-patternsThe PR, the head sha the train used, the train and its other members, each refused path or failing gate and why. A repeat refusal goes under ## Attempts with --body-append.
Comment on the PR once, linking the bean
Task_Comment
Merge stewardmerge-conflict-patternsOne comment per refused PR, edited in place on every later event.
Hand back, with a fail condition
Task_HandBack
Merge stewardmerge-conflict-patternsThe agent-handoff format (#1884): Roles, Report to (the PR), Done when, Fails if. The fail condition: no started line within 4 h, no push within 24 h, the session gone, or blocked on something it cannot settle. One line to the session; the instructions are in the bean.
Fix the PR, report on the PR
Task_Fix
Owning sessionprepare-mergeClaims the refusal bean, brings main in with merge:main, settles what it refused, pushes. Completed with the outcome fail condition by the steward when the condition fires first.
Dispatch one agent, recorded on the bean
Task_Dispatch
Merge stewarddispatch-agentBefore the agent starts: the date, why the fail condition fired, the agent’s id, its budget. Never while the first writer may still be live. Two failed attempts with the same cause go to the owner instead.
Merge main in, regenerate, fix mechanical gates
Task_AgentFix
Dispatched agentmerge-conflict-patternsMerge commits only; never a force-push.
Ask the owner on the PR, both sides quoted
Task_AskOwner
Dispatched agentinteraction-modality—
Re-enter a train on the new head
Task_Retrain
Merge stewardmerge-conflict-patternsThe next train is the verifier: the executor’s own log is evidence, not the close.
Close the bean, merge commit as evidence
Task_Close
Merge stewardbean-coordination—
Scrap the bean, with the reason
Task_Scrap
Merge stewardbean-coordinationThe agent’s own beans update --status scrapped; never deleted.

Decisions

2 of 4 decision(s) carry no documentation — gateway-documented lists them.

decisionwhat decides itbranches
Owning session live?
GW_Owner
no when the session is archived, failed, or unknown to get_session, or the PR names none.yes → Hand back, with a fail condition
no → Dispatch one agent, recorded on the bean
Fixed before the fail condition?
GW_FailCond
—yes → Re-enter a train on the new head
no → Dispatch one agent, recorded on the bean
Needs an authored choice?
GW_Authored
Two siblings editing one bean, one script changed differently on both sides, a budget exceeded only in combination: each is a choice between authors.yes → Ask the owner on the PR, both sides quoted
no → Re-enter a train on the new head
The PR’s fate?
GW_Fate
—landed → Close the bean, merge commit as evidence
refused again → Record the refusal on the bean
closed unmerged → Scrap the bean, with the reason

folio-assistant — code under the Apache License 2.0, documentation under CC BY 3.0. Generated schema and API references are rebuilt from source on every push to main.

deployed b08c961 · 2026-10-23T23:11:09Z