# Changelog
## [0.10.0] - 2026-07-04
### Added
- **Uniform Theming API across all diagrams**:
- Implemented `theme/2` helper function for `Choreo.Domain`, `Choreo.Infrastructure`, `Choreo.Planner`, and `Choreo.Sequence` diagrams to provide a uniform theming interface.
- Implemented complete theme support for sequence diagrams (`Choreo.Sequence`) in both DOT timeline rendering and native Mermaid `sequenceDiagram` rendering, using theme variables profiles (default, dark, minimal, warm, forest, ocean).
- **Choreo.Lab.Siren & Choreo.Lab.Sketch (Experimental)**:
- Added `Choreo.Lab.Siren` module — an enhanced Mermaid.js renderer for Livebook with hardware-accelerated zoom/pan controls, dynamic fit-to-screen scaling, and automatic dark/light theme detection.
- Added `Choreo.Lab.Sketch` module — an interactive Excalidraw whiteboard renderer that parses Mermaid syntax in the browser and displays it as a fully editable hand-drawn sketch.
- **Choreo.FSM.Analysis — Advanced Analysis Suite**:
- Added `Analysis.generate_test_cases/2` to generate transition sequences for `:state` and `:transition` test coverage.
- Added `Analysis.equivalent?/2` to check equivalence of two FSMs using product automaton BFS traversal.
- Added `Analysis.minimize/1` to minimize a DFA using Partition Refinement (Moore's algorithm).
- Added `Analysis.violates_invariant?/2` to validate safety/liveness state invariants.
- **Choreo.DecisionTree.Analysis — Rule Extraction, Test Cases, and Completeness**:
- Added `Analysis.rules/1` to extract IF-THEN rules from every root-to-leaf path.
- Added `Analysis.generate_test_cases/1` to generate feature maps that exercise every reachable leaf path.
- Added `Analysis.orphan_nodes/1` to detect declared nodes that are unreachable from the root.
- Added `Analysis.missing_branches/2` to find decision nodes that do not cover an expected set of feature values.
- Extended `Analysis.validate/1` to warn about orphan nodes.
- **Choreo.ERD.Analysis — Dependency & Cascade Analysis**:
- Added `Analysis.affected_by/2` to find tables that transitively depend on a target table.
- Added `Analysis.depends_on/2` to find tables that a target table transitively depends on.
- Added `Analysis.transitive_reduction/1` to identify redundant relationships implied by longer paths.
- Added `Analysis.longest_dependency_chain/1` to find the longest relationship cascade in an acyclic schema.
- **Choreo.UML.Analysis — Validation & Dependency Analysis**:
- Added `Analysis.validate/1` to report cycles, broken contracts, isolated classes, and Law of Demeter violations as `{severity, message}` tuples.
- Added `Analysis.affected_by/2` to find classes that transitively depend on a target class.
- Added `Analysis.depends_on/2` to find classes that a target class transitively depends on.
- Added `Analysis.transitive_reduction/1` to identify redundant relationships implied by longer paths.
## [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 when `edge_meta` is empty.
- **Choreo.embed/4** — replaced `String.replace/3` with `String.replace_prefix/3` for cluster name sanitization to avoid corrupting cluster names that contain `"cluster_"` as an interior substring.
- **Choreo.connect/4** — added `:strict` boolean option; when `true`, raises `ArgumentError` if either endpoint is missing; when `false` (default) and both endpoints are absent, emits a `Logger.warning/1` instead of silently auto-creating two generic nodes.
- **Choreo.Viewable** — removed `@fallback_to_any true` directive (no `Any` implementation existed); Elixir's default protocol dispatch now produces the cleaner `Protocol.UndefinedError` for unimplemented types.
- **Choreo.Render.DOT / Choreo** — corrected stale `:theme` option documentation in `Choreo.to_dot/2` and `Choreo.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_tiers` module attribute inside `defimpl Choreo.Viewable, for: Choreo`; adding a new node type now requires touching one place instead of three `zoom_predicate/2` clauses.
### Removed
- **Choreo.FSM**:
- Removed the former `initial_states/1` helper. Use `Choreo.FSM.initial_state/1` instead.
- **Choreo.FSM.Analysis**:
- Removed `Analysis.deterministic?/1` and `Analysis.nondeterministic_states/1` since `Choreo.FSM` enforces DFA determinism strictly at build-time.
### 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_db` as 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 duplicated `resolve_theme/1` private functions previously spread across renderers.
- Added `Theme.dark?/1` — returns `true` for dark-background themes, eliminating the duplicated `is_dark_theme?/1` private functions previously in the Infrastructure renderers.
### Added
- **Choreo.Domain — DDD, Event Storming & Functional Modeling**:
- Implemented `Choreo.Domain` vocabulary 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`, and `add_workflow/3`.
- Added support for UML-style structured field specifications on `:type` and `:aggregate` nodes, rendering them as clean HTML-like table grids in Graphviz and newline-separated lists in Mermaid.
- Implemented context-mapping relationship decorators in `connect_contexts/4` with automatic suppliers, customers, conformists, OHS, PL, and ACL markings on arrows.
- Implemented scenario highlighting lens via `focus_path/2` to 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.Analysis` checking for orphaned commands, dead-end events, parentless events, and dangling saga policies.
- Added interactive walkthrough notebook (`livebooks/guides/domain_modeling_walkthrough.livemd`).
- **Cross-Diagram Semantic Tracing & Impact Analysis**:
- Implemented trace helpers for declaring semantic connections between nodes across different diagram schemas (e.g. Workflow task -> C4 component -> ERD table).
- Implemented `Choreo.Analysis.Tracing` with `impact_analysis/2` (transitively walks dependency graphs backwards to find all impacted components) and `trace_path/3` (computes cross-diagram execution paths).
- Added `:show_traces` option to `Choreo.to_dot/2` and `Choreo.to_mermaid/2` to render trace links as styled red dashed arrows with layout constraint bypass (`constraint=false` in Graphviz).
- **Choreo.Infrastructure — Cloud Network Topology Preset**:
- Implemented `Choreo.Infrastructure` as 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_private` types).
- Added infrastructure node builders: `add_internet/3`, `add_load_balancer/3`, `add_compute/3`, `add_managed_db/3`, `add_storage/3`.
- Added `connect/3` with `:protocol` metadata (`:https`, `:ssl`, `:tcp`, etc.) for styled edge rendering.
- Extended the shared `Choreo.Render.DOT` pipeline with infrastructure-specific VPC/subnet cluster boundary coloring (theme-aware: light and dark variants), and node shapes/colors resolved via `Choreo.Theme`.
- Extended the shared `Choreo.Render.Mermaid` pipeline with Mermaid-compatible infrastructure node shapes (`:circle`, `:hexagon`, `:subroutine`, `:cylinder`) and styled edges.
- Implemented `Choreo.Infrastructure.Analysis` with 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.Viewable` protocol for standard graph lens operations (`focus`, `zoom`, `filter`, `collapse`).
- Added ExDoc groupings for all `Choreo.Infrastructure` modules.
## [0.8.0] - 2026-06-06
### Changed
- Bumped `yog_ex` requirement 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.
### Added
- **Choreo.ERD — Database Entity-Relationship Modeling**:
- Implemented `Choreo.ERD` schema builder with strict `NimbleOptions` column 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 `erDiagram` visual 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.Viewable` protocol for `Choreo.ERD` to enable standard graph lens operations (`focus`, `zoom`, `filter`, `collapse`).
- Added ExDoc groupings and a full interactive Livebook walkthrough guide (`livebooks/guides/erd_walkthrough.livemd`).
- **Choreo.UML — Class & Struct Diagrams**:
- Implemented `Choreo.UML` schema builder with strict `NimbleOptions` field, 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 native `classDiagram` rendering.
- Implemented `Choreo.Viewable` protocol 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/guides/uml_walkthrough.livemd`).
- **Choreo.Planner — Project Planning Diagrams**:
- Implemented `Choreo.Planner` builder 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), and `relates/3` (association).
- Implemented native Mermaid rendering (`Choreo.Planner.Render.Mermaid`) supporting `:kanban`, `:kanban_compat`, `:gantt`, and `:flowchart` syntaxes with status columns, color coding, and dependency scheduling.
- Implemented themed DOT flowchart rendering (`Choreo.Planner.Render.DOT`) via `Yog.Multi.DOT`.
- Implemented a planning analysis suite (`Choreo.Planner.Analysis`) including `ready/1`, `blocked/1`, `critical_path/2`, `bottlenecks/1`, and `validate/1`.
- Added a full interactive Livebook walkthrough guide (`livebooks/guides/planner_walkthrough.livemd`).
- **Choreo.C4 — C4 Model Architecture Diagrams**:
- Implemented `Choreo.C4` schema builder for L1–L3 C4 modeling with `add_person/3`, `add_software_system/3`, `add_container/3`, and `add_component/3`.
- Implemented parent/child clustering with automatic container assignment from `:parent` references.
- Implemented zoom-aware rendering via `Choreo.Viewable` protocol, 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 general `validate/1`.
- Added a full interactive Livebook walkthrough guide (`livebooks/guides/c4_walkthrough.livemd`).
- **Choreo.Sequence — Sequence Diagrams**:
- Implemented `Choreo.Sequence` builder for ordered participant interactions with `add_actor/3`, `add_participant/3`, `message/4`, `async/4`, `return/4`, and `self_message/3`.
- Implemented activation boxes via `activate/2` and `deactivate/2`, plus notes (`note/3`) and fragments (`loop`, `opt`, `alt`/`else`, `par`, `break`, `critical`).
- Implemented native Mermaid `sequenceDiagram` rendering (`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 general `validate/1`.
- Added a full interactive Livebook walkthrough guide (`livebooks/guides/sequence_walkthrough.livemd`).
- **Native Mermaid Visualizers & Syntaxes**:
- **`Choreo.FSM`**: Added native `:state_diagram` (`stateDiagram-v2`) syntax support mapping initial/final states to entry/acceptance targets (`[*] --> state` and `state --> [*]`) 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.md` to demonstrate and utilize these alternative syntaxes.
- **Structural & Heatmap Analysis Suite**:
- Implemented `Choreo.Analysis.heatmap/2` for 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/1` using K-Core decomposition to isolate tightly-coupled architectural "nuclei."
* Implemented `Choreo.Analysis.reduce_transitive/1` for transitive reduction of dependency meshes.
* Implemented `Choreo.Analysis.path/4` for 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/1` to easily visualize pathfinding results in rendered diagrams.
- Added domain-specific heatmap analysis:
- `Choreo.Workflow.Analysis.heatmap/2` for identifying execution latency hotspots.
- `Choreo.Dataflow.Analysis.heatmap/2` for identifying throughput and data-volume hotspots.
- `Choreo.ThreatModel.Analysis.heatmap/2` for identifying security risk hotspots based on threat density.
- Added `Choreo.Analysis.legend/1` to generate visual color-scale keys for diagrams.
- Generalized `Choreo.Analysis.centrality/2` to support all Choreo diagram types (Workflow, Dataflow, etc.).
- Added standard color palettes to `Choreo.Theme`: `:heat` (Yellow-Red), `:cool` (Blue), and `:spectral` (Rainbow).
- **Structural Enhancements**:
- Updated cluster schema to support both atom and string `:style` options, resolving rendering crashes in `Yog.Multi.DOT`.
## [0.7.1] - 2026-05-04
### Added
- **Theming API Overhaul**:
- Implemented `Choreo.Theme.override/2` to allow non-destructive deep-merging of nested theme maps (`colors`, `shapes`) while replacing top-level attributes like `graph_rankdir`.
- Added a standardized `theme/2` helper function across all core modules (`Workflow`, `Dataflow`, `MindMap`, `FSM`, `DecisionTree`, `Dependency`, and `ThreatModel`) to easily apply specific overrides while preserving default module schemas.
- Added `:retention` option to `Choreo.ThreatModel.add_data_store/3` for modeling data lifecycles.
### Fixed
- Added `:none` to the allowed `privilege` types in `Choreo.ThreatModel` processes to support modeling unprivileged services.
- `Choreo.ThreatModel.Analysis` now correctly downgrades the base severity of STRIDE threats (Spoofing, Tampering, Information Disclosure, Denial of Service) for processes with `:none` privilege 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.
- **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:
- All diagram builders (`Choreo.FSM`, `Choreo.DecisionTree`, `Choreo.ThreatModel`, `Choreo.Workflow`, `Choreo.Dataflow`, and `Choreo.Dependency`) now enforce compile-time and runtime options validation on nodes and edges.
- **Multigraph support (parallel edges)** for `Choreo` and `Choreo.FSM`:
- Multiple distinct edges can now exist between the same pair of nodes
- `Choreo.edges_with_meta/1` — returns `[{from, to, cost, meta}]` tuples
- `Choreo.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
- `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
- **Breaking:** `Choreo` core module converted from simple graph (`Yog.Graph`) to multigraph (`Yog.Multi.Graph`):
- `edge_meta` is now keyed by `edge_id` (integer) instead of `{from, to}` tuples
- `connect/4` and `add_dataflow/4` use `Yog.Multi.add_edge/4`
- `Choreo.Render.DOT` uses `Yog.Multi.DOT` for rendering parallel edges
- `Choreo.Analysis` internally collapses multigraphs to simple graphs before running algorithms
- **Breaking:** `Choreo.FSM` converted from simple graph to multigraph:
- `add_transition/4` uses `Yog.Multi.add_edge/4`
- `Choreo.FSM.Render.DOT` uses `Yog.Multi.DOT`
- `Choreo.FSM.Analysis` rewritten with multigraph-aware BFS and reverse-reachability helpers
- Bumped `yog_ex` requirement to `~> 0.97.1` (provides `Yog.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 `ArgumentError` on duplicate `(from, to)` pairs instead of silently overwriting:
- `Choreo.Dataflow.connect/4`
- `Choreo.Workflow.connect/4`
- `Choreo.Dependency.depends_on/4`
- `Choreo.ThreatModel.data_flow/4`
- `Choreo.FSM.add_transition/4` no 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.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.
- The FSM determinism analysis 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
- **Breaking:** Package and all modules renamed from `YogSystem` to `Choreo`
- `Choreo.DecisionTree.set_root/3` and `branch/4` now return `t()` directly (pipeable), raising `ArgumentError` on invalid use. Removed redundant `branch!/4`.
### Fixed
- All `mix credo --strict` warnings resolved (double filters, deep nesting, unused aliases, list append inefficiencies, `Enum.map_join/3` usage, `with`→`case` 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