Summary
The GC documentation no longer has a reliable current entry point, and a deleted collector knob remains in an executable CI stress script. After ~200 GC-heavy commits in four days, several documents present mutually exclusive states as current.
Concrete drift on main (79d2f59ed, v0.5.1473):
Evidence
Proposed structure
Create one short, current GC architecture/operations page covering:
- shipped collector modes and actual env knobs;
- nursery/old-gen regions, copying vs fallback/full paths;
- root mechanism by target, barriers, weak processing, memory pressure, block pooling, and old-defrag status;
- the authoritative validation commands/workflows and which are required contexts;
- links to historical experiment journals clearly marked as historical/chronological evidence.
Do not rewrite valuable experiment history. Put a prominent dated supersession banner and a current conclusion at the top, then link to the current page.
Acceptance criteria
- A reader can identify the shipped GC/rooting defaults and supported knobs from one current page without reconciling chronological journals.
- Historical plans/experiments are labeled historical and no longer make an obsolete opening decision look current.
- Remove
PERRY_GEN_GC_EVACUATE from executable test environments, source docs, and generated translation source; replace each test arm with the actual knob/subject it intends to exercise.
- Add a cheap stale-knob check: executable scripts/docs claiming GC env knobs must match an allowlisted runtime/codegen parser (with explicit historical-doc exemptions).
- Correct the GC source path and freshness cadence.
- Update or retire the “authoritative” claim/tracker in
engine-plan.md.
Summary
The GC documentation no longer has a reliable current entry point, and a deleted collector knob remains in an executable CI stress script. After ~200 GC-heavy commits in four days, several documents present mutually exclusive states as current.
Concrete drift on
main(79d2f59ed, v0.5.1473):docs/generational-gc-plan.mdopens with “proposed, pre-implementation” but ends with all implementation phases complete. It still specifies nonexistentPERRY_NURSERY_MBand repeatedly uses deletedPERRY_GEN_GC_EVACUATE.docs/statepoint-gc-experiment.mdopens with “Keep the shadow stack as the default” and later labels shadow as default, whiledocs/engine-plan.mdandgc-rooting-invariant.mdsay target-aware native statepoints are the shipped default.docs/engine-plan.mdcalls itself authoritative, points at closed tracker Engine plan tracker — GC correctness and performance (routing only; docs/engine-plan.md is authoritative) #7294, and is synced only through v0.5.1350; the repository is now v0.5.1473. It still says the statepoint lowering has no static root-dominance checker even though gc: teach the root-dominance checker to read statepoint relocation bundles #7663 and the current workflow added one.CLAUDE.mdpoints atcrates/perry-runtime/src/gc.rs; GC is now thesrc/gc/module tree.docs/src/testing/ci-gate-scheduling.mdandscripts/gate_freshness.jsonsay gate freshness runs hourly, while the workflow cron is every two hours.scripts/run_memory_stability_tests.sh, whose mode matrix and architecture workload environment containPERRY_GEN_GC_EVACUATE=1/0. That knob was deleted in gc: PERRY_GEN_GC_EVACUATE=0 moves zero cells on all 12 gc-ratchet probes — the knob's off-state is unexercised #7611, so those tokens claim a mode distinction that no longer exists.Evidence
Proposed structure
Create one short, current GC architecture/operations page covering:
Do not rewrite valuable experiment history. Put a prominent dated supersession banner and a current conclusion at the top, then link to the current page.
Acceptance criteria
PERRY_GEN_GC_EVACUATEfrom executable test environments, source docs, and generated translation source; replace each test arm with the actual knob/subject it intends to exercise.engine-plan.md.