Relationships
#1806 Send the release headline from the release pipeline so New Release announcements say what shipped
Opened by keeb · 8/24/2026
Follow-up to #1127, which is shipped. The rendering half is live; the data half lives in two other repos and has not been done, so today's announcements still say nothing about what a release contains.
Current state
#1127 removed the dead CI link from the New Release embed and added an optional headline property that renders under the version line. release_published currently carries only version and run_id, so production renders:
New Release Swamp CLI 20260824.164253.0-sha.8d1ce768 has been released
The absent-headline path is correct and tested — it is just the only path that exists.
What is needed
The emitter is swamp-club/swamp-uat → .github/workflows/uat.yml, step "Send release telemetry". It needs to add a third property, headline, carrying the raw merged PR title. The discord-bot already formats it (services/discord-bot/lib/release-headline.ts: strips trailing issue refs and the conventional-commit prefix, capitalizes, caps at 180) — send it unformatted.
Two ways, both written up with diffs in scratch/issue-1127-emitter-diffs.md:
- Option A (preferred) —
swamp-club/swamp→.github/workflows/release.ymlalready hasPR_TITLEin scope where it writes the release body, and already dispatches to swamp-uat. Addheadlineto theclient-payload, falling back togit log -1 --pretty=%son theworkflow_dispatchpath (no PR there).uat.ymlforwardsclient_payload.headline. Parse-free, and the title comes from where it is authored. - Option B —
uat.ymlreads it itself withgh release view v$SWAMP_VERSION --repo swamp-club/swamp --json bodyand takes the first*bullet under "What's Changed". One repo, but re-derives the title from rendered markdown.
Result:
New Release Swamp CLI 20260824.164253.0-sha.8d1ce768 has been released Use run-scoped model names to prevent lock contention
The part that is not optional
uat.yml currently builds its ingest JSON by interpolating shell variables into a single-quoted -d '{...}' literal. That is safe today because version and run_id are machine-generated, but a PR title is free text — one double quote, backslash or newline produces invalid JSON, the ingest returns a non-2xx, and the step's own guard (exit 1 on non-2xx) then fails the release. It is also an injection path into telemetry properties.
So whichever option is taken, build the payload with jq -n --arg rather than string interpolation. Do not add the field without doing that.
Done when
A real CLI release posts a New Release embed whose second line names what shipped, and a release whose PR title contains a quote still succeeds.
Open
No activity in this phase yet.
Sign in to post a ripple.