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