generating-release-content

Installation
SKILL.md

Generating Release Content

Populate the four AI-generated fields on a release:

  • title_generated — self-contained news headline (60–90 chars, hard cap 100)
  • title_short — Axios "smart brevity" headline for chrome-stripped surfaces
  • summary — 1–2 sentence prose blurb
  • composition{bugs, features, enhancements} counts (stored on releases.metadata.$.composition)

The fields are the same whether you're generating for the first time or rewriting after a prompt change. There is no "new vs. regen" branch in the pipeline — last write wins.

The production prompt emits two more tags this skill does not persist. Since #1696 the shared prompt also outputs <breaking> (upgrade-risk verdict: major/minor/none/unknown) and <migration> (≤3-sentence upgrade steps), persisted at ingest to releases.breaking / releases.migration_notes. The write paths this skill uses can't carry them: PATCH /v1/releases/:id is .strict() and rejects breaking/migrationNotes, and the bulk script's UPDATE only sets the four fields above. Parse and discard them locally (they'll appear in the raw output); regenerating them is ingest-only for now.

Prompt is canonical in code, not in this skill

The system prompt and all parsing rules live in packages/ai/src/release-content.ts. Read it directly; do not paraphrase it back into the user message. The same module is consumed by the ingest worker (workers/api/src/workflows/poll-and-fetch.ts), the backfill script (scripts/generate-release-content.ts, OpenRouter by default), and this skill, so any drift between local-agent output and ingest-time output starts there.

Re-export from that file:

Installs
2
GitHub Stars
4
First Seen
Jul 17, 2026
generating-release-content — buildinternet/releases