Skip to content

fix(release): clear publishing and runtime blockers - #9998

Draft
proggeramlug wants to merge 28 commits into
PerryTS:mainfrom
proggeramlug:fix/release-triage-9983
Draft

fix(release): clear publishing and runtime blockers#9998
proggeramlug wants to merge 28 commits into
PerryTS:mainfrom
proggeramlug:fix/release-triage-9983

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

The r32 release failed on every platform before publishing, while main also had CI and runtime correctness blockers. This stack fixes the shared release infrastructure failures, clears the reproduced main reds, and addresses root causes found for #9942 and #9983.

Release and CI

  • Build all 40 extension archives in one Cargo feature union so they share one coherent Tokio runtime.
  • Fix the macOS Tokio archive checker: a valid CPU-only archive previously made grep return 1 under set -euo pipefail, aborting both macOS jobs.
  • Refresh the Linux release container snapshots after the Bullseye package URLs used by both Linux jobs began returning 404.
  • Build the Node compatibility matrix from the same coherent archive set.
  • Repair the GC ratchet artifact receipt/retry paths and accept the measured deltas from run 34219151426.
  • Remove the stale GC_INIT_DONE root-holder pin and serialize process-global runtime/native-registry tests.
  • Record the provider handle stack’s intentional cold TLS initialization fallback in the thread-local ratchet.
  • Scope the zizmor workflow_run exception to the gate-failure observer, whose privileged job checks out and executes only trusted main.

Runtime fixes

Investigation coverage

The landed Drizzle probe is strengthened for exact Drizzle 0.44.7 behavior and checks the lazy-typing transition after every mergeQueries mutation (#9935). It remains a measured negative rather than a claimed fix: 1,000 iterations matched Node, and a hostile one-iteration run survived 7,448 copying minors with the mark verifier clear. The exact production-boundary capture request is posted on #9935.

Validation

  • Coherent 40-extension build completed; the checker found 11 Tokio-using archives and one Tokio build ID.
  • tests/release_tokio_test.py: 10/10 passed.
  • GC ratchet/report tests: 118/118 passed.
  • Node compatibility: 58/58 passed; runtime pump: 8/8; native registry: 2/2; crypto: 8/8.
  • Root-holder gate passed: 1,388 declarations, 606 scanner-reached symbols, 364 inventory entries, 413 pinned symbols.
  • Thread-local policy passed: 415 hot declarations and 274 recorded cold declarations; all seven self-test directions passed. zizmor 1.28.0 reported no high-severity findings.
  • Provider runtime-only stress: 32,768 calls, 128 retained handles, 11 full collections, 11,863,472 bytes reclaimed. Provider stdlib stress completed 35 copying minors and copied 11,882 objects.
  • Compiled server wedges after ~12h: one thread pinned at 100%, RSS 5.9 GB, all requests time out, SIGTERM ignored #9942: 256 constructed instances produced no descriptor growth; a 10-minute idle scheduler run measured a flat/negative slope.
  • GC: a 12-element array persistently holds a pointer at index 10 that the slot enumeration never visits (UNENUMERATED, reserved=0x8020) #9983: deterministic forced-moving-minor tests passed. A 12,000-string spread stress completed with the slot verifier clear. Three retained Claude-bundle runs each cleared four copying minors with roughly 19,673 arrays and 221,127 pointer slots enumerated.
  • Patched iterator-prototype regression: all 41 Node-oracle lines passed normally and under forced evacuation (PERRY_GC_SCHEDULE_RATE=1, evacuation verification, and protected from-space). The allocation-free canonical-prototype probe passed 3/3.
  • The exact coherent release build of perry, perry-runtime-static, and perry-stdlib-static completed after the final source edit; the release-helper coherence test passed. Raw-handle debt is 955 versus the 963 baseline, with all 112 per-module ceilings satisfied.
  • Compiler-output captures, test registration, file-size, formatting, diff, native-result, and workflow YAML gates passed.

Remaining release blockers and limits

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@proggeramlug

Copy link
Copy Markdown
Contributor Author

Final CI classification for head 369d2772c (run 34256962396):

Passed: cargo-test, check, warnings, build-and-freshness, gap-suite-build, gap shards 1/4/5/6, gc-stress-build, the GC/representation-selection matrix, and the final gc-stress fan-in. In particular, shard 1 now passes the repaired iterator-prototype oracle and implementation.

Failures already independent of this branch:

  • e2e-scoped: only typed_feedback_guards_direct_closure_call_specialization failed (assertion failed: !ir.contains("call void @js_typed_feedback_record_fallback_call"); 19 sibling tests passed). This is the process-global/concurrent test race fixed by test(codegen): isolate the default feedback lane #9999, whose corresponding e2e check passes.

  • lint: only Public benchmark evidence freshness failed. Every other lint step, including formatting, release coherence, raw-handle ratchets, and test registration, passed. The available host could not meet the benchmark's quiet-host precondition, so no noisy artifact was substituted.

  • gap-suite (2): 124 passed, one failed: test_gap_json_nested_records. The exact 18-line comparison differs only at the inherited root-array toJSON case:

    Node:  global-prototype "global:"
    Perry: global-prototype [{"id":0,...},{"id":1,...},{"id":2,...}]
    

    Root cause: stringify_array_depth calls array_get_to_json, which checks only the array's own named-property side table and never performs ordinary prototype-chain Get through Array.prototype / Object.prototype. PR perf(json): streamline parse and stringify construction #9849 introduced the exposing fixture and landed it on current main after this PR's base; its benchmark notes explicitly recorded this mismatch. There is no complete fix in flight.

  • gap-suite (3): 124 passed, one failed: test_gap_2899_2779_2777_static_helpers. Node and Perry both exit 0 and share the first line; the runner truncates the later differing line. PR perf(json): streamline parse and stringify construction #9849's own final JSON-head run also had this shard red, so it is current-main JSON fallout rather than a fix(release): clear publishing and runtime blockers #9998 regression. A local attempt rebuilt the coherent runtime but stalled compiling the isolated fixture, so the later line/root cause remains unmeasured.

pr-gate is only the aggregate failure from those upstream rows. Current main's push run 34252807132 independently shows both JSON gap fixtures red.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant