Repository navigation
feat(ticket-audit): audit a GitHub Issues tracker (#59, part D) - #124
Merged
Merged
Conversation
…uests On a GitHub tracker, ticket-audit runs the duplicates sweep over the repository's open issues and the pulls sweep against each pull request's issue, read from its Ticket: line; planned, links and estimates say in one line that they do not apply. Apply closes issues, with state_reason and duplicate_of, through the GitHub write plan and the issue gate on a yes. The tracker-github pack gains three audit scenarios, and its stub serves list_pull_requests and pull_request_read for open pull requests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uess Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude Code 2.1.319 passes a PostToolUse hook a stdio or plain HTTP MCP server's result as a list of one text block, so pr-reader could not dump a pull request the GitHub tracker pack's stub serves. The block's text is the server's text as sent; any other list is still refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…' into feat/59-github-issues-audit # Conflicts: # README.md
The duplicates scenario accepts only #19 closed into #18. source-reader reads a GitHub role from issue_tracker.roles and searches the pull requests naming each issue of a pair. github.md spells out which Ticket: lines are the tracker's and recommends a sweep. The stub's list_pull_requests matches a head by its branch, a fixture pull request names the open #18, #20 no longer shares by_part's words, and tracker-gh-work-pr says the stub refuses a closed pull request's read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The duplicates sweep searches origin's pull requests for an issue, in the form origin's bodies write it, URL form included. The pulls sweep's "names no issue" finding covers a Ticket: line from which no issue is read, and leaves another tracker's link to the correct-the-line finding. The scenarios require the pull request search and tie #18 to its approval finding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part D of #59. Parts A (#113, #115) and B (#116) have merged. Part C, onboard detecting GitHub Issues, has its own branch and is still open, so this PR does not close #59.
What it does
On a project whose tracker is GitHub Issues (
issue_tracker.kind: github),ticket-auditruns two sweeps and gives each of the other three one line:duplicateslists the open issues and pairs issues that ask for the same thing. For each pair it recommends which issue to keep and whether the other should be closed as a duplicate or merged in. It also flags stale issues that existing work already satisfies. To find the pull requests that name an issue, it searches origin's pull requests, since those live in origin and not in the tracker's repository.pullschecks each open pull request against the issue itsTicket:line names. A pull request gets one of four findings:Writes go through the existing write plan and issue gate (
skills/using-github/issues.md). The issues' repository is taken from origin and never guessed.Also in this PR
scripts/save_page.pynow saves a result that arrives as one text block. This partly reversesd30fb671. It could be split into its own PR if the reviewer prefers.docs/contracts.md"The ticket shape" goes to version 3:ticket-auditreadsissue_tracker.roleson a GitHub tracker.Review
Three adversarial review rounds; the last found 0 blocking issues. Every should-fix from rounds 1–3 has been applied.
bash tests/checks.sh --allpasses on Python 3.13 and 3.9.Origin: #59
Sandbox: Haiku, branch vs. current plugin.
tracker-gh-audit-duplicates: 9/10, then 3/3 after the gate fix (baseline 0/1).tracker-gh-audit-declined: 3/5, then 5/5.tracker-gh-audit-pulls: 2/2 after the save_page fix. The round 2–3 wording changes (the origin pull request search, the no-issue boundary, and the tighter#18check) were not rerun in the sandbox.Canary: none
🤖 Generated with Claude Code