Skip to content

Cut empty CHANGELOG stubs, lint release-notes, document the flow#491

Merged
RhysSullivan merged 1 commit intomainfrom
changelog-cleanup
May 4, 2026
Merged

Cut empty CHANGELOG stubs, lint release-notes, document the flow#491
RhysSullivan merged 1 commit intomainfrom
changelog-cleanup

Conversation

@RhysSullivan
Copy link
Copy Markdown
Owner

Summary

The 31 workspace CHANGELOG.md files were all stubs — either a one-line package-name header or a four-line "this exists for changesets compat" note. Changesets is configured with changelog: false, and an empirical run of bun run changeset:version against a tree with no CHANGELOG.md files regenerated nothing. They're noise.

  • Delete all 31 workspace CHANGELOG.md files.
  • Add scripts/check-release-notes.ts and bun run lint:release-notes. Adapted from openclaw's check-changelog-attributions.mjs. Rejects forbidden Thanks attribution (@claude, @anthropic, @claude-bot, @github-actions, @dependabot, @renovate, @rhyssullivan, @rhys-sullivan).
  • Update RELEASING.md and .skills/cli-release/SKILL.md to document the single-source-of-truth model: apps/cli/release-notes/next.md is canonical user-facing changelog; changesets are version-bump bookkeeping. They have different audiences and shouldn't be conflated.

Why

Before this PR, every user-facing change required two things: a .changeset/*.md (for the version bump) and an edit to apps/cli/release-notes/next.md (for users). The 31 empty per-package CHANGELOG.md files implied changesets was authoring real per-package histories — it wasn't, and they were never filled in. This removes the dual-maintenance illusion and makes the actual flow explicit.

Pattern reference

  • Adapted from openclaw's attribution validator (scripts/check-changelog-attributions.mjs)
  • next.md authoring conventions are the same shape openclaw uses (Highlights / Fixes / Breaking changes with single-line bullets)

Test plan

  • bun run lint — clean (616 files)
  • bun run lint:release-notes — clean against current next.md, fails cleanly when forbidden Thanks added (verified manually)
  • bun run test:release:bootstrap — passes; release pipeline doesn't touch CHANGELOG.md anywhere
  • grep CHANGELOG across .github/workflows/, scripts/, .changeset/, and apps/cli/src/release.ts — no stale references
  • Empirical: deleted all CHANGELOG.md, ran bun run changeset:version against a fake changeset, confirmed no files were regenerated
  • CI green

The 31 workspace CHANGELOG.md files were all stubs — either a single
package-name header or a four-line "this exists for changesets compat"
note. Changesets has been configured with `changelog: false` for a long
time, and an empirical run of `bun run changeset:version` against a tree
with no CHANGELOG.md files produced no regenerated files. They're noise.

This PR:

- Deletes all 31 workspace CHANGELOG.md files. The user-facing release
  notes live at apps/cli/release-notes/ and stay there.
- Adds scripts/check-release-notes.ts. Validates
  apps/cli/release-notes/next.md and rejects forbidden Thanks
  attribution: @claude, @Anthropic, @claude-bot, @github-actions,
  @dependabot, @renovate, @RhysSullivan, @rhys-sullivan. Adapted from
  openclaw's check-changelog-attributions.mjs. Wired up as
  `bun run lint:release-notes`.
- Updates RELEASING.md to document the single-source-of-truth model
  (next.md is canonical), the section structure, the attribution rules,
  and the changeset-vs-release-notes distinction.
- Updates the cli-release skill (.skills/cli-release/SKILL.md) with the
  same conventions so future agent runs follow them.

Verified:
- `bun run lint` clean
- `bun run lint:release-notes` clean against current next.md, fails
  cleanly when @claude is added
- `bun run test:release:bootstrap` passes (the release pipeline doesn't
  reference CHANGELOG.md anywhere)
- `grep CHANGELOG` across .github/workflows/, scripts/, .changeset/, and
  apps/cli/src/release.ts returns nothing — no stale references
@cloudflare-workers-and-pages
Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
executor-marketing 497a607 Commit Preview URL

Branch Preview URL
May 04 2026, 05:32 AM

@cloudflare-workers-and-pages
Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
executor-cloud 497a607 May 04 2026, 05:33 AM

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 4, 2026

Open in StackBlitz

@executor-js/cli

npm i https://pkg.pr.new/@executor-js/cli@491

@executor-js/config

npm i https://pkg.pr.new/@executor-js/config@491

@executor-js/execution

npm i https://pkg.pr.new/@executor-js/execution@491

@executor-js/sdk

npm i https://pkg.pr.new/@executor-js/sdk@491

@executor-js/storage-core

npm i https://pkg.pr.new/@executor-js/storage-core@491

@executor-js/codemode-core

npm i https://pkg.pr.new/@executor-js/codemode-core@491

@executor-js/runtime-quickjs

npm i https://pkg.pr.new/@executor-js/runtime-quickjs@491

executor

npm i https://pkg.pr.new/executor@491

@executor-js/plugin-file-secrets

npm i https://pkg.pr.new/@executor-js/plugin-file-secrets@491

@executor-js/plugin-google-discovery

npm i https://pkg.pr.new/@executor-js/plugin-google-discovery@491

@executor-js/plugin-graphql

npm i https://pkg.pr.new/@executor-js/plugin-graphql@491

@executor-js/plugin-keychain

npm i https://pkg.pr.new/@executor-js/plugin-keychain@491

@executor-js/plugin-mcp

npm i https://pkg.pr.new/@executor-js/plugin-mcp@491

@executor-js/plugin-onepassword

npm i https://pkg.pr.new/@executor-js/plugin-onepassword@491

@executor-js/plugin-openapi

npm i https://pkg.pr.new/@executor-js/plugin-openapi@491

commit: 497a607

@RhysSullivan RhysSullivan merged commit 1eb32c8 into main May 4, 2026
9 checks passed
RhysSullivan added a commit that referenced this pull request May 4, 2026
#491 deleted 31 empty workspace CHANGELOG.md files based on an empirical
test that they weren't regenerated. That test only exercised the
changesets *CLI*. The `changesets/action@v1` GitHub Action wrapping the
CLI in `release.yml` ALSO reads each bumped package's CHANGELOG.md to
build the Version Packages PR description, and crashes with ENOENT when
any of them is missing.

Concretely, after #491 + #495 merged to main, release.yml failed:

  Error: ENOENT: no such file or directory, open
  '/home/runner/work/executor/executor/apps/cli/CHANGELOG.md'
      at file:///home/runner/work/_actions/changesets/action/v1/dist/index.js:61:49311

Restoring all 31 stubs unblocks the release workflow. The stubs are
required by tooling, not by humans — they hold one-line "this exists for
changesets compatibility" disclaimers and never get release content.

Updates RELEASING.md and .skills/cli-release/SKILL.md to explain why the
stubs exist so this regression doesn't recur.
RhysSullivan added a commit that referenced this pull request May 4, 2026
…orward (#499)

release.yml failed again on the latest main with the same ENOENT — this
time on `packages/core/vite-plugin/CHANGELOG.md`. That package and
`packages/plugins/example` were added in #476 (Spec-driven plugin
loading) without stubs, after my restore PR (#496) only put back the
files #491 had deleted. Drift was inevitable as soon as the next package
landed.

This PR:
- Adds the two missing stubs.
- Adds `scripts/check-changelog-stubs.ts` and wires it into `bun run
  lint`. Fails CI when any workspace package directory lacks a
  CHANGELOG.md, with a clear message explaining why the stubs exist
  (changesets/action@v1 reads them) and pointing at the `--fix` flag.
- `--fix` mode auto-creates stubs with a templated body.

So the next time someone adds a package, lint flags it in PR rather
than release.yml crashing later.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant