PyCForge 1.3.72 — active Runtime collection verification

Status: tested development build; not published by this workflow.
CC alone publishes. PCFC11 remains standalone; its test-pcfc11.sh workflow and
compiler integration are unchanged. SDK 0.6.2 and bundled import contracts are
unchanged. Further import expansion remains deferred behind memory work.

Implemented
-----------
Generated local/captured cells and return slots receive root frames. Evaluation
temporaries and comprehension cells receive scoped roots. Statement/iteration
completion and return/break/continue/error/finally paths unwind those roots.
Traced dispatch restores root-frame state after every function return.
pv_call_auto / pv_call_auto_kw enable threshold collection during generated
execution. Standalone main supports PYCF_RUNTIME_GC_THRESHOLD (default zero).
Ordinary calls and the 1.3.71 managed idle-boundary calls retain their behavior.

Native callbacks and descendants, constructors, expanded-call assembly/dispatch,
module initialization and live file scopes defer collection. Collection never
retries a failed allocation, never runs finalizers and never resets work/file
budgets. Retained C values outside call inputs still require PRoot registrations.
Temporary-root storage is bounded, separately accounted, and freed by destroy.
Regenerate C and rebuild callers together because runtime structures changed.

Reproducible memory evidence
----------------------------
A single 10,000-iteration call under a 262,144-byte arena cap performed 1,098
collections, peaked at 17,759 arena bytes, and cumulatively reclaimed 15,282,835
bytes. Root storage used 5,120 additional bytes. The ordinary no-collection call
exhausted the same cap. Aliases, a retained nested graph, a cycle and the numeric
result remained correct.

The parameterized scaling benchmark used a 16,384-byte trigger and the same
262,144-byte cap:
Iterations   Collections   Peak arena bytes   Root storage bytes
1,000                98             17,376                5,120
10,000            1,223             17,778                5,120
100,000          12,473             18,092                5,120
The 100,000-iteration call reclaimed 172,955,325 bytes cumulatively. These are
arena and root-buffer measurements, not process RSS or collector pause limits.
Collector index scratch and C stack frames are additional bounded storage.
See evidence/active_gc_1_3_72/benchmark.py and scaling.json.

Qualification
-------------
* 13 active-GC checks pass with GCC ASan+UBSan after the expanded-call correction.
  Native output agrees with independent CPython where applicable. Coverage
  includes recursive callers, expression temporaries, closures/nonlocal cells,
  keywords/expanded arguments, nested comprehensions, finally return replacement,
  early exits, error recovery, callback/file deferral and arrays.
* All 81 allocator-failure positions in the active fixture leave zero tracked
  allocations after destruction. Separate tracked tests cover both root-buffer
  allocation/growth failures and successful growth/destruction.
* The earlier combined collector run passed 37 tests under ASan+UBSan, including
  the 200-position managed-boundary allocation-failure sweep. The corrected
  active suite was then rerun independently (13 passes).
* External PCFC11 0.2.27 passes 11 active-GC checks each at O0 and O1. Two GNU
  linker-wrap fault-injection cases are GCC-specific and excluded there.
* Installed-wheel Runtime checks: 74 initial passes plus 82 subtests; the one
  worker-launcher failure was corrected in the test launcher and passed on
  rerun. The follow-up including inheritance passes 30 tests plus 191 subtests.
  That is 104 distinct checks and 273 subtests with no unresolved failure.
* SDK 0.6.2 connects, browses, creates/scans/verifies/packages a scalar project
  and creates/scans/converts the array starter. All 552 SDK payload files remain
  unchanged. The selected engine's generated C includes the new API.
* Offline Help: 31 pages, 82 Python examples, 50 Runtime and 32 Typed native
  comparisons, 5 API examples, 6 C callers, 3 module examples, 3 README examples.
* Full suite: 271 modules; 3657 passed,
  8 initial failure records, 39 skipped,
  4911 passed subtests. Exact initial failures are retained in
  release-gate.json. The converter inventory now explicitly includes the new GC
  header; all six affected historical-check modules pass (100 checks, 78 subtests,
  3 unchanged archive skips). The GUI debounce timing check passes unchanged in
  isolation. There are no unresolved failures after these targeted rechecks.

The original production-brand guard now excludes retained historical evidence.
The file-picker path policy is extracted into qt_file_paths.py; its custom UI
and public dialog aliases are preserved. The inherited guard/UI checks passed
33 tests plus 704 subtests before the full-suite gate.

Scope and limitations
---------------------
Qualified here on Linux with GCC and external PCFC11, including offscreen Qt.
This is not native Windows qualification. LeakSanitizer cannot inspect this
host's process state: ASAN_OPTIONS=detect_leaks=0 was used, with ASan+UBSan and
independent allocation/free accounting retained. No whole-program leak-freedom
or bounded wall-clock GC-pause claim is made. Live graphs, uncollectable native
regions or a large single operation can still exhaust the arena. Active GC
remains opt-in; broader native-resource tracing and performance qualification
remain ahead of changing defaults and resuming import expansion.

Trying the new mode
-------------------
For a standalone generated file, compile with both:
  -DPYCF_RUNTIME_MAIN -DPYCF_RUNTIME_GC_THRESHOLD=16384
For an embedded C caller, use pv_call_auto or pv_call_auto_kw with a positive
threshold. Keep other retained PVs in registered root slots and always destroy
completed contexts. The executable Help page runtime-memory.html contains a
complete Python source and C caller.

Distribution integrity
----------------------
The source archive retains every one of the 4,250 original 1.3.71 source files.
README changes are its version heading and two factual memory descriptions;
all four approved image URLs, their positions and banner widths are preserved.
The final pair is checked by strict twine, README and public-distribution tools,
with package payload equality across source, wheel and installed files. Exact
filenames, sizes and SHA256 values are in the accompanying external report.
