Context
nem-poweragent-lab just merged nem-poweragent-lab#43, a design doc for systhread-explorer: a Bevy-native 2D/3D SysML model graph explorer (docs/superpowers/specs/2026-08-26-systhread-3d-explorer-design.md).
Its data model is built by extending, not duplicating, holon-viz's real CytoscapeGraph type. Quoting the design doc's §3, which quotes crates/holon-viz/src/cytoscape.rs directly:
pub struct CytoscapeNodeData { id: String, label: String, kind: String, parent: Option<String>, z_layer: Option<String>, semantic_type: Option<String> }
pub struct CytoscapeNode { data: CytoscapeNodeData }
pub struct CytoscapeEdgeData { id: String, source: String, target: String, label: String }
pub struct CytoscapeEdge { data: CytoscapeEdgeData }
pub struct CytoscapeGraph { nodes: Vec<CytoscapeNode>, edges: Vec<CytoscapeEdge> }
The new PositionedGraph type is designed to wrap this directly rather than reimplement it:
pub struct PositionedGraph {
pub graph: holon_viz::CytoscapeGraph, // unmodified, reused directly
pub layout: Layout,
}
The open question
Today, holon-viz and sysml-derive are only pinned as dev-dependencies in nem-poweragent-lab — a documented workaround (see ledgrrr#202, which is about sysml-derive/FR8-FR9 but shares this same underlying dependency-posture question).
PositionedGraph wrapping CytoscapeGraph by value means systhread-explorer (or systhread-core) would need holon-viz as a real, non-dev dependency — a bigger commitment than the current workaround. This is explicitly flagged as undecided in the design doc itself (§3): "this needs ledgrrr's owner's agreement before v1 implementation starts, not a unilateral decision here."
This isn't decided here either — it's ledgrrr's crate, and ledgrrr's owner who has to live with whichever answer wins. Filing this now, grounded in the real struct shape, rather than letting v1 implementation start on an assumption.
Questions
- Is a real (non-dev) dependency on
holon-viz acceptable, or should this stay at arm's length — e.g. systhread-explorer copies the struct shape it needs rather than depending on holon-viz directly, accepting drift risk if CytoscapeGraph's fields change upstream?
- If a real dependency is acceptable, does
holon-viz's current API stability posture (versioning, how often its public structs change) support being depended on by an external, differently-versioned project — or does it need a stability commitment (e.g. semver discipline on cytoscape.rs's public types) first?
Related
- ledgrrr#202 — related, same underlying question of how permissively
nem-poweragent-lab should depend on ledgrrr crates, asked there for sysml-derive/FR8-FR9.
- nem-poweragent-lab#43 — the merged PR/design doc this issue is grounded in.
Context
nem-poweragent-labjust merged nem-poweragent-lab#43, a design doc forsysthread-explorer: a Bevy-native 2D/3D SysML model graph explorer (docs/superpowers/specs/2026-08-26-systhread-3d-explorer-design.md).Its data model is built by extending, not duplicating,
holon-viz's realCytoscapeGraphtype. Quoting the design doc's §3, which quotescrates/holon-viz/src/cytoscape.rsdirectly:The new
PositionedGraphtype is designed to wrap this directly rather than reimplement it:The open question
Today,
holon-vizandsysml-deriveare only pinned as dev-dependencies innem-poweragent-lab— a documented workaround (seeledgrrr#202, which is aboutsysml-derive/FR8-FR9 but shares this same underlying dependency-posture question).PositionedGraphwrappingCytoscapeGraphby value meanssysthread-explorer(orsysthread-core) would needholon-vizas a real, non-dev dependency — a bigger commitment than the current workaround. This is explicitly flagged as undecided in the design doc itself (§3): "this needsledgrrr's owner's agreement before v1 implementation starts, not a unilateral decision here."This isn't decided here either — it's ledgrrr's crate, and ledgrrr's owner who has to live with whichever answer wins. Filing this now, grounded in the real struct shape, rather than letting v1 implementation start on an assumption.
Questions
holon-vizacceptable, or should this stay at arm's length — e.g.systhread-explorercopies the struct shape it needs rather than depending onholon-vizdirectly, accepting drift risk ifCytoscapeGraph's fields change upstream?holon-viz's current API stability posture (versioning, how often its public structs change) support being depended on by an external, differently-versioned project — or does it need a stability commitment (e.g. semver discipline oncytoscape.rs's public types) first?Related
nem-poweragent-labshould depend onledgrrrcrates, asked there forsysml-derive/FR8-FR9.