Skip to content

Decision request: should nem-poweragent-lab's systhread depend on holon-viz as a real (non-dev) dependency? #203

Description

@elasticdotventures

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

  1. 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?
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions