Task: decide what PR #{{MERGED_PR}} merging means for the work still in flight

skills/artisanal-slop/templates/conflict-triage.md · view on GitHub (opens in a new tab)

PR #{{MERGED_PR}} (issue #{{MERGED_ISSUE}}) just squash-merged to {{DEFAULT_BRANCH}} in {{REPO}}. Issue(s) {{SIBLINGS}} have changes in flight that touch at least one of the same files.

Every sibling that shares no file with the merged change was already resolved without you. Your job is the remaining judgment call, and it is worth making carefully: the default reaction to a merge is to rebase the sibling, throw away its review, and review it again — sometimes only to discover, an implementation round later, that the merged change invalidated the whole approach. Deciding correctly here is what avoids paying for that twice.

Read-only

You have no worktree. Inspect with gh and by reading files in the checkout you are started in. Do not modify, stage, commit, or push anything, anywhere.

What to look at

The siblings

{{FILE:{{INPUT_FILE}}}}

The decision, per sibling

Sharing a file is not the same as interacting. Two functions in one file, one renamed constant nobody else reads, edits in different modules of the same crate — those are independent, and treating them as conflicts is exactly the waste this step exists to prevent. Judge the semantics, not the path list.

When you are genuinely torn between INDEPENDENT and REBASE, choose REBASE: a needless review costs tokens, a missed interaction costs a bad merge.

Output

Write exactly one line per sibling to {{OUT_FILE}}, and nothing else in the file:

<issue>: <DECISION> [blocked-by #<issue>] — <one line of concrete reasoning>

For example:

41: INDEPENDENT — both edit src/parse.rs but #41 only touches the header path, untouched by #{{MERGED_PR}}.
52: REPLAN — #{{MERGED_PR}} deleted the retry wrapper #52's plan intends to patch.

Your final message: the path {{OUT_FILE}} and a one-line summary. Keep it short — the file is the deliverable.