Skip to content

docs: add creating-release-vote-mail skill - #1836

Merged
lukaszlenart merged 6 commits into
mainfrom
vote-mail-skill
Aug 8, 2026
Merged

docs: add creating-release-vote-mail skill#1836
lukaszlenart merged 6 commits into
mainfrom
vote-mail-skill

Conversation

@lukaszlenart

Copy link
Copy Markdown
Member

Adds a creating-release-vote-mail skill that drafts the [VOTE] Apache Struts X.Y.Z mail as a plain-text rendering of the already-published Version Notes page.

It is the step after creating-version-notes: that skill ends at the [TEST] announcement, this one opens the vote. A handoff paragraph chains the two.

Contents

  • SKILL.md — the judgement: the six-part body recipe, the rule that a vote carries no security information on any channel, dev@-only recipients, draft-never-send, and the frozen boilerplate.
  • vote-mail-template.md — the artifact: slots, the authored shape sentence, the skeleton, the ASF vote boilerplate reproduced byte-identical to the archived 6.10.0 and 7.2.1 mails, and a pre-draft checklist.

How it was scoped

Built test-first per superpowers:writing-skills. Three agents drafted the 7.3.0 vote mail with no skill present, in a worktree that did not contain the design document.

They already rendered the body from the cwiki page rather than JIRA, verified all four links live, kept security summaries truncated, left the checkboxes empty, used the exact subject, and authored a fresh opening sentence — so roughly two-thirds of the originally specified content was documenting what agents already do correctly. That became cross-references to creating-version-notes and creating-security-bulletins rather than prose.

The skill teaches only what the baselines got wrong:

Failure Form
Security detail routed into the vote via a private@ companion mail Prohibition covering every channel
Body grown beyond what the page carries Positive recipe — the six parts, in order
user@ added to recipients Prohibition + rationalization counters
Sent rather than drafted Prohibition + rationalization counters
A paragraph inserted into the frozen boilerplate Prohibition naming insertion as an edit

Two design decisions were reversed by the evidence: Rejected requests are included (3/3 agents reproduced them, as does the page's own framing), and the staging URL aligns on content/groups/staging/ with the Version Notes page and the [TEST] mail.

Verified by re-running all three scenarios with the skill present, plus a fourth targeting the private@-as-confidential-channel loophole. All pass: exactly one mail, no user@ in any header, no severity/CVE/S2-XXX/reporter detail, boilerplate byte-identical, draft not send.

Design and implementation record are under docs/superpowers/.

No JIRA ticket — process documentation, consistent with the creating-version-notes and creating-security-bulletins skill commits.

🤖 Generated with Claude Code

lukaszlenart and others added 6 commits August 8, 2026 07:21
Specifies a sibling to creating-version-notes that drafts the
[VOTE] Apache Struts X.Y.Z mail once the Version Notes page, GitHub
release and staged artifacts are published.

Derived from the 7.2.1 and 6.10.0 vote mails: the body is a plain-text
rendering of the Version Notes page, the ASF vote boilerplate is frozen
in a template, and the mail goes to dev@ only with private@ in Bcc.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Three baseline agents drafted the 7.3.0 vote mail with no skill present.
Two-thirds of the specified content taught nothing - rendering from the
page, precondition checks, security truncation, checkboxes, subject and
Bcc were all done correctly unassisted, so they become cross-references.

Reverses two decisions on the evidence: Rejected requests are included
(3/3 agents reproduced them, as does the page's own framing) and the
staging URL aligns on content/groups/staging/ with the page and the
[TEST] mail.

Adds the rule that a vote carries no security information on any
channel, after a baseline kept dev@ neutral and then routed severities,
bulletin ids and reporter detail into a private@ companion mail.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Drafts the [VOTE] Apache Struts X.Y.Z mail as a rendering of the
published Version Notes page. Scoped to the five failures three baseline
agents actually made without it: security detail routed through a
private companion mail, a body grown beyond the page, user@ on Cc,
sending rather than drafting, and a paragraph inserted into the frozen
vote boilerplate.

Everything the baselines already got right - rendering from the page,
precondition checks, security truncation, checkboxes, subject, Bcc - is
cross-referenced to creating-version-notes and creating-security-bulletins
rather than restated.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Template now states that a page section's own introductory sentence
comes with it, after a verification run kept the Rejected requests
preamble on judgement the skeleton did not support.

Chains creating-version-notes to the vote as its next step, and replaces
the pre-testing plan with the record of the RED/GREEN/REFACTOR cycle -
including the contamination lesson: baselines must run in a worktree
that does not contain the design document.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It is there for reach - not every PMC member follows dev@ and PMC votes
are the binding ones - not for confidentiality. Stating this closes the
loophole where an agent reads private@ as a confidential channel and
routes advisory detail through it, which is what the disclosure baseline
did.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Aug 8, 2026

Copy link
Copy Markdown

@lukaszlenart
lukaszlenart merged commit f2f3a9d into main Aug 8, 2026
12 checks passed
@lukaszlenart
lukaszlenart deleted the vote-mail-skill branch August 8, 2026 06:38
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