Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## v0.5.1225 — GC scans descriptor/proxy side tables; static-field globals rooted (#5937)

Three GC P0s from the 2026-07-02 audit (the #5042/#5142 family: a side table holds the only live reference and GC can't see it). ACCESSOR_DESCRIPTORS holds the ONLY reference to Object.defineProperty getter/setter closures — unscanned, a minor GC swept or moved them and the next property read invoked freed memory; PROPERTY_DESCRIPTORS owner keys went stale on evacuation (frozen/non-writable attrs silently detached or fired on a new tenant at a reused address). PROXIES target/handler are commonly reachable only through the registry; REFLECT_METADATA keys go stale on target moves. New scan_descriptor_roots_mut + scan_proxy_roots_mut (semantically ported from the stranded codex-branch be73b4f8d, rewritten against main's current table shapes; the codex policy hunk is superseded by main's registered_root_scanners_block_budgeted_gc guards) visit the closure/target/handler slots and rekey owners in the metadata-rewrite phase, mirroring the symbol-keyed twins. @perry_static_<mod>__<Class>__<field> globals — NaN-boxed any-values whose GC_STORE_AUDIT(ROOT) comment was aspirational — are now registered via register_module_globals_as_gc_roots walking ctx.static_field_globals (deduped; cross-module duplicates harmless). e2e gc_side_table_roots_evacuation.rs: accessor + proxy + static-field object survive 20k-allocation churn + gc() under PERRY_GC_FORCE_EVACUATE=1 with PERRY_GC_VERIFY_EVACUATION=1 armed; gc-stress green on the labeled run.

## v0.5.1224 — gap-suite conformance smoke on every PR (#5936)

New `conformance-smoke` CI job: every pull_request and push runs `scripts/run_gap_tests.sh` — 258 gap tests AOT-compiled and diffed byte-for-byte against node, failing on any failure not triaged in test-parity/known_failures.json. Closes the audit's headline CI gap: nothing on the default PR path exercised TypeScript semantics, which is how the 2026-06 test262 regression (851 cases) and the #5763 setPrototypeOf boot breakage merged through green required checks. Measurement phase: continue-on-error and not yet in the branch-protection required set — flip it required (add `conformance-smoke` to protected contexts) once wall-time on real PRs is confirmed.
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

Perry is a native TypeScript compiler written in Rust that compiles TypeScript source code directly to native executables. It uses SWC for TypeScript parsing and LLVM for code generation.

**Current Version:** 0.5.1224
**Current Version:** 0.5.1225


## TypeScript Parity Status
Expand Down
Loading
Loading