facett-pipeline — crate card
Reverse-engineered (from source — verify, don't trust the name)
- One-line pitch: A dataflow / Spark pipeline-DAG viewer + job progress, themed and animated (Falsett throughput packets, per-stage status glow, throughput labels).
- Does:
PipelineViewusesfacett_core::layeredfor producer-left columns and a persistentfacett_flow::FlowScenefor GPU/CPU geometry. Engine-agnostic: the canonical input is the neutralPipelineModel(inmodel.rs, withStage/StageStatus/StageMetrics/PipelineEdge/PipelineMetrics) produced by aPipelineAdapter— so a new engine is a new adapter, not a new viewer. Back-compat surface (new/with_progress/counts/Status/JobProgress, navigation andstate_json["dag"]) preserved. Status and consumer throughput map to separate Falsett tables; zero throughput suppresses packets. The deprecatedflowsimoverlay explicitly owns animation while active, avoiding duplicate packets. StageStatus::Unknown(UnknownReason): "we could not determine this node's state, and here is why" — distinct fromIdle("we know it has not started"), and rendered amber + dashed +?rather than the idle grey, so an unobserved node can never read as a fake green.Idleis still the default; both status enums are#[non_exhaustive].StatusTallyis the five-way count that actually sums to the node count (counts()'s legacy four-tuple does not).- Ships two in-crate adapters:
RunaPipelineAdapter(featureruna-adapter, mapsdwarves_runa::Pipeline) andPromoteLadderAdapter(always built; maps a localPromotionLadderof slots/rungs so a promotion ladder renders on this same viewer — seeNjord/.nornir/deployer-layering-decision.md). Neither drags an engine dependency into facett. - Key deps:
facett-core(layered layout, effects/glow, nav, Facet, theme),facett-flow(persistent geometry, boxes/arrows/status/rate; optionalwgpu),egui,serde_json. Dev-only:knut-pipelines(real Spark/SDP adapter drives the test matrix; tolerated normal+dev dep cycle). - Shape: lib; small (lib.rs + model.rs); ships a
pipeline_demoexample (glow). - Observed role in the workspace: Re-exported by the umbrella
facett; consumed by knut for Spark/SDP pipeline visualization, with shared Falsett rendering.
Falsett migration verification (2026-10-04)
- Actual workspace: 65 tests passed (44 unit, 3 accessibility/determinism, 1 accessibility-priority, 6 flow-lane, 6 callchain matrix, 2 real knut connector and 3 robot/pixel tests). The 2,050-node test keeps every visible rectangle while limiting semantic buttons to 2,000; a separate 2,100-node case keeps late selected/focused nodes named.
- Existing flowsim pixel tests passed 3/3 on the Mac GPU: live overlay changed 522 pixels, zero-rate overlay changed zero, and advancing the clock changed 366 pixels.
- Real Metal callbacks pass the GPU integration test in the actual workspace: status-only reconstruction uploads 64 attribute bytes, keeps geometry/target identity and changes pixels; clock/camera changes upload no geometry. The new
tests/snapshots/flow_gpu.pngreference was captured and compared in the actual workspace on Apple M2 Pro / Metal within 2 levels per channel; its README records provenance. Other hardware comparisons have not run. wgpucompilation and library Clippy with-D warningspassed. The actual workspace manifest/GPU-install gates also pass (3 feature tests and 5 installation tests). These component results do not certify every workspace feature or complete application.
Fill in (one line each — only the human knows these)
- Primary consumer(s):
- Why it exists (vs the obvious alternative):
- Hard constraint (airgap / no-C-deps / no-FFI / pure-Rust / etc.):
- Release cadence & independence (rides a parent? own repo someday?):
- Status (production / prototype / experimental / stubbed):
- Must-NOT-change invariant:
- Biggest known gap or TODO:
- Anything a newcomer would get wrong about it: