Headless-Testability Coverage Registry
Source-of-truth, human-readable view of which Koder Stack surfaces have a canonical headless-test mechanism (per policies/headless-first.kmd R2 and rfcs/stack-RFC-005-full-headless-testability.kmd), and the implementation status of each mechanism's SDK.
A surface counts as covered when a same-binary headless test can drive it (programmatic input), observe it (deterministic observation API), and run reproducibly (R5 clock/RNG determinism). "SDK status" tracks the binding that provides that mechanism.
Per-surface mechanism
| Surface | Mechanism / SDK | SDK status | Determinism (R5) | Notes |
|---|---|---|---|---|
| Flutter | WidgetTester (Flutter SDK) + koder_kit_test (Pilot 4) |
shipped (upstream) + KKT slice 1 | via koder_test_clock/koder_test_rng (Dart); runDeterministic |
golden + pump built-in; koder_kit_test adds runDeterministic (fixed clock+seeded rng) + Stack-wide 0.001 golden tolerance (useKoderGoldens); signed-in pumpKoderApp fixture = KKT slice 2 |
| Web | koder_web_test (Kruze headless R1 + Chrome fallback) |
core + determinism shipped | shipped — WithClock/WithRNG, 100-run repro green |
engines/sdk/koder_web_test; testing.T sugar + AssertGolden shipped; 3 adopters live (hub#158, kruze#219, KOVER-040) + the .kdt runner web backend (KTOOLS-015) |
| GTK/Adwaita | koder_kit_gtk/test |
planned | planned | Pilot 2 (infralinuxkodix#049) |
| Wayland client | koder_kit_wayland/test (wlr-virtual-pointer/keyboard) |
planned | planned | Pilot 1 (infralinuxx#033) |
| kompose compositor | koder_kit_compositor/test |
in-progress (C binding) | planned | Pilot 1 (infralinuxx#033) |
| TUI Go | PTY + koder_kit_tui/test |
planned | planned | Pilot 4 |
Adopters (R8 SDK-reuse — products consuming a mechanism)
| Product | Mechanism | Coverage | Status |
|---|---|---|---|
| productsdevhub | koder_web_test (ChromeOnly) |
home-page first-paint (TestHubHomeFirstPaint, green vs live hub.koder.dev) + parameterised authenticated repro harness |
first adopter — regression guard live; HUB-UI-FLUTTER-2953 fix gated on captured owner state (hub#158) |
| productshorizontalkruze | koder_web_test Attach (drives externally-launched browser) |
comparative-benchmark driver (tests/benchmark/comparative/driver) — chromedp dropped; navigatescoretiming via the SDK |
second adopter (kruze#219) — mechanical run green on dev-linux-kruze; ±5% GPU score-parity gated on consumer-GPU seat |
| productsdevkover | koder_web_test (Attach + Input + Tracing) |
the whole CDP layer — AB engine (metrics + timeline phase-split), recordreplay (real input synthesis), capture (screenshot) — chromedp fully dropped | third adopter (KOVER-040, DONE 2026-06-06) — atomic ab.Connect→Session swap; fidelity harness green post-swap (script_ms>0 + clean record/replay round-trip) |
productsdevkoder-tools (koder-test-dialog) |
koder_web_test (ChromeOnly, as the .kdt runner's WEB Backend) |
the declarative .kdt runner's web backend — selector→DOM resolve, clicktypescrolldragwaitassert-visibleassert-state via the SDK; golden via screenshot diff |
Pilot 3 (KTOOLS-015) — R2-web + R3R4R5 shipped; e2e green on dev-linux-kruze (7-step .kdt + golden round-trip); wayland/qemu backends blocked-by Pilot 1 (x#033) |
Layer 1 primitives (engines/sdk/koder_test_*)
| Primitive | Purpose | Dart | C | Go | Kotlin | JS/TS |
|---|---|---|---|---|---|---|
koder_test_clock |
canonical FakeClock | ✅ | ⏳ | ⏳ | ⏳ | ⏳ |
koder_test_rng |
seeded RNG | ✅ | ⏳ | ⏳ | ⏳ | ⏳ |
koder_test_input |
input injection | ✅ | ⏳ | ⏳ | ⏳ | ⏳ |
koder_test_screencap |
screen capture | ✅ | ⏳ | ⏳ | ⏳ | ⏳ |
koder_test_state |
state introspection | ✅ | ⏳ | ⏳ | ⏳ | ⏳ |
koder_test_compositor |
headless kompose | n/a | 🔧 | n/a | n/a | n/a |
koder_test_widgets |
runtime i18n leak audit (testKoderI18nNoLeaks, R4.3) |
✅ | n/a | ⏳ | ⏳ | ⏳ |
✅ shipped · 🔧 in-progress · ⏳ planned · n/a not applicable for that stack.
The Web row's determinism is self-hosted:
koder_web_testinjects the clock/RNG shims as JS atPage.addScriptToEvaluateOnNewDocument(it does not yet consume the Dartkoder_test_clock/koder_test_rngprimitives — a future unification once those gain a JS binding).
Registry rule
A module that adds or changes a headless-test mechanism updates the matching row here in the same change (mirror of the koder_web_test precedent).