Architecture
Rerunner enforces strict inward dependency boundaries via import-linter (lint-imports) so core data models, integrity, matching, redaction, and storage remain decoupled from transports, integrations, CLI, and MCP interfaces.
flowchart LR
CLI["cli / mcp_server / setup_wizard / proxy_server"] --> Session["session / transport"]
Integrations["integrations/*"] --> Session
Session --> Core["cassette / matcher / integrity / sanitizer / storage"]
Core --> Models["models"]
For the full module-boundary diagram, see architecture/architecture.mermaid.