Skip to content

fix(publish): recheck false skips and report unpublished items - #173

Merged
merge-loop[bot] merged 5 commits into
mainfrom
fix/publish-false-skip-gaps
Nov 11, 2026
Merged

merge-loop[bot] merged 5 commits into
mainfrom
fix/publish-false-skip-gaps

Conversation

@joaquim-verges

@joaquim-verges joaquim-verges commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #172 (base fix/publish-own-issue-not-duplicate). Merge #172 first. This closes the two publish gaps #172 leaves open.

Stored false skips

A stored skip on a verified fix that cites the item's own issue came from the false duplicate that #172 stops. These items stayed hidden until someone cleared the field.

  • The publisher now offers them to the judge again. It does not force a PR, so the judge can still skip for another reason.
  • The PR clears the stored skip when it opens.
  • The skip stands when the item's own issue is closed, or when an open PR will close it, so a fix shipped outside Bugpatrol does not get a second PR. A failed lookup keeps the skip for the next run.
  • Every other stored skip still holds, and bugpatrol issue reopen <id> remains the manual clear.

Runs that end without publishing

A run that ended without publishing or skipping an item looked like a quiet pass.

  • Those items now return as unpublished with the reason: the publisher finished, stopped early (budget, steps, timeout), crashed, or lost a publish to a tool error.
  • The session is marked failed, bugpatrol publish exits 1, and a patrol records a problem for the cycle.
  • A cancelled session is a deliberate stop and is not reported.

Verification

  • New cases in publish.test.ts cover both gaps. Against the fix(publish): stop skipping a verified fix as a duplicate of its own issue #172 publisher, the revive and unpublished cases fail on their own assertions. With the closed-issue, open-PR and failed-lookup guards removed, those three cases fail.
  • The real CLI with a no-op judge command printed the unpublished line and exited 1.
  • pnpm typecheck, pnpm lint, pnpm knip, biome check and the full vitest suite pass locally.

🤖 Generated with Claude Code


Assisted by Nebula.


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

Closes #171

joaquim-verges and others added 2 commits November 10, 2026 04:46
…issue

When an issue is filed first and its fix is verified later, the item's
own issue appears in "already on GitHub", and the publisher is told to
skip anything listed there. The fix then never becomes a PR, and the
stored skip hides it from later runs. A dry run has no such list, which
is why it drafted the same PR correctly.

Tell the publisher which issue is the item's own, and refuse a skip
whose reason cites it, so the verified fix is published and closes it.

Closes #171

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
A stored skip that cites a verified fix's own issue came from the false
duplicate that the previous commit stops. Those items stayed hidden until
someone cleared the field, so the publisher now offers them to the judge
again and clears the skip when the PR opens. The skip stands when the
issue is closed or an open PR will close it, so a fix shipped outside
Bugpatrol does not get a second PR. A failed lookup keeps it for the next
run. Every other stored skip still holds.

A run that ended without publishing or skipping an item looked like a
quiet pass. Those items now return as `unpublished` with the reason,
including a stop on budget, a crash, or a publish tool error. The session
is marked failed, `bugpatrol publish` exits 1, and a patrol records a
problem for the cycle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
@vercel

vercel Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
bugpatrol Skipped Skipped Nov 11, 2026 12:36am UTC

Request Review

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Bugpatrol review: fixture-app

No problem introduced · tested 683c9e0 against main 6d26970

Tested

  • Home (index.html) loads and renders
  • Settings (via nav link) loads and renders

Not tested

  • The rest of the change (publish role, patrol, CLI, docs): outside the fixture app

Updated on each push. Tests only what the diff can affect. Does not block the merge.

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Bugpatrol review: dashboard

No problem introduced · tested 683c9e0 against main 6d26970

Tested

  • Overview page
  • Issue detail (Save button overlaps account text)

Not tested

  • The rest of the change (publisher skip recheck, unpublished reporting, CLI publish output): outside the dashboard
  • Reviews, Activity, Flow, Screens, Memory pages: unchanged by this PR; no dashboard file is in the diff

Updated on each push. Tests only what the diff can affect. Does not block the merge.

@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Bugpatrol review: cli

No problem introduced · tested 683c9e0 against main 6d26970

Tested

  • Publisher skip-recheck and unpublished logic via publish.test.ts (all 21 pass)
  • CLI publish output block (kind mapping, unpublished exit 1) via code review + cli tests
  • issue reopen/dismiss manual skip-clear paths on fixture CLI
  • packages/cli and packages/agents typecheck
  • agents + cli vitest suites
  • patrol unpublished-to-problem loop via code review

Not tested

  • Live publish run against GitHub (PR open, skip clear end-to-end): guide forbids running publish/patrol; covered by unit tests with fake gh
  • review.test.ts claim-check recording failure: untouched by PR, test-only, appears pre-existing/environmental

Updated on each push. Tests only what the diff can affect. Does not block the merge.

@joaquim-verges
joaquim-verges changed the base branch from fix/publish-own-issue-not-duplicate to main November 10, 2026 20:06
…commit)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
joaquim-verges and others added 2 commits November 11, 2026 13:36
… main

Re-applies the publish role and its tests from 'recheck false skips and
report unpublished items' after merging main, so #173 lands on main
without #172's duplicate commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
@joaquim-verges joaquim-verges added the mergepatrol Queue this PR: Mergepatrol rebases, tests and merges it label Nov 11, 2026 — with Nebula AI Agent
@merge-loop

merge-loop Bot commented Nov 11, 2026 •

Copy link
Copy Markdown
Contributor

Merged as 06faf8d.

@merge-loop
merge-loop Bot merged commit 06faf8d into main Nov 11, 2026
12 checks passed
@merge-loop merge-loop Bot removed the mergepatrol Queue this PR: Mergepatrol rebases, tests and merges it label Nov 11, 2026
joaquim-verges added a commit that referenced this pull request Nov 11, 2026
A fixed issue was resolved, often by a PR that someone opened by hand. Its
GitHub issue is closed. Publish still offered a PR for the issue's own
verified fix whenever that fix had no PR recorded, so a patrol would open a
duplicate PR for a change that is already on main. The recheck of stored
skips in #173 made this more likely, because it can revive a held-back fix.

Treat a fixed issue like a dismissed one at the top of the selector, so it
owes neither a PR nor an issue. The issue branch already excluded fixed
issues, so that duplicate check goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
merge-loop Bot added a commit that referenced this pull request Nov 11, 2026
* fix(publish): open no PR for a fix whose issue is already fixed


A fixed issue was resolved, often by a PR that someone opened by hand. Its
GitHub issue is closed. Publish still offered a PR for the issue's own
verified fix whenever that fix had no PR recorded, so a patrol would open a
duplicate PR for a change that is already on main. The recheck of stored
skips in #173 made this more likely, because it can revive a held-back fix.

Treat a fixed issue like a dismissed one at the top of the selector, so it
owes neither a PR nor an issue. The issue branch already excluded fixed
issues, so that duplicate check goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>

* Run the checks again

The agent found nothing to fix in the code.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Nebula AI Agent <277912164+nebula-ai-agent[bot]@users.noreply.github.com>
Co-authored-by: merge-loop[bot] <349684721+merge-loop[bot]@users.noreply.github.com>

This branch was previously deployed

1 inactive deployment
Preview — 683c9e02 Deployed Nov 11, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

publish skips a verified fix's PR as a duplicate of the item's own issue

1 participant