From c139628f01f1a05bef663d90e429b8f6d9456c70 Mon Sep 17 00:00:00 2001 From: Tanisha Aberdeen <32620895+aliasunder@users.noreply.github.com> Date: Sun, 6 Sep 2026 12:23:09 -0400 Subject: [PATCH 1/3] fix(pr-monitor): decide comment new-ness by id and timestamp, not body text MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After a re-review event, the comment-reading step now requires listing both endpoints (inline review comments and issue comments) with id and created_at, and treating a comment as new only if it postdates the run that produced it. Identical text with a familiar marker means the same comment was re-read, not re-posted. Also bolds the pipeline attribution footer at the top of Step 3 โ€” the reply templates carried it, but the transition from direct posting into a pipeline cycle was easy to miss. Co-Authored-By: Claude Fable 5 --- plugins/ship-check/skills/pr-monitor/SKILL.md | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/plugins/ship-check/skills/pr-monitor/SKILL.md b/plugins/ship-check/skills/pr-monitor/SKILL.md index 8c8f3e9..832a21e 100644 --- a/plugins/ship-check/skills/pr-monitor/SKILL.md +++ b/plugins/ship-check/skills/pr-monitor/SKILL.md @@ -159,12 +159,30 @@ against the review/comment IDs recorded on prior passes and against your own footer-marked replies. **Record the IDs of items you handle** so follow-up passes don't re-litigate them. +**New-ness is decided by timestamps and ids, never by body text.** After +any re-review event, list comments from BOTH endpoints (inline review +comments and issue comments) with `id` and `created_at`, and treat a +comment as new only if its `created_at` postdates the run that supposedly +produced it. An identical body with a familiar tracking marker is evidence +you re-read the SAME comment โ€” a "duplicate posting" verdict requires two +distinct comment ids. The known failure this prevents: an +issue-comments-only query re-read a round-1 comment as a "duplicate" on +two consecutive re-reviews while the bot's actual new findings โ€” posted as +inline review comments โ€” went unseen and unhandled. + ### 2e. Merge readiness Summarize blockers: failing CI, missing approvals, unresolved threads, unanswered non-thread bot findings, conflicts. ## Step 3: Handle findings +> **Every reply this step posts carries the pipeline attribution footer** +> (`\n\n---\n*๐Ÿ” ship-check ยท pr-monitor ยท *`) โ€” never the +> generic direct-post "Claude Code" line. If you were posting outside a +> pipeline earlier in the session, the footer switches the moment this +> skill is running โ€” re-read this line before the first reply of every +> monitoring cycle. + ### Bot threads (qodo, CodeRabbit, etc.) For each unresolved bot thread, do ALL of these in order: @@ -307,8 +325,9 @@ Do NOT go to Step 5 without completing at least one follow-up pass after the las ``` 3. On wake: **re-run Step 2** (all five checks). Compare the unresolved thread count - to what it was before pushing, and compare 2d's review/comment IDs against the - ones you've already handled. + to what it was before pushing, and compare 2d's review/comment IDs and + `created_at` timestamps against the ones you've already handled โ€” new-ness + is decided by id and timestamp, never by body text (see 2d). 4. **New unresolved threads or new non-thread bot findings exist** -- go to Step 3 (reply, fix, resolve, push). If Step 3 pushes more code, return here and repeat From 1944091efe057d1da63e771e2493ae05e5e50f39 Mon Sep 17 00:00:00 2001 From: Tanisha Aberdeen <32620895+aliasunder@users.noreply.github.com> Date: Sun, 6 Sep 2026 12:43:20 -0400 Subject: [PATCH 2/3] fix(pr-monitor): fetch the inline-comments endpoint in Step 2d MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new-ness rule requires listing inline review comments with id and created_at, but 2d's fetch block never queried /pulls/N/comments โ€” an agent following the skill literally still could not see them. Adds the endpoint to the fetch block and the proof-of-work listing. Co-Authored-By: Claude Fable 5 --- plugins/ship-check/skills/pr-monitor/SKILL.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/ship-check/skills/pr-monitor/SKILL.md b/plugins/ship-check/skills/pr-monitor/SKILL.md index 832a21e..61bdeaf 100644 --- a/plugins/ship-check/skills/pr-monitor/SKILL.md +++ b/plugins/ship-check/skills/pr-monitor/SKILL.md @@ -100,6 +100,7 @@ Fetch both surfaces with pagination to ensure no comments are missed: ``` gh api repos/OWNER/REPO/pulls/NUMBER/reviews --paginate --jq '.[] | {id, user: .user.login, submitted_at, body}' gh api repos/OWNER/REPO/issues/NUMBER/comments --paginate --jq '.[] | {id, user: .user.login, created_at, body}' +gh api repos/OWNER/REPO/pulls/NUMBER/comments --paginate --jq '.[] | {id, user: .user.login, created_at, path, body}' ``` **Classify every comment** โ€” not just bot-authored ones. Use the same @@ -117,6 +118,7 @@ one-liner before evaluating: ``` Issue comment # (, ): Review body # (, ): +Inline comment # (, ): โ€” ``` This listing is mandatory โ€” it proves you fetched and read every comment. If the listing is empty, state "0 issue comments, 0 review bodies with From 5fd6e9f7b63213a3a5db137413f10d7395bd8bee Mon Sep 17 00:00:00 2001 From: Tanisha Aberdeen <32620895+aliasunder@users.noreply.github.com> Date: Sun, 6 Sep 2026 12:49:03 -0400 Subject: [PATCH 3/3] fix(pr-monitor): count inline comments in the empty-state report, use per-surface timestamps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The empty-listing self-report now names all three fetched surfaces, and Step 4.3 scopes the timestamp comparison by surface โ€” review bodies expose submitted_at, not created_at. Co-Authored-By: Claude Fable 5 --- plugins/ship-check/skills/pr-monitor/SKILL.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/ship-check/skills/pr-monitor/SKILL.md b/plugins/ship-check/skills/pr-monitor/SKILL.md index 61bdeaf..22e4aa9 100644 --- a/plugins/ship-check/skills/pr-monitor/SKILL.md +++ b/plugins/ship-check/skills/pr-monitor/SKILL.md @@ -122,7 +122,7 @@ Inline comment # (, ): โ€”