diff --git a/.changeset/restore-effect-4-0-0.md b/.changeset/restore-effect-4-0-0.md new file mode 100644 index 00000000..dcde65bd --- /dev/null +++ b/.changeset/restore-effect-4-0-0.md @@ -0,0 +1,7 @@ +--- +"@typeonce/effect-machine": patch +"@typeonce/effect-machine-react": patch +"@typeonce/effect-machine-devtools": patch +--- + +Accept Effect `^4.0.0` again. Effect 4.0.5 is not required: the `effect`, `@effect/atom-react`, and `@effect/platform-*` requirements return to `^4.0.0`, so projects on any stable Effect 4 release can install this version without upgrading Effect. diff --git a/package.json b/package.json index cf1d7d3d..c35f0992 100644 --- a/package.json +++ b/package.json @@ -35,10 +35,10 @@ }, "devDependencies": { "@changesets/cli": "2.31.0", - "@effect/vitest": "4.0.5", + "@effect/vitest": "4.0.0", "@types/node": "25.7.0", "dprint": "0.55.2", - "effect": "4.0.5", + "effect": "4.0.0", "pagefind": "1.5.2", "tinybench": "2.9.0", "tstyche": "7.2.1", diff --git a/packages/devtools/README.md b/packages/devtools/README.md index 622b1177..68dd49b3 100644 --- a/packages/devtools/README.md +++ b/packages/devtools/README.md @@ -9,13 +9,13 @@ The package is experimental and pre-1.0. Minor releases may change its command o Core and devtools always release at the same version. Install matching versions: ```sh -pnpm add @typeonce/effect-machine@latest effect@4.0.5 +pnpm add @typeonce/effect-machine@latest effect@4.0.0 pnpm add --save-dev @typeonce/effect-machine-devtools@latest ``` When pinning a release instead of using `latest`, use the same explicit version for both packages. -The current release requires Node.js 22.19 or newer and stable Effect `^4.0.5`. +The current release requires Node.js 22.19 or newer and stable Effect `^4.0.0`. ## Run the visualizer diff --git a/packages/devtools/package.json b/packages/devtools/package.json index 8edd6398..6bd55a46 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -32,9 +32,9 @@ "dev": "tsx src/bin.ts" }, "dependencies": { - "@effect/platform-browser": "^4.0.5", - "@effect/platform-node": "^4.0.5", - "@effect/platform-node-shared": "^4.0.5", + "@effect/platform-browser": "^4.0.0", + "@effect/platform-node": "^4.0.0", + "@effect/platform-node-shared": "^4.0.0", "@typeonce/effect-machine": "workspace:^", "chokidar": "4.0.3", "elkjs": "0.12.0", @@ -42,11 +42,11 @@ "vite": "8.1.5" }, "peerDependencies": { - "effect": "^4.0.5" + "effect": "^4.0.0" }, "devDependencies": { "@types/node": "25.7.0", - "effect": "4.0.5", + "effect": "4.0.0", "tsx": "4.21.0" }, "files": [ diff --git a/packages/effect-machine-react/package.json b/packages/effect-machine-react/package.json index 51bcf02f..65e5e446 100644 --- a/packages/effect-machine-react/package.json +++ b/packages/effect-machine-react/package.json @@ -49,17 +49,17 @@ "@typeonce/effect-machine": "workspace:^" }, "peerDependencies": { - "@effect/atom-react": "^4.0.5", - "effect": "^4.0.5", + "@effect/atom-react": "^4.0.0", + "effect": "^4.0.0", "react": ">=19.0.0 <20.0.0", "scheduler": ">=0.25.0 <0.28.0" }, "devDependencies": { - "@effect/atom-react": "4.0.5", + "@effect/atom-react": "4.0.0", "@testing-library/react": "16.3.0", "@types/react": "19.2.16", "@types/react-dom": "19.2.3", - "effect": "4.0.5", + "effect": "4.0.0", "jsdom": "27.2.0", "react": "19.2.7", "react-dom": "19.2.7", diff --git a/packages/effect-machine/README.md b/packages/effect-machine/README.md index 08af3180..751f7a24 100644 --- a/packages/effect-machine/README.md +++ b/packages/effect-machine/README.md @@ -34,10 +34,10 @@ Cluster and are exposed only through explicit integration boundaries. ## Install ```sh -pnpm add @typeonce/effect-machine effect@4.0.5 +pnpm add @typeonce/effect-machine effect@4.0.0 ``` -`effect` is a peer dependency requiring stable `^4.0.5`. Keep any installed +`effect` is a peer dependency requiring stable `^4.0.0`. Keep any installed `@effect/*` packages on the same version as `effect`. Development and benchmarks use exact versions. CI checks both the pinned diff --git a/packages/effect-machine/package.json b/packages/effect-machine/package.json index 4e279945..c5cbc13c 100644 --- a/packages/effect-machine/package.json +++ b/packages/effect-machine/package.json @@ -70,12 +70,12 @@ "test:types": "tstyche" }, "peerDependencies": { - "effect": "^4.0.5" + "effect": "^4.0.0" }, "devDependencies": { - "@effect/vitest": "4.0.5", + "@effect/vitest": "4.0.0", "@types/node": "25.7.0", - "effect": "4.0.5", + "effect": "4.0.0", "tinybench": "2.9.0", "tstyche": "7.2.1", "typescript": "6.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0dbbd36a..0ec61547 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,12 +5,12 @@ settings: excludeLinksFromLockfile: false overrides: - effect: 4.0.5 - '@effect/vitest': 4.0.5 - '@effect/atom-react': 4.0.5 - '@effect/platform-browser': 4.0.5 - '@effect/platform-node': 4.0.5 - '@effect/platform-node-shared': 4.0.5 + effect: 4.0.0 + '@effect/vitest': 4.0.0 + '@effect/atom-react': 4.0.0 + '@effect/platform-browser': 4.0.0 + '@effect/platform-node': 4.0.0 + '@effect/platform-node-shared': 4.0.0 importers: @@ -20,8 +20,8 @@ importers: specifier: 2.31.0 version: 2.31.0(@types/node@25.7.0) '@effect/vitest': - specifier: 4.0.5 - version: 4.0.5(effect@4.0.5)(vitest@5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0))) + specifier: 4.0.0 + version: 4.0.0(effect@4.0.0)(vitest@5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0))) '@types/node': specifier: 25.7.0 version: 25.7.0 @@ -29,8 +29,8 @@ importers: specifier: 0.55.2 version: 0.55.2 effect: - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.0 + version: 4.0.0 pagefind: specifier: 1.5.2 version: 1.5.2 @@ -56,14 +56,14 @@ importers: packages/devtools: dependencies: '@effect/platform-browser': - specifier: 4.0.5 - version: 4.0.5(effect@4.0.5) + specifier: 4.0.0 + version: 4.0.0(effect@4.0.0) '@effect/platform-node': - specifier: 4.0.5 - version: 4.0.5(effect@4.0.5)(redis@6.2.1) + specifier: 4.0.0 + version: 4.0.0(effect@4.0.0)(redis@6.2.1) '@effect/platform-node-shared': - specifier: 4.0.5 - version: 4.0.5(effect@4.0.5) + specifier: 4.0.0 + version: 4.0.0(effect@4.0.0) '@typeonce/effect-machine': specifier: workspace:^ version: link:../effect-machine @@ -84,8 +84,8 @@ importers: specifier: 25.7.0 version: 25.7.0 effect: - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.0 + version: 4.0.0 tsx: specifier: 4.21.0 version: 4.21.0 @@ -93,14 +93,14 @@ importers: packages/effect-machine: devDependencies: '@effect/vitest': - specifier: 4.0.5 - version: 4.0.5(effect@4.0.5)(vitest@5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0))) + specifier: 4.0.0 + version: 4.0.0(effect@4.0.0)(vitest@5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0))) '@types/node': specifier: 25.7.0 version: 25.7.0 effect: - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.0 + version: 4.0.0 tinybench: specifier: 2.9.0 version: 2.9.0 @@ -121,8 +121,8 @@ importers: version: link:../effect-machine devDependencies: '@effect/atom-react': - specifier: 4.0.5 - version: 4.0.5(effect@4.0.5)(react@19.2.7)(scheduler@0.27.0) + specifier: 4.0.0 + version: 4.0.0(effect@4.0.0)(react@19.2.7)(scheduler@0.27.0) '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.16))(@types/react@19.2.16)(react-dom@19.2.7(react@19.2.7))(react@19.2.7) @@ -133,8 +133,8 @@ importers: specifier: 19.2.3 version: 19.2.3(@types/react@19.2.16) effect: - specifier: 4.0.5 - version: 4.0.5 + specifier: 4.0.0 + version: 4.0.0 jsdom: specifier: 27.2.0 version: 27.2.0 @@ -374,35 +374,35 @@ packages: cpu: [x64] os: [win32] - '@effect/atom-react@4.0.5': - resolution: {integrity: sha512-tqTSiy0rWBitej7kPfvTSw29q4ipof52+txDg6bIBJx0ksHVzVXaFTsssDa+AZBeImafK0xmjm9m1XzPfE6k2A==} + '@effect/atom-react@4.0.0': + resolution: {integrity: sha512-VPP2oOjj56iwOpL5aIGbu7Qhb4+1sFNdU16aI5of3JqToqWWX9eJPBfeiPyQ1eTYof1hnNX1auyRiTORSfLT6g==} peerDependencies: - effect: 4.0.5 + effect: 4.0.0 react: '>=19.0.0 <20.0.0' - scheduler: '>=0.25.0 <0.29.0' + scheduler: '>=0.25.0 <0.28.0' - '@effect/platform-browser@4.0.5': - resolution: {integrity: sha512-o3H75xA91nkgIWOcp0XouIxxWxJEOFkTf7gG4qkQtZfy0tq46hJBI0U8jrUqsPruo2vCCNfM0yCoj5AG7F5BMQ==} + '@effect/platform-browser@4.0.0': + resolution: {integrity: sha512-OHo7EPpF3RVPiI+mjoU9yd05LdCdKPjzDXqs5wRgF9CsdVvwN76B0zgt54DxPUcvMYri1tVJOtLCVnK0tRkNQQ==} peerDependencies: - effect: 4.0.5 + effect: 4.0.0 - '@effect/platform-node-shared@4.0.5': - resolution: {integrity: sha512-a8rCdEkfZBGe9C6bsIjxVZuRp73svIyK5IHwHdDAVsvZXjrbkxusfI+rZ8WlX31RP1mKizwI/E72GQTNfdMWHw==} + '@effect/platform-node-shared@4.0.0': + resolution: {integrity: sha512-VBXHJU9UXVZPdQGGDRjGXpo+TpOzRwZuMrdKAtIxi1qwcRftmacZ1zTgIrzBa0Z2RA2KVkoOecQUsTlt/nJZhw==} engines: {node: '>=18.0.0'} peerDependencies: - effect: 4.0.5 + effect: 4.0.0 - '@effect/platform-node@4.0.5': - resolution: {integrity: sha512-v4KD5fWvEUa4QmWFpZFbBsRhmfnTP6ETCME2r9ifyXVDPjhfpxpTZl41prjgQFMqZBHdWWCl7YC5ImbXv5ui5g==} + '@effect/platform-node@4.0.0': + resolution: {integrity: sha512-/L+4MUbl8FejPKLHLROYSOebvHnfixkP8KiblSD/DE5uH5xENZBHaux4nH6XMnRP+lr8ajpEJFS8sUrmmxFJeQ==} engines: {node: '>=18.0.0'} peerDependencies: - effect: 4.0.5 + effect: 4.0.0 redis: '>=5.0.0 <7.0.0' - '@effect/vitest@4.0.5': - resolution: {integrity: sha512-q64paZ/i4V2NiRhTyqCmT2KiDbFjlxc2EZrZca8GGt+Nf8844946HyJM5bPk/q+YeRkFSxIrlCs+J+LSfky/wA==} + '@effect/vitest@4.0.0': + resolution: {integrity: sha512-kGElCPFGtP+CgMCwV/HjJWqtE3zYo6I1+8MSA54l+EI24lPU9p2Efa+TBp1jfkg9j711KKzEqgSAy3VzTsb76Q==} peerDependencies: - effect: 4.0.5 + effect: 4.0.0 vitest: '>=5.0.0 <6.0.0' '@emnapi/core@1.11.1': @@ -1124,8 +1124,8 @@ packages: resolution: {integrity: sha512-1d4D4SB9KiD2qFnBWbl3aoYjLvPVpZoth28yxTT00xJv2yXugdz0Xoyv7sGG0w0hzE6hQZMgd6B333GnySDpGQ==} hasBin: true - effect@4.0.5: - resolution: {integrity: sha512-BY4/28NlpOd99yzmV741xbVGmp+1U7tks4oB7F/Png64bTa5tm5eCA6W0RiXsnuLDDoJpjfVSo4Dnq4BZb/89Q==} + effect@4.0.0: + resolution: {integrity: sha512-ooc1TG5t+FfzgYnFz2ff6BBKyZ7EwBRVXC7c4RhQUAD6/TZ2gTXXMeb4WX7a19ozQo4J73/QW+S00YAIresoMQ==} elkjs@0.12.0: resolution: {integrity: sha512-YZcKynxVxYoKIOEpywEPwCFdg+BTbxQRNf3pbwdDCvc8O3kQD8bmIwSxKU1eOTVc4Xo+VG9Te+575mlfvOrhEQ==} @@ -2122,38 +2122,38 @@ snapshots: '@dprint/win32-x64@0.55.2': optional: true - '@effect/atom-react@4.0.5(effect@4.0.5)(react@19.2.7)(scheduler@0.27.0)': + '@effect/atom-react@4.0.0(effect@4.0.0)(react@19.2.7)(scheduler@0.27.0)': dependencies: - effect: 4.0.5 + effect: 4.0.0 react: 19.2.7 scheduler: 0.27.0 - '@effect/platform-browser@4.0.5(effect@4.0.5)': + '@effect/platform-browser@4.0.0(effect@4.0.0)': dependencies: - effect: 4.0.5 + effect: 4.0.0 - '@effect/platform-node-shared@4.0.5(effect@4.0.5)': + '@effect/platform-node-shared@4.0.0(effect@4.0.0)': dependencies: '@types/ws': 8.18.2 - effect: 4.0.5 + effect: 4.0.0 ws: 8.22.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/platform-node@4.0.5(effect@4.0.5)(redis@6.2.1)': + '@effect/platform-node@4.0.0(effect@4.0.0)(redis@6.2.1)': dependencies: - '@effect/platform-node-shared': 4.0.5(effect@4.0.5) - effect: 4.0.5 + '@effect/platform-node-shared': 4.0.0(effect@4.0.0) + effect: 4.0.0 redis: 6.2.1 undici: 8.11.2 transitivePeerDependencies: - bufferutil - utf-8-validate - '@effect/vitest@4.0.5(effect@4.0.5)(vitest@5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0)))': + '@effect/vitest@4.0.0(effect@4.0.0)(vitest@5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0)))': dependencies: - effect: 4.0.5 + effect: 4.0.0 vitest: 5.0.1(@types/node@25.7.0)(jsdom@27.2.0)(vite@8.1.5(@types/node@25.7.0)(esbuild@0.27.7)(tsx@4.21.0)(yaml@2.9.0)) '@emnapi/core@1.11.1': @@ -2667,7 +2667,7 @@ snapshots: '@dprint/win32-arm64': 0.55.2 '@dprint/win32-x64': 0.55.2 - effect@4.0.5: {} + effect@4.0.0: {} elkjs@0.12.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ff0943a8..fa490a1f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,12 +2,12 @@ packages: - "packages/*" overrides: - effect: 4.0.5 - "@effect/vitest": 4.0.5 - "@effect/atom-react": 4.0.5 - "@effect/platform-browser": 4.0.5 - "@effect/platform-node": 4.0.5 - "@effect/platform-node-shared": 4.0.5 + effect: 4.0.0 + "@effect/vitest": 4.0.0 + "@effect/atom-react": 4.0.0 + "@effect/platform-browser": 4.0.0 + "@effect/platform-node": 4.0.0 + "@effect/platform-node-shared": 4.0.0 minimumReleaseAge: 1440 minimumReleaseAgeExclude: diff --git a/scripts/release-contract.test.mjs b/scripts/release-contract.test.mjs index 59ff70c8..cb4a474d 100644 --- a/scripts/release-contract.test.mjs +++ b/scripts/release-contract.test.mjs @@ -43,17 +43,17 @@ test("Effect consumers accept stable 4.x while development versions stay synchro const effect = root.devDependencies.effect assert.match(effect, /^4\.\d+\.\d+$/) for (const manifest of [core, react, devtools]) { - assert.equal(manifest.peerDependencies.effect, "^4.0.5") + assert.equal(manifest.peerDependencies.effect, "^4.0.0") assert.equal(manifest.devDependencies.effect, effect) } assert.equal(root.devDependencies["@effect/vitest"], effect) assert.equal(core.devDependencies["@effect/vitest"], effect) - assert.equal(react.peerDependencies["@effect/atom-react"], "^4.0.5") + assert.equal(react.peerDependencies["@effect/atom-react"], "^4.0.0") assert.equal(react.devDependencies["@effect/atom-react"], effect) for (const name of ["@effect/platform-browser", "@effect/platform-node", "@effect/platform-node-shared"]) { assert.equal( devtools.dependencies[name], - "^4.0.5", + "^4.0.0", `${name} must accept the same stable Effect major as its peer` ) }