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 shippedWithClock/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_test injects the clock/RNG shims as JS at Page.addScriptToEvaluateOnNewDocument (it does not yet consume the Dart koder_test_clock/koder_test_rng primitives — 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).