Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json",
"changelog": ["@changesets/changelog-github", { "repo": "dunky-dev/state-machine" }],
"commit": false,
"fixed": [["@dunky.dev/*"]],
"fixed": [],
"linked": [],
"access": "public",
"baseBranch": "origin/main",
Expand Down
18 changes: 18 additions & 0 deletions .changeset/pin-internal-deps.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
'@dunky.dev/react-state-machine': patch
'@dunky.dev/native-state-machine': patch
'@dunky.dev/opentui-state-machine': patch
---

Internal dependencies on sibling workspace packages are now pinned to an
exact version instead of a caret range, and every package versions
independently — the `@dunky.dev/*` lockstep group is gone, so a release
never bumps a package whose code didn't change.

A caret range between two packages that both sit above a shared dependency
lets a consumer's install resolve to two different physical copies of it
once those packages' required ranges drift apart, silently breaking anything
identity-sensitive in that shared dependency (a singleton, a `WeakMap`,
module-level state). Pinning exact collapses that to one resolvable version:
a mismatch now fails at publish time instead of surfacing as a runtime bug
in a consumer's app.
2 changes: 1 addition & 1 deletion .npmrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ ignore-workspace-root-check=true
link-workspace-packages=true
package-manager-strict=false
prefer-workspace-packages=true
save-workspace-protocol=rolling
save-workspace-protocol=true
strict-peer-dependencies=false
16 changes: 16 additions & 0 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,19 @@ whether it needs props/platform or not:
| **connect** | A function returning the logical surface a view spreads onto elements. |
| **bindings** | The substrate-agnostic event + attr vocabulary — lives in `shared/bindings`, consumed by every target's normalize. Each ledger is typed by the contract (`HandlerTargets`/`AttrTargets`): every key mapped or a `null` drop — a new binding is a compile error until each target decides. |
| **compose** | Run several machines as one unit (orthogonal regions): bundled `start`/`stop` + `sync` + `combine`. |

## Versioning

Every package versions independently; `.changeset/config.json` keeps `fixed`
and `linked` empty, so no group is ever forced to share a version number —
an untouched package never gets an empty bump.

Internal workspace dependencies pin exact (`workspace:*`), never a caret
range (`workspace:^`). Independent versions mean siblings drift apart at
their own pace, so a caret range between two packages that share a further
dependency can let a consumer's install resolve to two different physical
copies of it — a dependency diamond. Anything identity-sensitive further
down (a singleton, a `WeakMap`, module-level state) breaks silently across
the two copies. An exact pin collapses the diamond to one resolvable
version: a mismatch fails at publish time, not at runtime in a consumer's
app.
8 changes: 4 additions & 4 deletions packages/native/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@
"build": "tsdown"
},
"dependencies": {
"@dunky.dev/react-state-machine": "workspace:^",
"@dunky.dev/state-machine": "workspace:^",
"@dunky.dev/state-machine-bindings": "workspace:^",
"@dunky.dev/state-machine-utils": "workspace:^"
"@dunky.dev/react-state-machine": "workspace:*",
"@dunky.dev/state-machine": "workspace:*",
"@dunky.dev/state-machine-bindings": "workspace:*",
"@dunky.dev/state-machine-utils": "workspace:*"
},
"peerDependencies": {
"react": "*",
Expand Down
4 changes: 2 additions & 2 deletions packages/opentui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"build": "tsdown"
},
"dependencies": {
"@dunky.dev/state-machine-bindings": "workspace:^",
"@dunky.dev/state-machine-utils": "workspace:^"
"@dunky.dev/state-machine-bindings": "workspace:*",
"@dunky.dev/state-machine-utils": "workspace:*"
}
}
6 changes: 3 additions & 3 deletions packages/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,11 @@
"build": "tsdown"
},
"dependencies": {
"@dunky.dev/state-machine": "workspace:^",
"@dunky.dev/state-machine-utils": "workspace:^"
"@dunky.dev/state-machine": "workspace:*",
"@dunky.dev/state-machine-utils": "workspace:*"
},
"devDependencies": {
"@dunky.dev/state-machine-bindings": "workspace:^",
"@dunky.dev/state-machine-bindings": "workspace:*",
"@testing-library/react": "^16.1.0",
"@types/react": "^19.2.15",
"@types/react-dom": "^19.2.3",
Expand Down
18 changes: 9 additions & 9 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading