Skip to content

docs(gc-handoff): triage #7803 on a corpus that links again - #7989

Merged
proggeramlug merged 5 commits into
mainfrom
gc/7803-zod-corpus-triage
Aug 12, 2026
Merged

docs(gc-handoff): triage #7803 on a corpus that links again#7989
proggeramlug merged 5 commits into
mainfrom
gc/7803-zod-corpus-triage

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Docs-only. The zod dependency corpus links again as of #7980, so #7803 was
runnable for the first time since it was filed. This records what running it
actually says, as gc-handoff/ZOD-NOTES.md.

Headlines:

No code change and deliberately no new gate: a gate for a ~19%-of-runs
intermittent failure would be red on a healthy tree often enough to train people
to ignore it.

No version bump (maintainer bumps at merge).

Summary by CodeRabbit

  • Documentation
    • Added investigation notes for an intermittent garbage-collection issue affecting the Zod dependency corpus.
    • Documented that the original reproducer is no longer reproducible, while failures remain intermittent on other test seeds.
    • Recorded diagnostic guidance, observed failure rates, and unresolved investigation findings.
    • Added a changelog entry confirming that no code changes or fixes were included.

Ralph Küpper added 2 commits August 12, 2026 21:52
The zod dep-corpus links on main again (#7980), so #7803 is runnable for the
first time since it was filed. Record what running it says:

- #7803's own reproducer (seed 1, rate 1, quarantine off) no longer fails, but
  the class it reports does — 3 of 16 seeds fail, one with the same
  "Cannot read properties of undefined" shape.
- The candidate cause on record (#7962/#7978, Object.defineProperti(es)
  rooting) is refuted by a sabotage A/B: reverting both fixes underneath
  current main does not bring the failure back.
- Every failure is intermittent; a fixed seed does not replay. The reportable
  figure is the rate, not the seed.
- Seed 15 is a separate, self-detecting bug: the #7645 pin latch aborts on a
  pinned young Map, and the FATAL's own suggested remediation
  (scripts/gc_pin_sites.py) reports OK.
- Aside: PERRY_GC_DIAG=0 enables diagnostics (var_os(...).is_some()).
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 7b16645f-7ac9-4960-9fdf-983c71faec11

📥 Commits

Reviewing files that changed from the base of the PR and between 98fe212 and 1fe5f12.

📒 Files selected for processing (1)
  • gc-handoff/ZOD-NOTES.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • gc-handoff/ZOD-NOTES.md

📝 Walkthrough

Walkthrough

This PR adds a changelog entry and a 263-line investigation note for zod corpus triage. It records reproduction results, intermittent scheduled-GC failures, diagnostic details, and unresolved rooting and pin-latch issues. No code changes were made.

Changes

Zod corpus triage

Layer / File(s) Summary
Corpus reproduction and schedule analysis
gc-handoff/ZOD-NOTES.md
The investigation verifies corpus linking, records baseline and seed-1 results, and documents A/B tests for related changes.
GC diagnostics and failure analysis
gc-handoff/ZOD-NOTES.md
The note records multi-seed failures, quarantine behavior, diagnostic-flag semantics, pin-latch findings, and a 3-of-16 unprotected failure rate.
Triage outcome and follow-up
gc-handoff/ZOD-NOTES.md, changelog.d/7989-zod-corpus-triage.md
The note records unresolved rooting and pin-latch findings, issue-status guidance, and no proposed fix or CI gate. The changelog records the triage outcome and absence of code changes.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related issues

  • Issue 7990 — Documents the pinned-young-object relocation abort and unresolved GC pin-latch behavior recorded in this investigation.

Possibly related PRs

  • PerryTS/perry#7196 — Covers from-space protection and quarantine diagnostics used by this investigation.
  • PerryTS/perry#7317 — Covers seeded GC scheduling and diagnostics used by the zod corpus runs.
  • PerryTS/perry#7741 — Covers related seeded GC schedule controls used to investigate zod corpus failures.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the documentation change and the triage of issue #7803 on the restored zod corpus.
Description check ✅ Passed The description explains the purpose, findings, verification, issue references, and scope, although it does not follow every template heading or checklist item.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch gc/7803-zod-corpus-triage

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
proggeramlug marked this pull request as ready for review August 12, 2026 19:55

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
gc-handoff/ZOD-NOTES.md (1)

13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Resolve the reported Markdownlint findings.

Add language identifiers to the fenced blocks at Lines 13, 25, 36, 72, 104, 121, 171, and 192. Render #7154 as inline code or escape the hash at Line 110 so it is not parsed as a heading.

Also applies to: 25-25, 36-36, 72-72, 104-104, 110-110, 121-121, 171-171, 192-192

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@gc-handoff/ZOD-NOTES.md` at line 13, Update the fenced code blocks in
ZOD-NOTES.md at the specified lines to include appropriate language identifiers,
and format `#7154` as inline code or escape its hash so Markdownlint no longer
interprets it as a heading.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@gc-handoff/ZOD-NOTES.md`:
- Around line 116-132: The protected-arm discussion in the quarantine analysis
should not claim confirmation of the stale-pointer mechanism. In the section
describing PERRY_GC_PROTECT_FROMSPACE=1 and the shipped witness, replace
“confirmed” with “supports,” and characterize the result as mitigation evidence
while preserving that the rooting defect remains unlocalized.
- Around line 216-220: Update the rate discussion in the surrounding notes to
describe “3 of 16 runs failed” as an observed 18.75% sample rate, rather than
calling it durable. Clarify that the clean-sweep probability estimates assume
independent runs with a fixed underlying failure probability.

---

Nitpick comments:
In `@gc-handoff/ZOD-NOTES.md`:
- Line 13: Update the fenced code blocks in ZOD-NOTES.md at the specified lines
to include appropriate language identifiers, and format `#7154` as inline code or
escape its hash so Markdownlint no longer interprets it as a heading.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d9bf3281-d3bb-4977-8cd2-1b860cbb2582

📥 Commits

Reviewing files that changed from the base of the PR and between 4784d5d and 98fe212.

📒 Files selected for processing (2)
  • changelog.d/7989-zod-corpus-triage.md
  • gc-handoff/ZOD-NOTES.md

Comment thread gc-handoff/ZOD-NOTES.md
Comment on lines +116 to +132
### The quarantine still hides it, exactly as #7803 predicted

Same seed 4, quarantine ON at depth 800: **exit 0**, answer byte-exact, and the
instrument is saturated rather than absent —

```
[gc-fromspace-protect] mode=ProtectPages retired_set=#999 blocks=2
sets_held=800/800 bytes_protected=2095054848 bytes_poisoned=0 blocks_recycled=398
```

6,888 retired sets, 2.09 GB held, and the run reaches 6,888 copying minors
instead of dying at 738. This is #7803's reading (1) confirmed on a second seed:
holding retired from-space pages out of Eden changes *which* addresses get
recycled and the vulnerable window stops lining up. The protected arm is
therefore not evidence of health, and the shipped witness
(`scripts/gc_dep_scale_witness.sh`, quarantine ON) cannot catch this class of
window on this workload.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Do not call the protected-arm result confirmation.

PERRY_GC_PROTECT_FROMSPACE=1 suppresses the observed failure and changes address reuse. This supports the quarantine hypothesis, but it does not confirm the stale-pointer mechanism. Section 7 states that the rooting defect remains unlocalized. Change “confirmed” to “supports” and describe this arm as mitigation evidence.

🧰 Tools
🪛 markdownlint-cli2 (0.23.2)

[warning] 121-121: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@gc-handoff/ZOD-NOTES.md` around lines 116 - 132, The protected-arm discussion
in the quarantine analysis should not claim confirmation of the stale-pointer
mechanism. In the section describing PERRY_GC_PROTECT_FROMSPACE=1 and the
shipped witness, replace “confirmed” with “supports,” and characterize the
result as mitigation evidence while preserving that the rooting defect remains
unlocalized.

Comment thread gc-handoff/ZOD-NOTES.md
Comment on lines +216 to +220
one is the **rate**: at rate 1 with the quarantine off, **3 of 16 runs failed
(~19%)**. That is the number to A/B a candidate fix against, and 16 runs is a
thin sample for it — a fix claiming to close this needs a sweep wide enough that
19%→0% is distinguishable from luck (at ~19%, a 16-run clean sweep is only
~3% likely by chance; a 40-run clean sweep is ~0.02%).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Label 3/16 as an observed sample rate.

“The durable one is the rate” overstates what one 16-run sweep establishes. Use “3 of 16 runs failed (18.75% observed in this sweep)” instead. State that the clean-sweep probabilities assume independent runs with a fixed underlying failure probability.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@gc-handoff/ZOD-NOTES.md` around lines 216 - 220, Update the rate discussion
in the surrounding notes to describe “3 of 16 runs failed” as an observed 18.75%
sample rate, rather than calling it durable. Clarify that the clean-sweep
probability estimates assume independent runs with a fixed underlying failure
probability.

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