Skip to content

compat: meta-tracker — remaining 5 packages blocking 100% sweep #1024

Closed

Description

@proggeramlug

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

  1. 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.
  2. 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-sqlite3 cookie-cutter. Short-term is mechanically scoped per existing per-package precedents (perry-ext-bcrypt, perry-ext-argon2, perry-ext-pg).
  3. 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):

Selected landings (compiler / HIR / codegen / runtime):

Selected landings (manifest):

Activity

  1. added
    parityCompatibility gap with Node.js, ECMAScript, or the supported ecosystem
    on May 18, 2026
  2. proggeramlug commented on May 18, 2026

    @proggeramlug
    ContributorAuthor

    Snapshot at v0.5.1007

    13/16 PASSING (up from 11/16):

    • date-fns, debug, dotenv, effect, express ⬅️ new, hono ⬅️ new, ioredis, jose, jsonwebtoken, lodash, ramda, vitest, zod

    3/16 FAILING:

    Package Status Tracked in
    fastify rc=124 #1021 (partial) — fastify-specific, not generic async
    nestjs empty stdout #1021 (partial) — likely Reflect.metadata / decorator pipeline gap
    drizzle TypeError: null.prepare #1022 — better-sqlite3 stub returns null instead of real db

    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:

    • fastify uses perry-stdlib's bundled fastify rather than http.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.
    • nestjs probably needs decorator metadata wiring (Reflect.metadata stubs). Worth a fresh investigation since fix(async): #1021 async-closure state machine + #1029 re-invocation idempotency #1041 may have changed its symptoms.

    Closing #1023 (hono stdout-redirect) as resolved by #1041.

  3. andrewtdiz commented on Jun 5, 2026

    @andrewtdiz
    Contributor

    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-sqlite with release PERRY_BIN reports Fastify + both Hono fixtures passing.
    • drizzle-sqlite installs and compiles, then times out at runtime with empty stdout/stderr.
    • A direct timeout 10s tests/release/packages/drizzle-sqlite/out reproduces the same timeout.

    Intended PR cut:

    • isolate the better-sqlite3/Drizzle open -> exec -> prepare/run/all -> close path;
    • add focused regression coverage for the current hang;
    • fix the runtime/codegen/stdlib lifecycle issue that prevents the Drizzle fixture from exiting and printing the expected rows.

    Out of scope for this cut: NestJS/RxJS barrel-reexport walls and broader V8-free package work.

  4. andrewtdiz commented on Jun 5, 2026

    @andrewtdiz
    Contributor

    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:

    • focused parity fixture: node-suite/object/globals/constructor-prototype-chain
    • release package harness: tests/release/packages/_harness.sh --filter drizzle-sqlite
  5. andrewtdiz commented on Jun 5, 2026

    @andrewtdiz
    Contributor

    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.

  6. andrewtdiz commented on Jun 5, 2026

    @andrewtdiz
    Contributor

    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.

  7. andrewtdiz commented on Jun 5, 2026

    @andrewtdiz
    Contributor

    Opened PR #4498: https://github.com/PerryTS/perry/pull/4498\n\nThis cut advances nestjs-hello past the install/trust metadata, dynamic wrapper, private buffer binding, SlowBuffer, and legacy stream/EventEmitter constructor-call walls, then updates WALLS.md to 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, the nestjs-hello harness 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    parityCompatibility gap with Node.js, ECMAScript, or the supported ecosystem

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions