[0.7.0] - 2026-05-03

Added

  • Cross-module diagram composition (Choreo.embed/4):

    • Safely merge modular sub-diagrams (Workflow, Dataflow, etc.) into root clusters.
    • Automatic cluster namespace isolation and node ID prefixing.
  • Custom theme presets and per-node style overrides across all modules:

    • Overriding shape, fillcolor, fontcolor, style, and penwidth for individual nodes.
    • Global theme preset capabilities.
  • Automated validation parameter docs using NimbleOptions.docs/1.

  • Strict Schema Validation using NimbleOptions across all core modules:

  • Multigraph support (parallel edges) for Choreo and Choreo.FSM:

  • Choreo.MindMap — concept-mapping builder with hierarchical branches and associative cross-links

    • Nodes: set_root/3, add_topic/3, add_subtopic/3, add_note/3
    • Edges: branch/4 (hierarchical), associate/4 (cross-link with dashed, undirected rendering)
    • Analysis: depth/1, breadth/1, leaves/1, orphan_nodes/1, max_width/1, paths/1, type_frequencies/1, cyclic?/1, validate/1
    • 5 built-in themes (:default, :dark, :warm, :forest, :ocean) with mind-map-specific colour palettes
    • Same-rank sibling alignment in DOT output
  • Choreo.View — graph lens layer for zoom, focus, filter, and collapse transforms across diagram modules

    • focus/3 — ego-graph view (node + N-hop neighbourhood, bidirectional by default)
    • focus_between/4 — shortest-path view between two nodes, with optional neighbourhood radius
    • zoom/2 — module-defined level-based filtering with optional transitive: true for virtual edges through removed intermediates
    • filter/3 — predicate-based node filtering with optional transitive: true
    • collapse/4 — aggregate multiple nodes into one, automatically rewiring all incoming/outgoing edges and removing duplicates/self-loops
    • Protocol-based design (Choreo.Viewable) so each module defines its own rebuild, root-resolution, zoom-predicate, and virtual-edge styling
    • Virtual edges are automatically styled (dashed, pale) via the protocol's virtual_edge_meta/1 callback
    • Supports all diagram modules: Choreo, Choreo.MindMap, Choreo.DecisionTree, Choreo.Dataflow, Choreo.ThreatModel, Choreo.Dependency, and Choreo.Workflow
    • Choreo.View transparently handles both simple graphs (Yog.Graph) and multigraphs (Yog.Multi.Graph) via internal dispatch helpers
  • Choreo.FSM enforces 100% DFA purity at build time:

    • Epsilon transitions (empty labels) are rejected with ArgumentError
    • Different transition labels between the same state pair are now allowed (e.g., q0 --"a"--> q1 and q0 --"b"--> q1)
    • Duplicate labels from the same state are still rejected (DFA determinism)

Changed

0.6.0 — 2026-04-25

Added

Changed

  • Breaking: Choreo.FSM state typing moved from node state_type field to meta MapSets (initial_states and final_states). add_state/3 with type: :initial or type: :final now populates these sets directly.
  • Choreo.FSM.add_state/3 with type: :normal now explicitly clears a state from both initial_states and final_states in meta. Omitting the :type option (e.g. updating a label) preserves existing status.
  • Choreo.FSM.Analysis.deterministic?/1 now enforces a single initial state in addition to unique outgoing transition labels, aligning with classical DFA definition.

Fixed

  • add_state/3 with type: :initial now correctly registers the state in meta.initial_states so that reachable_states/1, accepts?/2, and rendering treat it as an entry point.
  • Fixed broken doctests in Choreo.FSM.add_initial_state/2 and Choreo.FSM.add_final_state/2 that still referenced the removed state_type node field.

0.5.0 — 2026-04-24

Added

  • Choreo.Workflow — task orchestration builder with Saga-pattern compensation support
    • Nodes: add_start/3, add_end/3, add_task/3, add_decision/3, add_fork/3, add_join/3, add_compensation/3, add_event/3
    • Edge types: :sequence, :compensation, :retry, :failure, :timeout
    • Swimlane grouping for visual organization
    • Analysis: critical_path/1, parallelizable_tasks/1, failure_scenarios/1, missing_compensations/1, bottlenecks/2, simulate/1, validate/1
  • Internal helpers module — shared bfs_reachable/2, build_cluster_subgraphs/2, best_predecessor/3 extracted to eliminate Credo duplicate-code warnings

Changed

Fixed

  • All mix credo --strict warnings resolved (double filters, deep nesting, unused aliases, list append inefficiencies, Enum.map_join/3 usage, withcase conversions)
  • Incorrect @spec return types for edge-returning functions (String.t()number())

0.1.0 — 2026-04-24

Added

  • Choreo — infrastructure architecture diagrams with typed nodes (database, cache, service, queue, etc.), clusters, and MST/topological-sort analysis
  • Choreo.FSM — finite-state machine builder with initial/final states, transitions, determinism checks, NFA simulation, equivalence checking, and pruning
  • Choreo.Dataflow — pipeline / ETL diagram builder with sources, transforms, buffers, conditionals, merges, and sinks
    • Analysis: cycle detection, topological sort, orphan/dead-end detection, bottlenecks, critical-path (longest path), throughput simulation, backpressure detection
    • Edge types: normal, error, retry, dead-letter
    • Cluster support
  • Choreo.Dependency — software dependency graphs with applications, libraries, modules, interfaces, and tests
    • Analysis: circular dependency extraction (actual paths), impact analysis (affected_by/2, depends_on/2), layer violation detection, centrality ranking, longest dependency chain
    • Cycle edge highlighting in DOT output
  • Choreo.DecisionTree — classification tree builder with enforced tree invariants
    • Analysis: decide/2 evaluation, path enumeration, depth/breadth metrics, feature importance, redundant-branch pruning
  • Choreo.ThreatModel — STRIDE threat modeling with automated threat generation
    • Analysis: auto-generated STRIDE threats per element type, trust-boundary crossing detection, exposed data stores, high-risk processes, unencrypted flow detection
    • Severity scoring based on sensitivity, privilege, encryption, and trust level
  • Shared DOT rendering pipeline with :default, :dark, and custom Choreo.Theme support
  • Graphviz integration in ExDoc for inline diagram rendering
  • Credo, Dialyzer, and ExCoveralls tooling