Repository navigation
compat: meta-tracker — remaining 5 packages blocking 100% sweep #1024
Copy link
Copy link
Closed
Labels
parityCompatibility gap with Node.js, ECMAScript, or the supported ecosystemCompatibility gap with Node.js, ECMAScript, or the supported ecosystem
Description
Snapshot at v0.5.1006
Compat sweep (/tmp/perry-compat-sweep/, 16 fixtures, --enable-js-runtime opt-in):
11/16 PASSING:
- date-fns, debug, dotenv, effect, ioredis, jose, jsonwebtoken, lodash, ramda, vitest, zod
5/16 FAILING:
| Package | Status | Tracked in |
|---|---|---|
| express | rc=124 | #1021 (async lowering) |
| fastify | rc=124 | #1021 |
| nestjs | empty stdout | #1021 |
| hono | rc=139 on redirect | #1023 (probably subsumed by #1021) |
| drizzle | rc=139 | #1022 (better-sqlite3 native addon) |
Pickup order
- compat: async lowering blocks self-fetch (express/fastify/nestjs/hono) #1021 — async lowering refactor is the highest-leverage fix. Lands express, fastify, nestjs in one shot. Probably auto-fixes hono (compat: hono SIGSEGV on exit when stdout is redirected #1023). Architectural, multi-PR.
- compat: drizzle SIGSEGV via better-sqlite3 native module #1022 — better-sqlite3 — orthogonal. Has two paths: long-term N-API ABI, short-term
perry-ext-better-sqlite3cookie-cutter. Short-term is mechanically scoped per existing per-package precedents (perry-ext-bcrypt, perry-ext-argon2, perry-ext-pg). - compat: hono SIGSEGV on exit when stdout is redirected #1023 — hono stdout-redirect — leave until after compat: async lowering blocks self-fetch (express/fastify/nestjs/hono) #1021. Likely auto-resolved.
Progress over the last loop
- v0.5.975 → v0.5.1006 (32 patch bumps)
- ~32 PRs merged
- Sweep score: 6/14 → 11/16 (+effect, +ramda, +lodash, +date-fns, +jose)
Selected landings (V8 fallback infrastructure):
- fix(codegen): #678 followup — V8 wildcard-namespace member calls #985 V8 named-import static-method dispatch (Effect.succeed, R.sum)
- feat(jsruntime): V8 ModuleLoader reads from embedded module map (#818) #989 V8 ModuleLoader reads from embedded module map (self-contained binaries)
- feat(jsruntime): V8 named-import static-method dispatch for Effect.succeed #992 V8 class-instance return marshalling
- feat(jsruntime/http): V8-fallback createServer bridge to native #994 V8-fallback
createServerbridged to real hyper server - fix(jsruntime): Effect.pipe(map) chain composition #1000 Effect.pipe(map) chain composition (closure args across the bridge)
- fix(jsruntime): jose JWT (HS256) end-to-end through V8 fallback #1004 jose JWT (HS256) end-to-end (Uint8Array marshalling, HMAC op, base64url, KeyObject)
- fix(runtime): native await of V8 Promise handle in jose JWT roundtrip #1010
js_async_step_chainawaits V8 Promise handles (universal fix forawait <V8>(...)) - fix(jsruntime): hono SIGSEGV — guard small-handle pointers in native_object_to_v8 #1015 hono SIGSEGV — small-handle pointer guard
- feat(jsruntime): Response/Request/Headers Web Fetch API globals in V8 fallback #1016 V8 fallback Response/Request/Headers globals
Selected landings (compiler / HIR / codegen / runtime):
- fix(#957 followup): Function('return this')() + bare RegExp(...) recognisers #963
Function('return this')()+ bareRegExp(...)recognisers - feat(globalThis): expose built-in constructors as properties #965 globalThis built-in constructors as properties
- feat(runtime): Function.prototype.apply + .call dispatch #970
Function.prototype.apply/.calldispatch - feat(runtime): .constructor on Date/Array/Object instances #973
.constructoron Date/Array/Object instances - fix(runtime+codegen): ramda init — toString/slice/hasOwnProperty/length #978 ramda prototype methods (toString/slice/hasOwnProperty/length on instance receivers)
- fix(hir+runtime): Constructor.prototype method dispatch on instances #979 Constructor.prototype method dispatch for computed keys
- feat(runtime+jsruntime): Object.prototype methods on Buffer + require() namespace #983 Buffer prototype methods + require() namespace plain-object copy
- feat(util/stream): util.inherits + stream prototype scaffold (express unblocked) #984 util.inherits + Stream prototype scaffold
- fix(compile): #818 — recursively bundle transitive ESM imports for V8 fallback #987 V8-fallback transitive ESM bundle resolution
Selected landings (manifest):
- feat(zlib/crypto): brotli decompress + subtle.wrapKey/unwrapKey #962 zlib.createBrotliDecompress + crypto.subtle.wrapKey/unwrapKey
- feat(lodash): add sum/mean/sumBy/meanBy/head/last/tail to manifest #966 lodash sum/mean/sumBy/meanBy/head/last/tail
- feat(manifest): add stream EventEmitter methods to API gate #967 stream EventEmitter methods (axios past gate)
- feat(lodash): add max/min/maxBy/minBy/clamp/inRange/random to manifest #982 lodash max/min/maxBy/minBy/clamp/inRange/random
- fix(date-fns): format() returns formatted string (was undefined) #993 date-fns format (proper LDML tokens via NativeMethodCall route)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
parityCompatibility gap with Node.js, ECMAScript, or the supported ecosystemCompatibility gap with Node.js, ECMAScript, or the supported ecosystem
Activity
proggeramlug commentedon May 18, 2026
Snapshot at v0.5.1007
13/16 PASSING (up from 11/16):
3/16 FAILING:
PR #1041 (async-closure state machine, closes #1021's core architectural gap) flipped express + hono. fastify and nestjs share #1021's family but each has its own follow-up:
perry-stdlib's bundled fastify rather thanhttp.createServer, so the per-request loop lives in different code and isn't covered by the user-arrow state machine. Likely a missing pump-progress hook in the bundled adapter.Closing #1023 (hono stdout-redirect) as resolved by #1041.
andrewtdiz commentedon Jun 5, 2026
I will take the current Drizzle/better-sqlite3 runtime-hang slice.
Current-main validation on
e482b26dc994(2026-06-05 UTC):tests/release/packages/_harness.sh --filter hono-basic,hono-jsx-imports,fastify-replay,nestjs-hello,drizzle-sqlitewith releasePERRY_BINreports Fastify + both Hono fixtures passing.drizzle-sqliteinstalls and compiles, then times out at runtime with empty stdout/stderr.timeout 10s tests/release/packages/drizzle-sqlite/outreproduces the same timeout.Intended PR cut:
Out of scope for this cut: NestJS/RxJS barrel-reexport walls and broader V8-free package work.
andrewtdiz commentedon Jun 5, 2026
Opened PR #4494 for this slice: #4494
On current main base e482b26, the branch fixes the Drizzle SQLite runtime hang/error by aligning constructor prototype fallback behavior and preserving class constructor dynamic props used by the Drizzle SQL namespace path. Validation passed:
andrewtdiz commentedon Jun 5, 2026
Taking the next NestJS package-compatibility slice in a fresh branch: refresh the \ fixture so it reaches Perry's AOT/native compile path under the no-runtime-JS policy, then address the re-exported class method symbol mismatch if it remains the next compile/link wall. Non-goals for this cut: full Nest runtime parity, Express adapter behavior beyond the fixture's immediate bootstrap path, and broader package tracker cleanup.
andrewtdiz commentedon Jun 5, 2026
Correction to my prior claim comment: the fixture is tests/release/packages/nestjs-hello. I am taking the NestJS package-compatibility slice that first refreshes that fixture so it reaches Perry AOT/native compilation under the no-runtime-JS policy, then fixes the re-exported class method symbol mismatch if it remains the next compile/link wall. Non-goals are full Nest runtime parity, broad Express adapter behavior, and package tracker cleanup.
andrewtdiz commentedon Jun 5, 2026
Opened PR #4498: https://github.com/PerryTS/perry/pull/4498\n\nThis cut advances
nestjs-hellopast the install/trust metadata, dynamic wrapper, private buffer binding,SlowBuffer, and legacy stream/EventEmitter constructor-call walls, then updatesWALLS.mdto the current default-wrapper/re-export linker wall. Focused checks passed:cargo test -p perry wrap_rewrites_ -- --nocapture,cargo check -p perry-hir,cargo check -p perry, release build, thenestjs-helloharness expected SKIP at the documented wall, parity binaries for stream/EventEmitter constructor calls,cargo fmt --all -- --check,git diff --check, and./scripts/check_file_size.sh.