stdlib / channel

✓ 31 passing ○ 4 planned

Lessons

1 ✓ Passing
001 buffered roundtrip
2 ✓ Passing
002 full arm
3 ✓ Passing
003 recv none arm
4 ✓ Passing
004 send after close
5 ✓ Passing
005 close then drain
6 ✓ Passing
006 pump joined consumer
7 ✓ Passing
007 two consumers competing
8 ✓ Passing
008 capacity zero refused
9 ✓ Passing
009 send unknown channel
10 ✓ Passing
010 two channels one pump
11 ✓ Passing
011 arm under decl refused
12 ✓ Passing
012 closed kind refused
13 ✓ Passing
013 multi kind channel
14 ✓ Passing
014 recv multi kind refused
15 ✓ Passing
015 join before decl refused
16 ✓ Passing
016 unknown kind arm refused
17 ✓ Passing
017 pipe arm on join refused
18 ✓ Passing
018 missing capacity refused
19 ✓ Passing
019 supervised send full retry
20 ○ Planned
020 supervised send direct — OWED: supervise a std/channel verb directly — v1 supervises same-module children only; cross-module fold re-entry (and transform-tor re-entry inside generated steps) is the owed machinery. Channel twin of 320_113.
21 ○ Planned
021 send enclosing closed fold — OWED: enclosing-arm claim — inner send's unhandled `closed` resolves outward to the outer send's `| closed` arm (skipping the close level, which declares no such arm). Needs the post-transform claim pass; sibling of 320_120 / 320_170.
22 ✓ Passing
022 sole consumer obligation
23 ✓ Passing
023 competing obligation
24 ✓ Passing
024 full retains custody
25 ✓ Passing
025 closed retains custody
26 ✓ Passing
026 reuse after send
27 ✓ Passing
027 arm must discharge
28 ✓ Passing
028 drain residue obliged
29 ○ Planned
029 obligation relay — OWED: obligation relay — consumer arm re-sends minted v into a second channel; custody chains. MEASURED (2026-10): transit works — the relay send consumes `v` under `| ok` — but the pin's own `| ok |> print.ln("relayed {{ v.id:d }}")` arm then reads `v.id`, which is the use-after-discharge refusal 699_026 pins as a wall (KORU030 'binding v was already discharged'). The input contradicts the edge contract it pins: under "ok consumes", `v` is dead inside `| ok`. Fix the input (read `v.id` before the send, or print a static string) OR rule that custody-consume leaves the value bytes readable — that ruling is a language-semantics question, not a channel.kz decision.
30 ○ Planned
030 spawned producer send — OWED-PROBE: can a `worker.spawn`'d thread invoke a channel's generated send path? The emitted ring (`__koru_chan_<n>_<kind>_ring`, MpmcRing global in the emitted module) is CAS-safe by construction; what's unmeasured is module reachability — whether a lib `~proc|zig` body (or a spawned work_fn) can see the generated unit/global, and whether `send`'s verdicts dispatch sanely off-thread. This is the eventfd bridge's precondition: cross-thread producer → ring → pump `! wait` eventfd wake. PIN when an input spelling exists — candidate shapes: spawned `~proc` calling the generated `__channel_send_<n>_<kind>` unit, or a channel-level `produce` verb that spawns internally.
31 ✓ Passing
031 composite kind obligation
32 ✓ Passing
032 composite kind partial settle
33 ✓ Passing
033 recv composite kind refused
34 ✓ Passing
034 composite kind extends
35 ✓ Passing
035 construct glyph in consumer arm