Files
paperclip/skills/release/SKILL.md

5.9 KiB

name, description
name description
release Coordinate a full Paperclip release across engineering, website publishing, and social announcement. Use when CTO/CEO requests "do a release" or "release vX.Y.Z". Runs pre-flight checks, generates changelog via release-changelog, executes npm release, creates cross-project follow-up tasks, and posts a release wrap-up.

Release Coordination Skill

Run the full Paperclip release process as an organizational workflow, not just an npm publish.

This skill coordinates:

  • App release execution (scripts/release.sh)
  • User-facing changelog generation (release-changelog skill)
  • Website publishing task creation
  • CMO announcement task creation
  • Final release summary with links

Trigger

Use this skill when leadership asks for:

  • "do a release"
  • "release {patch|minor|major}"
  • "release vX.Y.Z"

Preconditions

Before proceeding, verify all of the following:

  1. skills/release-changelog/SKILL.md exists and is usable.
  2. The release-changelog dependency work is complete/reviewed before running this flow.
  3. App repo working tree is clean.
  4. There are commits since the last release tag.
  5. You have release permissions (npm whoami succeeds for real publish).
  6. If running via Paperclip, you have issue context for posting status updates.

If any precondition fails, stop and report the blocker.


Inputs

Collect these inputs up front:

  • Release request source issue (if in Paperclip)
  • Requested bump (patch|minor|major) or explicit version (vX.Y.Z)
  • Whether this run is dry-run or live publish
  • Company/project context for follow-up issue creation

Step 1 - Pre-flight and Version Decision

Run pre-flight in the App repo root:

LAST_TAG=$(git tag --sort=-version:refname | head -1)
git diff --quiet && git diff --cached --quiet
git log "${LAST_TAG}..HEAD" --oneline --no-merges | head -50

Then detect minimum required bump:

# migrations
git diff --name-only "${LAST_TAG}..HEAD" -- packages/db/src/migrations/

# schema deltas
git diff "${LAST_TAG}..HEAD" -- packages/db/src/schema/

# breaking commit conventions
git log "${LAST_TAG}..HEAD" --format="%s" | rg -n 'BREAKING CHANGE|BREAKING:|^[a-z]+!:' || true

Bump policy:

  • Destructive migration/API removal/major changeset/breaking commit -> major
  • Additive migrations or clear new features -> at least minor
  • Fixes-only -> patch

If requested bump is lower than required minimum, escalate bump and explain why.


Step 2 - Generate Changelog Draft

Invoke the release-changelog skill and produce:

  • releases/v{version}.md
  • Sections ordered as: Breaking Changes (if any), Highlights, Improvements, Fixes, Upgrade Guide (if any)

Required behavior:

  • Present the draft for human review.
  • Flag ambiguous categorization items.
  • Flag bump mismatches before publish.
  • Do not publish until reviewer confirms.

Step 3 - Run App Release

After changelog approval, execute:

# dry run
./scripts/release.sh {patch|minor|major} --dry-run

# live release
./scripts/release.sh {patch|minor|major}

Then capture final release metadata:

NEW_TAG=$(git tag --sort=-version:refname | head -1)   # e.g. v0.4.0
NEW_VERSION=${NEW_TAG#v}
NPM_URL="https://www.npmjs.com/package/@paperclipai/cli/v/${NEW_VERSION}"

If publish fails, stop immediately, keep issue in progress/blocked, and include failure logs in the update.


Step 4 - Create Cross-Project Follow-up Tasks

Create at least two tasks in Paperclip:

  1. Website task: publish changelog for v{version}
  2. CMO task: draft announcement tweet for v{version}

When creating tasks:

  • Set parentId to the release issue id.
  • Carry over goalId from the parent issue when present.
  • Include billingCode for cross-team work when required by company policy.
  • Mark website task high priority if release has breaking changes.

Suggested payloads:

POST /api/companies/{companyId}/issues
{
  "projectId": "{websiteProjectId}",
  "parentId": "{releaseIssueId}",
  "goalId": "{goalId-or-null}",
  "billingCode": "{billingCode-or-null}",
  "title": "Publish release notes for v{version}",
  "priority": "medium",
  "status": "todo",
  "description": "Publish /changelog entry for v{version}. Include full markdown from releases/v{version}.md and prominent upgrade guide if breaking changes exist."
}
POST /api/companies/{companyId}/issues
{
  "projectId": "{workspaceProjectId}",
  "parentId": "{releaseIssueId}",
  "goalId": "{goalId-or-null}",
  "billingCode": "{billingCode-or-null}",
  "title": "Draft release announcement tweet for v{version}",
  "priority": "medium",
  "status": "todo",
  "description": "Draft launch tweet with top 1-2 highlights, version number, and changelog URL. If breaking changes exist, include an explicit upgrade-guide callout."
}

Step 5 - Wrap Up the Release Issue

Post a concise markdown update linking:

  • Release issue
  • Changelog file (releases/v{version}.md)
  • npm package URL
  • Website task
  • CMO task
  • Final changelog URL (once website publishes)
  • Tweet URL (once published)

Completion rules:

  • Keep issue in_progress until website + social tasks are done.
  • Mark done only when all required artifacts are published and linked.
  • If waiting on another team, keep open with clear owner and next action.

Paperclip API Notes (When Running in Agent Context)

Use:

  • GET /api/companies/{companyId}/projects to resolve website/workspace project IDs.
  • POST /api/companies/{companyId}/issues to create follow-up tasks.
  • PATCH /api/issues/{issueId} with comments for release progress.

For issue-modifying calls, include:

  • Authorization: Bearer $PAPERCLIP_API_KEY
  • X-Paperclip-Run-Id: $PAPERCLIP_RUN_ID

Failure Handling

If blocked, update the release issue explicitly with:

  • what failed
  • exact blocker
  • who must act next
  • whether any release artifacts were partially published

Never silently fail mid-release.