Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/facett

facett-korp/.nornir/design.md

facett-korp — the korp Ingest pane (drivable component)

Class: design · Function axis: f0 the Ingest pane (Elm/Facet/Panel) · f1 the serializable model (IngestModel + IngestRow) · f2 the mutation seam (IngestMsg → update → IngestEffect::RunCollector) · f3 the introspection surface (state_json / update_json — the robot/remote drive). Sibling how-to: none yet. What this IS, strictly.

What it is

The extraction of korp's Ingest (open-data collector) surface out of korp's welded 3500-line main.rs into a reusable facett-Elm component, so the robot harness can drive it in code (headless + watch) — it was previously undrivable.

f0 — the pane

IngestPane renders a collector roster (one IngestRow per registered collector: name, source → target, direction), tracks a selection, and a Run action. It implements facett_core::Elm; impl_facet_via_elm! bridges it to Facet → Panel, with update_json routed into the Elm update. So it is drivable three ways off ONE model: ui() (paint), update_json/state_json (robot/remote), and headless tests.

Decoupling (leaf, no cycle)

korp depends on this crate to render Ingest, so it does not depend on korp. It also does not depend on korp-collectors — it mirrors the descriptor as its own IngestRow. The korp host maps korp_collectors::registry_descriptors() → Vec<IngestRow> and passes it to IngestPane::new. Running a collector is a host concern: the pane emits IngestEffect::RunCollector(name); the host turns it into a jera job. No async, no network in the pane.

f3 — remote-control / coverage (the law, in code)

robot_json_drive_select_and_run selects + runs via update_json and asserts state_json (selected_name, last_action == "queued jera job: collect …") — self-driving, no AI in the loop. testmatrix_cell_ingest_remote_drive emits the facett-korp/ingest cell (green ⟺ covered). tests/render.rs proves the ui() paints (the visible watch-on-DISPLAY leg).

Status