diff --git a/docs/architecture-diagram.mmd b/docs/architecture-diagram.mmd
new file mode 100644
index 0000000..0f986c6
--- /dev/null
+++ b/docs/architecture-diagram.mmd
@@ -0,0 +1,67 @@
+flowchart LR
+ subgraph trigger["Trigger"]
+ direction TB
+ manual["Manual CLI"]
+ maestro_trigger["Maestro\nRegression"]
+ kcidev["kci-dev\nbisect"]
+ end
+
+ subgraph core["Bisection Core"]
+ direction TB
+ loop["Orchestrator"]
+ selector["Commit Selector\nmidpoint / n-bisect"]
+ statestore[("State Store\nCampaign / Step")]
+ loop <--> selector
+ loop <--> statestore
+ end
+
+ subgraph buildtest["Build & Test Pipeline"]
+ direction TB
+ build_cache{"Build Cache"}
+ build_step["Build Step"]
+ test_step["Test Step"]
+ build_cache -->|miss| build_step --> test_step
+ build_cache -->|hit| test_step
+ end
+
+ subgraph backends["Pluggable Backends"]
+ direction TB
+ subgraph bb["Build"]
+ tuxmake["TuxMake"]
+ maestro_build["Maestro"]
+ k8s["Kubernetes"]
+ end
+ subgraph tb["Test"]
+ tuxrun["TuxRun\nQEMU"]
+ lava["LAVA"]
+ fvp["FVP / AVH"]
+ end
+ end
+
+ subgraph analysis["Analysis"]
+ direction TB
+ parser["Result Parser\nlogspec"]
+ decision["Decision Engine"]
+ parser --> decision
+ binary["Binary\npass/fail"]
+ statistical["Statistical\nmetrics"]
+ decision --> binary
+ decision --> statistical
+ end
+
+ subgraph post["Post-Bisection"]
+ direction TB
+ verify["Verify\nrevert + retest"]
+ report["Report Generator"]
+ recipients["Recipient Finder\nget_maintainers.pl"]
+ sender["Report Sender\nemail / API"]
+ verify --> report --> recipients --> sender
+ end
+
+ trigger --> loop
+ loop --> build_cache
+ build_step -.-> bb
+ test_step -.-> tb
+ test_step --> parser
+ analysis -->|"good / bad\nskip / weak"| loop
+ loop -->|"culprit found"| verify
diff --git a/docs/architecture-diagram.png b/docs/architecture-diagram.png
new file mode 100644
index 0000000..2c799cc
Binary files /dev/null and b/docs/architecture-diagram.png differ