Arguments
| Argument | Required | Description |
|---|---|---|
<PR_NUMBER> |
Yes | TileOPs PR number (e.g. 1133). |
Resolution work runs in this agent session — no external subagent.
Step 1: Pre-round
PR=$ARGUMENTS
PRE=$(bash .claude/skills/resolve-tileops/round-pre.sh "$PR") || exit 1
ACTION=$(echo "$PRE" | jq -r .action)
ROUND=$(echo "$PRE" | jq -r .round)
RUN_DIR=$(echo "$PRE" | jq -r .run_dir)
SNAP=$(echo "$PRE" | jq -r .snap_prefix)
MESSAGE=$(echo "$PRE" | jq -r .message)
Branch on ACTION:
terminate-success/terminate-diverged/terminate-external/terminate-stalled— write retrospective (see below), printMESSAGE, return without ScheduleWakeup.idle— printMESSAGE, ScheduleWakeup withdelaySeconds=180,prompt=/resolve-tileops <PR>,reason="PR #<PR> idle — polling". Return.continue— proceed to Step 2.
Retrospective (terminal actions only)
Write a terse retrospective directly to $RUN_DIR/retrospective.md based
on this session's understanding of what happened across the loop's rounds.
Required:
- Problem (1–2 lines on core reviewer concerns)
- Resolution (
all-addressed|partial|unresolved, one line)
Optional (only if substantive):
- Approach (1–2 lines on techniques applied)
- Follow-up (concrete deferred items, one per line)
Action-oriented; no long prose.
Step 2: Load context
Round 1 only — read into your working context:
.claude/skills/resolve-tileops/procedure.md— triage / fix / reply / resolve threads..claude/skills/resolve-tileops/criteria.md— reply formats and hard rules.
Round 2+ rely on session memory.
Every round — read this round's inputs:
$RUN_DIR/inbox-history/round-NN.md— this round's inbox guidance, if any (only present ifinbox.mdwas non-empty when round-pre archived it).$SNAP.new-reviews.json$SNAP.new-inline-comments.json$SNAP.unresolved-threads.json$SNAP.ci.json$SNAP.auto-resolve.json— JSON action plan from the stale-bot auto-resolver.resolve[]lists threads the classifier planned to auto-reply + resolve (known bot, anchored to a stale commit, no non-whitelisted participant anywhere in the thread); per-thread outcomes live underexecuted.{resolved, reply_failed, resolve_failed}so consumers can distinguish a planned-and-completed resolve from a planned-but-failed one.unknown_bot_like[]and$RUN_DIR/round-NN.unknown-bot-like.jsonflag bot-like logins missing fromknown-bots.jsonfor human triage.skip[]lists threads the resolver intentionally left untouched (humans, mixed-author threads, or bots already at HEAD).
Step 3: Resolve
Apply procedure.md. Inbox guidance for this round (if any) overrides
default behavior where they conflict.
Do NOT post a structured trailer in any PR comment — round-post.sh
detects round effects from GitHub state.
Step 4: Post-round
POST=$(bash .claude/skills/resolve-tileops/round-post.sh "$PR") || exit 1
PUSHED_SHA=$(echo "$POST" | jq -r .pushed_sha)
THREADS_RESOLVED=$(echo "$POST" | jq -r .threads_resolved)
OPEN_AFTER=$(echo "$POST" | jq -r .open_after)
Print: Round $ROUND done — pushed=$PUSHED_SHA, threads_resolved=$THREADS_RESOLVED, open_after=$OPEN_AFTER.
Step 5: Self-schedule (only under /loop)
After a real work round, ScheduleWakeup:
prompt:/resolve-tileops <PR>delaySeconds:180reason:"PR #<PR> resolve round <ROUND> — pushed=<PUSHED_SHA>"
Outside /loop: skip; just return.