Files
msd-core/.changeset/lively-orcas-climb.md
Tom Boucher b946051a46 fix(#3498): escapeRegex falls back below Node 24 (no RegExp.escape) (#3499)
RegExp.escape is ES2026 (first shipped in Node 24); pattern.cts called it
unconditionally, and the build consumes the module
(scripts/gen-loop-host-contract.cjs), so npm run build failed on Node 22 and
the gsd-test linux-node22 lane could not reach run_tests.

Fix: prefer the built-in when present, else an in-file metachar escape —
still the sole owner of escaping (#3212 invariant; lint scope unchanged).
Builtin captured at module load so runtime mutation cannot flip the path.

Regression: tests/pattern.test.cjs section 4 — child-process probes neuter
RegExp.escape before/after require and assert match-behavior equivalence.

Co-authored-by: sim <sim@local>
2026-08-14 13:51:33 -04:00

699 B

type, pr
type pr
Fixed 3499

The build no longer requires Node 24: escapeRegex falls back to an in-file metachar escape when RegExp.escape is absent (#3498) — RegExp.escape is ES2026 (Node 24+), and src/pattern.cts called it unconditionally, so npm run build itself failed on Node 22 (gen-loop-host-contract consumes the module), breaking the gsd-test linux-node22 verification lane. The seam now prefers the built-in when present and falls back otherwise — still the single owner of escaping (#3212 invariant preserved). Behavior on Node 24+ is unchanged; match behavior below Node 24 is verified equivalent by regression tests that neuter RegExp.escape in a child process.