✓
Passing Passing: the compiler rejects this program as expected.
Code
// FRONTIER (pinned RED) — COMPONENT_CHALLENGE replay 04 / Charm spinner.
//
// Charm Bubbles spinner needs a time-driven frame tick (TickMsg / tea.Tick)
// so glyph cycling advances without keypress chrome. The natural consumer
// against koru/vaxis:run is:
//
// ! tick _ |> std/store:stored { spin.frame: (spin.frame + 1) % N }
//
// ACTUAL: koru/vaxis:run declares only draw / key / resize / focus-in /
// focus-out — no tick. Consumer gets KORU021.
//
// EXPECTED (after substrate): run grows `! ?tick` (payload TBD — void or
// timestamp) and the event loop posts it on an interval so Charm spinners
// (and progress spring) can animate.
//
// This pin is the minimal self-contained mirror of today's run branch set
// (no vaxis import). Floated program + exact error live in koru-libs:
// vaxis/tests/frontier/charm_spinner_natural.k
// vaxis/tests/frontier/charm_spinner_walls.md
~import std/io
const Win = struct { w: u16, h: u16 };
const Key = struct { ch: u8 };
~pub tor run { title: string }
! ?draw Win
! ?key Key
! ?resize Win
! ?focus-in
! ?focus-out
| ?done
| err string
~proc run|zig {
_ = title;
return .{ .err = "no tick substrate" };
}
~run(title: "spinner")
! tick _ |> std/io:print.ln("tick")
| err e |> std/io:print.ln(e)
Actual compiler output
error[KORU021]: event 'input:run' has no branch 'tick' (available: draw, key, resize, focus-in, focus-out, done, err)
--> tests/regression/800_CHALLENGES/800_004_vaxis_run_no_tick/input.kz:41:0
❌ Compiler coordination error: Incomplete branch coverage
(set KORU_BACKEND_TRACE=1 for the backend return trace)Must fail at runtime:
Program must error when executed.
Error output must contain
KORU021Flows
flow ~run click a branch to expand · @labels scroll to their anchor
run (title: "spinner")
Test Configuration
MUST_ERROR