-
Notifications
You must be signed in to change notification settings - Fork 1
backlog: Otto-204 PR-resolve-loop skill — close-the-PR cycle automation (active management > ship-and-pray) #356
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -2468,6 +2468,137 @@ within each priority tier. | |||||||||||||||||||||
|
|
||||||||||||||||||||||
| ## P1 — CI / DX follow-ups (after round-29 anchor) | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| - [ ] **PR-resolve-loop skill — automate the full | ||||||||||||||||||||||
| close-the-PR cycle (CI-failures + review-conversations | ||||||||||||||||||||||
| + agent-comment preservation + auto-merge arm) so Otto | ||||||||||||||||||||||
| doesn't ship-and-pray.** Maintainer Otto-204: *"you | ||||||||||||||||||||||
| need some pr resolve loop that will handled everyting | ||||||||||||||||||||||
| needed to take a pr to compelteion so you don't ahve | ||||||||||||||||||||||
| to keep figuion it out"* + Otto-204b conversation- | ||||||||||||||||||||||
| preservation clarifier: *"we are saving you resolution | ||||||||||||||||||||||
| to all the comments and we expect those to be | ||||||||||||||||||||||
| execellent don't take shortcuts on the feedback, do | ||||||||||||||||||||||
| the right long term thing or backlog the right thing | ||||||||||||||||||||||
| and not it on the comment. We want to save both sides | ||||||||||||||||||||||
| of the conversation."* | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Context.** Otto's ship-rate exceeded CI-drain-rate | ||||||||||||||||||||||
| across Otto-157..188, producing 136-open-PR | ||||||||||||||||||||||
| saturation state (Otto-171 queue-saturation memory). | ||||||||||||||||||||||
| Otto-200..203 observed main frozen 6+ ticks at #355. | ||||||||||||||||||||||
| Otto-204 investigation discovered the real blocker | ||||||||||||||||||||||
| was NOT CI queue but accumulated unresolved review- | ||||||||||||||||||||||
| threads + unfixed lint failures that armed-auto-merge | ||||||||||||||||||||||
| could not overcome. Each individual PR needs active | ||||||||||||||||||||||
| management; passive arming is insufficient. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Scope:** new skill at `.claude/skills/pr-resolve- | ||||||||||||||||||||||
| loop/SKILL.md` encoding the full PR-close cycle: | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| 1. **CI-status check** — `gh pr checks <N>`; if any | ||||||||||||||||||||||
| required check failed, fetch the failure log, fix | ||||||||||||||||||||||
| locally, commit+push. | ||||||||||||||||||||||
| 2. **Review-thread enumeration** — `gh api graphql` | ||||||||||||||||||||||
| for reviewThreads; for each unresolved thread: | ||||||||||||||||||||||
| - Read the reviewer's finding + severity. | ||||||||||||||||||||||
| - Decide: fix-now OR file-BACKLOG-row-and-note OR | ||||||||||||||||||||||
| counter-argue-with-rationale. | ||||||||||||||||||||||
| - Post a reply on the thread explaining the | ||||||||||||||||||||||
| decision + commit SHA where fix landed (if | ||||||||||||||||||||||
| applicable). | ||||||||||||||||||||||
| - Resolve the thread via GraphQL | ||||||||||||||||||||||
| `resolveReviewThread` ONLY after the reply is | ||||||||||||||||||||||
| posted (per Otto-204b "save both sides of the | ||||||||||||||||||||||
| conversation" discipline). | ||||||||||||||||||||||
| - If deferring: leave the thread unresolved with | ||||||||||||||||||||||
| explicit breadcrumb-reply + filed BACKLOG row | ||||||||||||||||||||||
| ID. | ||||||||||||||||||||||
| 3. **Name-attribution lint** — before any commit on a | ||||||||||||||||||||||
| branch touching factory-produced docs, grep for | ||||||||||||||||||||||
| "Aaron" / direct-contributor-names in the diff; | ||||||||||||||||||||||
| replace with "maintainer" idiom unless the file | ||||||||||||||||||||||
| is an audit-trail surface (commit messages, tick- | ||||||||||||||||||||||
| history, memory files — all history-exempt per | ||||||||||||||||||||||
| loop-tick-history 2026-04-22). | ||||||||||||||||||||||
| 4. **Conversation-preservation hook** — every reply | ||||||||||||||||||||||
| + resolve operation logs to `artifacts/pr- | ||||||||||||||||||||||
|
||||||||||||||||||||||
| + resolve operation logs to `artifacts/pr- | |
| and resolve operation logs to `artifacts/pr- |
Copilot
AI
Apr 24, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The conversation log target path is artifacts/pr-discussions/..., but there’s no artifacts/ directory in the repo today and an existing BACKLOG row specifies git-tracked PR discussions under docs/pr-discussions/PR-<number>-<slug>.md (docs/BACKLOG.md:4487). Consider aligning this row to the established docs/pr-discussions/ location (or explicitly call out why this is different and how it becomes git-tracked).
| + resolve operation logs to `artifacts/pr- | |
| discussions/PR-<N>-conversation-log.json` so the | |
| git-native preservation directive (Otto-150..154, | |
| PR #335) captures both-sides-of-conversation | |
| automatically rather than relying on GitHub-only | |
| + resolve operation logs to `docs/pr- | |
| discussions/PR-<N>-conversation-log.json` so the | |
| git-tracked preservation directive (Otto-150..154, | |
| PR #335) captures both-sides-of-conversation in- | |
| repo rather than relying on GitHub-only |
Copilot
AI
Apr 24, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This step uses mergeStateStatus: MERGEABLE, but GitHub’s JSON/GraphQL distinguishes mergeStateStatus (e.g., CLEAN/BEHIND/DIRTY/BLOCKED/…) from mergeable (MERGEABLE/CONFLICTING/UNKNOWN). Update the wording to check mergeStateStatus: CLEAN and mergeable: MERGEABLE (or use valid mergeStateStatus values).
| `mergeStateStatus: MERGEABLE` (not BEHIND, DIRTY, | |
| or BLOCKED), re-arm `gh pr merge --auto --squash`. | |
| `mergeStateStatus: CLEAN` and `mergeable: | |
| MERGEABLE` (not BEHIND, DIRTY, or BLOCKED), re-arm | |
| `gh pr merge --auto --squash`. |
Copilot
AI
Apr 24, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Line starts with + (" + review-resolution gate faithfully."), which Markdown parses as a nested bullet and markdownlint MD004/ul-style will flag. Reword to avoid starting a continuation line with +.
| + review-resolution gate faithfully. | |
| and review-resolution gate faithfully. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Line starts with a
+inside a wrapped list item (" + agent-comment preservation"), which Markdown parses as a nested bullet and markdownlint (MD004/ul-style) will flag. Reword to avoid a line-start+(e.g., use “and/plus”, or move the+to the end of the previous line).