Skip to content

chore(deps): EffectionX 0.8 release set + published context-api@0.6.0, drop vendor fork#79

Merged
taras merged 2 commits into
mainfrom
chore/effection-alpha9-effectionx-upgrade
Jul 15, 2026
Merged

chore(deps): EffectionX 0.8 release set + published context-api@0.6.0, drop vendor fork#79
taras merged 2 commits into
mainfrom
chore/effection-alpha9-effectionx-upgrade

Conversation

@taras

@taras taras commented Jul 15, 2026

Copy link
Copy Markdown
Owner

What

Aligns the whole @effectionx/* dependency set to the coordinated 0.8-era release, pinned exact in both package.json and deno.json:

package from to
@effectionx/converge ^0.1.3 0.1.4
@effectionx/fetch ^0.1.2 0.2.0
@effectionx/fs 0.2.2 0.3.0
@effectionx/middleware 0.1.0 0.1.1
@effectionx/node ^0.2.2 0.2.4
@effectionx/process ^0.7.3 0.8.1
@effectionx/scope-eval ^0.1.2 0.1.3
@effectionx/stream-helpers ^0.8.1 0.8.3
@effectionx/test-adapter ^0.7.3 0.7.4
@effectionx/timebox ^0.4.2 0.4.3

Exact pins eliminate the cross-resolver drift where pnpm resolved @effectionx/node@0.2.3 but Deno resolved 0.2.2.

De-vendors context-api: the local vendor/context-api fork (0.5.0-vendored) is deleted and replaced with the published @effectionx/context-api@0.6.0, which ships the nested-scope .around() middleware behavior ({ at: "min" } innermost-wins) the fork existed for. All workspace lists, import maps, tsconfig paths, and oxfmt path args are updated accordingly.

Compatibility fixes

  • run-document: @effectionx/process@0.8 introduces a Stdio api whose default middleware echoes child stdio to the terminal (0.7 captured silently). Documents capture exec/daemon output via .join()/the journal, so the pipeline installs suppressing Stdio middleware — without it, live runs print raw child output that replay runs don't, breaking byte-identical replay.
  • durable-streams: async teardown moved from try/finally to yield* ensure() in runDurableChild (Close-event emission) and the demo's test-server resource, per effection's teardown contract.

Why effection stays at 4.1.0-alpha.7

alpha.9 has a v4 scope-teardown regression — scope destructors run in registration order instead of reverse, which deadlocks @effectionx/process's kill+drain teardown (any document with a daemon block hangs at teardown with "Promise resolution is still pending but the event loop has already resolved"). Fixed upstream by thefrontside/effection#1215, not yet released. The other alpha.9 blocker (effect-enter() errors becoming uncatchable) is already fixed on v4-1-alpha by thefrontside/effection#1179. Once a release ships with both, bumping the pin is a one-line follow-up.

Verification

All on pristine node_modules, no local patches:

gate result
deno test (core, durable-streams, durable-effects) 74 files / 630 steps, 0 failed
pnpm test:node 298 pass, 0 fail
pnpm test:bun 298 pass, 0 fail
deno task lint + deno check core/mod.ts clean
lockfiles single effection@4.1.0-alpha.7, single @effectionx/node@0.2.4, zero vendor/context-api refs

…rop vendor fork

Upgrade the @effectionx/* packages to the coordinated 0.8-era release set,
pinned exact in both package.json and deno.json so Deno and pnpm resolve
identical versions (this also removes the @effectionx/node drift where pnpm
resolved 0.2.3 but Deno 0.2.2):

  converge 0.1.4, fetch 0.2.0, fs 0.3.0, middleware 0.1.1, node 0.2.4,
  process 0.8.1, scope-eval 0.1.3, stream-helpers 0.8.3, test-adapter 0.7.4,
  timebox 0.4.3

Replace the vendored @effectionx/context-api fork (0.5.0-vendored) with the
published 0.6.0, which ships the nested-scope .around() middleware behavior
({ at: "min" } innermost-wins) that the fork was created for. Remove
vendor/context-api from every workspace list, import map, and tsconfig path,
and stop passing vendor/ to oxfmt.

effection stays pinned at 4.1.0-alpha.7: alpha.9 has a scope-teardown
regression (scope destructors run in registration order instead of reverse,
deadlocking @effectionx/process's kill+drain teardown) that is fixed upstream
by thefrontside/effection#1215 but not yet released.
The other alpha.9 blocker — effect.enter() errors becoming uncatchable — is
already fixed on the v4-1-alpha branch (#1179). Once a release ships with
both, bumping the pin is a one-line change.
@taras
taras force-pushed the chore/effection-alpha9-effectionx-upgrade branch from f2299be to 5317fe2 Compare July 15, 2026 04:32
Comment thread core/src/run-document.ts Outdated
@github-actions

github-actions Bot commented Jul 15, 2026

Copy link
Copy Markdown

PR #79: chore(deps): EffectionX 0.8 release set + published context-api@0.6.0, drop vendor fork

14 files, +218 / -358

Scope

🟡 576 lines changed. PRs under 400 receive more thorough review.

🟡 PR mixes config and source changes.

Structural

✅ No structural bloat detected.

Slop

Static Analysis

✅ Oxlint found no issues.

Correctness

No extraneous code patterns detected.

Comment thread durable-streams/demo/observe.ts Outdated
Comment thread durable-streams/combinators.ts Outdated
…down

Two compatibility fixes that the dependency alignment requires:

- run-document: @effectionx/process@0.8 introduces a Stdio api whose default
  middleware echoes child-process stdout/stderr to the terminal (0.7 captured
  silently). Document exec/daemon output is captured via .join() and the
  journal, so install suppressing Stdio middleware in the document pipeline —
  otherwise live runs print raw child output that replay runs don't, breaking
  byte-identical replay (CJ5/CJ6).

- durable-streams: move async teardown out of try/finally into yield* ensure()
  in runDurableChild (Close-event emission) and the demo's test-server
  resource. Effection's teardown contract requires operation-driving teardown
  (yield*) to be registered via ensure(); a finally block cannot reliably
  drive operations during shutdown or cancellation.
@taras
taras force-pushed the chore/effection-alpha9-effectionx-upgrade branch from 5317fe2 to ed225c1 Compare July 15, 2026 04:36
@taras
taras merged commit fda4836 into main Jul 15, 2026
7 checks passed
@taras
taras deleted the chore/effection-alpha9-effectionx-upgrade branch July 15, 2026 04:39
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