Skip to content

fix(packages): core 0.25.2 + ui 0.38.1, and a package smoke that catches an unpublished core subpath - #1510

Merged
backnotprop merged 1 commit into
mainfrom
fix/ui-0.38.1-core-0.25.2
Sep 11, 2026
Merged

backnotprop merged 1 commit into
mainfrom
fix/ui-0.38.1-core-0.25.2

Conversation

@backnotprop

Copy link
Copy Markdown
Owner

Problem

@plannotator/ui 0.38.0 does not install into a consumer (reported by the Workspaces bump PR #400). config/settings.ts imports @plannotator/core/token-hover, added to core by #1462 without bumping core, so 0.38.0 pins core 0.25.1, which never published that subpath. The path is unavoidable for any host: configure → config/configStore → config/settings.

The preflight (smoke:package) passed anyway, for two reasons: its external consumer installs core from the local tarball via a pnpm override, so an export present in source but absent on the registry is invisible, and its consumer entry never imported the configure/config path.

Fix

  • core 0.25.2: publishes ./token-hover plus what core accumulated since 0.25.1 (rotated guide-viewer-manifest pin, config-types hover fields). Patch bump follows the 0.25.0 → 0.25.1 precedent for an additive subpath.
  • ui 0.38.1: 0.38.0 pinning core 0.25.2. Also aligns @codemirror/state to ^6.7.2 beside @codemirror/view ^6.43.10 (the consumer otherwise resolves two state copies and tsc rejects the private dispatchTransactions; same root as the QA-gate duplicate-copy finding).
  • smoke:package hardened, three layers:
    1. every @plannotator/core/<subpath> the UI source imports must be an export of the core source manifest;
    2. when the pinned core version already exists on the registry, every such subpath must be exported by that published core, and the core source exports must equal the published ones exactly, otherwise "bump core and publish it first"; when the pinned version is not published yet it prints the publish-core-first reminder;
    3. the external consumer now imports @plannotator/ui/configure and @plannotator/ui/config and calls configurePlannotatorUI({}), so its vite build and tsc compile the settings path.
  • HANDOFF / README: current pair 0.38.1 on 0.25.2; "do not consume ui 0.38.0" added to the install matrix with the reason.

Verification

  • Positive: bun run --cwd packages/ui smoke:package on this branch passes and prints @plannotator/core@0.25.2 is not on the registry yet: publish core FIRST.
  • Negative: with packages/core set back to 0.25.1 and the UI pin to 0.25.1 (exactly the published 0.38.0 state), the smoke fails: UI imports @plannotator/core/token-hover but the PUBLISHED @plannotator/core@0.25.1 does not export it. Restored afterwards; bun.lock diff is version lines only.

Publish order after merge (owner, manual)

  1. cd packages/core && bun pm pack && npm publish plannotator-core-0.25.2.tgz --tag next --access public
  2. cd ../ui && bun run smoke:package (now checks the registry) && bun pm pack && npm publish plannotator-ui-0.38.1.tgz --tag next --access public
  3. Verify, then promote both to latest.
  4. Consider npm deprecate @plannotator/ui@0.38.0 "does not compile: pins core 0.25.1 without ./token-hover; use 0.38.1".

Do not publish from this PR.

…0.38.1) and make the package smoke catch an unpublished core

@plannotator/ui 0.38.0 does not install into a consumer: config/settings.ts
imports @plannotator/core/token-hover (#1462), but that PR added the export
to core without bumping it, so 0.38.0 pins core 0.25.1, which never
published the subpath. Every host reaches it through configure -> config ->
settings, so typecheck and build fail on the first import.

core 0.25.2 publishes ./token-hover plus the other changes core accumulated
since 0.25.1 (the rotated guide-viewer-manifest pin, the config-types hover
fields). ui 0.38.1 is 0.38.0 pinning core 0.25.2, and aligns
@codemirror/state to ^6.7.2 beside @codemirror/view ^6.43.10 so a consumer
cannot resolve two state copies.

The package smoke passed on 0.38.0 because its external consumer installs
core from the LOCAL tarball (pnpm override), so an export that exists in
source but not on the registry is invisible to it, and its consumer entry
never imported the configure/config path. It now (1) collects every
@plannotator/core/<subpath> the UI source imports and asserts each is an
export of the core source manifest, (2) when the pinned core version is
already on the registry, asserts each is exported by THAT published core
and that the core source exports match it exactly (otherwise: bump core and
publish it first), printing a publish-core-first reminder when the pinned
version is not published yet, and (3) compiles @plannotator/ui/configure
and @plannotator/ui/config in the external consumer's vite build and tsc.
With the pins set back to 0.38.0's, the smoke now fails naming token-hover.

HANDOFF and README: current pair 0.38.1 on 0.25.2; do not consume 0.38.0.
@backnotprop
backnotprop merged commit b5acac6 into main Sep 11, 2026
28 checks passed
@backnotprop
backnotprop deleted the fix/ui-0.38.1-core-0.25.2 branch September 11, 2026 19:42
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