facett-timeline — crate card
Reverse-engineered (from source — verify, don't trust the name)
- One-line pitch: A swimlane Gantt — a wall-clock time axis with stacked named lanes of segmented phase bars (the Spark jobs/stage/task event timeline).
- Does: From one engine-agnostic
TimelineModel(lanes / bars / segments + a[t0,t1]window),TimelineViewpaints a time axis, a lane gutter, and status-coloured, phase-segmented bars with click-select and scroll-zoom. Covers the Spark Jobs event timeline, per-stage task timeline, and Lakeflow run Gantt (a host maps Spark's event log / REST API onto it; the crate never learns what a "stage" is). Two halves: pure egui-free serializablemodel, and theFacet. AMsg+updatesurface is robot/CLI-addressable (select bar by stable id, zoom window, toggle legend); painter, headlesslayouthelper, andstate_jsonall read bar offsets from one formula (TimelineModel::bar_fraction_in), so asserted DATA == pixels. FC:portable_state/load_state. - Key deps:
facett-core(Facet),egui,serde_json. Dev:egui_kittest. - Shape: lib, ~944 lines: lib.rs (view +
BarLayout/layout, 617), model.rs (327). Key types:BarLayout,Msg,TimelineView,model::{TimelineModel,Bar}. - Observed role in the workspace: A Spark/Databricks-parity timeline pane; a host feeds a mapped
TimelineModeland mounts it in a FacetDeck.
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: