Test-first scaffolding ahead of extracting src/ir/conversions.zig — no code change to the coercion targets (lowerXX / coerceToType / coerceOrErase / buildProtocolErasure / tryUserConversion / failable-adapter selection). Adds 4 .ir snapshots (first .ir for 01xx/09xx/10xx), each captured surgically via `sx ir | normalize_ir`, path-free, idempotent, and print-free at IR-gen time (0114-types-build-block-convert was rejected — it prints `--- void / 0 args ---` + sx source at IR-gen): - 0107-types-int-cmp-in-float-ternary numeric int<->float coercion - 0903-optionals-optional-roundtrip optional wrap/unwrap - 0904-optionals-any-to-string-optional xx unbox_any + optional - 1004-errors-try error-channel adapter/coercion Protocol erasure + user Into are already pinned by the 04xx snapshots (0400/0413/0414/0416); duplicate-conversion rejection by the 0410/0411/0412 anchors. Adds 1 unit test via the public surface (no new exposure, mirroring A4.1/A4.2 sub-step 1): optionalOfFlattened — the optional wrap/flatten coercion rule (T -> ?T; ?T -> ?T, never ??T; contrasted with the non-flattening optionalOf). The lowerXX/coerceToType/coerceOrErase/buildProtocolErasure decisions are private + emission-bound, so their CoercionPlan unit tests land with the extracted module in sub-step 2. zig build, zig build test, tests/run_examples.sh (357/0) all green.
148 KiB
148 KiB