Repository navigation
Conversation
release-prepare had the agent decide train coverage, render the planning issue, group the changelog, classify what the source archive ships and compose every PR by hand. Its three skill-local scripts (prev_tag, next_dev_version, category_x) move unchanged into tools/release-management, and new commands do the rest, printing JSON and running nothing: - `verdict` (Step 0): a release line must cover the version, plus the planning issue, its label and GitHub access; fail-closed. - `plan-query` / `plan`: the tag-date read and the quoted PR search, then the empty-set hand-off or the issue title and body with PRs grouped by label. - `versions`, `notice`, `changelog`: the version per manifest, removed NOTICE paragraphs from the diff (whether a removal is justified stays the RM's call), and the changelog by section with the 90% coverage check (`--assign` for the rest). - `archive-mode` / `archive-review` (2e): full review, drift check or skipped; the bucket table, never-excludable and referenced paths refused, symlink chains, the `git grep` loop, the before/after listing commands, which now write to $TMPDIR instead of /tmp. - `prep-pr`, `post-pr`: titles, bodies and scope as a set difference. - `signing-eligibility` / `signing-render`: the automated-signing A1 gate and the A4 workflow + A5 config diff, refusing key material. PR titles are external content: they are rendered as inert text (HTML escaped, line breaks folded) in the planning issue and the changelog, so a title cannot hide a comment from GitHub's renderer while a later agent still reads it. A new optional `changelog_label_categories` key is documented in the config template. SKILL.md 5,532 → 5,027 tokens; prep.md 290 → 209 lines, with the 2e review in archive-review.md at the skill root. Golden rules, Hard rules, the eval headings and the generated blocks are unchanged. Evals: the scripted cases (step-0 1/2/4, step-1-plan 1/2, step-2-prep 1/2, the whole step-14-post suite) become pytest cases named after each former case; the judgement cases stay, their fixtures now carrying the real tool output. Generated-by: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01GTPsZ5aEE5bUVYqp47Dpvv
potiuk
added this pull request to stack #1620
October 13, 2026 15:24
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.
Summary
Fifth PR of the release-management stack; it builds on #1618.
release-prepare's three skill-local scripts (prev_tag,next_dev_version,category_x) move unchanged intotools/release-management.verdict: Step 0 train coverage.plan-query/plan: the planning issue.versions,noticeandchangelog(with the 90% coverage check).archive-mode/archive-review: the 2e source-archive review.prep-prandpost-pr.signing-eligibility/signing-render: the automated-signing A1 gate and the A4/A5 drafts.prep.mdfrom 290 to 209 lines; the 2e review moves toarchive-review.mdat the skill root.Security notes
<!-- … -->can no longer be hidden from GitHub's renderer while a later agent still reads it.$TMPDIR, not/tmp, which broke under the sandbox.signing-renderrefuses key material or a signing step. Step A still never files the Infra ticket, sends mail or adds a key.Behaviour changes worth a look
--train-confirmedis passed.changelog_label_categories(LABEL=SECTION, documented in the config template), maps labels to sections. Unset, a label is sorted by its words.prep-prrefuses coverage below 90% until--assignclassifies the rest, matching the existing "ask the RM to classify before the PR is opened".Type of change
Test plan
prek run --all-filespasses on the stack tip.tools/release-management: pytest / ruff / mypy, including the moved script tests and a real-loadintegration test.non-asf-profile-smoke: both of its prepare cases pass. Two of its other cases fail on main independently of this stack; see the notes below.Notes for reviewers
non-asf-profile-smokehas two failures that reproduce on runs without this change:step-reviewer-routing case-2. reviewer-routing was split in perf(pr-management): run mentor, reviewer-routing and pre-first-pr-check rules as code #1583, and this smoke case still grades the old prose step.step-contributor-governance-intake case-2. The model answers in prose instead of JSON.Both are follow-ups outside this stack.
Was generative AI tooling used to co-author this PR?
Generated-by:.🤖 Generated with Claude Code
https://claude.ai/code/session_01GTPsZ5aEE5bUVYqp47Dpvv