[0.9.0] - 2026-06-09
Fixed
- Choreo.embed/4 — replaced fragile key-shape heuristic for determining simple-vs-multigraph with an explicit
match?(%Yog.Multi.Graph{}, ...)struct check; eliminates silent branch fall-through whenedge_metais empty. - Choreo.embed/4 — replaced
String.replace/3withString.replace_prefix/3for cluster name sanitization to avoid corrupting cluster names that contain"cluster_"as an interior substring. - Choreo.connect/4 — added
:strictboolean option; whentrue, raisesArgumentErrorif either endpoint is missing; whenfalse(default) and both endpoints are absent, emits aLogger.warning/1instead of silently auto-creating two generic nodes. - Choreo.Viewable — removed
@fallback_to_any truedirective (noAnyimplementation existed); Elixir's default protocol dispatch now produces the cleanerProtocol.UndefinedErrorfor unimplemented types. - Choreo.Render.DOT / Choreo — corrected stale
:themeoption documentation inChoreo.to_dot/2andChoreo.Render.DOT; both now list all six supported themes (:default,:dark,:minimal,:warm,:forest,:ocean).
Changed
- Choreo — centralized zoom-tier type taxonomy into a single
@zoom_tiersmodule attribute insidedefimpl Choreo.Viewable, for: Choreo; adding a new node type now requires touching one place instead of threezoom_predicate/2clauses.
Deprecated
- Choreo.FSM:
- Deprecated
Choreo.FSM.initial_states/1in favor ofChoreo.FSM.initial_state/1. It is scheduled for removal in version 0.10.
- Deprecated
Removed
- Choreo.FSM.Analysis:
- Removed
Analysis.deterministic?/1andAnalysis.nondeterministic_states/1sinceChoreo.FSMenforces DFA determinism strictly at build-time.
- Removed
Changed
Choreo.C4 — Scoped Zooming & Relationship Roll-up:
- Implemented automatic relationship roll-up (edge rewiring) when zooming/filtering lower-level components and containers to higher-level elements.
- Implemented scoped Container (L2) and Component (L3) diagram filtering based on the active diagram scope, hiding expanded parent nodes and showing their respective sub-elements.
- Implemented automatic cluster boundary generation and nested hierarchy mapping for parent systems and containers of visible nodes.
- Rewrote the C4 walkthrough Livebook guide to showcase a unified banking architecture model, scoped zooming, relationship roll-up, auto-clustering, and themes.
Choreo.Theme — Infrastructure node types & shared helpers:
- Added
:internet,:compute, and:managed_dbas first-class node types in@default_shapes,@default_colors, and all named themes (:minimal,:warm,:forest,:ocean). Infrastructure diagrams now participate in the full theme system without any special-casing. - Added
Theme.resolve/1— converts an atom shortcut (:default,:dark, etc.) to a%Theme{}struct, eliminating the duplicatedresolve_theme/1private functions previously spread across renderers. - Added
Theme.dark?/1— returnstruefor dark-background themes, eliminating the duplicatedis_dark_theme?/1private functions previously in the Infrastructure renderers.
- Added
Added
Choreo.Domain — DDD, Event Storming & Functional Modeling:
- Implemented
Choreo.Domainvocabulary layer mapping Strategic Bounded Context maps and Tactical Event Storming models. - Added builders for Event Storming sticky notes:
add_actor/3,add_command/3,add_aggregate/3,add_event/3,add_read_model/3,add_policy/3,add_external_system/3,add_acl/3, andadd_workflow/3. - Added support for UML-style structured field specifications on
:typeand:aggregatenodes, rendering them as clean HTML-like table grids in Graphviz and newline-separated lists in Mermaid. - Implemented context-mapping relationship decorators in
connect_contexts/4with automatic suppliers, customers, conformists, OHS, PL, and ACL markings on arrows. - Implemented scenario highlighting lens via
focus_path/2to visually gray-out nodes outside of targeted execution paths. - Implemented recursive root-cause verification using
trace_cause/2. - Implemented semantic audit validations in
Choreo.Domain.Analysischecking for orphaned commands, dead-end events, parentless events, and dangling saga policies. - Added interactive walkthrough notebook (
livebooks/domain_modeling_walkthrough.livemd).
- Implemented
Cross-Diagram Semantic Tracing & Impact Analysis:
- Implemented
Choreo.trace/5for declaring semantic connections (traces) between nodes across different diagram schemas (e.g. Workflow task -> C4 component -> ERD table). - Implemented
Choreo.Analysis.Tracingwithimpact_analysis/2(transitively walks dependency graphs backwards to find all impacted components) andtrace_path/3(computes cross-diagram execution paths). - Added
:show_tracesoption toChoreo.to_dot/2andChoreo.to_mermaid/2to render trace links as styled red dashed arrows with layout constraint bypass (constraint=falsein Graphviz).
- Implemented
Choreo.Infrastructure — Cloud Network Topology Preset:
- Implemented
Choreo.Infrastructureas a domain-specific vocabulary layer on top of Choreo's existing graph, cluster, and rendering stack — not a parallel implementation. - Added typed network boundary builders:
add_vpc/3,add_subnet_public/3,add_subnet_private/3— clusters with security semantics (:vpc,:subnet_public,:subnet_privatetypes). - Added infrastructure node builders:
add_internet/3,add_load_balancer/3,add_compute/3,add_managed_db/3,add_storage/3. - Added
connect/3with:protocolmetadata (:https,:ssl,:tcp, etc.) for styled edge rendering. - Implemented
Choreo.Infrastructure.Render.DOTwith VPC/subnet cluster boundary coloring (theme-aware: light and dark variants), and node shapes/colors resolved viaChoreo.Theme. - Implemented
Choreo.Infrastructure.Render.Mermaidwith Mermaid-compatible node shapes (:circle,:hexagon,:subroutine,:cylinder) and styled edges. - Implemented
Choreo.Infrastructure.Analysiswith structural audit rules::direct_internet_to_private_subnet— flags connections that bypass the DMZ.:db_not_in_private_subnet— flags managed databases placed in public subnets or outside any subnet.:load_balancer_not_in_public_subnet— flags load balancers placed in private subnets.
- Implemented
Choreo.Viewableprotocol for standard graph lens operations (focus,zoom,filter,collapse). - Added ExDoc groupings for all
Choreo.Infrastructuremodules.
- Implemented
[0.8.0] - 2026-06-06
Changed
- Bumped
yog_exrequirement to~> 0.98.2.- Mermaid rendering: Node IDs are now sanitized to
n_0,n_1, etc. by Yog for Mermaid compatibility. Labels and styles remain unchanged. - DOT rendering: HTML-like labels are now emitted with proper single-angle bracket syntax (
label=<TABLE...>) instead of the previous double-angle bracket form.
- Mermaid rendering: Node IDs are now sanitized to
Added
Choreo.ERD — Database Entity-Relationship Modeling:
- Implemented
Choreo.ERDschema builder with strictNimbleOptionscolumn and relationship constraint validation. - Implemented themed HTML-like table record visualization (
Choreo.ERD.Render.DOT) supporting standard crow's foot multiplicities and post-rendering unquoting. - Implemented native Mermaid
erDiagramvisual syntax rendering (Choreo.ERD.Render.Mermaid). - Implemented a topological analysis suite (
Choreo.ERD.Analysis) including undirected BFS join path discovery, DFS circular foreign key cycle detection, isolated orphan entity tracking, and table coupling metrics. - Implemented
Choreo.Viewableprotocol forChoreo.ERDto enable standard graph lens operations (focus,zoom,filter,collapse). - Added ExDoc groupings and a full interactive Livebook walkthrough guide (
livebooks/erd_walkthrough.livemd).
- Implemented
Choreo.UML — Class & Struct Diagrams:
- Implemented
Choreo.UMLschema builder with strictNimbleOptionsfield, arity, visibility, and relationship constraint validation. - Implemented themed three-compartment HTML record table visualization (
Choreo.UML.Render.DOT) supporting standard class/struct/interface/behavior/protocol types, visibilities (+,-,#), and proper hollow/solid arrowhead line layouts. - Implemented Mermaid visual syntax rendering (
Choreo.UML.Render.Mermaid) supporting both flowchart layouts and nativeclassDiagramrendering. - Implemented
Choreo.Viewableprotocol for standard graph lens operations (focus,zoom,filter,collapse). - Implemented a static analysis suite (
Choreo.UML.Analysis) including circular dependency detection, behavior contract validation, and Robert C. Martin's coupling & stability metrics. - Added ExDoc groupings and a full interactive Livebook walkthrough guide (
livebooks/uml_walkthrough.livemd).
- Implemented
Choreo.Planner — Project Planning Diagrams:
- Implemented
Choreo.Plannerbuilder for project planning with tasks, milestones, users, and labels. - Implemented relationship builders:
contains/3(milestone hierarchy),depends_on/3(finish-to-start),blocks/3(semantic blocker),assign/3(ownership),tag/3(categorization), andrelates/3(association). - Implemented native Mermaid rendering (
Choreo.Planner.Render.Mermaid) supporting:kanban,:kanban_compat,:gantt, and:flowchartsyntaxes with status columns, color coding, and dependency scheduling. - Implemented themed DOT flowchart rendering (
Choreo.Planner.Render.DOT) viaYog.Multi.DOT. - Implemented a planning analysis suite (
Choreo.Planner.Analysis) includingready/1,blocked/1,critical_path/2,bottlenecks/1, andvalidate/1. - Added a full interactive Livebook walkthrough guide (
livebooks/planner_walkthrough.livemd).
- Implemented
Choreo.C4 — C4 Model Architecture Diagrams:
- Implemented
Choreo.C4schema builder for L1–L3 C4 modeling withadd_person/3,add_software_system/3,add_container/3, andadd_component/3. - Implemented parent/child clustering with automatic container assignment from
:parentreferences. - Implemented zoom-aware rendering via
Choreo.Viewableprotocol, enabling level-based filtering (System Context, Containers, Components). - Implemented themed DOT rendering (
Choreo.C4.Render.DOT) with C4-specific visual conventions: persons as ellipses, systems as boxes, containers as rounded boxes, and components as dashed boxes. - Implemented native Mermaid rendering (
Choreo.C4.Render.Mermaid) with matching shapes and built-in theme support. - Implemented a structural analysis suite (
Choreo.C4.Analysis) including missing parent detection, missing description/technology detection, isolated node detection, missing relationship labels, and generalvalidate/1. - Added a full interactive Livebook walkthrough guide (
livebooks/c4_walkthrough.livemd).
- Implemented
Choreo.Sequence — Sequence Diagrams:
- Implemented
Choreo.Sequencebuilder for ordered participant interactions withadd_actor/3,add_participant/3,message/4,async/4,return/4, andself_message/3. - Implemented activation boxes via
activate/2anddeactivate/2, plus notes (note/3) and fragments (loop,opt,alt/else,par,break,critical). - Implemented native Mermaid
sequenceDiagramrendering (Choreo.Sequence.Render.Mermaid) with actors, participants, activation boxes, notes, and fragments. - Implemented a best-effort DOT timeline fallback (
Choreo.Sequence.Render.DOT) for static image and PDF pipelines. - Implemented a quality analysis suite (
Choreo.Sequence.Analysis) including missing labels, unknown participants, isolated participants, unbalanced activations, unclosed fragments, and generalvalidate/1. - Added a full interactive Livebook walkthrough guide (
livebooks/sequence_walkthrough.livemd).
- Implemented
Native Mermaid Visualizers & Syntaxes:
Choreo.FSM: Added native:state_diagram(stateDiagram-v2) syntax support mapping initial/final states to entry/acceptance targets ([*] --> stateandstate --> [*]) and mapping custom labels.Choreo.Dependency: Added native:class_diagram(classDiagram) syntax support mapping application/module/library types to standard UML stereotypes (e.g.<<module>>) and mapping relationships to standard UML connectors (..>,--|>,-->).- Updated all walkthrough Livebooks and the
README.mdto demonstrate and utilize these alternative syntaxes.
Structural & Heatmap Analysis Suite:
- Implemented
Choreo.Analysis.heatmap/2for automatic, data-driven diagram coloring using configurable color scales. - Structural Analysis Suite:
- Implemented
Choreo.Analysis.cut_vertices/1(Articulation Points) to identify Single Points of Failure. - Implemented
Choreo.Analysis.core_numbers/1using K-Core decomposition to isolate tightly-coupled architectural "nuclei." - Implemented
Choreo.Analysis.reduce_transitive/1for transitive reduction of dependency meshes. - Implemented
Choreo.Analysis.path/4for domain-aware pathfinding (Fastest Path, Widest Path, etc.). - Added support for Custom Weight Variables in pathfinding via arbitrary metadata keys or custom lambda functions.
- Added
Choreo.Analysis.highlight/1to easily visualize pathfinding results in rendered diagrams.
- Implemented
- Added domain-specific heatmap analysis:
Choreo.Workflow.Analysis.heatmap/2for identifying execution latency hotspots.Choreo.Dataflow.Analysis.heatmap/2for identifying throughput and data-volume hotspots.Choreo.ThreatModel.Analysis.heatmap/2for identifying security risk hotspots based on threat density.
- Added
Choreo.Analysis.legend/1to generate visual color-scale keys for diagrams. - Generalized
Choreo.Analysis.centrality/2to support all Choreo diagram types (Workflow, Dataflow, etc.). - Added standard color palettes to
Choreo.Theme::heat(Yellow-Red),:cool(Blue), and:spectral(Rainbow).
- Implemented
Structural Enhancements:
- Updated cluster schema to support both atom and string
:styleoptions, resolving rendering crashes inYog.Multi.DOT.
- Updated cluster schema to support both atom and string
[0.7.1] - 2026-05-04
Added
- Theming API Overhaul:
- Implemented
Choreo.Theme.override/2to allow non-destructive deep-merging of nested theme maps (colors,shapes) while replacing top-level attributes likegraph_rankdir. - Added a standardized
theme/2helper function across all core modules (Workflow,Dataflow,MindMap,FSM,DecisionTree,Dependency, andThreatModel) to easily apply specific overrides while preserving default module schemas.
- Implemented
- Added
:retentionoption toChoreo.ThreatModel.add_data_store/3for modeling data lifecycles.
Fixed
- Added
:noneto the allowedprivilegetypes inChoreo.ThreatModelprocesses to support modeling unprivileged services. Choreo.ThreatModel.Analysisnow correctly downgrades the base severity of STRIDE threats (Spoofing, Tampering, Information Disclosure, Denial of Service) for processes with:noneprivilege to reflect their lower impact surface.
[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.
- Safely merge modular sub-diagrams (
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
NimbleOptionsacross all core modules:- All diagram builders (
Choreo.FSM,Choreo.DecisionTree,Choreo.ThreatModel,Choreo.Workflow,Choreo.Dataflow, andChoreo.Dependency) now enforce compile-time and runtime options validation on nodes and edges.
- All diagram builders (
Multigraph support (parallel edges) for
ChoreoandChoreo.FSM:- Multiple distinct edges can now exist between the same pair of nodes
Choreo.edges_with_meta/1— returns[{from, to, cost, meta}]tuplesChoreo.to_simple_graph/2— collapses parallel edges for algorithm analysis (default combine:min/2)
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
- Nodes:
Choreo.View— graph lens layer for zoom, focus, filter, and collapse transforms across diagram modulesfocus/3— ego-graph view (node + N-hop neighbourhood, bidirectional by default)focus_between/4— shortest-path view between two nodes, with optional neighbourhood radiuszoom/2— module-defined level-based filtering with optionaltransitive: truefor virtual edges through removed intermediatesfilter/3— predicate-based node filtering with optionaltransitive: truecollapse/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/1callback - Supports all diagram modules:
Choreo,Choreo.MindMap,Choreo.DecisionTree,Choreo.Dataflow,Choreo.ThreatModel,Choreo.Dependency, andChoreo.Workflow Choreo.Viewtransparently handles both simple graphs (Yog.Graph) and multigraphs (Yog.Multi.Graph) via internal dispatch helpers
Choreo.FSMenforces 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"--> q1andq0 --"b"--> q1) - Duplicate labels from the same state are still rejected (DFA determinism)
- Epsilon transitions (empty labels) are rejected with
Changed
- Breaking:
Choreocore module converted from simple graph (Yog.Graph) to multigraph (Yog.Multi.Graph):edge_metais now keyed byedge_id(integer) instead of{from, to}tuplesconnect/4andadd_dataflow/4useYog.Multi.add_edge/4Choreo.Render.DOTusesYog.Multi.DOTfor rendering parallel edgesChoreo.Analysisinternally collapses multigraphs to simple graphs before running algorithms
- Breaking:
Choreo.FSMconverted from simple graph to multigraph:add_transition/4usesYog.Multi.add_edge/4Choreo.FSM.Render.DOTusesYog.Multi.DOTChoreo.FSM.Analysisrewritten with multigraph-aware BFS and reverse-reachability helpers
- Bumped
yog_exrequirement to~> 0.97.1(providesYog.Multi.DOT) - Breaking: Restored pure DFA boundaries across execution engines.
- Dropped ambiguous NFA mappings (
Analysis.to_dfa/1). - Refactored
%Choreo.FSM{meta: %{initial_state: state}}singular state vectors. - All edge builders now raise
ArgumentErroron duplicate(from, to)pairs instead of silently overwriting: Choreo.FSM.add_transition/4no longer raises on duplicate(from, to)pairs — it allows parallel edges with different labels (DFA-compliant)- Removed obsolete "single-edge-per-pair limitation" notes from docstrings where multigraph is now supported.
0.6.0 — 2026-04-25
Added
Choreo.FSM.remove_initial_state/2— explicitly demotes a state from initial status without deleting the node.Choreo.FSM.remove_final_state/2— explicitly demotes a state from final status without deleting the node.
Changed
- Breaking:
Choreo.FSMstate typing moved from nodestate_typefield tometaMapSets (initial_statesandfinal_states).add_state/3withtype: :initialortype: :finalnow populates these sets directly. Choreo.FSM.add_state/3withtype: :normalnow explicitly clears a state from bothinitial_statesandfinal_statesin meta. Omitting the:typeoption (e.g. updating a label) preserves existing status.Choreo.FSM.Analysis.deterministic?/1now enforces a single initial state in addition to unique outgoing transition labels, aligning with classical DFA definition.
Fixed
add_state/3 with type: :initialnow correctly registers the state inmeta.initial_statesso thatreachable_states/1,accepts?/2, and rendering treat it as an entry point.- Fixed broken doctests in
Choreo.FSM.add_initial_state/2andChoreo.FSM.add_final_state/2that still referenced the removedstate_typenode 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
- Nodes:
- Internal helpers module — shared
bfs_reachable/2,build_cluster_subgraphs/2,best_predecessor/3extracted to eliminate Credo duplicate-code warnings
Changed
- Breaking: Package and all modules renamed from
YogSystemtoChoreo Choreo.DecisionTree.set_root/3andbranch/4now returnt()directly (pipeable), raisingArgumentErroron invalid use. Removed redundantbranch!/4.
Fixed
- All
mix credo --strictwarnings resolved (double filters, deep nesting, unused aliases, list append inefficiencies,Enum.map_join/3usage,with→caseconversions) - Incorrect
@specreturn 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 analysisChoreo.FSM— finite-state machine builder with initial/final states, transitions, determinism checks, NFA simulation, equivalence checking, and pruningChoreo.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
- Analysis: circular dependency extraction (actual paths), impact analysis (
Choreo.DecisionTree— classification tree builder with enforced tree invariants- Analysis:
decide/2evaluation, path enumeration, depth/breadth metrics, feature importance, redundant-branch pruning
- Analysis:
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 customChoreo.Themesupport - Graphviz integration in ExDoc for inline diagram rendering
- Credo, Dialyzer, and ExCoveralls tooling