Part of #1 — data lineage canvas. Depends on the model analysis.
Goal
Add a lineage view/scene to crates/pseudoscript-emit.
View::Lineage { of: String } in project.rs:19; arm in project_view (project.rs:143) → Scene::Lineage(project_lineage(graph, &of)) reading graph.lineage(of).
Scene::Lineage(LineageScene) in scene.rs:18. LineageScene carries a directed flow graph in the same node/edge shape C4Scene uses (so the Svelte canvas reuses dagre, laid out rankdir=LR: upstream left → target → downstream right) plus the usages list for a side panel. Node kind: "data", edge kind: "lineage".
project_symbol (project.rs:100) stays C4/sequence — lineage is opened explicitly, not the default symbol view.
- Add a
to_golden arm for Scene::Lineage (scene.rs:241) for parity (generation conformance goldens deferred).
Tests
project(&graph, View::Lineage { of }) returns Scene::Lineage with the expected nodes/edges. cargo test -p pseudoscript-emit.
Rust authoring: use the idiomatic-rust skill.
Part of #1 — data lineage canvas. Depends on the model analysis.
Goal
Add a lineage view/scene to
crates/pseudoscript-emit.View::Lineage { of: String }inproject.rs:19; arm inproject_view(project.rs:143) →Scene::Lineage(project_lineage(graph, &of))readinggraph.lineage(of).Scene::Lineage(LineageScene)inscene.rs:18.LineageScenecarries a directed flow graph in the same node/edge shapeC4Sceneuses (so the Svelte canvas reuses dagre, laid outrankdir=LR: upstream left → target → downstream right) plus theusageslist for a side panel. Nodekind: "data", edgekind: "lineage".project_symbol(project.rs:100) stays C4/sequence — lineage is opened explicitly, not the default symbol view.to_goldenarm forScene::Lineage(scene.rs:241) for parity (generation conformance goldens deferred).Tests
project(&graph, View::Lineage { of })returnsScene::Lineagewith the expected nodes/edges.cargo test -p pseudoscript-emit.Rust authoring: use the idiomatic-rust skill.