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

nordisk/facett

facett-pipeline/Cargo.toml

[package]
name = "facett-pipeline"
description = "facett — dataflow/Spark pipeline DAG viewer + job progress (rendered by Falsett)"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
# Development notes, agent instructions and machine-local tooling stay in the
# repository; they are not part of the published crate.
exclude = [
    ".nornir/",
]

[features]
wgpu = ["facett-flow/wgpu"]
# L4: functional-status emitter passthrough (see facett-core). No-op in release.
testmatrix = ["facett-core/testmatrix"]
# The `runa` engine adapter (RunaPipelineAdapter): map a dwarves `runa` CI/CD
# pipeline (typed `*.runa.ron` — Stage DAG + Step catalog) → the neutral
# `PipelineModel`, so the forge's pipeline renders on the REUSED node-DAG viewer.
# Off by default; the only place facett-pipeline reaches the `runa` edda leaf. It
# is a ONE-WAY adapter — runa stays a pure leaf (it never depends on facett), and
# facett's model types never leak back into runa.
# The FEATURE keeps its `runa-adapter` name (it names the engine, and renaming it
# would break every `features = ["runa-adapter"]` consumer, incl. published
# facett-pipeline users); only the PACKAGE moved to `dwarves-runa` (the bare
# crates.io name `runa` is squatted).
runa-adapter = ["dep:dwarves-runa"]
# The edge FLOW-SIM overlay (facett-flowsim): particle advection / static-arrows
# along each dataflow edge, driven by per-edge throughput. Off by default; when on,
# `PipelineView::with_flowsim` derives per-edge `flow`/`volume` from the same
# `throughput_rows_s`/`rows` the DAG already carries. flowsim is a leaf (deps only
# facett-core), so pipeline → flowsim → core never cycles.
flowsim = ["dep:facett-flowsim"]
# The flow-sim overlay's LIVE GPU lane: `paint_dag` offers each frame to
# `FlowSim::render_gpu` (an `egui_wgpu` paint callback that advects the particles in a
# compute pass and draws them as additive HDR points) and falls back to the CPU painter
# whenever the lane declines. Off by default — a host must also install the renderer
# (`facett_flowsim::gpu::host::install_flow_renderer`) and opt in with
# `set_gpu_active(true)`; without both, this feature changes nothing.
flowsim-gpu = ["flowsim", "facett-flowsim/wgpu"]

[dependencies]
facett-core = { path = "../facett-core", version = "0.3.0" }
facett-flow = { path = "../facett-flow", version = "0.2.0", features = ["host", "labels", "boxes", "arrows", "status", "rate"] }
# The flow-sim overlay leaf (optional, gated behind `flowsim`).
facett-flowsim = { path = "../facett-flowsim", version = "0.2.0", optional = true }
egui = { workspace = true }
# FC-3: the observable `PipelineState` Model derives Serialize/Deserialize so the
# `facett_core::Elm` contract can round-trip it (matches every migrated peer).
serde = { version = "1", features = ["derive"] }
serde_json = { workspace = true }
# `runa` — the dwarves forge's typed pipeline authoring layer (edda leaf). Optional,
# gated behind `runa-adapter`: pulled in ONLY when the RunaPipelineAdapter is built.
# Path mirrors how facett path-deps other edda leaves (`../../edda/crates/<name>`).
# Registry, sibling via the root `[patch.crates-io]` — same reason as
# facett-core's znippy-zoomies: a path here breaks every consumer that fetches
# facett-pipeline by git (knut, 2026-09-10).
dwarves-runa = { version = "0.3.0", optional = true }

[dev-dependencies]
facett-core = { path = "../facett-core", version = "0.3.0", features = ["golden"] }
# pipeline_demo renders the animated, themed DAG live, on the WGPU backend (LAW #4).
# The flow "glow" LOOK is layered-alpha shapes on the egui painter and is unrelated to
# the `glow` OpenGL crate this used to name. Example-only: never run by `cargo test`.
# `wgpu_no_default_features`, NOT `wgpu` (LAW 4 / GFX_V2 Decision 0). eframe's plain
# `wgpu` feature expands to `egui-wgpu/default` -> `wgpu/default` -> `wgpu-hal/default`
# -> **glow**, the GL backend this constellation dropped. Cargo features are additive
# and unify across the whole graph, so one DEV dependency spelling it this way turns the
# GL backend on for every crate here, normal edges included. Backends come from the
# workspace `wgpu` entry.
eframe = { version = "0.36", default-features = false, features = ["default_fonts", "wgpu_no_default_features", "wayland", "x11"] }
# The knut→facett connector test matrix (tests/knut_facett_matrix.rs) feeds a
# REAL knut DataflowGraph + run statuses through this PipelineView. Dev-only — the
# component itself carries no knut dependency (the consumer maps the model). The
# `facett-adapter` feature pulls in knut's `PipelineAdapter` impl (Spark/SDP →
# the normalized `PipelineModel`), which the matrix drives end-to-end. Cargo
# tolerates the resulting normal-dep (knut→facett-pipeline) + dev-dep cycle.
# Restored 2026-09-29: commented out in e565e0a (2026-07-13, "untested salvage after
# overheat crash") as a worktree-local workaround that was committed by accident. knut
# now takes facett-pipeline from crates.io, and this workspace's [patch.crates-io]
# points that at ./facett-pipeline, so ONE facett-pipeline resolves (measured: the
# matrix builds and passes 2/2). Needs the sibling ../knut checkout, like ../edda.
knut-pipelines = { path = "../../knut/crates/knut-pipelines", default-features = false, features = ["facett-adapter"] }
serde_json = { workspace = true }
# FC-4 (a11y node query) + FC-7 (determinism) interaction-layer tests.
# `wgpu` adds the GPU framebuffer backend for the call-chain matrix's robot pixel
# leg (non-blank/confinement + the final-picture PNG blob); `image` writes the PNG.
egui_kittest = { version = "0.36", features = ["wgpu", "snapshot"] }
# `flowsim_gpu_lane.rs` names `egui_wgpu::RenderState` so every harness in the file can
# share ONE device (and therefore one persistent `FlowRenderer`, which is what makes an
# on-device `advect` step observable across two clocks). Dev-only.
# `default-features = false`: egui-wgpu's default list ends in `wgpu/webgl` — LAW #4.
# See facett-core/Cargo.toml for the full argument.
egui-wgpu = { version = "0.36", default-features = false, features = [
    "fragile-send-sync-non-atomic-wasm",
    "macos-window-resize-jitter-fix",
] }
image = { version = "0.25", default-features = false, features = ["png"] }

[[example]]
name = "pipeline_demo"
path = "examples/pipeline_demo.rs"