Skip to content

#854 and #874 were closed with no mechanism added, and three more breaking changes shipped as patches in the six days since #903

Description

@sroussey

What

Both #854 (2026-09-01) and #874 (2026-09-01) were closed completed. Neither has a linked PR, and nothing in the tree changed: the release script is byte-identical and there is no new check anywhere in scripts/.

$ grep -n '"bunset"' package.json
55:    "bunset": "git login && bunset --patch --all --push --commit --tag --sections=all --release",

--patch --all is still what versions all 42 packages, so the bump is never a function of what changed.

#874 asked specifically for one thing before the next cut: "amend the changeset for @workglow/tasks to a minor with a Breaking Changes entry naming the required fileSystemTasks option." That did not happen. 7f52b93 shipped in 0.4.4 — a patch — under ### Bug Fixes:

$ sed -n '/## 0.4.4/,/## 0.4.3/p' packages/tasks/CHANGELOG.md
## 0.4.4
### Features
#### task
- implement entitlement enforcement in TaskRunner and TaskGraphRunner
### Bug Fixes
#### tasks
- make dropping the filesystem tasks a compile-time decision

Three new instances in this window

The window is 56 non-merge commits with zero breaking markers of any kind:

$ git log --format='%h %s' 9a80450..origin/main | grep -c '!:'
0
$ git log --format='%B' 9a80450..origin/main | grep -c 'BREAKING CHANGE'
0

1. @workglow/ai 0.4.8 (patch) deletes a public export. isModelEffortEnabled — added in the 2026-08-24 window as the gate wiring six providers' effort policies — is gone from ModelSchema.ts's re-export list and from the tree:

$ git show 9a80450:packages/ai/src/model/ModelSchema.ts | grep -n isModelEffortEnabled
14:  isModelEffortEnabled,
$ grep -rn "isModelEffortEnabled" --include=*.ts . | grep -v node_modules | grep -v dist/
(no output)

packages/ai/src/common.ts:16 is export * from "./model/ModelSchema", so this was a public symbol of @workglow/ai. The changelog files it under ### Features and ### Refactors. The hand-written ModelPricing interface was replaced by a schema-derived type in the same bump.

2. @workglow/sqlite 0.4.6 (patch) raises the runtime floor and drops a peer. 80751ff swaps better-sqlite3 for node:sqlite, adds engines.node: ">=24" to a package that previously declared none, deletes the bun export condition and src/storage/bun.ts, and — per its own commit body — "raises the runtime floor on Bun to 1.4". The changelog entry is one line under ### Features.

3. @workglow/storage 0.4.8 (patch) widens SearchCriteria. The not-in operator (f678c24) adds a member to the union every third-party ITabularStorage implementation has to handle. Additive for callers, breaking for implementers, no signal either way.

Why this needs a mechanism rather than another issue

The commit bodies have been excellent every single time — 80751ff's is one of the best in the repo's history. The failure is entirely at the release boundary, and it is now on its fourth consecutive cycle. Closing the tracking issues without changing the tooling removed the only record that it was still happening.

Proposed fix (cheapest first)

  1. A commit-lint rule, as A source-breaking API change landed with no ! and no BREAKING CHANGE footer — the check proposed in #854 would not catch it #874 already proposed: a commit that changes an exported signature in packages/*/src/{browser,node,electron,common,worker}.ts, or that adds/changes an engines field, must carry ! or a BREAKING CHANGE: footer. ~30 lines, runs in the existing lint job.
  2. A published-surface diff at release time. bunset already knows which packages it is about to version; comparing each one's dist/*.d.ts exported-symbol set against the last published tag and failing when a symbol disappeared under a non-minor bump would have caught instance 1 mechanically. An engines narrowing is a two-line semver comparison and would have caught instance 2.
  3. Stop --patch --all: a package whose changelog section for the cut is empty should not be versioned at all (already asked for in Release tooling: a BREAKING CHANGE shipped as a patch (@workglow/tasks 0.3.48/0.3.49) #854; 37 of 42 sections were empty at 0.4.0 and the same shape recurs at 0.4.5).

Found during the 2026-09-07 review of packages/. Verified against origin/main @ fb861bb.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions