Create a new "Last Week in Pony" blog post.
Who reads this
People who write Pony, and people following the language. Not people who work
on whatever subsystem an item happens to be about.
What they know. They know Pony and they write Pony programs. They don't
know the internals of ponyc, of lori, or of whatever library an item covers,
and they have not read the changelogs, the PRs, or the design docs you read to
write the post. A fact that only lands for someone who has read what you read
buries the item, however true and however well sourced it is.
Why they are reading. Some of them write Pony and want the practical news:
what will break their code, what to upgrade for, what fixes a problem they
might have hit. A lot of them are lookie-loos who don't use Pony and never will
act on any of it. They read because it's interesting to watch a language get
built. Both halves matter. An item that's useful but dull serves half the
audience, and detail only a maintainer could care about serves neither.
The job is to give the major news and entertain people who want to know what's
going on with Pony. It is not to account for everything that happened. Leaving
things out is part of the work.
What state is the work in
How much an item gets depends on what a reader can do with it.
Released. They can go get it. Say what it does for them. The release notes
carry the full detail, so don't reproduce them — a post that re-explains every
fix does the release notes' job twice and buries its own news doing it.
Merged but not released. They can't get it yet, so per-fix detail helps
nobody. Say what's coming, when, and why it's worth knowing about now.
Not merged. Say what's coming, why, whatever is genuinely settled — that
it's a breaking change, roughly when — and link to where they can follow along.
Nothing else. The design docs and PRs behind unfinished work contradict each
other and use provisional names, because that's what unfinished work looks
like. Mining them for mechanism produces detail that's wrong as often as it's
right, and the links carry it for anyone who wants it.
Real but far off. A plan that won't be real for a long time is a
distraction rather than news. Every fact about it can be true and sourced and
it still costs the reader more than it gives them. Wait until there's something
to do about it.
Critical: don't fabricate
Every factual claim in the post must come from a verifiable source: the
issue or its comments, linked PRs/releases, git/gh history, or the user.
This applies especially to characterizations — how long something
existed, how widely it affected users, the history behind a fix, the
severity of a bug. Don't invent backstory to make a routine item sound
dramatic. Duration, impact, and history are factual claims; if you can't
substantiate them, don't write them.
When you're tempted to add color about history, severity, or impact:
- Verify first. Use
gh issue view, gh pr view, gh release view,
git log, release notes. The actual history is usually one command
away.
- Ask the user if you can't verify and the characterization adds
value.
- If neither, drop the characterization. A flat description of what
happened beats a fabricated dramatic one. The hyperbolic-language rule
("flair in how things are said, not in inflating what they are")
applies to phrasing. This rule applies to facts.
The interview in step 6 is where most of this gets settled. The goal is
correctness and narrative interestingness, not speed to getting a draft
up. Multiple rounds of questions are fine.
Additional Notes
- Most items go under
## Items of Note as ### subsections. Top-level
## sections are reserved for highlighted items only. The default home for
any item is Items of Note — only promote to ## when there's a specific
reason. Things that warrant highlighting:
- Changes in Pony team membership (new committers, new core team members,
departures).
- Libraries with a 0.1.0 release — describe what the library provides and
why you'd want it. Don't cover libraries that haven't had a first release
yet.
- Major version bumps (1.0.0, 2.0.0, etc.) — cover what changed and why it
matters.
- Items explicitly flagged for highlighting in the issue comments.
- Every release goes in the
## Releases bullet list. Not every release
earns an Items of Note writeup. A version bump that pulls in upstream
dependency fixes, or a release whose changes are routine, belongs in the
Releases list and nowhere else. Read the release notes and ask: is there a
story a reader would care about? Bug fixes that affect users, new features,
breaking changes — those warrant a ### subsection under Items of Note.
"There were changes" does not.
- New library sections should be feature overviews, not per-version
changelogs. When a library has multiple releases in one week, describe
what it does as a whole. Don't enumerate what changed in each version.
- Describe libraries and tools by what happens when you use them, not by
listing their contents. "Load it and Claude has the actual capability
rules in context instead of guessing" tells the reader more than
"capabilities, subtyping rules, common gotchas." Lead with the
experience of using it, not the inventory. Focus on what it does for
the user, not project-internal motivations (why it was built, what
larger effort it's part of).
- Re-establish context for libraries that evolve between posts. When
covering a new release of something that appeared in a previous LWIP,
bring forward the context the reader needs. Don't assume they remember
last week's post. If hobby introduced actor-per-request handlers in
0.4.0 and this week's 0.5.0 adds interceptors that run before the
handler actor is spawned, explain the model before referencing it.
- When referring to repos by short name in prose (not
owner/repo format),
use lowercase to match the actual repo name: ponyc, corral, ponyup,
not Ponyc, Corral, Ponyup.
- The post is authored by seantallen. Write in first person ("I", "my"), not
third person ("Sean", "his"). Third person is occasionally used as a joke
but is not the default.
- Link targets should match what the link text describes. Don't link "Homebrew
formula" to a Zulip thread about the formula — either link to the formula
itself or use plain text.
- Be frugal with em dashes. A few per post is fine, but heavy use reads as
AI-generated. Prefer periods, commas, colons, or parentheses when they
work just as well.
- Issue comments are raw material, not copy. Turn them into flowing
narrative. Avoid choppy sequences of disconnected sentences. But when
the raw material has personality — colorful phrasing, genuine
enthusiasm, humor — preserve and amplify it. Don't grind human voice
down into flat declarative prose. Adapt it to fit the post's flow,
but keep the energy.
- Every section should be narrative, not a topic inventory. A paragraph
of independent facts separated by periods is just a bullet list without
the bullets. Connect ideas: cause and effect, contrast, significance,
what ties them together. The reader should feel a thread pulling them
through, not a checklist they're being walked down. This applies
everywhere — opening hooks, Items of Note subsections, release
write-ups. If you could turn the paragraph into bullets and lose
nothing, it needs rewriting.
- Match section depth to the story, not to the release notes. A
release with a long changelog can have a short story. Twelve entries
in the release notes does not mean twelve things to cover — it means
finding the two or three the reader cares about and telling those
well. Conversely, a single change with real consequences for users
can warrant a full section. The release notes' length is not the
section's length.
- Items of Note altitude: what broke and what to do. Tell the reader
what was broken and what to do about it. Not how the bug worked. The
reader is a Pony user, not a maintainer — "signal handling had enough
edge-case bugs that anyone using it seriously would hit one" is the
right altitude; enumerating each edge case and its mechanism is not.
Save the mechanism for the release notes link.
- Keep voice consistent between adjacent sections. When two sections cover
similar content (two new tools, two related libraries), they should read
the same way.
- Use "ponyc" not "ponylang/ponyc" in prose and section headings. Only use
ponylang/ponyc in the releases list.
- The opening should match the energy of the week. LWIP is community
outreach and a hypefest. Not sales — genuine excitement. When there's
a lot going on, the opening should convey that. Let the reader know
whether it was a big week or a quiet one. Gab with them a little
before diving in. If there are three big things happening, be excited
about three big things happening. A flat "Let's get into it" after a
stacked week undersells the content and the community behind it.
## RFCs section (when applicable) goes after ## Releases. Use ###
subsections by status change (### New, ### Accepted,
### Final Comment Period, ### Implemented, etc.). Only include statuses
that have entries that week.
Steps
Follow these steps:
Read editorial guidelines: Read the "Last Week in Pony" section in
this project's AGENTS.md for format, tone, and domain-specific notes.
Study recent posts and voice calibration: Read the 2-3 most recent
posts in docs/blog/posts/last-week-in-pony-*.md. Also read 2-3 posts
from ~/code/seantallen/seantallen.com/content/posts/ to calibrate on
Sean's personal writing voice. Key traits: he connects ideas into
flowing narrative (not choppy fact sequences), tells you why things
matter (not just what they are), shares opinions freely, uses natural
asides and humor, and varies sentence length. The language is
hyperbolic but the facts aren't — the flair is in how things are
said ("gracing you with," "the whole thing"), not in inflating what
they are. Don't write feature checklists ("X is supported. Y is
supported.") — describe things the way you'd tell someone about them
in conversation.
Rotate the issue first: Run
gh issue list --repo ponylang/ponylang-website --label last-week-in-pony --state open
to identify the current issue. Calculate the next Sunday from today's
date. Create a new empty issue in ponylang/ponylang-website titled
Last Week in Pony - {next Sunday: Month Day, Year}, add the
last-week-in-pony label, and pin it. Then remove the
last-week-in-pony label from the current week's issue, unpin it, and
close it.
Why first: until you rotate, the current issue is still the live,
pinned target. If you collect the week's items and then rotate,
anything posted in between lands on an issue you've already read and
closed — lost from both this post and next week's. Rotating first
moves the live target to the new issue, freezing this week's set
before you read it.
Read the rotated-out issue: Read the now-closed issue with all its
comments. This is the frozen set of items for the post.
Read release notes: For any release items in the rotated-out
issue, fetch the release notes (e.g.,
gh release view TAG --repo ORG/REPO) and evaluate whether the
release has noteworthy content deserving its own section.
Interview the author, then verify: Interview before you draft.
Always, not only when something looks like it's missing — you can't
tell that it is. The answers that matter most are in the author's head
and appear in no issue, PR, or release note, so no amount of reading
surfaces them and a pile of verified facts feels like coverage while
the gaps stay invisible.
Ask what they've been working on that isn't in the issue, what they
think matters most this week, what's coming that people should know
about, and what's actually shipped versus still sitting on a branch.
Those work because none of them require you to have spotted a gap
first. Follow the answers rather than the list, and go more than one
round.
Then verify: list every characterization you intend to make about
history, severity, duration, or impact, and confirm each from sources
(issue/PR/release notes, git log, gh) or from the author.
Correctness and narrative interestingness beat draft speed.
Write the draft: Create the post following the format in AGENTS.md.
Use the date from the issue title for the filename and front matter.
Review: Run the ponylang-prose-review skill on the draft (full
mode — a post is always more than two paragraphs). It runs the house-voice,
narrative, reader-orientation, tightness, and content-honesty lenses as
parallel reviewers (plus a conditional accuracy lens when the post has code
or technical claims), checks the draft against the AGENTS.md editorial
guidelines and the craft rules with the week's source bundle (the rotated
issue and its comments, linked posts, release notes, cited PRs/issues) in
hand, and runs the mechanical pre-check (cspell, mkdocs build --strict,
em-dash count, link sanity). Apply its Fix findings; for each Park finding,
incorporate it if you agree, or present the dispute to the user for a
ruling. The ensemble synthesizes in one pass — there's no per-round
re-spawn loop.
Commit and PR: Create a branch, commit the new post with the message
Last Week in Pony - Month Day, Year, and open a PR. Report the PR URL
to the user.
1---2name: lwip3description: Create a new "Last Week in Pony" blog post from the open GitHub issue4---56Create a new "Last Week in Pony" blog post.78## Who reads this910People who write Pony, and people following the language. Not people who work11on whatever subsystem an item happens to be about.1213**What they know.** They know Pony and they write Pony programs. They don't14know the internals of ponyc, of lori, or of whatever library an item covers,15and they have not read the changelogs, the PRs, or the design docs you read to16write the post. A fact that only lands for someone who has read what you read17buries the item, however true and however well sourced it is.1819**Why they are reading.** Some of them write Pony and want the practical news:20what will break their code, what to upgrade for, what fixes a problem they21might have hit. A lot of them are lookie-loos who don't use Pony and never will22act on any of it. They read because it's interesting to watch a language get23built. Both halves matter. An item that's useful but dull serves half the24audience, and detail only a maintainer could care about serves neither.2526The job is to give the major news and entertain people who want to know what's27going on with Pony. It is not to account for everything that happened. Leaving28things out is part of the work.2930## What state is the work in3132How much an item gets depends on what a reader can do with it.3334**Released.** They can go get it. Say what it does for them. The release notes35carry the full detail, so don't reproduce them — a post that re-explains every36fix does the release notes' job twice and buries its own news doing it.3738**Merged but not released.** They can't get it yet, so per-fix detail helps39nobody. Say what's coming, when, and why it's worth knowing about now.4041**Not merged.** Say what's coming, why, whatever is genuinely settled — that42it's a breaking change, roughly when — and link to where they can follow along.43Nothing else. The design docs and PRs behind unfinished work contradict each44other and use provisional names, because that's what unfinished work looks45like. Mining them for mechanism produces detail that's wrong as often as it's46right, and the links carry it for anyone who wants it.4748**Real but far off.** A plan that won't be real for a long time is a49distraction rather than news. Every fact about it can be true and sourced and50it still costs the reader more than it gives them. Wait until there's something51to do about it.5253## Critical: don't fabricate5455Every factual claim in the post must come from a verifiable source: the56issue or its comments, linked PRs/releases, git/gh history, or the user.57This applies especially to *characterizations* — how long something58existed, how widely it affected users, the history behind a fix, the59severity of a bug. Don't invent backstory to make a routine item sound60dramatic. Duration, impact, and history are factual claims; if you can't61substantiate them, don't write them.6263When you're tempted to add color about history, severity, or impact:64651. **Verify first.** Use `gh issue view`, `gh pr view`, `gh release view`,66 `git log`, release notes. The actual history is usually one command67 away.682. **Ask the user** if you can't verify and the characterization adds69 value.703. **If neither, drop the characterization.** A flat description of what71 happened beats a fabricated dramatic one. The hyperbolic-language rule72 ("flair in *how* things are said, not in inflating what they are")73 applies to phrasing. This rule applies to facts.7475The interview in step 6 is where most of this gets settled. The goal is76correctness and narrative interestingness, not speed to getting a draft77up. Multiple rounds of questions are fine.7879## Additional Notes8081- **Most items go under `## Items of Note`** as `###` subsections. Top-level82 `##` sections are reserved for highlighted items only. The default home for83 any item is Items of Note — only promote to `##` when there's a specific84 reason. Things that warrant highlighting:85 - Changes in Pony team membership (new committers, new core team members,86 departures).87 - Libraries with a 0.1.0 release — describe what the library provides and88 why you'd want it. Don't cover libraries that haven't had a first release89 yet.90 - Major version bumps (1.0.0, 2.0.0, etc.) — cover what changed and why it91 matters.92 - Items explicitly flagged for highlighting in the issue comments.93- **Every release goes in the `## Releases` bullet list.** Not every release94 earns an Items of Note writeup. A version bump that pulls in upstream95 dependency fixes, or a release whose changes are routine, belongs in the96 Releases list and nowhere else. Read the release notes and ask: is there a97 story a reader would care about? Bug fixes that affect users, new features,98 breaking changes — those warrant a `###` subsection under Items of Note.99 "There were changes" does not.100- New library sections should be feature overviews, not per-version101 changelogs. When a library has multiple releases in one week, describe102 what it does as a whole. Don't enumerate what changed in each version.103- Describe libraries and tools by what happens when you use them, not by104 listing their contents. "Load it and Claude has the actual capability105 rules in context instead of guessing" tells the reader more than106 "capabilities, subtyping rules, common gotchas." Lead with the107 experience of using it, not the inventory. Focus on what it does for108 the user, not project-internal motivations (why it was built, what109 larger effort it's part of).110- **Re-establish context for libraries that evolve between posts.** When111 covering a new release of something that appeared in a previous LWIP,112 bring forward the context the reader needs. Don't assume they remember113 last week's post. If hobby introduced actor-per-request handlers in114 0.4.0 and this week's 0.5.0 adds interceptors that run before the115 handler actor is spawned, explain the model before referencing it.116- When referring to repos by short name in prose (not `owner/repo` format),117 use lowercase to match the actual repo name: `ponyc`, `corral`, `ponyup`,118 not `Ponyc`, `Corral`, `Ponyup`.119- The post is authored by seantallen. Write in first person ("I", "my"), not120 third person ("Sean", "his"). Third person is occasionally used as a joke121 but is not the default.122- Link targets should match what the link text describes. Don't link "Homebrew123 formula" to a Zulip thread about the formula — either link to the formula124 itself or use plain text.125- Be frugal with em dashes. A few per post is fine, but heavy use reads as126 AI-generated. Prefer periods, commas, colons, or parentheses when they127 work just as well.128- Issue comments are raw material, not copy. Turn them into flowing129 narrative. Avoid choppy sequences of disconnected sentences. But when130 the raw material has personality — colorful phrasing, genuine131 enthusiasm, humor — preserve and amplify it. Don't grind human voice132 down into flat declarative prose. Adapt it to fit the post's flow,133 but keep the energy.134- **Every section should be narrative, not a topic inventory.** A paragraph135 of independent facts separated by periods is just a bullet list without136 the bullets. Connect ideas: cause and effect, contrast, significance,137 what ties them together. The reader should feel a thread pulling them138 through, not a checklist they're being walked down. This applies139 everywhere — opening hooks, Items of Note subsections, release140 write-ups. If you could turn the paragraph into bullets and lose141 nothing, it needs rewriting.142- **Match section depth to the story, not to the release notes.** A143 release with a long changelog can have a short story. Twelve entries144 in the release notes does not mean twelve things to cover — it means145 finding the two or three the reader cares about and telling those146 well. Conversely, a single change with real consequences for users147 can warrant a full section. The release notes' length is not the148 section's length.149- **Items of Note altitude: what broke and what to do.** Tell the reader150 what was broken and what to do about it. Not how the bug worked. The151 reader is a Pony user, not a maintainer — "signal handling had enough152 edge-case bugs that anyone using it seriously would hit one" is the153 right altitude; enumerating each edge case and its mechanism is not.154 Save the mechanism for the release notes link.155- Keep voice consistent between adjacent sections. When two sections cover156 similar content (two new tools, two related libraries), they should read157 the same way.158- Use "ponyc" not "ponylang/ponyc" in prose and section headings. Only use159 `ponylang/ponyc` in the releases list.160- **The opening should match the energy of the week.** LWIP is community161 outreach and a hypefest. Not sales — genuine excitement. When there's162 a lot going on, the opening should convey that. Let the reader know163 whether it was a big week or a quiet one. Gab with them a little164 before diving in. If there are three big things happening, be excited165 about three big things happening. A flat "Let's get into it" after a166 stacked week undersells the content and the community behind it.167- `## RFCs` section (when applicable) goes after `## Releases`. Use `###`168 subsections by status change (`### New`, `### Accepted`,169 `### Final Comment Period`, `### Implemented`, etc.). Only include statuses170 that have entries that week.171172## Steps173174Follow these steps:1751761. **Read editorial guidelines**: Read the "Last Week in Pony" section in177 this project's AGENTS.md for format, tone, and domain-specific notes.1781792. **Study recent posts and voice calibration**: Read the 2-3 most recent180 posts in `docs/blog/posts/last-week-in-pony-*.md`. Also read 2-3 posts181 from `~/code/seantallen/seantallen.com/content/posts/` to calibrate on182 Sean's personal writing voice. Key traits: he connects ideas into183 flowing narrative (not choppy fact sequences), tells you *why* things184 matter (not just what they are), shares opinions freely, uses natural185 asides and humor, and varies sentence length. The language is186 hyperbolic but the facts aren't — the flair is in *how* things are187 said ("gracing you with," "the whole thing"), not in inflating what188 they are. Don't write feature checklists ("X is supported. Y is189 supported.") — describe things the way you'd tell someone about them190 in conversation.1911923. **Rotate the issue first**: Run193 `gh issue list --repo ponylang/ponylang-website --label last-week-in-pony --state open`194 to identify the current issue. Calculate the next Sunday from today's195 date. Create a new empty issue in `ponylang/ponylang-website` titled196 `Last Week in Pony - {next Sunday: Month Day, Year}`, add the197 `last-week-in-pony` label, and pin it. Then remove the198 `last-week-in-pony` label from the current week's issue, unpin it, and199 close it.200201 Why first: until you rotate, the current issue is still the live,202 pinned target. If you collect the week's items and *then* rotate,203 anything posted in between lands on an issue you've already read and204 closed — lost from both this post and next week's. Rotating first205 moves the live target to the new issue, freezing this week's set206 before you read it.2072084. **Read the rotated-out issue**: Read the now-closed issue with all its209 comments. This is the frozen set of items for the post.2102115. **Read release notes**: For any release items in the rotated-out212 issue, fetch the release notes (e.g.,213 `gh release view TAG --repo ORG/REPO`) and evaluate whether the214 release has noteworthy content deserving its own section.2152166. **Interview the author, then verify**: Interview before you draft.217 Always, not only when something looks like it's missing — you can't218 tell that it is. The answers that matter most are in the author's head219 and appear in no issue, PR, or release note, so no amount of reading220 surfaces them and a pile of verified facts feels like coverage while221 the gaps stay invisible.222223 Ask what they've been working on that isn't in the issue, what they224 think matters most this week, what's coming that people should know225 about, and what's actually shipped versus still sitting on a branch.226 Those work because none of them require you to have spotted a gap227 first. Follow the answers rather than the list, and go more than one228 round.229230 Then verify: list every characterization you intend to make about231 history, severity, duration, or impact, and confirm each from sources232 (issue/PR/release notes, `git log`, `gh`) or from the author.233 Correctness and narrative interestingness beat draft speed.2342357. **Write the draft**: Create the post following the format in AGENTS.md.236 Use the date from the issue title for the filename and front matter.2372388. **Review**: Run the `ponylang-prose-review` skill on the draft (full239 mode — a post is always more than two paragraphs). It runs the house-voice,240 narrative, reader-orientation, tightness, and content-honesty lenses as241 parallel reviewers (plus a conditional accuracy lens when the post has code242 or technical claims), checks the draft against the AGENTS.md editorial243 guidelines and the craft rules with the week's source bundle (the rotated244 issue and its comments, linked posts, release notes, cited PRs/issues) in245 hand, and runs the mechanical pre-check (cspell, `mkdocs build --strict`,246 em-dash count, link sanity). Apply its Fix findings; for each Park finding,247 incorporate it if you agree, or present the dispute to the user for a248 ruling. The ensemble synthesizes in one pass — there's no per-round249 re-spawn loop.2502519. **Commit and PR**: Create a branch, commit the new post with the message252 `Last Week in Pony - Month Day, Year`, and open a PR. Report the PR URL253 to the user.254