Skip to content

release: close issues addressed by a release (feedback-loop closeout) - #127

Merged
sumitake merged 2 commits into
mainfrom
dev/claude/resolve-addressed-issues
Aug 20, 2026
Merged

release: close issues addressed by a release (feedback-loop closeout)#127
sumitake merged 2 commits into
mainfrom
dev/claude/resolve-addressed-issues

Conversation

@sumitake

Copy link
Copy Markdown
Owner

Closes the feedback loop opened by the workspace plugin-error reporting rule: sessions file GitHub issues on plugin errors, and now the release that fixes them marks them resolved.

Mechanism. A changelog fragment marks a fix with an own-line Addressed: #N (deliberately NOT GitHub's merge-time Fixes #N, so closure happens when the signed build ships, not at merge). Post-publish, release.yml runs scripts/resolve_addressed_issues.py, which diffs CHANGELOG.md + changelog.d/ across the release's tag window, and for each open issue posts the version + release URL as evidence, applies resolved-in-release, and closes it.

Fail-safe by construction: explicit markers only (no text matching); scan_pathspec() excludes changelog.d/README.md and archived/ so example/already-released markers can never false-close; open issues on this repo only (PRs skipped); idempotent; bounded per-run cap; per-call + step timeouts; every per-issue action non-fatal (a close failure never fails the published release). Job-scoped issues: write. Preview with --target-rev HEAD --dry-run.

Review. Grok (xai, distinct family) review.repository: round 1 REQUEST_CHANGES caught a real HIGH false-closure (the README example Addressed: #125 would have closed issue #125 on the next release) + two MEDIUM reliability gaps; all fixed (README exclusion + placeholder, subprocess/step timeouts, per-issue try scope, added tests). Re-verify (request_id resolve-issues-review-2): SHIP, 0 findings. Verified live: the exclusion yields [] where the bug yielded [125]; issue-state probe correctly returns open / skips PRs / skips missing. 17 parser/scan/cap tests (run by the release gate's scripts discovery).

🤖 Generated with Claude Code

author: claude
standing_directives: operator direction 2026-08-19 (close the plugin-error feedback loop at build time; marker + version evidence, hard-close); reliable/simple/elegant baseline; Tier-2 process
tier: 2
cross_check: Grok (xai, distinct from author) review.repository frontier/maximum — round 1 REQUEST_CHANGES (1 HIGH false-closure + 2 MEDIUM), all integrated; re-verify request_id resolve-issues-review-2 verdict SHIP, 0 findings (execution receipt emitted)
post_condition: a release closes issues explicitly marked Addressed: #N in its tag window, with version+URL evidence and the resolved-in-release label; non-fatal, README/archived excluded, open-issue-only, bounded
mcp_coverage_gap: NONE
plugin_affected: NONE (release tooling + workflow only; no packaged content or version change)
readme_refresh_status: changelog.d/README.md documents the Addressed: marker convention
contributor_rights: OWNER-AUTHORED
operator_reserved: no

sumitake and others added 2 commits August 19, 2026 20:40
Adds scripts/resolve_addressed_issues.py, run post-publish by
release.yml, to close the GitHub issues a release has fixed. A
changelog fragment marks a fix with an own-line 'Addressed: #N'
(deliberately not GitHub's merge-time 'Fixes #N'), and the resolver
diffs CHANGELOG.md + changelog.d/ across the release tag window,
then for each open issue on this repo posts the version + release
URL as evidence, applies the resolved-in-release label, and closes
it. Fail-safe: explicit markers only, open issues only, idempotent,
bounded, and non-fatal (a close failure never fails the build).
Pure marker parser is unit-tested (12 cases); job-scoped issues:write.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Grok review (HIGH) caught a false-closure: changelog.d/README.md
carries example 'Addressed: #N' lines, and the scan diffed the whole
changelog.d/ dir, so the next release would falsely close the example
issue. Fix: scan_pathspec() excludes README.md and archived/ (the
compiled CHANGELOG.md always carries a real marker, so nothing is
lost), and the README example uses a non-extractable placeholder.
Reliability (MEDIUM): per-call subprocess timeout + a 5-minute step
timeout so a hung gh can't run to the job deadline, and the per-issue
state probe now sits inside the non-fatal try. Adds scan-path,
issue-zero, and cap tests (17 total).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@sumitake
sumitake merged commit b23fffb into main Aug 20, 2026
19 checks passed
@sumitake
sumitake deleted the dev/claude/resolve-addressed-issues branch August 20, 2026 04:04

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f8384c0f11

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +193 to +194
_run(["gh", "issue", "edit", str(number), "--repo", repo,
"--add-label", _RESOLVED_LABEL], check=False)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Handle label failures before reporting successful resolution

When gh issue edit fails—for example because of a transient API error—the discarded return code allows the subsequent close to succeed and the script to report the issue as resolved even though resolved-in-release was never applied. This can affect every issue in the run if label creation also failed, because label_ensured is still set; gh issue edit --help identifies --add-label as the operation that adds the label, so its failure should be checked or at least surfaced rather than silently losing the release audit metadata.

Useful? React with 👍 / 👎.

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.

1 participant