Skip to content

Upgrade Effect to RC.117 - #221

Merged
SandroMaglione merged 1 commit into
mainfrom
codex/upgrade-effect-rc117
Sep 25, 2026
Merged

SandroMaglione merged 1 commit into
mainfrom
codex/upgrade-effect-rc117

Conversation

@SandroMaglione

@SandroMaglione SandroMaglione commented Sep 25, 2026 •

Copy link
Copy Markdown
Member

Summary

Upgrade Effect and its companion packages to RC.117, including exact peer dependencies, workspace overrides, and the lockfile. Update the install instructions to match. No library source changes are required.

- effect / @effect/*: 4.0.0-rc.116
+ effect / @effect/*: 4.0.0-rc.117
- vitest: 4.1.10
+ vitest: 5.0.1

@effect/vitest RC.117 requires Vitest 5, so all workspace test packages use 5.0.1.

Changeset

  • Added a patch changeset for the dependency upgrade; the fixed release group keeps all four packages synchronized.
  • Not required because this PR does not change a publishable package

Validation

  • pnpm check, including 778 runtime tests, type assertions, and all packed-consumer checks
  • pnpm perf:types
  • pnpm perf:runtime
  • Automated type-performance measurement passed; all measured instantiation counts are unchanged
  • Automated runtime- and memory-performance measurement passed; five runs per revision found no large noise-adjusted throughput or heap regressions

CI evidence: correctness and packaging, type comparison, runtime and memory comparison.

@github-actions

Copy link
Copy Markdown
Contributor

Type performance

Measured with TypeScript 6.0.3 and skipLibCheck=true.

Scenario Base PR Difference
Effect only 55 55 0 (0.0%)
Import effect-machine 55 55 0 (0.0%)
Machine.state (3 children) 2,664 2,664 0 (0.0%)
Machine.make (3 states, 2 events) 8,632 8,632 0 (0.0%)
machine.handle (3 states, 2 transitions) 49,125 49,125 0 (0.0%)
declared transition (10 named branches) 62,183 62,183 0 (0.0%)
atomic construction, guards, and reentry 87,731 87,731 0 (0.0%)
registered invocation (input-taking Effect) 48,929 48,929 0 (0.0%)
machine.handle (depth 24) 196,525 196,525 0 (0.0%)
machine.handle (wide depth 16) 220,268 220,268 0 (0.0%)
machine.handle (parallel/history/choice) 94,249 94,249 0 (0.0%)
machine definition (3 independent implementations) 99,583 99,583 0 (0.0%)
machine exact input/output/error/services 84,918 84,918 0 (0.0%)
execution adapter readiness 72,521 72,521 0 (0.0%)

Marginal instantiations are measured against the matching setup without that API call:

Scenario Base PR Difference
Import effect-machine 0 0 0
Machine.state (3 children) 2,609 2,609 0 (0.0%)
Machine.make (3 states, 2 events) 5,960 5,960 0 (0.0%)
machine.handle (3 states, 2 transitions) 40,493 40,493 0 (0.0%)
declared transition (10 named branches) 53,930 53,930 0 (0.0%)
atomic construction, guards, and reentry 72,720 72,720 0 (0.0%)
registered invocation (input-taking Effect) 42,088 42,088 0 (0.0%)
machine.handle (depth 24) 179,530 179,530 0 (0.0%)
machine.handle (wide depth 16) 204,051 204,051 0 (0.0%)
machine.handle (parallel/history/choice) 82,065 82,065 0 (0.0%)
machine definition (3 independent implementations) 89,216 89,216 0 (0.0%)
machine exact input/output/error/services 73,038 73,038 0 (0.0%)
execution adapter readiness 23,180 23,180 0 (0.0%)
Check times (informational)
Scenario Base PR
Effect only 0.03s 0.03s
Import effect-machine 0.03s 0.03s
Machine.state (3 children) 0.09s 0.09s
Machine.make (3 states, 2 events) 0.14s 0.14s
machine.handle (3 states, 2 transitions) 0.34s 0.34s
declared transition (10 named branches) 0.40s 0.40s
atomic construction, guards, and reentry 0.55s 0.53s
registered invocation (input-taking Effect) 0.34s 0.35s
machine.handle (depth 24) 0.65s 0.65s
machine.handle (wide depth 16) 0.71s 0.71s
machine.handle (parallel/history/choice) 0.52s 0.51s
machine definition (3 independent implementations) 0.55s 0.55s
machine exact input/output/error/services 0.51s 0.51s
execution adapter readiness 0.44s 0.47s

Type instantiations are the comparison metric. Check time varies with runner load and is informational only.

@github-actions

Copy link
Copy Markdown
Contributor

Runtime performance

Median of 5 independent benchmark processes on AMD EPYC 9V74 80-Core Processor with Node v24.21.0.

Pull request baseline

Scenario Effect Machine
Plan counter transitions 117,060 transitions/s
Drain burst with terminal fence 391,603 increments/s
Drain burst with a change observer 367,824 increments/s
Lookup and send to one child 332,145 increments/s
Start and stop a machine 133,494 machines/s
Start and stop a parent with one child 37,821 families/s
Complete an Effect invocation with tracing enabled 9,783 invocations/s
Complete an Effect invocation with tracing disabled 13,239 invocations/s
Plan transitions through a compound state 104,219 transitions/s
Plan transitions through parallel regions 85,491 transitions/s
Drain burst through a compound state 327,410 events/s
Drain burst through two parallel regions 306,882 events/s
Drain a compound-state burst with a change observer 309,988 events/s

Process runtime reference points

Scenario Effect Machine
Start and stop a raw generic process 30,517 processes/s
Start and stop a raw compiled process 76,628 processes/s
Memory profile Effect Machine
Idle machine 1.8 KiB
Raw generic managed process 11.6 KiB
Raw compiled process 3.0 KiB
Two independent idle machines 3.4 KiB
Idle parent with one child 5.9 KiB
Parent with observed child registry 9.3 KiB
Parent with observed invoked child snapshots 6.4 KiB

Effect Machine change from base

Metric Base Base variability PR PR variability Difference
Plan counter transitions 117,296 transitions/s 0.3% MAD 117,060 transitions/s 0.2% MAD -0.2%
Drain burst with terminal fence 388,459 increments/s 0.3% MAD 391,603 increments/s 0.3% MAD +0.8%
Drain burst with a change observer 364,371 increments/s 0.4% MAD 367,824 increments/s 0.1% MAD +0.9%
Lookup and send to one child 328,722 increments/s 0.5% MAD 332,145 increments/s 0.2% MAD +1.0%
Start and stop a machine 134,571 machines/s 0.8% MAD 133,494 machines/s 1.1% MAD -0.8%
Start and stop a parent with one child 38,242 families/s 0.8% MAD 37,821 families/s 0.1% MAD -1.1%
Complete an Effect invocation with tracing enabled 10,096 invocations/s 0.9% MAD 9,783 invocations/s 1.6% MAD -3.1%
Complete an Effect invocation with tracing disabled 13,471 invocations/s 0.8% MAD 13,239 invocations/s 0.3% MAD -1.7%
Plan transitions through a compound state 104,500 transitions/s 0.3% MAD 104,219 transitions/s 0.4% MAD -0.3%
Plan transitions through parallel regions 84,770 transitions/s 0.5% MAD 85,491 transitions/s 0.2% MAD +0.9%
Drain burst through a compound state 327,964 events/s 0.4% MAD 327,410 events/s 0.2% MAD -0.2%
Drain burst through two parallel regions 306,795 events/s 0.4% MAD 306,882 events/s 0.5% MAD +0.0%
Drain a compound-state burst with a change observer 309,526 events/s 0.1% MAD 309,988 events/s 0.2% MAD +0.1%
Idle machine heap per unit 1.9 KiB 1.7% MAD 1.8 KiB 0.1% MAD -4.0%
Raw generic managed process heap per unit 11.6 KiB 0.0% MAD 11.6 KiB 0.0% MAD +0.0%
Raw compiled process heap per unit 3.0 KiB 0.3% MAD 3.0 KiB 0.0% MAD +0.1%
Two independent idle machines heap per unit 3.4 KiB 0.1% MAD 3.4 KiB 0.2% MAD -0.7%
Idle parent with one child heap per unit 5.8 KiB 0.0% MAD 5.9 KiB 0.0% MAD +0.0%
Parent with observed child registry heap per unit 9.3 KiB 0.0% MAD 9.3 KiB 0.0% MAD +0.0%
Parent with observed invoked child snapshots heap per unit 6.4 KiB 0.0% MAD 6.4 KiB 0.0% MAD -0.0%

Process runtime reference change from base

Metric Base Base variability PR PR variability Difference
Start and stop a raw generic process 30,648 processes/s 1.2% MAD 30,517 processes/s 0.6% MAD -0.4%
Start and stop a raw compiled process 76,805 processes/s 0.1% MAD 76,628 processes/s 0.5% MAD -0.2%

Regression guard

No large, noise-adjusted throughput or heap regressions detected.

Versions and interpretation
  • Effect Machine: 0.38.0

Higher throughput is better; lower heap is better. Variability is the median absolute deviation across independent processes, relative to their median. Small differences on shared GitHub-hosted hardware remain informational; the required guard rejects only large changes beyond the measured noise allowance.

@SandroMaglione
SandroMaglione merged commit a3f54ab into main Sep 25, 2026
8 checks passed
@SandroMaglione
SandroMaglione deleted the codex/upgrade-effect-rc117 branch September 25, 2026 06:35
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