Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 23 additions & 1 deletion .claude/skills/creating-release-vote-mail/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ Subject is exactly `[VOTE] Apache Struts X.Y.Z`.

## Draft it, do not send it

Create a Gmail draft with To, Bcc, Subject and body set. **Never send.**
Create a Gmail draft with To, Bcc, Subject and body set, and write the same body to a file whose
path you hand over. **Never send.**

| Rationalization | Reality |
|---|---|
Expand All @@ -91,6 +92,26 @@ Create a Gmail draft with To, Bcc, Subject and body set. **Never send.**
Sending opens a binding vote on a permanently archived public list and commits the PMC to the
artifacts as staged.

### Gmail mangles the links — hand over a paste-ready body

Gmail's linkifier rewrites URLs server-side as the draft is stored, so the four link lines
arrive as `https://www.google.com/url?q=...&source=gmail&ust=...` and the 72-column wrap is
reflowed. There is no way to pass the body through the Gmail tool that avoids it:

| Body passed as | Result |
|---|---|
| `body` only | Wrapped hrefs; plain rendering shows `bare-url <google.com/url?q=…>` |
| `htmlBody` only | No plain-text part at all — HTML-only mail, wrong for an ASF list |
| both | Worst: the plain part's *visible* text becomes the wrapped URL |

`body` only is the least-bad, and is what to use. **Also write the exact body to a file and
give the release manager its path.** Pasting plain text over the compose window restores both
the bare URLs and the wrap, making the fix one select-all-paste instead of four hand-edited
URLs.

**Never re-run the draft-update tool on a draft whose links have already been fixed by hand** —
it re-mangles them. A draft the release manager has corrected is finished; leave it alone.

## The boilerplate is frozen

Everything from `Once you have had a chance to review the test build` to the sign-off is
Expand Down Expand Up @@ -123,6 +144,7 @@ A vote opened on a 404 burns the window before anyone can test.
- A new paragraph inserted into the vote boilerplate
- A quality checkbox arriving pre-ticked
- An opening sentence carried over from the previous release
- Re-running the draft-update tool on a draft whose links were already fixed by hand

## Common Mistakes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ On behalf of the Apache Struts project
```

Hard-wrap the body at 72 columns, continuation lines unindented, so the list stays legible in
the ASF archives and in quoted replies.
the ASF archives and in quoted replies. Gmail reflows the wrap and rewrites the link lines when
it stores the draft — see *Gmail mangles the links* in [`SKILL.md`](SKILL.md) for why the body
also has to be handed over as a file.

## Frozen text

Expand Down Expand Up @@ -143,3 +145,5 @@ repository does not.
- [ ] All four checkboxes empty
- [ ] No severity, CVE, S2-XXX, bulletin link or reporter detail anywhere
- [ ] Exactly one mail
- [ ] Body also saved to a file and its path handed over, so the mangled links and wrap can be
fixed with one paste
Loading