flowchart TB
subgraph LOSE["⚠ Left of boundary: a failure here CAN lose data"]
direction LR
LRP["Learning Record Provider"]:::risk
GW["Ingestion Gateway"]:::risk
KA["Kafka
durability boundary"]:::risk
LRP --> GW --> KA
end
subgraph SAFE["Right of boundary: a failure here CANNOT lose data"]
direction LR
PR["Processor"]:::safe
CH["ClickHouse
event log"]:::safe
SU["Summarizer"]:::safe
NE["Neo4j
graph projection"]:::safe
RE["Redis
mastery cache"]:::safe
PR --> CH --> SU --> NE
CH --> RE
NE --> RE
end
KA ==>|"only failures LEFT of here can lose data"| PR
classDef risk fill:#e9a23b,stroke:#b8791f,color:#222,font-size:13px
classDef safe fill:#2a9d8f,stroke:#1f7a6f,color:#fff,font-size:13px
linkStyle default stroke:#999,stroke-width:2px