Files
flowgraph/tasks/host-graphology.md

3.0 KiB

id, name, status, depends_on, scope, risk, impact, level
id name status depends_on scope risk impact level
host/graphology Implement GraphologyHostConfig — render ujsx template to graphology DAG completed
component/operation
component/sequential
component/parallel
component/conditional
component/map
graph/flowgraph-class
schema/edge-attrs
broad high phase implementation

Description

Implement the GraphologyHostConfig that renders a ujsx workflow template (UNode tree) into a graphology DirectedGraph DAG. This is the structural analysis rendering path — it validates templates by producing a DAG that can be checked for cycles, type compatibility, and topological ordering.

Acceptance Criteria

  • src/host/graphology.ts exports GraphologyHostConfig implementing ujsx HostConfig<WorkflowTag, GraphNode, GraphContext>
  • WorkflowTag: "operation" | "sequential" | "parallel" | "conditional" | "map"
  • GraphNode: { key: string; attributes: OperationNodeAttrs | TemplateNodeAttrs }
  • GraphContext: { graph: DirectedGraph; parentStack: string[]; operationRegistry?: OperationRegistry }
  • createRootContext: creates fresh DirectedGraph with DAG constraints, empty parentStack
  • createInstance("operation", props, ctx): adds graph node with OperationNodeAttrs, returns GraphNode
  • createInstance for structural containers: returns GraphNode with synthetic key __${tag}_${counter++}, no graph node created (containers are transparent)
  • appendChild for Sequential children: creates sequential edges between consecutive siblings (manages parentStack)
  • appendChild for Parallel children: no inter-child edges, pushes parallel group marker for successor connections
  • appendChild for Conditional: creates conditional edge with dataFlow: true
  • Edge attributes include edgeType and dataFlow inference (conservative strategy: conditional always dataFlow: true, sequential with result references → dataFlow: true, otherwise dataFlow: false)
  • finalizeInstance: cleans up parentStack after container children are rendered
  • removeChild: removes edge between parent and child (structural containers are transparent)
  • removeChildFromHost: removes child node from graph and all attached edges
  • Cycle detection after rendering: if hasCycle() returns true, throw CycleError
  • Re-exported from src/host/index.ts
  • Integration tests: render Sequential → assert node/edge structure, render Parallel → assert no inter-child edges, render Conditional → assert conditional edges with dataFlow, nested compositions, cycle detection

References

  • docs/architecture/host-configs.md — GraphologyHostConfig full specification
  • docs/architecture/workflow-templates.md — edge creation rules, root node handling, template→DAG conversion
  • docs/architecture/schema.md — TemplateEdgeAttrs, dataFlow inference

Notes

To be filled by implementation agent

Summary

To be filled on completion