mmdflux 2.4.0

Render Mermaid diagrams as Unicode text, ASCII, SVG, and MMDS JSON.
Documentation
# Developer Setup

## Quick start with mise

The fastest way to get a complete dev environment is with [mise](https://mise.jdx.dev/):

```bash
# Clone the repo
git clone git@github.com:kevinswiber/mmdflux.git
cd mmdflux

# Install all tools (Rust nightly, Node, cargo bins, etc.)
# Git hooks are installed automatically as part of cocogitto setup.
mise install

# Verify everything works
just check
```

mise reads `mise.toml` at the project root and installs everything automatically, including git hooks for Conventional Commits enforcement. The stable Rust toolchain is managed separately by `rust-toolchain.toml` via rustup.

## Manual setup

If you prefer to manage tools yourself, install the following:

| Tool | Purpose | Install |
|------|---------|---------|
| [Rust]https://rustup.rs/ (stable + nightly) | Build, test, format | `rustup install stable nightly` |
| [just]https://github.com/casey/just | Task runner | `cargo install just` or `brew install just` |
| [cargo-nextest]https://nexte.st/ | Parallel test runner | `cargo install cargo-nextest` |
| [cocogitto]https://docs.cocogitto.io/ 6.5.0 | Conventional Commits enforcement | `cargo install cocogitto@6.5.0` |
| [cargo-edit]https://github.com/killercup/cargo-edit | `cargo set-version` used by release hooks | `cargo install cargo-edit` |
| [Node.js]https://nodejs.org/ (LTS) | MMDS packages, module-map scripts, dagre debug scripts | via nvm or brew |
| [jq]https://jqlang.github.io/jq/ | JSON processing in scripts and hooks | `brew install jq` or system package manager |

Optional (for specific workflows):

| Tool | Purpose | Install |
|------|---------|---------|
| [wasm-pack]https://rustwasm.github.io/wasm-pack/ | WebAssembly builds | `cargo install wasm-pack` |
| [gh]https://cli.github.com/ | GitHub CLI for CI checks and release assets | `brew install gh` |
| [@mermaid-js/mermaid-cli]https://github.com/mermaid-js/mermaid-cli | Mermaid parity comparison | `npm install -g @mermaid-js/mermaid-cli` |

## First-time setup

```bash
# Clone the repo
git clone git@github.com:kevinswiber/mmdflux.git
cd mmdflux

# Install git hooks (enforces Conventional Commits)
just setup-hooks

# Verify everything works
just check
```

## Commit conventions

This project uses [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). The `commit-msg` hook validates messages automatically via cocogitto.

Format: `<type>(<optional scope>): <description>`

Types: `feat`, `fix`, `chore`, `docs`, `refactor`, `test`, `ci`, `perf`, `style`, `build`

For non-trivial changes, include a body after a blank line explaining **what** changed and **why**.

## Day-to-day commands

Run `just` to see all available recipes. The most common:

```bash
just test              # Run all tests
just lint              # Clippy + fmt check
just check             # Lint + test + architecture
just fmt               # Format code
just run diagram.mmd   # Run the CLI
```

See the [Justfile](../../Justfile) for the full list.

## Diagnostics and tracing

The CLI supports opt-in `tracing` output for development diagnostics:

```bash
mmdflux --log mmdflux::runtime=debug diagram.mmd >/tmp/render.txt
mmdflux --log mmdflux::graph::grid::routing=trace --log-format json diagram.mmd
mmdflux --log mmdflux::engines::graph::algorithms::layered::kernel::order=trace --log-file /tmp/mmdflux.log diagram.mmd
```

`--log` takes precedence over `MMDFLUX_LOG`; `MMDFLUX_LOG` takes precedence over
`RUST_LOG`. Tracing output goes to stderr unless `--log-file` is provided, so
rendered text, SVG, and MMDS output remain safe to pipe from stdout.

`xtask` accepts the same global tracing flags before the subcommand and uses
`MMDFLUX_XTASK_LOG` before falling back to `RUST_LOG`:

```bash
cargo xtask --log xtask=debug architecture check
MMDFLUX_XTASK_LOG=xtask=debug cargo xtask readme-assets check
```

Parity fixture dumpers such as `MMDFLUX_DEBUG_PIPELINE`,
`MMDFLUX_DEBUG_LAYOUT`, and `MMDFLUX_DEBUG_BORDER_NODES` remain separate
deterministic file/stderr contracts. Use trace filters for interactive
diagnostics and the `MMDFLUX_DEBUG_*` dumpers only for their documented parity
or probe artifacts.