Repository navigation
Move the web adapter to stable Effect 4.0.x (0.6.0) #131
Description
Move the web adapter to stable Effect 4.0.x (0.6.0)
GitHub: #131
Product outcome
Release @misofm/engine-web-adapter@0.6.0 on stable Effect 4.0.x with @misofm/codec@0.2.0, so an application on the Effect 4.0.4 train decodes FLAC in the mixer. 0.5.13 depends on effect@4.0.0-rc.112; when the codec resolves the application's Effect 4.x copy while the adapter keeps its nested rc.112 copy (codec 0.2.0, or codec 0.1.1 under bun's loose peers or npm --legacy-peer-deps), the adapter's Layer.build(makeFlacDecoderLayer(bytes)) fails with TypeError: Cannot read properties of undefined (reading 'scheduler') and no stem decodes. Unit tests resolve one Effect copy and did not catch it.
Base: origin/main 602b7c7 (adapter 0.5.13). Branch effect-4.0.4, draft PR #130. Codec prerequisite: misofm/codec#10 (PR misofm/codec#9). Effect guidance: skills revision 0507930 (references/migration.md, "Effect v4 release candidates to 4.0.x").
Smallest bounded implementation
package.json: version 0.6.0;effectmoves from a dependency (exact rc.112) to a peer>=4.0.3 <4.1with exact dev dependency 4.0.4, so the adapter, codec, and application share one copy;@misofm/codecexact0.2.0;CHANGELOG.mdinfiles. Engine stays0.4.3.- Temporary: until codec 0.2.0 is on npm the dependency is a git ref to the throwaway branch
misofm/codec:effect-4.0.4-ci-dist, and the lockfile entry has no integrity.npm-publish.ymlrefuses to run unlessdependencies['@misofm/codec'] == "0.2.0"and the peer range matches, and repeats both checks against the registry artifact. Flip the dependency (andscripts/check-package.mjs) before release. effect/unstable/httpbecomeseffect/http(three modules). No other compile change. Built.d.tsdiffer only in that import instems/sparse-response.d.ts.- Preserve rc.112 behaviour:
preflightExpectedandpreflightSpancheckReflect.ownKeysbecause Effect 4.0.x (#8423) strips non-enumerable extras underonExcessProperty: "error"(tests added). - Deliberate behaviour change: the sparse full GET disables
HttpClient.TracerPropagationEnabled, as the FLAC range lane does, sob3/traceparentheaders no longer force a CORS preflight (test added). - Browser gate scripts no longer copy
fast-check/pure-rand/msgpackr;NOTICEnames the codec decoder asset hash instead of codec 0.1.0; workflow job name andPACKAGE_VERSIONare 0.6.0;CHANGELOG.mdrecords the audit and migration note. - Do not change exports, workers, AudioWorklet code, delivery policy, or the Wasm assets.
Objective gates
npm ci --ignore-scriptsandnpm run check(383 tests, SHA-256/BLAKE3 Wasm reproducibility, package policy). Also the full suite witheffect@4.0.3installed.npm run test:browser,node scripts/browser-packed.mjs --indexed-sparse, and the Chromium part ofnpm run test:browser:opfswith the installed Chromium; PR workflow Packed OPFS qualification (macOS Chromium and WebKit) green.- Crash repro in a consumer with
effect@4.0.4: codec 0.1.1 with adapter 0.5.13 fails with theschedulerTypeError; codec 0.2.0 with the packed adapter 0.6.0 compiles the decoder module.npm install --strict-peer-depsandnpm lsvalid on 4.0.4 and 4.0.3; 4.0.0-rc.115 rejected. - Release only after codec 0.2.0 is published and the dependency is flipped to it.
Release contract and blockers
Run .github/workflows/npm-publish.yml on main (mode=publish, the exact 40-character merge SHA) after the dependency flip; the workflow publishes through OIDC only, refuses an existing version, and verifies the registry artifact. Record the run URL, registry integrity, and archive hashes here. Blockers: codec 0.2.0 not published; PR #130 is a draft. Publication has not been performed.
Activity
Preserve rc.112 excess-key rejection, disable trace propagation, fix …