Skip to content

release: scope the version bump to publishable packages, not the name glob - #1094

Merged
zachshallbetter merged 1 commit into
mainfrom
docs/release-filter-scope
Jul 22, 2026
Merged

release: scope the version bump to publishable packages, not the name glob#1094
zachshallbetter merged 1 commit into
mainfrom
docs/release-filter-scope

Conversation

@zachshallbetter

Copy link
Copy Markdown
Owner

The bug 0.10.0 caught

The release version-bump used pnpm --filter "@fundamental-engine/*" exec npm version …. That glob also matches the private workspace apps — apps/site, apps/starter, apps/observatory — which share the npm scope but version independently. exec npm version ignores the private flag, so the glob silently bumped all three to the release version.

Live proof: during 0.10.0, observatory jumped 0.0.0 → 0.10.0 and I had to revert it by hand mid-release.

Why prevention, not the existing mitigation

RELEASING.md already carried a note to "revert them after the bump" with a git checkout list. That manual revert is exactly the step that's easy to forget — and forgetting it ships wrong app versions.

The fix removes the failure mode instead of documenting around it:

- pnpm --filter "@fundamental-engine/*" exec npm version …   # bumps the 3 private apps too
+ pnpm --filter "./packages/*"          exec npm version …   # exactly the 7 publishable packages

./packages/* resolves to exactly the seven — verified — so nothing bumps that shouldn't, and the revert step is deleted as dead.

Scope

RELEASING.md, PUBLISHING.md, release.yml (8 occurrences). Publish commands changed too for consistency — behaviorally identical, since pnpm publish already skips private packages (which is why only the bump was ever affected).

Gates

check:links green · release.yml YAML validated · ./packages/* confirmed = 7 packages.

… glob

The version-bump command used --filter "@fundamental-engine/*", which also matches the
private workspace apps (apps/site, apps/starter, apps/observatory). They share the npm scope
but version independently, and 'exec npm version' ignores the private flag — so the glob
silently bumped all three to the release version. 0.10.0 caught it in the act: observatory
went 0.0.0 -> 0.10.0 and had to be reverted by hand mid-release.

The doc already knew: it carried a note to 'revert them after the bump' with a git checkout
list. That mitigation is exactly the step that's easy to forget. Prevention beats it — the
path filter ./packages/* targets only the seven publishable packages, so nothing is bumped
that shouldn't be and there is nothing to revert. Its confirm line already used ./packages/*;
this finishes a half-done migration.

pnpm publish already skips private packages, so only the version bump was ever affected; the
publish commands are changed to ./packages/* for consistency, same seven packages.

Applied across RELEASING.md, PUBLISHING.md and release.yml. check:links green; release.yml
YAML validated; ./packages/* confirmed to resolve to exactly the seven.
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
fundamental-engine Ready Ready Preview Jul 22, 2026 4:15am

Request Review

@zachshallbetter
zachshallbetter merged commit 4f24c7d into main Jul 22, 2026
13 checks passed
@zachshallbetter
zachshallbetter deleted the docs/release-filter-scope branch July 22, 2026 04:15

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1a89a9940d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread RELEASING.md
3. **Bump all seven packages together** (keep them at the same version):
```sh
pnpm --filter "@fundamental-engine/*" exec npm version <patch|minor|major> --no-git-tag-version
pnpm --filter "./packages/*" exec npm version <patch|minor|major> --no-git-tag-version

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Require repo-root execution for path filters

When this new path selector is run from any subdirectory (for example packages/core while cutting a release), pnpm interprets ./packages/* relative to the current working directory; pnpm help publish describes --filter ./<dir> as selecting packages inside that subdirectory, and --fail-if-no-match is the separate opt-in for failing on no matches. I verified with pnpm 10.28.1 that from packages/core this selector prints No projects matched and exits 0, so the version-bump step can silently skip all seven packages; the old name glob was cwd-independent. Please either state that these commands must be run from the repo root, add --fail-if-no-match, or use exact package-name filters.

Useful? React with 👍 / 👎.

@zachshallbetter zachshallbetter mentioned this pull request Jul 22, 2026
zachshallbetter added a commit that referenced this pull request Jul 22, 2026
Kotlin port parity — the Compose `FieldView` renders a multi-hue
palette. Resolves #1090; ships the fix merged in #1095.

## What & scope

- `FieldView` gains `palette: List<Color>` (backward-compatible;
defaults to `[accent]`). Each particle takes a stable colour by pool
index across all four render modes. Verified against the iOS
`10-intro-star`.
- **Kotlin-only.** JS and Swift are byte-identical to 0.10.0 — they
already had the palette. npm + Swift republish at 0.10.1 **only** to
hold cross-plane lockstep; no JS/Swift behaviour change. The changelog
states this so the bump isn't misread.

## Versions

- 7 packages + `FIELD_VERSION` → `0.10.1` (lockstep, drift test green).
- **The private-app trap did not recur** — the `./packages/*` filter
from #1094 held: site/starter/observatory unchanged at 0.2.0 / 0.1.0 /
0.0.0.

## Release

`git tag v0.10.1` → npm + Swift (SPM) + Kotlin (Maven, via the CI job)
in lockstep. Ascent then flips `0.10.1-local` → `0.10.1`.

## Still open

#1091 — the parity matrix doesn't track colour, which is why this
reached an app before a gate. Closing it makes a future palette
divergence fail CI instead of shipping.

## Gates

typecheck · build · `check:api` (no removals) · `check:docs` ·
`check:links` · FIELD_VERSION lockstep — all green.
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