From dc0e45146075ee3f253b8cd9c31d98005248ee3b Mon Sep 17 00:00:00 2001 From: Ivan Banov Date: Sun, 4 Oct 2026 22:43:01 +0200 Subject: [PATCH 1/3] chore(deps): update the state-machine packages to the 2026-10-04 release Runtime 0.3.4 and the React 0.3.5 / Solid 0.3.1 / native 0.4.1 adapters; bindings 0.4.1, utils 0.4.0 and dom 0.1.0 are unchanged. Every range moves together because the adapters pin the runtime exactly: a core package left on ^0.3.3 lets an existing install keep 0.3.3 beside the adapter's 0.3.4. The tree resolves to one copy of each runtime-layer package again. The adapter releases only move that pin; the runtime release is internal (after timers join the run-to-completion queue, which no primitive here uses; fewer per-event allocations) with an unchanged type surface. minimumReleaseAgeExclude now holds exactly the four versions published today. pnpm 11 rejects anything younger than its default one-day minimumReleaseAge, frozen installs included, so CI needs them; the bindings, utils and dom entries were past the cutoff and inert, and the rest named versions the tree no longer resolves. Co-Authored-By: Claude Opus 5.5 --- .changeset/state-machine-0-3-4.md | 27 +++++++++ packages/core/dialog/package.json | 2 +- packages/core/utils/controllable/package.json | 2 +- packages/dom/components/dialog/package.json | 2 +- packages/native/dialog/package.json | 2 +- packages/react/dialog/package.json | 2 +- packages/solid/dialog/package.json | 2 +- pnpm-lock.yaml | 60 +++++++++---------- pnpm-workspace.yaml | 11 ++-- 9 files changed, 67 insertions(+), 43 deletions(-) create mode 100644 .changeset/state-machine-0-3-4.md diff --git a/.changeset/state-machine-0-3-4.md b/.changeset/state-machine-0-3-4.md new file mode 100644 index 0000000..35130fa --- /dev/null +++ b/.changeset/state-machine-0-3-4.md @@ -0,0 +1,27 @@ +--- +'@dunky.dev/controllable': patch +'@dunky.dev/dialog': patch +'@dunky.dev/native-dialog': patch +'@dunky.dev/react-dialog': patch +'@dunky.dev/solid-dialog': patch +--- + +Update the state-machine packages to the 2026-10-04 release: runtime `0.3.4` +and the React (`0.3.5`), Solid (`0.3.1`), and native (`0.4.1`) adapters. +Bindings (`0.4.1`), utils (`0.4.0`), and the shared DOM translation (`0.1.0`) +are unchanged. + +Every range moves together on purpose. The adapters pin the runtime exactly +(`@dunky.dev/state-machine: 0.3.4`), so the floor of every caret moves with +them. On the old `^0.3.3`, an install that already held `0.3.3` had no reason +to move it, and upgrading only a binding then put two physical copies of the +runtime side by side: `0.3.3` for the core packages and `0.3.4` for the +adapter — the dependency diamond `ARCHITECTURE.md` warns about, where anything +identity-sensitive silently stops agreeing across the copies. `^0.3.4` rules +`0.3.3` out, so the tree resolves to a single runtime. + +Nothing changes in how the components behave. The runtime release is internal +— fewer allocations on the send path (about 7% more single-event throughput on +its benchmark suite), and `after` timers now join the same run-to-completion +queue as any send, which no primitive here uses — and its type surface is +identical. The adapters only move their runtime pin. diff --git a/packages/core/dialog/package.json b/packages/core/dialog/package.json index 445879a..e567fb5 100644 --- a/packages/core/dialog/package.json +++ b/packages/core/dialog/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@dunky.dev/controllable": "workspace:*", - "@dunky.dev/state-machine": "^0.3.3", + "@dunky.dev/state-machine": "^0.3.4", "@dunky.dev/state-machine-bindings": "^0.4.1" } } diff --git a/packages/core/utils/controllable/package.json b/packages/core/utils/controllable/package.json index b30650c..707ef3a 100644 --- a/packages/core/utils/controllable/package.json +++ b/packages/core/utils/controllable/package.json @@ -36,6 +36,6 @@ "build": "tsdown" }, "dependencies": { - "@dunky.dev/state-machine": "^0.3.3" + "@dunky.dev/state-machine": "^0.3.4" } } diff --git a/packages/dom/components/dialog/package.json b/packages/dom/components/dialog/package.json index 91ebebf..58e4f71 100644 --- a/packages/dom/components/dialog/package.json +++ b/packages/dom/components/dialog/package.json @@ -42,6 +42,6 @@ "@dunky.dev/dom-overlay": "workspace:*" }, "devDependencies": { - "@dunky.dev/state-machine": "^0.3.3" + "@dunky.dev/state-machine": "^0.3.4" } } diff --git a/packages/native/dialog/package.json b/packages/native/dialog/package.json index 9bf9a96..59ab7f1 100644 --- a/packages/native/dialog/package.json +++ b/packages/native/dialog/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@dunky.dev/dialog": "workspace:*", - "@dunky.dev/native-state-machine": "^0.4.0" + "@dunky.dev/native-state-machine": "^0.4.1" }, "devDependencies": { "@testing-library/react-native": "^13.3.3", diff --git a/packages/react/dialog/package.json b/packages/react/dialog/package.json index 2d9d979..38a930e 100644 --- a/packages/react/dialog/package.json +++ b/packages/react/dialog/package.json @@ -38,7 +38,7 @@ "dependencies": { "@dunky.dev/dialog": "workspace:*", "@dunky.dev/dom-dialog": "workspace:*", - "@dunky.dev/react-state-machine": "^0.3.4", + "@dunky.dev/react-state-machine": "^0.3.5", "@dunky.dev/react-use-focus-trap": "workspace:*", "@dunky.dev/react-use-scroll-lock": "workspace:*" }, diff --git a/packages/solid/dialog/package.json b/packages/solid/dialog/package.json index c885d16..047bc5a 100644 --- a/packages/solid/dialog/package.json +++ b/packages/solid/dialog/package.json @@ -38,7 +38,7 @@ "dependencies": { "@dunky.dev/dialog": "workspace:*", "@dunky.dev/dom-dialog": "workspace:*", - "@dunky.dev/solid-state-machine": "^0.3.0", + "@dunky.dev/solid-state-machine": "^0.3.1", "@dunky.dev/solid-use-focus-trap": "workspace:*", "@dunky.dev/solid-use-scroll-lock": "workspace:*" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2022777..f24a81c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -54,8 +54,8 @@ importers: specifier: workspace:* version: link:../utils/controllable '@dunky.dev/state-machine': - specifier: ^0.3.3 - version: 0.3.3 + specifier: ^0.3.4 + version: 0.3.4 '@dunky.dev/state-machine-bindings': specifier: ^0.4.1 version: 0.4.1 @@ -63,8 +63,8 @@ importers: packages/core/utils/controllable: dependencies: '@dunky.dev/state-machine': - specifier: ^0.3.3 - version: 0.3.3 + specifier: ^0.3.4 + version: 0.3.4 packages/core/utils/overlay: {} @@ -84,8 +84,8 @@ importers: version: link:../../utils/overlay devDependencies: '@dunky.dev/state-machine': - specifier: ^0.3.3 - version: 0.3.3 + specifier: ^0.3.4 + version: 0.3.4 packages/dom/utils/element: {} @@ -169,8 +169,8 @@ importers: specifier: workspace:* version: link:../../core/dialog '@dunky.dev/native-state-machine': - specifier: ^0.4.0 - version: 0.4.0(react-native@0.86.0(@babel/core@7.29.7)(@react-native/metro-config@0.86.0(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) + specifier: ^0.4.1 + version: 0.4.1(react-native@0.86.0(@babel/core@7.29.7)(@react-native/metro-config@0.86.0(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3) devDependencies: '@testing-library/react-native': specifier: ^13.3.3 @@ -221,8 +221,8 @@ importers: specifier: workspace:* version: link:../../dom/components/dialog '@dunky.dev/react-state-machine': - specifier: ^0.3.4 - version: 0.3.4(react@19.2.7) + specifier: ^0.3.5 + version: 0.3.5(react@19.2.7) '@dunky.dev/react-use-focus-trap': specifier: workspace:* version: link:../hooks/use-focus-trap @@ -323,8 +323,8 @@ importers: specifier: workspace:* version: link:../../dom/components/dialog '@dunky.dev/solid-state-machine': - specifier: ^0.3.0 - version: 0.3.0(solid-js@2.0.0-rc.1) + specifier: ^0.3.1 + version: 0.3.1(solid-js@2.0.0-rc.1) '@dunky.dev/solid-use-focus-trap': specifier: workspace:* version: link:../hooks/use-focus-trap @@ -989,19 +989,19 @@ packages: '@dom-expressions/compiler@0.50.0-next.40': resolution: {integrity: sha512-RI/kHU+QkLOHo4CQyqLTn9c7sAfl/GEULMsOpS1YqkPJgy7R8MCPWXFN4sI0QDBbM6ePtEyuW+2bsdsXqyxkzQ==} - '@dunky.dev/native-state-machine@0.4.0': - resolution: {integrity: sha512-gA/VP8WySpakwFhd4jIx49ki1TkIEA24fq68MCPrzNL4sLkg4qD+cusAYcCCveAy8YLT8818lbm51mYs6DoR2w==} + '@dunky.dev/native-state-machine@0.4.1': + resolution: {integrity: sha512-zPCZLhgaDqc+T9vGvVnhZOw1DwEsWUrIpzs/2wmH5YG5BQ9G8jnStwlV3rAJS52KMgps1bAG5N3GQ4UGr8R6fA==} peerDependencies: react: '*' react-native: '*' - '@dunky.dev/react-state-machine@0.3.4': - resolution: {integrity: sha512-QWhKVDNq6IK+PFLburz8tht1cL71t3FH8MvzmsvwY1kzBXOGNcTXiPQAsKTLti7Jj+f/7oeKjhZLD8FfxedLwg==} + '@dunky.dev/react-state-machine@0.3.5': + resolution: {integrity: sha512-KDCbuwTb9MyzOmfa/KnJfXuESIO2yMNXKZRzONPqyLaIHii3xtPkB+9ih9HvCpTD/3HSArZ4a40OZMdrCls4nw==} peerDependencies: react: '*' - '@dunky.dev/solid-state-machine@0.3.0': - resolution: {integrity: sha512-8KhPSTkhybbyNfP2BcjZjDm7nKE59ezHTJQPkMlWs19wuTUADF8EJj2XoZ0W1PFgvhxsrNkeieAIjeluwC/t7Q==} + '@dunky.dev/solid-state-machine@0.3.1': + resolution: {integrity: sha512-JCz5S4N5tk6/+QW37o6vN5A1PoqsQpF2g3/FCtZKvf4agBG/qfC2nMK1Kpsu0kO234ZILGAixzckR6Zsl1b+Vw==} peerDependencies: solid-js: ^2.0.0-rc.1 @@ -1014,8 +1014,8 @@ packages: '@dunky.dev/state-machine-utils@0.4.0': resolution: {integrity: sha512-UYf4dikzhSiJ5CeTlsRFUgfMrD5d5c+v5mQgrrYcuYgRdFsL2riTtyptOFe3RKlyrdlNzem/isLb9P3VJr9Rsw==} - '@dunky.dev/state-machine@0.3.3': - resolution: {integrity: sha512-pjI8uKEMq4d1scPpzQ+4cDzW76GSX+IQNngtc6OmMjwOFoL1MsKMW+YO096d0o5Kv2PTOmYvGsGAQ7One4UDdw==} + '@dunky.dev/state-machine@0.3.4': + resolution: {integrity: sha512-nUXH8xZBePEa/WvNBCt73Z9mkRdMV5LU4cM1KXfXhHdHfYiLIJslLYJETp1aBnIMn64gadpJQamX1S8RHw48rg==} '@egjs/hammerjs@2.0.17': resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} @@ -7085,32 +7085,32 @@ snapshots: '@dom-expressions/compiler-wasm32-wasi': 0.50.0-next.40 '@dom-expressions/compiler-win32-x64-msvc': 0.50.0-next.40 - '@dunky.dev/native-state-machine@0.4.0(react-native@0.86.0(@babel/core@7.29.7)(@react-native/metro-config@0.86.0(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)': + '@dunky.dev/native-state-machine@0.4.1(react-native@0.86.0(@babel/core@7.29.7)(@react-native/metro-config@0.86.0(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3))(react@19.2.3)': dependencies: - '@dunky.dev/react-state-machine': 0.3.4(react@19.2.3) - '@dunky.dev/state-machine': 0.3.3 + '@dunky.dev/react-state-machine': 0.3.5(react@19.2.3) + '@dunky.dev/state-machine': 0.3.4 '@dunky.dev/state-machine-bindings': 0.4.1 '@dunky.dev/state-machine-utils': 0.4.0 react: 19.2.3 react-native: 0.86.0(@babel/core@7.29.7)(@react-native/metro-config@0.86.0(@babel/core@7.29.7))(@types/react@19.2.17)(react@19.2.3) - '@dunky.dev/react-state-machine@0.3.4(react@19.2.3)': + '@dunky.dev/react-state-machine@0.3.5(react@19.2.3)': dependencies: - '@dunky.dev/state-machine': 0.3.3 + '@dunky.dev/state-machine': 0.3.4 '@dunky.dev/state-machine-dom': 0.1.0 '@dunky.dev/state-machine-utils': 0.4.0 react: 19.2.3 - '@dunky.dev/react-state-machine@0.3.4(react@19.2.7)': + '@dunky.dev/react-state-machine@0.3.5(react@19.2.7)': dependencies: - '@dunky.dev/state-machine': 0.3.3 + '@dunky.dev/state-machine': 0.3.4 '@dunky.dev/state-machine-dom': 0.1.0 '@dunky.dev/state-machine-utils': 0.4.0 react: 19.2.7 - '@dunky.dev/solid-state-machine@0.3.0(solid-js@2.0.0-rc.1)': + '@dunky.dev/solid-state-machine@0.3.1(solid-js@2.0.0-rc.1)': dependencies: - '@dunky.dev/state-machine': 0.3.3 + '@dunky.dev/state-machine': 0.3.4 '@dunky.dev/state-machine-dom': 0.1.0 '@dunky.dev/state-machine-utils': 0.4.0 solid-js: 2.0.0-rc.1 @@ -7123,7 +7123,7 @@ snapshots: '@dunky.dev/state-machine-utils@0.4.0': {} - '@dunky.dev/state-machine@0.3.3': {} + '@dunky.dev/state-machine@0.3.4': {} '@egjs/hammerjs@2.0.17': dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 56c79a4..eb7a097 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,13 +3,10 @@ packages: allowBuilds: esbuild: true minimumReleaseAgeExclude: - - '@dunky.dev/native-state-machine@0.4.0' - - '@dunky.dev/react-state-machine@0.3.4' - - '@dunky.dev/solid-state-machine@0.3.0' - - '@dunky.dev/state-machine-bindings@0.4.1' - - '@dunky.dev/state-machine-dom@0.1.0' - - '@dunky.dev/state-machine-utils@0.4.0' - - '@dunky.dev/state-machine@0.3.3' + - '@dunky.dev/native-state-machine@0.4.1' + - '@dunky.dev/react-state-machine@0.3.5' + - '@dunky.dev/solid-state-machine@0.3.1' + - '@dunky.dev/state-machine@0.3.4' - '@dom-expressions/babel-plugin-jsx@0.50.0-next.43' - '@solidjs/signals@2.0.0-rc.1' - '@solidjs/web@2.0.0-rc.1' From 2e69b85097dbea35a4e235d27c8655808486cbd4 Mon Sep 17 00:00:00 2001 From: Ivan Banov Date: Sun, 4 Oct 2026 22:43:09 +0200 Subject: [PATCH 2/3] fix(scaffold): stamp the current state-machine ranges The core and React templates still carried ^0.1.0 for the runtime, the bindings and the React adapter. On 0.x a caret never crosses a minor, so a freshly scaffolded primitive installed 0.1.0 copies beside the repo's current ones: pnpm why reported two versions each of @dunky.dev/state-machine, -bindings and react-state-machine. Every template range now matches the package it mirrors, and the same scaffold resolves to one version of each. Co-Authored-By: Claude Opus 5.5 --- scripts/templates/packages/core/__name__/package.json | 4 ++-- .../templates/packages/dom/components/__name__/package.json | 2 +- scripts/templates/packages/react/__name__/package.json | 2 +- scripts/templates/packages/solid/__name__/package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/templates/packages/core/__name__/package.json b/scripts/templates/packages/core/__name__/package.json index 462e70a..27171b7 100644 --- a/scripts/templates/packages/core/__name__/package.json +++ b/scripts/templates/packages/core/__name__/package.json @@ -36,7 +36,7 @@ "build": "tsdown" }, "dependencies": { - "@dunky.dev/state-machine": "^0.1.0", - "@dunky.dev/state-machine-bindings": "^0.1.0" + "@dunky.dev/state-machine": "^0.3.4", + "@dunky.dev/state-machine-bindings": "^0.4.1" } } diff --git a/scripts/templates/packages/dom/components/__name__/package.json b/scripts/templates/packages/dom/components/__name__/package.json index 70ea227..b25f049 100644 --- a/scripts/templates/packages/dom/components/__name__/package.json +++ b/scripts/templates/packages/dom/components/__name__/package.json @@ -39,6 +39,6 @@ "@dunky.dev/__name__": "workspace:*" }, "devDependencies": { - "@dunky.dev/state-machine": "^0.3.3" + "@dunky.dev/state-machine": "^0.3.4" } } diff --git a/scripts/templates/packages/react/__name__/package.json b/scripts/templates/packages/react/__name__/package.json index 0573ec7..97efc0e 100644 --- a/scripts/templates/packages/react/__name__/package.json +++ b/scripts/templates/packages/react/__name__/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@dunky.dev/__name__": "workspace:*", - "@dunky.dev/react-state-machine": "^0.1.0" + "@dunky.dev/react-state-machine": "^0.3.5" }, "devDependencies": { "@testing-library/react": "^16.1.0", diff --git a/scripts/templates/packages/solid/__name__/package.json b/scripts/templates/packages/solid/__name__/package.json index 087070c..c561847 100644 --- a/scripts/templates/packages/solid/__name__/package.json +++ b/scripts/templates/packages/solid/__name__/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@dunky.dev/__name__": "workspace:*", - "@dunky.dev/solid-state-machine": "^0.3.0" + "@dunky.dev/solid-state-machine": "^0.3.1" }, "devDependencies": { "@babel/core": "^7.28.4", From 5fc4edc5135aa64fd84cd393ec42166eb4e24591 Mon Sep 17 00:00:00 2001 From: Ivan Banov Date: Sun, 4 Oct 2026 22:59:23 +0200 Subject: [PATCH 3/3] docs(changeset): state the 0.3.4 bump's guarantee and the native pin Review follow-up. The native adapter moves its React adapter pin too, not only the runtime one. The single-runtime claim now says what the floor actually buys: the core packages and the adapters agree on 0.3.4. The diamond is explained in place instead of pointing at ARCHITECTURE.md, which no published tarball carries. The runtime's internals are no longer restated in five consumer changelogs. Co-Authored-By: Claude Opus 5.5 --- .changeset/state-machine-0-3-4.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.changeset/state-machine-0-3-4.md b/.changeset/state-machine-0-3-4.md index 35130fa..ac9a1c2 100644 --- a/.changeset/state-machine-0-3-4.md +++ b/.changeset/state-machine-0-3-4.md @@ -12,16 +12,15 @@ Bindings (`0.4.1`), utils (`0.4.0`), and the shared DOM translation (`0.1.0`) are unchanged. Every range moves together on purpose. The adapters pin the runtime exactly -(`@dunky.dev/state-machine: 0.3.4`), so the floor of every caret moves with -them. On the old `^0.3.3`, an install that already held `0.3.3` had no reason -to move it, and upgrading only a binding then put two physical copies of the -runtime side by side: `0.3.3` for the core packages and `0.3.4` for the -adapter — the dependency diamond `ARCHITECTURE.md` warns about, where anything -identity-sensitive silently stops agreeing across the copies. `^0.3.4` rules -`0.3.3` out, so the tree resolves to a single runtime. +(`@dunky.dev/state-machine: 0.3.4`; the native adapter also pins the React +adapter at `0.3.5`), so the floor of every caret moves with them. Under the old +`^0.3.3`, an install that already held `0.3.3` had no reason to move it when an +adapter moved on, leaving two physical copies of the runtime side by side: +`0.3.3` for the core packages, `0.3.4` for the adapter. Anything +identity-sensitive in the runtime — a singleton, a `WeakMap`, module-level +state — silently stops agreeing across two copies. `^0.3.4` rules `0.3.3` out, +so the core packages and the adapters agree on `0.3.4`. -Nothing changes in how the components behave. The runtime release is internal -— fewer allocations on the send path (about 7% more single-event throughput on -its benchmark suite), and `after` timers now join the same run-to-completion -queue as any send, which no primitive here uses — and its type surface is -identical. The adapters only move their runtime pin. +Component behavior is unchanged: the runtime release is internal to the runtime +and keeps its type surface identical, and the adapters change nothing but their +exact pins.