PyCForge Phase 14B v0.14.1 Project Handoff
============================================

Status
------

PyCForge 0.14.1 seals the independently bounded Phase 14B scope: conditional
placement of already-supported scalar-expression prerequisites inside Boolean
short-circuit expressions and chained comparisons.

Phase 14B adds no Python primitive, representation, helper, runtime failure
channel, allocation, ownership, cleanup, or C IR node kind. Phase 14C and
Phase 15 have not started.

Sealed predecessor custody
--------------------------

Phase 14B began only after authenticating the exact 0.14.0 predecessor:

* archive: pycforge_phase_14_v0_14_0.tar.gz
* archive size: 1,016,512 bytes
* archive SHA-256:
  d4fe065d168241b4371901e19eda346c38835c1d2ac07e3870f27abb5a7b3917
* sealed tree SHA-256:
  6eb034b63d4f08b8ea6de08fd38e507d12d4fc2436f0d3a68443624fc4c05d76
* predecessor converter subtree SHA-256:
  ccb92a82741202569e4639342e6ae711c246e2122a689f7831715ee182596c2d
* predecessor wheel: pycforge-0.14.0-py3-none-any.whl
* predecessor wheel size: 252,934 bytes
* predecessor wheel SHA-256:
  8de55533728eae00caa6381c4eb0af402ed479e4068047f5e14402cf668c0822

These historical authenticated identities and every sealed
transition/phase_14 file remain unchanged.

Phase 14B boundary
------------------

Phase 14B resolves one placement debt. PyCForge already lowers a supported
scalar expression to ordered prerequisite C IR statements and a scalar result
expression. Version 0.14.1 may now keep that complete prerequisite closure
inside the Python conditional region that controls whether the operand is
evaluated.

Two region forms are admitted:

* Boolean And/Or expressions whose operands and result use the exact existing
  Boolean representation and where at least one operand needs prerequisite
  placement.
* Chained comparisons whose operands share one exact existing int, float, or
  bool representation and where at least one later operand needs conditional
  materialization.

The eligible operand closure contains only scalar primitives already accepted
by 0.14.0, including understood direct positional calls, supported arithmetic
and unary forms, proved scalar container or record reads, and sealed Phase 14A
floor arithmetic. Nesting composes independently proved regions; it cannot make
an unsupported primitive eligible.

Boolean lowering initializes one result from the first operand. Every later
And operand is placed in a flat if(result) sibling guard; every later Or operand
is placed in a flat if(!result) sibling guard. Chained comparison lowering
evaluates its first two operands in order, initializes the result and rolling
middle value, and uses one flat if(result) sibling guard per later operand. A
reached middle operand is materialized once and reused by its adjacent
comparisons. A skipped operand does not evaluate.

Every selected occurrence owns one immutable fact-table/0.14.1
conditional-region-facts record and exactly one of these RulePlans:

    phase14.conditional.boolean_region@0.14.1
    phase14.conditional.comparison_region@0.14.1

The region plans own no helpers. Their lowering shape is
flat-guarded-assignment-v1 and uses only existing structured declarations,
assignments, blocks, guards, Boolean expressions, calls, and identifier
references. There is no raw C, conditional expression, statement expression,
goto, renderer inference, or newly invented operand limit.

Contract identities
-------------------

* source bundle: source-bundle/0.2
* Python IR: python-ir/0.4
* container facts: fact-table/0.11
* module facts: fact-table/0.12
* record facts: fact-table/0.13
* numeric facts: fact-table/0.14
* conditional facts: fact-table/0.14.1
* conversion plan: conversion-plan/0.14.1
* C IR: c-ir/0.14.1
* generated C: generated-c/0.14.1
* conversion summary: pycforge.conversion-summary/0.14.1
* decision trace: pycforge.decision-trace/0.14.1
* result serialization: 0.5
* rule set: phase14-conditional-regions-v0.14.1
* renderer: c-renderer-v0.14.1
* semantic policy: strict-source-v1
* numeric policy: phase14-proved-floor-arithmetic-v0.14
* module policy: phase13-explicit-record-modules-v0.13
* record policy: phase13-immutable-automatic-records-v0.13
* container policy: phase11-fixed-local-containers-v0.11
* helper policy: phase10-support-templates-v0.10
* target: c11-portable-fixed-v1

The Phase 10 helper registry fingerprint remains:

    fcb719f07984f3b79e17262e90f93823a9a0139a60529f8486ab09f6c3663d98

Safety and compatibility
------------------------

