PyCForge 1.3.38 — Runtime text layout and normal editor scrollbars
Review build, 2026-10-18. Based on the current 1.3.37 source archive.

CHANGES
Both Python editor panes now default to ordinary Qt scrollbars. The custom
marker overview rail is hidden, has no keyboard focus, and reserves no space.
Diagnostic, Find and ForgeLens navigation and text highlighting remain available.
The gutter follows the text viewport above the horizontal scrollbar. Scrollbar
handle minimum sizes now apply only along their scrolling direction. The corner
has an explicit matte fill; editor padding and rounded clipping no longer
interfere with the scrollbar edges. Generated C receives the shared edge fixes.
Optional explicit use of the historical rail remains supported, with corrected
geometry outside the text viewport and before the real scrollbar.

Runtime conversion adds center, ljust, rjust, zfill and expandtabs. Supported
behavior includes Unicode code-point widths, one-character Unicode/NUL fills,
Python's odd-padding centering, sign-aware ASCII zero padding, tab-stop columns,
CR/LF resets, nonpositive tab sizes, bound methods, expanded calls, and argument
validation. Work and output allocation remain bounded. New capabilities are
identified in the conversion summary. Runtime rule-set/renderer identifiers and
summary/artifact versions advance to 1.3.38; regenerate C for the new behavior.

HTML Help includes an executable inventory example and scrolling guidance.
README, package dependencies and all 504 icon files are unchanged. This remains
one application wheel with the existing dependency declarations. Typed conversion
contracts and module-export semantics are unchanged. No PyPI publication was made.

VERIFICATION
- 25 new native conversion tests and 7 new real Qt scrolling tests pass.
- The native source run passed 42 tests, including 17 existing file-workflow tests,
  plus 27 subtests. Text parsing separately passed 35 tests.
- Selected Qt/Help/export/theme/large-file tests passed after targeted corrections.
  The broad initial UI run passed 110 tests and exposed a pre-existing Save As
  test timing assumption. Its corrected tests passed in the follow-up run.
  The final targeted run passed 62 tests and 196 subtests, including the new
  scrolling/folding checks, optional legacy rail, module exports and metadata.
- Native output is compared with CPython for Unicode, combining characters,
  embedded NUL, signs, center parity, tab line resets, invalid arguments, ordered
  effects, expanded/bound calls, deterministic randomized cases and the Help example.
- Native harnesses verify fatal output/work limits, allocation failure at every
  observed allocation point, retained-result collection and zero tracked live
  allocations after context destruction.
- Repeated failed-conversion diagnostic-menu navigation, long/short source,
  split panes, horizontal scrolling, final-line visibility and Help were rendered
  in real Qt and visually inspected. Both editor scrollbar values reached maximum.
- All 871 installed application files byte-match the wheel and final source.
- The public distribution verifier passed for wheel and source archive, including
  metadata, dependency declarations, license, package contents and PNG assets.

- Installed-wheel checks passed: 12 tests, including randomized Unicode native
  comparisons, tab handling, allocation-failure/collection checks, the Help
  example and all 7 scrollbar/folding tests. Native cases used AddressSanitizer
  and undefined-behavior sanitizer; no errors were reported (leak scan disabled).

TEST HARNESS CORRECTIONS
An older navigator fixture lacked display_name added by 1.3.37; it now supplies
that field. The Save As test now waits for asynchronous bundle fingerprinting
before comparing pre/post-save identity. The new folding test initially used
an incorrect method name; it was corrected to fold_all_functions and passed.
Initial failure logs are retained with the successful reruns in evidence.

PLATFORM AND LIMITS
Linux, Python 3.12, PySide6/Qt offscreen, GCC with strict C11 warnings. Native
Windows interaction was not exercised. The complete repository test suite was
not rerun. Qt offscreen checks cannot establish native Windows paint behavior.

LeakSanitizer fails to inspect /proc tasks under this container's process tracing.
That environmental failure is retained in the evidence; AddressSanitizer and
undefined-behavior checks use detect_leaks=0, alongside the explicit allocation
tracking and failure sweep. No LeakSanitizer pass is claimed.

Runtime remains a bounded preview. Width counts code points, not display cells;
expandtabs accepts signed 32-bit tab sizes on supported hosts. Custom __index__,
bytes formatting, Unicode normalization and automatic garbage collection are
not added. Typed conversion does not gain these Runtime string operations.

WINDOWS ACCEPTANCE
1. Install the wheel, open a short Python function and trigger a failed conversion.
   Use the diagnostic menu repeatedly. There should be no marker ticks or blue
   overview box beside the scrollbar, and no scrollbar when the source fits.
2. Open long/wide source. Drag to the bottom and right, resize, and fold/unfold
   functions. Confirm the last line is reachable and handles remain unobstructed.
3. Repeat with the split Python pane and Generated C. Inspect the bottom corner
   and confirm diagnostic highlights do not cross the vertical scrollbar.
4. In Runtime mode, convert the new Pad fields and expand tabs Help example.
5. Confirm normal Save/Save As, completion, folding, Find and ForgeLens behavior.

README SHA256
81408b884ec93411cd88f9734cc8cffc79bcd65751bcdfe092ea33e41addb638
