PyCForge 1.3.39 — Typed record parameters and returns
Review build, 2026-10-18. Based on the saved 1.3.38 source archive.

CHANGES
Typed functions can receive and return immutable scalar-field records. Supported
forms include fresh factory-result locals, record parameters, forwarding calls,
nested positional calls, and branches returning existing records. Classes are
nominal: matching fields do not make two record classes interchangeable.

Generated C passes and returns structs by value. Constructor and call arguments
are staged once in source order. Records contain no owned pointers, require no
heap allocation or free, and cannot expose an address of a completed local.
Source mutation, rebinding, identity observations and unsupported escapes reject.
C validation retains const on lvalues while permitting same-struct value copies.
Record names that collide with scalar C type spellings retain distinct types.

The active Typed profile is typed-record-values-v1.2 / c-renderer-v1.2. Earlier
explicit profiles, including scalar-strings-v1.1, keep their closed record scope.
The new profile publishes nominal-immutable-value-copy-v1 boundary metadata.
Existing structural schemas remain unchanged; record instance facts distinguish
parameter and call-result origins. Source/lexical proof replay checks record
facts, annotation signatures and required lowering obligations before emission.
Runtime converter files and its 1.3.38 contract remain unchanged.

Separate C module exports include struct definitions and exact function types.
The additive record_types manifest section maps original module/class/field
names to generated names and C types, with inline value-copy ownership.
Complete Python factory/consumer and C caller examples are added to HTML Help.
Related conversion tables, function/import guidance and searchable catalog
entries are consistent. The Runtime strings catalog exceeded its 24-keyword
limit; consolidating split/rsplit restores complete Help loading.

The final README update preserves its established prose, all nine code blocks,
and contact details. It adds current conversion coverage and the five confirmed
1.3.32 audit fixes, retaining the three earlier tracker entries. Its only three
image URLs are the exact user-approved banner, main screenshot and Ting evidence
screenshot. The banner renders at 320 pixels wide. No theme-change prose was
added. All 504 application icon files, dependency declarations and normal editor
scrollbar behavior are retained. No PyPI publication was made.

VERIFICATION
- 35 new record tests cover factories, forwarding, branch selection, nominal
  mismatch, unsafe use rejection, forged/missing proof, deterministic output,
  historical profiles, module/name collisions and separate C callers.
- Native C tests cover 3,721 integer input pairs, mixed int/float/bool fields,
  64-field records, nested returns and value-copy independence in a C caller.
  Generated modules compile separately with strict C11 warnings.
- The broad Typed/record/keyword/numeric/scope/loop/file/export/Help/scrollbar
  run passed 396 tests and 818 subtests. Three architecture checks exposed the
  cumulative lowerer size limit. Record-specific logic was moved into its
  subsystem, and the follow-up passed 93 tests and 452 subtests.
- Final record/C-IR checks passed 47 tests and 17 subtests, including the new
  reserved C type-name cases. Const member-write rejection remains enforced.
- Installed-wheel checks passed 68 tests and 460 subtests: all new record tests,
  C-IR validation, HTML Help and the seven normal scrollbar/folding checks.
- The native C copy/forwarding harness passed AddressSanitizer and undefined-
  behavior sanitizer checks. Leak scanning is disabled in this traced container;
  no LeakSanitizer pass is claimed. Record values add no dynamic allocations.
- All 873 installed application files match both the wheel and final source.
  Every icon matches the previous release. The final README hash is recorded below.

DOCUMENTATION AND DISTRIBUTION
- All 28 HTML Help pages opened in the real Qt viewer. Code uses a monospace
  font; 41 search checks passed. Wide/narrow record examples, copy semantics,
  C export guidance and feature-table layouts were captured and inspected.
- All 74 documented Python examples passed conversion/native comparison:
  25 Typed and 49 Runtime. Every Typed example also compiled and ran as a
  separate module export. Five Python API examples, four C callers, two module
  bundles and the API/module-export callers passed; the new record C caller
  prints 7. Three unchanged README code examples still passed.
- The public distribution verifier passed for the wheel and source archive,
  checking metadata, declared dependencies, licenses, package contents and PNGs.
  Application bytes also match between wheel, source archive and installation.
  An initial source-archive check caught a build log being changed during its
  own packaging; final build/verification output is kept outside the archive.
- Source packaging excludes all screenshots, design masters and other
  nonessential images. The 138 review/design images present before cleanup are
  excluded; only the 504 required application PNG icons remain. MANIFEST rules
  enforce this on rebuild, and distribution verification rejects other images.
  Visual reviews remain documented in text; their screenshots are not shipped.
  README validation checks the three approved external image URLs without
  depending on local image copies.
- After image cleanup, the distribution verifier also passed from a fresh
  source extraction. All 13 packaging/presentation tests passed in both trees,
  and PyPI README rendering passed with zero local screenshot files. Archive
  inspection found no other image signatures outside the application icons.

FINAL README REVIEW
- The PyPI Markdown renderer retains exactly one banner and two screenshots,
  in that order, with no navigation or mailto links. The banner width remains
  320 pixels. The contact email is preserved as code text to avoid an extra link.
- All three exact Cloudinary URLs returned HTTP 200 and image/png. Downloaded
  bytes match the approved originals: banner 994,678 bytes (2172 x 724), main
  screenshot 367,744 bytes and Ting screenshot 194,643 bytes (both 1920 x 1080).
  Both screenshots remain below 1,000,000 bytes. No downloaded image was added
  to the project or archives.
- The README version is 1.3.39. Its table covers record boundaries, Runtime
  exceptions, parsing/layout methods, file positions/update modes, separate
  Typed C exports and explicit Runtime collection. Stale Help page-count,
  ForgeLens and lifetime statements were corrected against the current Help.
- The eight bug-tracker entries remain immediately above the contact details.
  The five new entries are grounded in PyCForge-1.3.32-Verification.txt; their
  audit IDs are release-qualified to avoid colliding with the earlier IDs.
- All nine fenced code blocks are byte-for-byte unchanged. All three Python
  examples passed conversion/execution checks. The focused packaging,
  presentation and metadata run passed 19 tests and 170 subtests.
- PyPI rendering, distribution verification and the same 19 tests/170 subtests
  also passed from a fresh source extraction without screenshot assets.
- Both release files pass twine check --strict. The wheel long description and
  source PKG-INFO contain the exact updated README. Compared with the preceding
  1.3.39 wheel, only METADATA and RECORD payloads change; all application bytes
  remain identical. Archive verification finds 504 required application PNGs
  and zero nonessential images.

SCOPE AND PLATFORM
Linux, Python 3.12, PySide6/Qt offscreen and GCC. The complete repository test
suite was not rerun. Native Windows UI and compiler ABI behavior were not tested.
Qt offscreen review does not establish native Windows paint behavior.

Records keep 1–64 int/float/bool fields and the exact field-copying initializer.
Class and record-boundary functions must share one supplied Python module.
Python class imports and record values crossing Python modules remain unsupported;
use scalar wrappers between Python modules. External C callers can use the
exported struct interfaces. There is no stable ABI across regenerated bundles.

Record-boundary calls require exact positional arguments. Inline constructors
in returns/arguments, quoted/forward type names, defaults, keyword-only/variadic
parameters, recursion, alias assignments, record mutation, object protocols,
container storage and nested/string/container fields are outside this release.
Create a fresh local before returning a constructor or reading factory fields.
Existing scalar and Runtime call forms are unchanged.

README SHA256
7e04aeb7eb4b03724d5bb2cfb088a3f6bd0aaaf7091d6a9c7decdee982b1e919
