Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 38 additions & 4 deletions .agents/routines/triage-prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,17 @@ narrate it. Flag only for genuine ambiguity or breaking changes.
experts disagreed. Synthesis + ask for `@bokelley`.
3. **Execute PR** — experts agree, change is **non-breaking**.
Draft PR. No scope cap, no classification gate, no author gate.
4. **Defer** — post-cycle / blocked — label-only (short ack for
NONE / FIRST_TIME authors)
4. **Defer** — three flavors:
- **Out of cycle (no blocker).** Silent for MEMBER+; ack for
NONE / FIRST_TIME_CONTRIBUTOR.
- **Blocked on open PR/issue.** Always post `Blocked-on: #N —
resurfaces on merge`, any author tier — the comment is the
audit trail and the resurfacing trigger.
- **Fold candidate.** Same as Blocked-on, plus also comment on
the parent PR suggesting scope be folded before merge (only
when parent is same-author / active contributor, still
iterating, and overlaps file scope). Skip if parent is
approved/awaiting-merge.

**When in doubt: Execute.** Draft PRs are reversible; unshipped
good changes rarely get revisited.
Expand Down Expand Up @@ -89,8 +98,17 @@ on.

### Step 1 — Pre-classification

Skip auto-PR for: RFC/proposal, epic, tracking/meta,
child-of-open-parent. These proceed to relevance check.
Skip auto-PR for:

- RFC / proposal, epic, tracking/meta
- **child-of-open-parent** — any of: `Fixes #N`/`Closes #N` to an
open issue/PR; body text references an open PR as prereq ("after
#N", "follow-up to #N", "depends on #N", "extends #N");
acceptance criteria reference files that exist in an open PR's
diff but not on `main` (`gh pr view <N> --json files` to confirm).

These proceed to relevance check, then to the **Defer** outcome
(typically *Fold candidate* or *Blocked-on*) rather than Execute.

### Step 2 — Relevance check: in-cycle?

Expand Down Expand Up @@ -253,6 +271,22 @@ related fixes, or "items 1-5 after PR #N" — decide:
A single cohesive PR is easier to review than three PRs with
dependencies. The bot reduces maintainer clicks, not multiplies them.

### Linkage rule for partial-rollout PRs

When the issue proposes multiple items and you're shipping a subset,
the PR body uses `Refs #N`, **not** `Closes #N`. `Closes` is reserved
for PRs that fulfill the entire issue scope (even if delivered
incrementally — only the *last* PR in the sequence carries `Closes`).

Applies to multi-item issues (numbered lists, taxonomies with multiple
`kind`s, follow-up bundles), issues with explicit "ship X first, then
Y" guidance, or any case where PR scope is narrower than issue scope.

In addition to using `Refs`, post a status comment on the parent issue
listing what shipped and what remains, so a future triage sweep can
find queued work. `Closes` here would be a quiet bug — the issue
auto-closes on merge and remaining items lose their tracking surface.

## Pre-PR build + test gate — mandatory before expert review

The expert review is expensive; don't run it on broken code. Before
Expand Down
Loading