PyCForge 1.3.28 — Runtime Exception Recovery

Delivered scope

This is the first stage of the accepted conversion upgrade program.
Runtime mode now admits selected try/except/else/finally and builtin raises
with optional literal messages. It recovers from supported errors across
functions, closures, methods, and supplied modules. Nested cleanup preserves
return, break, continue, handler ordering, and original error locations.

Files close on scope exit before an enclosing handler runs. A failed close
cannot re-enter a handler inside a file scope that was already exited.
Return-annotation and constructor-result checks occur after cleanup has
selected the final return value.

Exception objects and `except ... as error`, bare re-raise, chaining,
exception groups, custom exception classes, and computed raise messages
remain outside this release's documented profile. PYC4630 explains rejected
forms. Allocation, memory, recursion, step, and file-budget failures remain
terminal; Python finally bodies are skipped after terminal exhaustion,
while automatic handle cleanup still runs.

Documentation and UI

The existing HTML Help format, stylesheet, navigation, and search are retained.
The new Exceptions and cleanup chapter contains three complete executable
examples, expected output, supported types, file behavior, and limitations.
Related conversion, file, and diagnostic pages link to it.

All 23 Help pages opened in Qt offscreen. 59 Python examples were checked:
37 Runtime and 22 Typed native comparisons, plus five API examples, three
C callers, two multi-module examples, and three existing README examples.
The new examples' printed expected output was checked explicitly. Normal
and narrow Help layouts were inspected. No save-control changes were needed.

README is byte-for-byte identical to 1.3.27:
81408b884ec93411cd88f9734cc8cffc79bcd65751bcdfe092ea33e41addb638
All 126 UI Python files are unchanged. Dependencies remain PySide6, NumPy,
Numba, Jedi, and autopep8; no package dependency was added.

Verification

- Fourteen exception regression methods and ten rejection subcases passed
  AddressSanitizer and UndefinedBehaviorSanitizer. The additional file-close
  failure regression passed both sanitizers as well. These cover handler
  inheritance, nested transfers, canceled pending returns, constructor and
  return annotations, file cleanup, imported errors, closures, method-frame
  restoration, source locations, and terminal resource failures.
- 29 inheritance regressions and 191 subtests passed after the constructor
  boundary correction.
- 59 Help, Runtime integration/arena, Typed scalar/string, and Typed file
  tests passed, with 415 subtests.
- The broader conversion run reported 163 passing tests and 422 passing
  subtests. One legacy rejection subcase still expected ordinary try/except
  to reject. Its fixture was updated to an unsupported exception-object
  binding; the final rejection run passed four tests and 29 subtests.
  The original run and correction evidence are retained separately.
- The final installed wheel passed eight exception checks, opened the new
  Help chapter, and matched all 852 installed application files against the
  source. Checks used the installed import path, not the source package.
- Repeated conversion produced identical generated C and fingerprints.
  Package verification checks wheel RECORD hashes, metadata, application
  payloads, included runtime headers, and source-distribution contents.

The targeted suites overlap; their counts must not be added as unique tests.
This is not a claim that the entire historical suite or arbitrary Python
programs have been verified. Native checks used GCC 13.3.0 on Linux and
CPython 3.12.14. LeakSanitizer was disabled for this host; no LeakSanitizer
result is claimed. Native Windows/MSVC/clang-cl/PCFC11 execution remains
unverified here. No PyPI publication was performed.

Windows acceptance

Install the wheel through the existing environment. In Help, open Runtime
value conversions / Exceptions and cleanup. Convert and build the recovery
and file examples using the existing workflow; compare the shown output.
Confirm the existing C destination/save controls, scan results, and diagnostic
quick views continue to behave as before.

Remaining stages

Runtime validation and exact ForgeLens mappings, value reclamation, separate
C module/header exports, expanded file profiles, and Typed record boundaries
remain subsequent upgrades. This release does not claim those capabilities.
PYC4699 and the Runtime backend's existing ownership/proof limitations remain.

Reproduction and evidence

The source archive contains specifications/runtime_exceptions_1_3_28.md,
tests/test_runtime_exceptions_1_3_28.py, and evidence/exceptions_1_3_28/.
Run the new tests with:
  QT_QPA_PLATFORM=offscreen python -m pytest -q tests/test_runtime_exceptions_1_3_28.py
The /dev/full close-failure test is Linux-specific and skips without that device.
For the documentation verifier, preserve README with:
  PYCF_DOCUMENTATION_README_SHA256=81408b884ec93411cd88f9734cc8cffc79bcd65751bcdfe092ea33e41addb638
and run tools/verify_conversion_documentation.py with that environment value.
