Choreo Analysis Algorithms Reference
Choreo turns every diagram into a graph, then runs classic graph algorithms on it to answer practical questions: "Will this deployment order work?", "What breaks if this service fails?", "Where are the cycles?", and so on.
This guide catalogs the analysis functions in each diagram module, what question they answer, and the underlying algorithm they use. The implementations live in lib/choreo/analysis.ex, lib/choreo/internal.ex, the lib/choreo/*/analysis.ex modules, and lib/choreo/analysis/tracing.ex.
Most functions build on the yog_ex graph library, which provides BFS/DFS, topological sort, strongly connected components, shortest paths, MST, centrality, and connectivity primitives.
Diagram type
Main module
Analysis module
Typical use
System architecture
Choreo
Choreo.Analysis
Services, databases, caches, queues
C4 model
Choreo.C4
Choreo.C4.Analysis
Software architecture views
Cloud infrastructure
Choreo.Infrastructure
Choreo.Infrastructure.Analysis
VPC/subnet/security audits
Finite-state machines
Choreo.FSM
Choreo.FSM.Analysis
State machines and automata
Dataflow / pipelines
Choreo.Dataflow
Choreo.Dataflow.Analysis
Streaming/data pipelines
Dependency graphs
Choreo.Dependency
Choreo.Dependency.Analysis
Module/library dependencies
Decision trees
Choreo.DecisionTree
Choreo.DecisionTree.Analysis
Classification trees
Threat models
Choreo.ThreatModel
Choreo.ThreatModel.Analysis
STRIDE threat modeling
Workflows
Choreo.Workflow
Choreo.Workflow.Analysis
BPMN/saga workflows
Planner / tasks
Choreo.Planner
Choreo.Planner.Analysis
Project/task planning
Mind maps
Choreo.MindMap
Choreo.MindMap.Analysis
Hierarchical idea maps
Entity-relationship diagrams
Choreo.ERD
Choreo.ERD.Analysis
Database schemas
UML class diagrams
Choreo.UML
Choreo.UML.Analysis
Software design
Domain / event storming
Choreo.Domain
Choreo.Domain.Analysis
Domain-driven design
Sequence diagrams
Choreo.Sequence
Choreo.Sequence.Analysis
Message sequence validation
Requirements
Choreo.Requirement
Choreo.Requirement.Analysis
Requirements traceability
Cross-diagram tracing
—
Choreo.Analysis.Tracing
Trace edges across diagrams
Core / cross-cutting analysis
Choreo.Analysis — system architecture
These functions operate on the general Choreo architecture graph. Many of them are re-used or mirrored by diagram-specific modules.
Function
Purpose
Algorithm used
mst/2
Cheapest way to connect all services
MST — Kruskal (default), Prim, or Borůvka on an undirected simple graph
topological_sort/1
Deployment or execution order
Topological sort via Yog.Traversal.topological_sort/1 (Kahn / DFS-based)
cyclic?/1
Detect feedback loops
Cycle detection via Yog.cyclic?/1
dag?/1
Check if the graph is acyclic
Acyclicity check via Yog.acyclic?/1
strongly_connected_components/1
Find mutually dependent services
Strongly Connected Components (SCC) via Yog.Connectivity
single_points_of_failure/1
Find articulation points and bridge edges
Tarjan's articulation-point/bridge algorithm on an undirected view
cut_vertices/1
Nodes whose removal disconnects the graph
Tarjan's articulation points
impact_analysis/2
What breaks if a node fails
BFS on the transposed graph
shortest_path/4
Cheapest/fastest route between services
Dijkstra / shortest path with semiring support (cost, latency, custom metrics)
path/4
Domain-specific pathfinding
Dijkstra / widest path with measures :shortest, :latency, :throughput, :risk, :weighted
centrality/2
Most critical or coupled nodes
Degree / betweenness / closeness / PageRank centrality via Yog.Centrality
core_numbers/1
K-core decomposition
K-core decomposition via Yog.Connectivity.core_numbers/1
reduce_transitive/1
Remove redundant edges while preserving reachability
Transitive reduction
isolated_nodes/1
Find orphan services
In-degree + out-degree check
heatmap/2
Color nodes by centrality or score
Centrality → min-max normalization → color scale
validate/1
Structural health check
Composite: isolated nodes, SPOF, cycles, bridges
Choreo.Analysis.Tracing — cross-diagram tracing
Function
Purpose
Algorithm used
impact_analysis/2
Nodes transitively impacted via trace edges
BFS on the transposed trace-only graph
trace_path/3
Shortest trace path between two nodes
Dijkstra on the trace-only graph
analyze/3
Nested cross-domain analysis along a trace path
Path reconstruction + domain metadata classification
Internal shared graph primitives
Function
Purpose
Algorithm used
bfs_reachable/2
Reachable nodes from seed nodes
Breadth-First Search (BFS)
transitive_reduction/1
Redundant edges implied by longer paths
BFS reachability from alternate successors
compute_dp/3
Longest-path DP table
Dynamic programming over a topological order
find_best_end_path/2
Best predecessor chain
Linear scan of the DP table
reconstruct_path/2
Reconstruct a path from DP predecessors
Backtracking
dfs_cycles/1
All elementary cycles in a multigraph
Depth-First Search (DFS) with recursion-stack tracking
unsatisfied_contract/3
Missing functions for a contract
Set difference on function name/arity
Diagram-specific analysis
Choreo.C4.Analysis — C4 architecture model validation
Function
Purpose
Algorithm used
isolated_nodes/1
Elements with no relationships
In-degree + out-degree on a simple graph
missing_parents/1
Containers/components without parents
Metadata filter
missing_descriptions/1
Nodes lacking descriptions
Metadata filter
missing_technology/1
Containers/components without technology labels
Metadata filter
missing_relationship_labels/1
Relationships lacking labels
Edge metadata filter
parents_without_relationships/1
Parent nodes with children but no edges
Degree + parent metadata check
validate/1
Full C4 model validation
Composite rule check
Choreo.Infrastructure.Analysis — cloud topology audits
Function
Purpose
Algorithm used
validate/1
Security audit (internet-to-private, DB placement, LB placement, etc.)
Rule-based set membership checks on node/edge metadata
warnings/1
Audit warnings
Rule-based set membership checks
Choreo.FSM.Analysis — finite-state machines
Function
Purpose
Algorithm used
reachable_states/1
States reachable from the initial state
BFS
dead_states/1
States with no path to a final state
Reverse BFS from final states
livelock_states/1
Reachable non-accepting loop states
Intersection of reachable/dead + BFS self-reachability
accepts?/2
Simulate input string acceptance
Deterministic walk
shortest_accepting_path/1
Minimum input to reach acceptance
BFS
accepted_strings/2
All accepted strings up to length N
BFS level-order expansion
alphabet/1
Distinct input symbols
Set construction
complete?/1
Whether every state handles every symbol
Set subset check
generate_test_cases/2
Input sequences for state/transition coverage
BFS shortest paths to all states
equivalent?/2
Check if two FSMs accept the same language
Product automaton BFS
minimize/1
Minimize a DFA
Moore's partition refinement
violates_invariant?/2
Forbidden state sequence exists
Edge existence check
validate/1
Structural FSM validation
Composite checks
Choreo.Dataflow.Analysis — streaming/data pipelines
Function
Purpose
Algorithm used
sources/1 / sinks/1
Identify source/sink nodes
Node type filter
cyclic?/1
Feedback-loop detection
Cycle detection on the normal-edge subgraph
topological_sort/1
Stage execution order
Topological sort
orphan_nodes/1
Nodes unreachable from any source
BFS from sources + set difference
dead_ends/1
Nodes that cannot reach any sink
BFS on the transposed graph from sinks
fan_hubs/1
High in-degree + out-degree stages
Degree threshold
longest_path/1
Critical path (longest source→sink chain)
DP over topological order
capacity_bottlenecks/1
Stages where in_rate > capacity
Throughput simulation via topological propagation
simulate/1
Steady-state throughput simulation
Topological-order traversal + rate summation
backpressure_points/1
Nodes with inbound flow above threshold
Simulation result filter
upstream_lineage/1 / downstream_impact/1
Ancestors/descendants
BFS (transposed for upstream)
upstream_sources/1 / downstream_sinks/1
Source/sink subsets of lineage
BFS + set intersection
heatmap/2
Throughput heatmap
Simulation → color scale
validate/1
Pipeline structural validation
Composite checks
Choreo.Dependency.Analysis — dependency graphs
Function
Purpose
Algorithm used
cyclic_dependencies/1
All circular dependency chains
SCC + DFS cycle extraction
affected_by/2
Components that break if the target changes
BFS on the transposed graph
depends_on/2
Components the target depends on
BFS
layer_violations/2
Edges violating layered architecture
Edge + layer-index comparison
centrality/2
Most coupled components
Degree centrality (in + out)
leaves/1 / roots/1
Nodes with no dependents / no dependencies
In-degree / out-degree filter
transitive_reduction/1
Redundant explicit dependencies
Transitive reduction
instability/1
Instability metric per component
Ce / (Ca + Ce)
isolated_subsystems/1
Disconnected component groups
Weakly connected components
longest_dependency_chain/1
Deepest dependency chain
DP over topological order
validate/1
Dependency graph validation
Composite checks
Choreo.DecisionTree.Analysis — decision trees
Function
Purpose
Algorithm used
decide/2
Evaluate tree against feature values
Tree walk
paths/1
All root-to-leaf paths
DFS enumeration
paths_with_conditions/1
Paths with branch conditions
DFS enumeration
depth/1 / breadth/1
Tree depth / leaf count
Recursive traversal / count
feature_importance/1
Feature split frequency
Group-by + count
reachable_outcomes/1
Reachable outcome classes
BFS
orphan_nodes/1
Unreachable declared nodes
BFS + set difference
rules/1
Extract IF-THEN rules
Path-to-conditions mapping
generate_test_cases/1
Feature maps covering every leaf
Path conditions
missing_branches/2
Expected feature values not covered
Set difference
inconsistent_paths/1
Logically impossible paths
Path condition grouping
prune_redundant/1
Remove redundant decision nodes
Post-order tree traversal
validate/1
Tree structural validation
Composite checks
Choreo.ThreatModel.Analysis — STRIDE threat modeling
Function
Purpose
Algorithm used
stride_threats/2
Generate STRIDE threats
Rule-based generation by element type
threat_summary/1
Threat distribution by category/severity
Aggregation
risk_score/2
Total weighted risk score
Weighted sum by severity
cross_boundary_flows/1
Data flows crossing trust boundaries
Boundary comparison
exposed_data_stores/1
Data stores reachable from external entities
BFS from external entities
attack_paths/1
Paths from externals to data stores
DFS path enumeration
high_risk_processes/1
Low-trust processes accessing sensitive stores
BFS + risk/trust checks
unencrypted_boundary_flows/1
Unencrypted cross-boundary flows
Edge metadata + boundary check
heatmap/2
Threat density heatmap
Threat count → color scale
validate/1
Threat model validation
Composite checks
Choreo.Workflow.Analysis — workflows and orchestration
Function
Purpose
Algorithm used
reachable_tasks/1
Tasks reachable from start nodes
BFS
orphan_tasks/1
Tasks not reachable from starts
BFS + set difference
dead_ends/1
Tasks that cannot reach an end node
BFS on the transposed graph from ends
critical_path/1
Longest latency path start→end
DP over topological order
parallelizable_tasks/1
Tasks that can run in parallel
Topological levels
compensable_tasks/1
Tasks with compensation edges
Edge metadata check
uncompensated_paths/1
Failing tasks without valid compensation
BFS on the compensation subgraph
missing_compensations/1
Retry-configured tasks lacking compensations
Metadata check
bottlenecks/2
High-latency / high-retry tasks
Threshold filter
simulate/1
Estimated latency per task
Topological-order latency propagation
heatmap/2
Cumulative latency heatmap
Simulation → color scale
validate/1
Workflow structural validation
Composite checks
Choreo.Planner.Analysis — project/task planning
Function
Purpose
Algorithm used
ready/1
Tasks whose dependencies are done
Status + dependency resolution
blocked/1
Tasks with unresolved dependencies
Status + dependency resolution
orphans/1
Tasks not in any milestone
Parent metadata check
critical_path/2
Longest dependency chain by estimate
DP over topological order
bottlenecks/1
Tasks ranked by transitive downstream impact
BFS reachability count
validate/1
Structural integrity checks
Composite: cycles, unassigned tasks, orphans, empty milestones
Choreo.MindMap.Analysis — mind maps
Function
Purpose
Algorithm used
depth/1
Maximum depth from root
DFS with cycle guard
breadth/1 / leaves/1
Leaf count / leaf nodes
Out-degree filter
orphan_nodes/1
Nodes not reachable from root
BFS on branch edges
max_width/1
Widest level
BFS level counting
paths/1
All root-to-leaf paths
DFS enumeration
type_frequencies/1
Node type composition
Group-by + count
cyclic?/1
Cycle in hierarchy
Cycle detection
suggest_merges/2
Candidate node pairs to merge
Jaccard similarity of neighborhoods
validate/1
Structural validation
Composite checks
Choreo.ERD.Analysis — database schemas
Function
Purpose
Algorithm used
shortest_join_path/3
Optimal join sequence
Path finding on an undirected simple graph
cycles/1
Circular foreign-key references
DFS cycle detection
orphans/1
Tables with no relationships
Degree check
table_degrees/1
In/out/total coupling per table
Degree metrics
affected_by/2
Tables that reference target transitively
BFS on the transposed graph
depends_on/2
Tables the target depends on
BFS
transitive_reduction/1
Redundant relationships
Transitive reduction
longest_dependency_chain/1
Deepest FK cascade
DP over topological order
normalization_score/2
Schema quality score
Heuristic penalty scoring
validate/1
ERD structural validation
Composite checks
Choreo.UML.Analysis — UML class diagrams
Function
Purpose
Algorithm used
cycles/1
Circular dependency loops
DFS cycle detection
broken_contracts/1
Incomplete interface/behavior realizations
Contract function comparison
coupling_metrics/1
Afferent/efferent coupling and instability
In/out degree + Ce/(Ca+Ce)
law_of_demeter_violations/1
Structural Law of Demeter violations
Triplet enumeration (A→B, B→C, A→C)
affected_by/2
Classes that depend on target
BFS on the transposed graph
depends_on/2
Classes target depends on
BFS
transitive_reduction/1
Redundant relationships
Transitive reduction
validate/1
UML structural validation
Composite checks
Choreo.Domain.Analysis — event storming / domain models
Function
Purpose
Algorithm used
validate/1 / warnings/1
Semantic validation of events/commands/policies
Rule-based adjacency-map checks
ubiquitous_language/1
Markdown glossary from nodes
Sort + format
Choreo.Sequence.Analysis — sequence diagrams
Function
Purpose
Algorithm used
validate/1
Full sequence diagram validation
Composite checks
isolated_participants/1
Participants with no messages
Set difference
missing_labels/1
Messages without labels
Metadata filter
unknown_participants/1
References to undeclared participants
Set membership check
unbalanced_activations/1
Unmatched activate/deactivate pairs
Stack balance
unclosed_fragments/1
Fragments opened but not closed
Stack balance on reversed events
Choreo.Requirement.Analysis — requirements traceability
Function
Purpose
Algorithm used
orphan_requirements/1
Requirements with no relationships
Set difference
unsatisfied/1 / unverified/1
Requirements missing satisfies/verifies edges
Edge metadata check
coverage/1
Coverage ratios
Set operations
traceability_matrix/1
Requirements → components/tests/stakeholders
Edge aggregation
requirements_for/2 / components_for/2
Related nodes by edge type
Edge traversal
high_risk_gaps/1
High-risk requirements not satisfied/verified
Set intersection
risk_propagation/1
Inherited risk from ancestors
Recursive ancestor traversal
unmitigated_risks/1
High-risk items without lower-risk children
Risk-level comparison
impact_of/2
Upstream + downstream affected nodes
BFS in both directions
circular_dependencies/1
Cycles among requirement relationships
Tarjan's SCC
validate/1
Requirements validation
Composite checks
A quick lookup of which algorithms appear where.
Algorithm
Used by
BFS
Choreo.Analysis.impact_analysis/2, Choreo.Dataflow reachability/lineage, Choreo.Dependency.Analysis.affected_by/2, Choreo.ERD.Analysis.affected_by/2, Choreo.UML.Analysis.affected_by/2, Choreo.FSM, Choreo.Workflow, Choreo.MindMap, Choreo.ThreatModel.Analysis.exposed_data_stores/1, Choreo.Requirement.Analysis.impact_of/2, Choreo.Internal.bfs_reachable/2
DFS
Choreo.ERD.Analysis.cycles/1, Choreo.UML.Analysis.cycles/1, Choreo.MindMap.Analysis.paths/1, Choreo.DecisionTree.Analysis.paths/1, Choreo.ThreatModel.Analysis.attack_paths/2, Choreo.Internal.dfs_cycles/1
Topological sort
Choreo.Analysis.topological_sort/1, Choreo.Dataflow, Choreo.Dependency.Analysis.longest_dependency_chain/1, Choreo.ERD.Analysis.longest_dependency_chain/1, Choreo.Workflow.Analysis.critical_path/1, Choreo.Planner.Analysis.critical_path/2, Choreo.Dataflow.Analysis.simulate/1
SCC (Tarjan)
Choreo.Analysis.strongly_connected_components/1, Choreo.Dependency.Analysis.cyclic_dependencies/1, Choreo.Requirement.Analysis.circular_dependencies/1
Articulation points / bridges
Choreo.Analysis.single_points_of_failure/1, Choreo.Analysis.cut_vertices/1 via Yog.Connectivity.analyze/1
Shortest path (Dijkstra)
Choreo.Analysis.shortest_path/4, Choreo.Analysis.path/4, Choreo.Analysis.Tracing.trace_path/3
Widest path
Choreo.Analysis.path/4 (:throughput, :weighted)
MST (Kruskal/Prim/Borůvka)
Choreo.Analysis.mst/2
Longest path in DAG
Choreo.Dataflow.Analysis.longest_path/1, Choreo.Dependency.Analysis.longest_dependency_chain/1, Choreo.ERD.Analysis.longest_dependency_chain/1, Choreo.Workflow.Analysis.critical_path/1, Choreo.Planner.Analysis.critical_path/2 via Choreo.Internal.compute_dp/3
Transitive reduction
Choreo.Analysis.reduce_transitive/1, Choreo.Dependency.Analysis.transitive_reduction/1, Choreo.ERD.Analysis.transitive_reduction/1, Choreo.UML.Analysis.transitive_reduction/1, Choreo.Internal.transitive_reduction/1
Centrality
Choreo.Analysis.centrality/2 (degree, betweenness, closeness, PageRank)
K-core decomposition
Choreo.Analysis.core_numbers/1
Weakly connected components
Choreo.Dependency.Analysis.isolated_subsystems/1
DFA minimization (Moore's partition refinement)
Choreo.FSM.Analysis.minimize/1
Product automaton BFS
Choreo.FSM.Analysis.equivalent?/2
Jaccard similarity
Choreo.MindMap.Analysis.suggest_merges/2
Instability metric
Choreo.Dependency.Analysis.instability/1, Choreo.UML.Analysis.coupling_metrics/1
Most path and impact analyses work on a simple graph view produced by to_simple_graph/1 or Yog.Multi.to_simple_graph/1, which collapses parallel edges.
Topological-order DP (Choreo.Internal.compute_dp/3) is the shared implementation for longest/critical path calculations across Dataflow, Dependency, ERD, Workflow, and Planner.
Transitive reduction is implemented centrally in Choreo.Internal.transitive_reduction/1 and reused by Dependency, ERD, and UML.
BFS reachability (Choreo.Internal.bfs_reachable/2) is the shared primitive for downstream/upstream impact analysis across nearly all diagram types.