Render-paths inventory — every render/output path × its test-matrix emitter
Why this file exists. The recurring failure (2026-06-21 smear) was a bug that hid in an UNINSTRUMENTED render path — the GPU
draw_map_gpulane and the non-map3d components emitted nothing, while only the map3d CPUshade_faceslane produced matrix rows. This inventory enumerates EVERY render/output path in the facett workspace and records, per path, whether it now emits afunctional_statusrow throughfacett_core::testmatrix::emit(featuretestmatrix). A green matrix is only trustworthy when the matrix can prove every path ran — this table is the spec the "every path produced a row" test mirrors.
Emitter seam: facett_core::testmatrix::emit(component, check, ok, detail), gated #[cfg(feature = "testmatrix")] (compiled out + zero-cost in release). Every component/check string below is unique per path so a test can assert each inventory row produced a matrix row.
1. Core render kernel — facett-core::render (the CONS-CORE seam)
The 2-category backend swap (CPU vello / CPU+GPU wgpu) lives here. Both Renderer impls' present() are the canonical lanes every map skin + graphview routes through.
| path | file:line | lane | emit component | check | OK invariant |
CpuRenderer::present |
facett-core/src/render/cpu/mod.rs:451 | CPU (vello_cpu) | facett-core::render::CpuRenderer::present |
cpu_render |
frame dims correct, lit_px>0 on non-empty surface, rgba len == w·h·4 |
GpuSdfHeadless::present (adapter found) |
facett-core/src/render/gpu/sdf_pipeline.rs:419 | GPU (wgpu) | facett-core::render::GpuSdfHeadless::present |
gpu_render |
used_gpu=true, instance counts, lit_px>0, rgba len ok |
GpuSdfHeadless::present (no adapter → CPU fallback) |
facett-core/src/render/gpu/sdf_pipeline.rs:445 | GPU→CPU fallback | facett-core::render::GpuSdfHeadless::present |
gpu_render_cpu_fallback |
used_gpu=false, fell back, lit_px>0, rgba len ok |
CpuCanvas/Canvas::push_* are pure builders feeding present(); the rasterizer is CpuCanvas::rasterize() whose output is asserted by present() (no separate emit needed — present is the last function feeding pixels). GPU offscreen_render / Map3dPaintCallback::paint are device-side; their output is read back + asserted by present (headless) / the map3d scissor GPU-lane emit (live callback).
2. Map skins — CPU painter lane and GPU lane (the smear-bug locus)
| path | file:line | lane | emit component | check | OK invariant |
Map3D::ui → CPU shade_faces painter |
facett-map3d/src/lib.rs:1268 | CPU | facett-map3d::shade_faces |
cpu_render |
visible_tris>0 on a non-empty mesh |
Map3D::draw_map_gpu (wgpu depth-test) |
facett-map3d/src/lib.rs:876 | GPU | facett-map3d::draw_map_gpu |
gpu_render |
used_gpu=true, visible_tris>0 |
Map3D part-steps (near_clip … depth_sort) |
facett-map3d/src/lib.rs:969-1022 | CPU chain | facett-map3d |
near_clip/project/frustum_cull/cull/shade/depth_sort |
per-stage contract (pre-existing) |
Map3D scissor (CPU + GPU lanes) |
facett-map3d/src/lib.rs:849,1282 | both | facett-map3d |
scissor |
ink_outside_rect==0 (pre-existing) |
MapView::ui → CPU line painter |
facett-map/src/lib.rs:459 | CPU | facett-map::MapView::ui |
cpu_render |
geometry>0 (points+ways) |
MapView::ui → GPU draw_ways_gpu |
facett-map/src/lib.rs:459 (lane-tagged) | GPU | facett-map::MapView::ui |
gpu_render |
used_gpu=true, geometry>0 |
MapView::ui empty / no-bbox exits |
facett-map/src/lib.rs:373,380 | — | facett-map::MapView::ui |
ui_render |
empty hint / no-bbox = honest row |
OsmView::ui → CPU line painter |
facett-geomap/src/osm2d.rs:925 | CPU | facett-geomap::osm2d::OsmView::ui |
cpu_render |
visible points+ways>0 |
OsmView::ui → GPU draw_ways_gpu |
facett-geomap/src/osm2d.rs:925 (lane-tagged) | GPU | facett-geomap::osm2d::OsmView::ui |
gpu_render |
used_gpu=true, visible>0 |
OsmView::ui empty exit |
facett-geomap/src/osm2d.rs:809 | — | facett-geomap::osm2d::OsmView::ui |
ui_render |
empty hint |
OsmView clip bounds (pre-existing) |
facett-geomap/src/osm2d/clip.rs:344 | CPU | facett-geomap.clip |
bounds_extremes_preserves_onscreen |
clip contract |
GeoMap::ui (CPU-only painter) |
facett-geomap/src/lib.rs:357 | CPU | facett-geomap::GeoMap::ui |
cpu_render |
points+hotspots+ways>0 |
GeoMap::ui empty exit |
facett-geomap/src/lib.rs:245 | — | facett-geomap::GeoMap::ui |
ui_render |
empty hint |
3. Graph viewers — offscreen render lanes + Facet ui
| path | file:line | lane | emit component | check | OK invariant |
graphview::cpu::render (legacy vello_cpu) |
facett-graphview/src/cpu.rs:108 | CPU | facett-graphview::cpu::render |
cpu_render |
nodes+edges geometry, lit_px>0, rgba len ok |
graphview::render_to_rgba (backend dispatch) |
facett-graphview/src/lib.rs:77 | dispatch | facett-graphview::render_to_rgba |
render_dispatch |
records Wgpu/VelloCpu arm taken |
graphview::render_to_rgba_l0 (CONS-CORE L0 Canvas) |
facett-graphview/src/l0.rs:133 | L0 (routes to core present) | facett-graphview::render_to_rgba_l0 |
l0_render |
lowered quads/lines per node/edge |
Graph3D::ui (CPU 3D projection painter) |
facett-graph3d/src/lib.rs:334 | CPU | facett-graph3d::Graph3D::ui |
ui_render |
nodes>0, projection all-finite (no NaN/Inf) |
Graph3D::ui empty exit |
facett-graph3d/src/lib.rs:252 | — | facett-graph3d::Graph3D::ui |
ui_render |
empty hint |
RabbitLogo3D::ui (CPU + GPU mesh lanes) |
facett-graph3d/src/logo3d.rs:153,231 | CPU/GPU | facett-graph3d::RabbitLogo3D::ui |
ui_render |
vertices>0, yaw finite, faces≤tris (lane in detail) |
GraphView::ui (egui scene) |
facett-graph/src/lib.rs:73 | CPU | facett-graph::GraphView::ui |
ui_render |
nodes>0 or empty-hint |
DepGraphView::ui |
facett-graph/src/depgraph.rs:226 | CPU | facett-graph::DepGraphView::ui |
ui_render |
nodes>0 |
SystemChart::ui |
facett-syschart/src/lib.rs:257 | CPU | facett-syschart::SystemChart::ui |
ui_render |
nodes>0 |
PipelineView::ui |
facett-pipeline/src/lib.rs:917 | CPU | facett-pipeline::PipelineView::ui |
ui_render |
nodes>0 |
4. Data / chart / list components — Facet ui
| path | file:line | emit component | check | OK invariant |
Table::ui |
facett-table/src/lib.rs:159 | facett-table::Table::ui |
ui_render |
selected idx < rows.len() + has cols |
Grid::ui |
facett-grid/src/lib.rs:1427 | facett-grid::Grid::ui |
ui_render |
visible_rows ≤ data.nrows |
CardView::ui |
facett-card/src/lib.rs:407 | facett-card::CardView::ui |
ui_render |
editing or fields/children non-empty |
Console::ui |
facett-console/src/lib.rs:296 | facett-console::Console::ui |
ui_render |
a11y count == lines.len ≤ max |
DocView::ui (+ empty exit) |
facett-docview/src/lib.rs:523,697 | facett-docview::DocView::ui |
ui_render |
visible ≤ pages, current<pages |
FileDialog::ui |
facett-filedialog/src/lib.rs:330 | facett-filedialog::FileDialog::ui |
ui_render |
filtered ≤ entries, cursor<filtered |
JobList::ui (+ empty exit) |
facett-jobview/src/lib.rs:315,367 | facett-jobview::JobList::ui |
ui_render |
jobs>0 / empty hint |
ProgressView::ui |
facett-pop/src/lib.rs:84 | facett-pop::ProgressView::ui |
ui_render |
total>0 or legitimately empty |
PlotView::ui |
facett-plot/src/lib.rs:53 | facett-plot::PlotView::ui |
ui_render |
all plotted coords finite |
VideoPlayer::ui |
facett-video/src/lib.rs:236 | facett-video::VideoPlayer::ui |
ui_render |
frame ≤ frames |
IcebergView::ui (+ empty exit) |
facett-icebergview/src/lib.rs:250,313 | facett-icebergview::IcebergView::ui |
ui_render |
grid rows ≤ page ≤ total |
BoxPlotView::ui (+ 2 empty exits) |
facett-plotters/src/boxplot.rs:149,161,240 | facett-plotters::BoxPlotView::ui |
ui_render |
summaries ≤ groups |
CandlestickView::ui (+ empty exit) |
facett-plotters/src/candlestick.rs:123,198 | facett-plotters::CandlestickView::ui |
ui_render |
drawn == bars |
TreemapView::ui (+ empty exit) |
facett-plotters/src/treemap.rs:130,182 | facett-plotters::TreemapView::ui |
ui_render |
rects ≤ tiles |
HeatmapView::ui (+ empty exit) |
facett-plotters/src/heatmap.rs:121,188 | facett-plotters::HeatmapView::ui |
ui_render |
rows·cols ≤ data |
ViolinView::ui (+ empty exit) |
facett-plotters/src/violin.rs:140,218 | facett-plotters::ViolinView::ui |
ui_render |
densities ≤ groups |
5. Demo composition surfaces — facett-demo (uses facett::core::testmatrix)
| path | file:line | emit component | check | OK invariant |
SyntheticSdpView::ui |
facett-demo/src/synthetic_sdp.rs:373 | facett-demo::SyntheticSdpView::ui |
ui_render |
status buckets partition node count |
GraphviewTab::ui |
facett-demo/src/graphview_tab.rs:177 | facett-demo::GraphviewTab::ui |
ui_render |
quads≤nodes, lines≤edges, lit_px>0 |
The demo's binaries (osm2d_demo, osm3d_demo, main) are eframe::App shells that drive the components above; they carry no independent render path of their own, so the component emits cover them.
6. gRPC / tonic service handlers
None in the facett workspace. A workspace-wide search for tonic, #[tonic::, service impls, and async fn RPC handlers found no gRPC server surface in any facett-* crate. (gRPC handlers live in nornir-server, a different repo, out of scope for this task. facett is a library of egui components consumed in-process; it exposes no network/RPC output path.)
Coverage summary
- Render lanes (CPU + GPU) instrumented: core
CpuRenderer/GpuSdfHeadlesspresent (3 rows incl. GPU-fallback), map3d CPU+GPU, map CPU+GPU, geomap OsmView CPU+GPU, GeoMap CPU, graphview cpu/dispatch/L0 (3 lanes), graph3d CPU, RabbitLogo3D CPU+GPU. - Every
impl Facet::uiin*/src(24 impls across 22 crates) now emits at every exit (main + early returns). - Previously instrumented (kept): map3d part-steps + scissor, geomap clip — the one CPU lane that already emitted before this work.
- gRPC: none in facett (confirmed).
The "every path produced a row" assertion: a matrix test enumerates the component strings in this file and asserts each appears at least once in the run's functional_status rows after driving the components headless.