✓
Passing Passing: the compiler rejects this program as expected.
Code
// Pins the NESTED-form propagation gap. The pyramid post states the design
// rule — "an unhandled branch propagating to the nearest matching handler is
// just what bind does. That's the choke" — and the point-free `=>` choke
// implements it (210_151/152/197). In the NESTED (arrow) chain form it does
// not: a base-level `| failed f |>` continuation — the nearest matching
// handler, and the valid consumer spelling (`|>` threads into the call, `=>`
// returns a branch) — is refused, and every stage's unhandled branches die
// with KORU022.
//
// Neither spelling claims in the nested form: `| failed f => failed f` at the
// base is refused the same way, even wrapped in a tor whose declared `| err`
// gives the re-raise a target (measured 2026-09-02). The claim mechanism is
// point-free-only today. Pins the gap; flips when nested propagation lands.
~import std/io
~pub tor stage-a { ctx: i64 }
| ctx i64
| failed string
~proc stage-a|zig { if (ctx < 0) return .{ .failed = "neg" }; return .{ .ctx = ctx + 1 }; }
~pub tor stage-b { ctx: i64 }
| ctx i64
| failed string
~proc stage-b|zig { return .{ .ctx = ctx * 2 }; }
~stage-a(ctx: 2)
| ctx c |> stage-b(ctx: c)
| failed f |> std/io:print.ln("{{ f:s }}")
Actual compiler output
error[KORU022]: branch 'ctx' must be handled but no continuation found
--> tests/regression/200_COMPILER_FEATURES/220_FLOW_CHECKER/220_029_nested_chain_base_handler_is_not_a_claim/input.kz:27:0
error[KORU022]: branch 'failed' must be handled but no continuation found
--> tests/regression/200_COMPILER_FEATURES/220_FLOW_CHECKER/220_029_nested_chain_base_handler_is_not_a_claim/input.kz:27:0
❌ Compiler coordination error: Incomplete branch coverage
(set KORU_BACKEND_TRACE=1 for the backend return trace)Backend must reject with:
CONTAINS KORU022
CONTAINS must be handledFlows
flow ~stage-a click a branch to expand · @labels scroll to their anchor
stage-a (ctx: 2)
Test Configuration
MUST_ERROR