Announce what's Done
A Product's board ends in Done: work that is finished but that nobody has told anyone about yet. The column header counts them as completed, not yet announced. When you're ready to tell people, Announce turns those issues into drafts for the outlets you choose. Infrared never posts, publishes or sends anything: you copy each draft to its outlet yourself.
Start an announcement
- On the Product's page, choose Announce on the Done column. It's there once Done has at least one issue; members and above can use it.
- In the dialog:
- Items: every Done issue is ticked. Untick the ones to keep for later.
- Outlets: X, LinkedIn, Bluesky, Blog post, Newsletter, Changelog entry, Slack post. Infrared remembers your org's last choice.
- Link the summary videos: when an issue's Change has a summary video, the drafts link it.
- Notes for the writers (optional): tone, audience, what to lead with.
- Choose Draft N announcements. Infrared starts an Announce AgentWorkflowRun and opens its Announcement page.
Each outlet costs one agent step. Three outlets usually cost well under a dollar; the Models and costs page has the details.
What the writers do
One step per outlet, run in parallel, each in report mode (they read; they change no code and open no pull requests). Each writer gets the issues with their titles, pull requests, Releases and the architect's summaries, your notes, and the outlet's format:
| Outlet | Format |
|---|---|
| X | One post of 280 characters at most, links included; a numbered thread when it can't fit |
| A short hook line, two or three short paragraphs, then links; three hashtags at most | |
| Bluesky | One conversational post of 300 characters at most |
| Blog post | Markdown: a title, a one-paragraph lede, a section per item with what changed and why it matters |
| Newsletter | A short headline, a sentence of context, a bullet per item with its link |
| Changelog entry | Keep a Changelog style: a heading, then Added / Changed / Fixed, one line per item with its issue link |
| Slack post | Slack mrkdwn: a bold headline and a bullet per item with its link |
Each draft is also posted, as a draft for people to read, to every Slack destination for the Product that takes Announce drafts. Nothing goes anywhere else.
Review and approve
The Announcement page shows each draft with:
- Copy, to paste it into the outlet.
- A character count, against the outlet's limit for X and Bluesky (it turns red when over, except for a numbered X thread).
- Edit, to change the text in place. Infrared keeps your edit, and who made it, beside the writer's draft; Copy and approval use the edited text.
When the drafts are in, the page says Waiting for your approval. Approve drafts moves every item to Announced (label infrared:announced, off the board) and comments on each issue that it was announced, naming the announce AgentWorkflowRun. Reject leaves the items in Done to announce later.
The Product's page links its latest Announcement beside the Done column.
With the API
# The outlets the org chose last time.
curl https://<host>/api/v1/orgs/<org>/announce/defaults -H "Authorization: Bearer $INFRARED_TOKEN"
# Start an announcement.
curl -X POST https://<host>/api/v1/orgs/<org>/products/<product>/announce \
-H "Authorization: Bearer $INFRARED_TOKEN" -H 'Content-Type: application/json' \
-d '{"items": [{"repo": "site", "number": 22}], "outlets": ["x", "linkedin", "changelog"], "notes": "Keep it plain"}'
# The Product's announcements, then one with its drafts.
curl https://<host>/api/v1/orgs/<org>/products/<product>/announcements -H "Authorization: Bearer $INFRARED_TOKEN"
curl https://<host>/api/v1/orgs/<org>/announcements/<run> -H "Authorization: Bearer $INFRARED_TOKEN"
# Edit a draft.
curl -X PUT https://<host>/api/v1/orgs/<org>/announcements/<run>/drafts/x \
-H "Authorization: Bearer $INFRARED_TOKEN" -H 'Content-Type: application/json' -d '{"text": "…"}'
Approve or reject with the run's approve-drafts step, like any human step: POST /api/v1/orgs/<org>/agentworkflowruns/<run>/steps/approve-drafts/approve (or /reject).
Announcements for Releases
This is separate from the Release announcements that the Release AgentWorkflow drafts each time a Release cuts its tag. Use those for a version going out; use Announce for whatever piled up in Done, on your schedule.