You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2026/08/08 06:59:17 UTC

(struts) branch docs/vote-mail-gmail-link-mangling created (now 1d8a30c17)

This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch docs/vote-mail-gmail-link-mangling
in repository https://gitbox.apache.org/repos/asf/struts.git


      at 1d8a30c17 docs: hand over a paste-ready body in creating-release-vote-mail

This branch includes the following new commits:

     new 1d8a30c17 docs: hand over a paste-ready body in creating-release-vote-mail

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(struts) 01/01: docs: hand over a paste-ready body in creating-release-vote-mail

Posted by lu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch docs/vote-mail-gmail-link-mangling
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 1d8a30c173b1637580ed5e3f2712bd27bbe394da
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Sat Aug 8 08:59:06 2026 +0200

    docs: hand over a paste-ready body in creating-release-vote-mail
    
    Gmail's linkifier rewrites URLs server-side as the draft is stored, so the
    four link lines in the 6.11.0 vote draft arrived wrapped in
    https://www.google.com/url?q=...&source=gmail&ust=... and the 72-column
    wrap was reflowed. All three ways of passing the body through the Gmail
    tool were tested and all are rewritten; body-only is the least-bad, and
    supplying htmlBody is worse (HTML-only mail, or a plain part whose visible
    text is the wrapped URL).
    
    Record the constraint and make the workaround structural: the skill now
    produces the draft *and* a file with the exact body, so the release
    manager fixes it with one select-all-paste instead of hand-editing four
    URLs. Also flag re-running the draft-update tool on an already-corrected
    draft, which re-mangles it.
    
    Co-Authored-By: Claude Opus 5 <no...@anthropic.com>
---
 .claude/skills/creating-release-vote-mail/SKILL.md | 24 +++++++++++++++++++++-
 .../vote-mail-template.md                          |  6 +++++-
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/.claude/skills/creating-release-vote-mail/SKILL.md b/.claude/skills/creating-release-vote-mail/SKILL.md
index d8cb99fe1..4604faaf9 100644
--- a/.claude/skills/creating-release-vote-mail/SKILL.md
+++ b/.claude/skills/creating-release-vote-mail/SKILL.md
@@ -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 |
 |---|---|
@@ -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
@@ -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
 
diff --git a/.claude/skills/creating-release-vote-mail/vote-mail-template.md b/.claude/skills/creating-release-vote-mail/vote-mail-template.md
index c25cc9083..339e72649 100644
--- a/.claude/skills/creating-release-vote-mail/vote-mail-template.md
+++ b/.claude/skills/creating-release-vote-mail/vote-mail-template.md
@@ -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
 
@@ -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