PyCForge 1.3.71 — registered roots and managed boundary collection
Work date: 2026-10-30. Unpublished development handoff. CC alone publishes.

SCOPE AND PRIORITY

This increment extends Crucible's existing precise, non-moving Runtime garbage
collector. Memory lifetime and GC qualification take priority over additional
conversion-import capabilities. PCFC11 0.2.27 remains a standalone external
compiler; no compiler source, integration or test-pcfc11.sh change is included.
PyCForge remains one wheel. The separate SDK remains unchanged at 0.6.2.

C callers can register stable, caller-owned arrays of retained PV values using
pv_roots_attach/pv_roots_detach. Explicit pv_collect includes those values.
pv_call_managed and pv_call_managed_kw opt into threshold collection after a
successful completed call, temporarily protecting the current callable, supplied
arguments and result. Other retained values require registered or explicit roots.
Registration borrows its storage; detach before it expires or destroy the context
while it remains valid. Destruction clears registrations and releases the arena.

PGCStats reports live and peak arena bytes, collections, reclaimed bytes, refusals,
registered slots, last reclaimed bytes and status. These counts include allocation
metadata but exclude collector scratch and other process memory. They are not RSS.
Refusal performs no sweep, preserves the program result/error and execution/file
counters, and records a reason. Existing ordinary calls retain their behavior.
Regenerate C and rebuild C callers together because the internal PC layout changes.

This is NOT automatic collection inside a running Python function. A long active
call can still exhaust the hard arena budget. Ordinary pv_call/pv_call_kw and the
standalone main wrapper do not automatically collect. Generated local/temporary
roots and qualified active-call safe points remain the next work, before import
expansion. Files retain deterministic scope cleanup; no GC finalizers are added.

QUALIFIED GC BEHAVIOR

* GCC address/undefined-behavior sanitizer run: 26 passed. Includes 14 new managed
  tests, 11 prior collection tests and the connected allocation-failure audit.
  Compiler flags include -O1, -fsanitize=address,undefined and
  -fno-sanitize-recover=all. No sanitizer defect was reported in the final run.
* Fresh installed wheel at GCC -O0: 25 passed (new managed and prior collection
  suites). All 140 loaded PyCForge modules originated in that installation.
* External PCFC11 0.2.27: 12 passed at -O0 and 12 at -O1, each including 11 native
  witnesses and one metadata check. Two GNU linker-wrapping tests are excluded
  from this compiler profile and covered with GCC. PCFC11 is never packaged.
* A 256 KiB arena supports 2,000 managed calls while retaining the first result:
  live bytes plateau at 1,646, peak bytes are 17,066, and cumulative reclaimed
  bytes are 30,839,250 on this 64-bit Linux host. Each call allocates temporary
  strings, a discarded cycle and a result. The ordinary-call control reaches
  the hard arena limit. These are fixture measurements, not universal bounds.
* All 200 allocation failure points in the repeated managed workload release
  every tracked allocation after destruction. The connected existing audit
  checks 496 failure points. Collector-index failure preserves returned values
  and permits a later successful collection without clearing a program error.
* Witnesses cover shared aliases/cycles, replaced/detached roots, dynamic closures,
  keyword values, arrays and mutated aliases, recovered exceptions, closed file
  scopes, disabled/below-threshold decisions, limits, foreign-context references,
  diagnostic counter saturation and a deliberately failing long active call.

DOCUMENTATION AND SDK

The updated offline Runtime memory page includes complete explicit and managed
C callers, root lifetimes, threshold semantics, refusal reasons and accurate
limits. All executable documentation checks pass: 31 pages, five categories,
81 Python examples, 49 Runtime and 32 Typed native comparisons, five API examples,
five C callers, three module examples and three README examples. Changed Help
sections were rendered and inspected. The README changes only its version
heading to 1.3.71; all four permanent approved images and prose remain intact.

The unchanged installed SDK 0.6.2 connects to the separately installed 1.3.71
engine, reads methods/templates/workbench/Help, creates/scans/verifies/builds its
scalar starter, and creates/scans/converts its array starter. All 552 SDK payload
files retain their hashes. No new extension protocol, operation or bundled import
package is introduced. Engine landscape version/inventory is regenerated.

COMPLETE REGRESSION RUN AND REMAINING GATES

The complete default suite ran once across all 270 test modules in four disjoint
process groups. Pytest summaries report 3,642 passed, 39 skipped, 13 failure
records across 12 distinct test nodes, and 4,906 passed subtests. Failure totals
include subtest failures; do not treat them as a separate count of unique tests.
All 14 new managed-GC tests pass at GCC -O2 in that run. Skips concern missing
historical sealed archives, unavailable Clang and a headless-only check in this
Qt-equipped environment. Full completion and all group logs/XML are retained.

All 12 failing nodes were repeated against both this candidate and the unchanged
supplied 1.3.70 source. Both repeat runs produced the same seven failing cases,
with six passes and 194 passed subtests. The compiler/UI/import-worker timing
failures from the concurrent run cleared on repeat. This comparison does not
claim those existing timing-sensitive tests can never fail again.

Three persistent array failures were the host's blocked LeakSanitizer task scan;
all three pass with ASan/UBSan retained and ASAN_OPTIONS=detect_leaks=0. Those
array tests independently require zero tracked allocations after cleanup. Two
release tests still expected literal 1.3.68 in both original and candidate trees;
they now use the existing ACTIVE_PACKAGE_VERSION fixture, retaining the version
consistency assertions. Both corrected checks pass.

Two unchanged, pre-existing project guards remain unresolved:
* The external-host text guard flags the preserved historical file
  evidence/workbench_discovery_2026_10_30/finish_sources.py.
* The IDE module-size guard finds 1,001 lines in pycforge/ide/qt_file_dialogs.py,
  where the existing limit is fewer than 1,000.
Neither file is changed by this GC increment. Their guard failures also occur
in the original 1.3.70 baseline. No test limit or historical-evidence exclusion
was weakened to hide them. This handoff is a development candidate with qualified
GC behavior, not a claim that the complete project regression gate is green.


ATTEMPTS AND PLATFORM LIMITS

An initial array test used ordinary import rather than explicit conversion-import
syntax; correcting that fixture resolves the rejection. Initial sanitizer attempts
with leak detection enabled fail because this host denies LeakSanitizer access to
/proc task information. The final ASan/UBSan run disables only LeakSanitizer;
explicit malloc/calloc/free tracking supplies the allocation-cleanup evidence.
Initial PCFC11 invocations reject GCC-only -O2 and warning options before compiling
C. A test-only adapter selects PCFC11's supported -O0/-O1 profile. All initial logs
are retained. An initial complete documentation run times out during a 30-second
GCC compile under concurrent load; the unchanged verifier's final run passes.

Qualification is Linux x86-64, Python 3.12.14, GCC 13.3.0 and standalone PCFC11
0.2.27. This is not native Windows or macOS qualification. The remaining general
Python, array/import, work-budget and active-call GC limits are unchanged.

PRESERVATION AND DELIVERY

The complete supplied 1.3.70 source inventory and historical engineering evidence
are carried forward. New evidence is under evidence/managed_gc_1_3_71, and the
memory contract is specifications/runtime_memory_1_3_71.md. Source, qualification
wheel and installed runtime payload match byte-for-byte across 956 files.

The final wheel/source pair is rebuilt and checked after qualification. Exact
sizes, SHA256 hashes, archive preservation, payload and strict distribution-check
results are in the accompanying external handoff report. This source record does
not embed hashes of an archive containing itself. No upload to PyPI is performed.