Independent validation reconstructs exact region ownership, ordered operands,
prerequisite closure, guard polarity, accumulator initialization, rolling
middle reuse, mappings, summaries, traces, and serialization directly from
Python IR and cumulative facts. Analysis, validation, and lowering use
persistent indexes and linear passes. Cancellation checks cover discovery,
reconstruction, plan publication, validation, and per-operand lowering.

Rejection, cancellation, stale output, internal validation failure, or
interrupted replacement publishes no partial current successor and cannot
overwrite the last-known-good linked C file. Generated C remains immutable and
fresh-result-only Save C remains atomic.

An active 0.14.1 conversion that selects no conditional region preserves the
0.14.0 generated-C bytes and output fingerprint. Explicit Phase 14A requests
preserve their exact historical request, payload, summary, trace, generated-C,
and diagnostic behavior. The Phase 14A helpers, helper registry, numeric
semantics, and sealed transition evidence are unchanged.

Non-Boolean operand-returning and/or semantics, keywords, defaults, variadics,
unpacking, indirect calls, recursion, exceptions, unwinding, mutation, dynamic
dispatch, general classes, allocation, cleanup, closures, generators, async
behavior, and every neighboring dangerous family remain outside the boundary.

The SourceBundle stays closed. PyCForge performs no import-path, filesystem,
environment, package, installed-distribution, or network discovery. It exposes
no compilation, linking, loading, execution, debugging, or terminal surface.

Validation
----------

Run from the release root:

    python -m unittest discover -s tests
    python tools/validate_phase14b.py --run-tests
    python -m pycforge audit architecture
    python -m pycforge audit rules
    python -m pycforge audit helpers
    python -m pycforge audit containers
    python -m pycforge audit modules
    python -m pycforge audit records
    python -m pycforge audit numeric
    python -m pycforge audit conditional
    python -m pycforge audit determinism
    python -m pycforge audit transition --phase phase_14
    python -m pycforge audit transition --phase phase_14b

Pass --predecessor-archive pycforge_phase_14_v0_14_0.tar.gz and
--require-predecessor to the authenticated validator when the sealed
predecessor is available.

Promotion evidence covers Boolean guard polarity, chained rolling-middle
reuse, nested prerequisite containment, exact facts and plans, malformed-fact
and C IR rejection, cancellation, observer isolation, linear stress,
determinism, mappings, summaries, traces, packaging, isolated installation,
and historical Phase 14A compatibility. Generated C was never compiled,
linked, loaded, or executed.

Release evidence
----------------

* tests: 413 discovered; 403 passed, 10 had the expected PyQt5-unavailable
  skip, and none failed
* cumulative audits: passed, including the independent conditional audit
* cumulative determinism SHA-256:
  f547f60b5405ff91df47e594418ceccbbfe1af0dc0323abb7c0f8d32ef5b0a97
* conditional audit witness-C SHA-256:
  cf9ccd348c69bbf51f8642b06e0b6cac3f82d585f4a334a103c9c3e914f610a5
* authenticated Phase 14A predecessor: passed
* two fixed-epoch wheel builds: byte-identical
* wheel: pycforge-0.14.1-py3-none-any.whl
* wheel size: 278,494 bytes
* wheel SHA-256:
  255cba6d45b6f7f2c8347f4764d37ad9858d9616f84cc93b65b07e205785a70d
* wheel RECORD/metadata inspection: 120 entries, 17 SVG assets, no native
  binaries, tag py3-none-any
* isolated wheel installation, SourceBundle conditional conversion,
  conditional audit, and linked-C atomic save: passed
* two normalized source-archive builds: byte-identical
* source archive: pycforge_phase_14b_v0_14_1.tar.gz
* source archive size and SHA-256: recorded externally to avoid self-reference
* canonical release-tree SHA-256: authenticated by
  transition/phase_14b/release_fingerprint.json, which alone carries the value
  and is excluded from its own hash domain
* compiler invocation: no
* generated C compiled, linked, loaded, or executed: no
* Windows 11 execution or validation: not claimed

PyQt5 was unavailable in the release environment. The 10 existing GUI tests
therefore retain their expected skips and previously sealed offscreen-widget
evidence remains preserved. Windows 11 laptop review remains future user
feedback rather than release evidence.

Next objective
--------------

Do not begin Phase 14C automatically. Preserve and authenticate the 0.14.1
release artifacts. Windows 11 feedback remains planned after all phases, as
requested by the user. Any next mini-phase requires its own bounded feasibility
and entry decision. Do not begin Phase 15.
