facett-korp — the korp Ingest pane (drivable component)
Class:
design· Function axis:f0the Ingest pane (Elm/Facet/Panel) ·f1the serializable model (IngestModel+IngestRow) ·f2the mutation seam (IngestMsg→update→IngestEffect::RunCollector) ·f3the 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
- ✅ crate built, 6 inline + 2 render tests green (default AND
--features testmatrix). - ⏭ Remainder (korp mount): add
facett-korpas a korp dep and, in theTab::Ingestarm, renderIngestPane::new("Ingest", korp::collect::registry_descriptors().map(→IngestRow))(behind thecollectorsfeature;IngestPane::demo()fallback), and wireIngestEffect::RunCollector→ a jera job (korp::collect::by_name+ the skade sink). Left undone here to keep korp's build green in one shot.