From building-in-the-open
Generates CHANGELOG.md entries and release announcements from the same set of changes — Technical Writer persona for factual changelogs, Marketing Copywriter for benefit-forward announcements. Use at release time, when writing release notes or version summaries, or incrementally as user-facing features land on main.
npx claudepluginhub claylo/building-in-the-open --plugin building-in-the-openThis skill is limited to using the following tools:
**Announce at start:** "I'm using the **bito** writing-changelogs skill — Technical Writer for the changelog, Marketing Copywriter for the release announcement."
Implements Playwright E2E testing patterns: Page Object Model, test organization, configuration, reporters, artifacts, and CI/CD integration for stable suites.
Guides Next.js 16+ Turbopack for faster dev via incremental bundling, FS caching, and HMR; covers webpack comparison, bundle analysis, and production builds.
Discovers and evaluates Laravel packages via LaraPlugins.io MCP. Searches by keyword/feature, filters by health score, Laravel/PHP compatibility; fetches details, metrics, and version history.
Announce at start: "I'm using the bito writing-changelogs skill — Technical Writer for the changelog, Marketing Copywriter for the release announcement."
| Output | Persona | Location | Audience |
|---|---|---|---|
| CHANGELOG.md entry | Technical Writer | CHANGELOG.md (project root) | Existing users upgrading |
| Release announcement | Marketing Copywriter | GitHub Release, blog, social | Potential and existing users |
Injected at skill load time — use as your starting point for Step 1.
Latest tag: !git describe --tags --abbrev=0 2>/dev/null || echo "(no tags)"
Commits since last tag:
!git log --oneline $(git describe --tags --abbrev=0 2>/dev/null || echo HEAD~20)..HEAD 2>/dev/null || git log --oneline -20 2>/dev/null || echo "(no git history)"
Use the change history above as your starting point. Also review:
For each change, note:
Load the Technical Writer persona from ${CLAUDE_PLUGIN_ROOT}/personas/technical-writer.md.
Dialect: Check for BITO_DIALECT environment variable or the project's bito config for a dialect preference (en-us, en-gb, en-ca, en-au). If set, use that dialect's spelling conventions consistently throughout both the changelog entry and the release announcement. If not set, default to en-US.
Follow Keep a Changelog conventions:
## [X.Y.Z] - YYYY-MM-DD
### Added
- [Feature description with concrete detail]
### Changed
- [What changed and why it's different from before]
### Fixed
- [What was broken and how it manifests — not just "fixed bug in X"]
### Removed
- [What's gone and what replaces it, if anything]
### Migration
- [Concrete steps users must take to upgrade]
Guidelines: group by user impact (not code), name the visible behavior, include migration steps for any behavior change (even "No migration needed"), link to ADRs for rationale, one line per change.
Load the Marketing Copywriter persona from ${CLAUDE_PLUGIN_ROOT}/personas/marketing-copywriter.md.
Structure:
vX.Y.Z: [One-sentence summary of the headline change].Guidelines: benefits before features, one core message per announcement, be specific ("enforces a 2,000-token budget" not "improved quality"), match energy to scope.
For the CHANGELOG.md entry, verify:
For the release announcement, verify:
Run both outputs through editorial-review if available. Watch for:
writing-end-user-docs for new features. The changelog becomes a reference for future curating-context handoffs.writing-end-user-docs — if a feature is significant enough for a changelog entry, it may also need updated user docs.| Mistake | Fix |
|---|---|
| Changelog entries describe code, not behavior | "Added readability.rs" tells users nothing. "Added readability scoring for documentation files" tells them what they gained. |
| Missing migration steps | Even trivial upgrades benefit from "No migration needed — drop-in replacement." Users scanning for migration steps deserve an explicit answer. |
| Announcement oversells a patch release | Match the energy to the scope. A bugfix gets two sentences. A major feature gets a paragraph. Don't inflate. |
| Same voice for both outputs | The changelog and announcement have different audiences and different personas. If they read the same, one of them is wrong. |
| Vague changelog entries ("various improvements", "bug fixes") | Name every change specifically. If a change isn't worth naming, it isn't worth listing. |
| Announcement without a try-it command | The reader decided to try it. Don't make them hunt for how. Include the install or upgrade command. |