diff --git a/README.md b/README.md index fbde715..2820568 100644 --- a/README.md +++ b/README.md @@ -165,35 +165,50 @@ results = parallel_query(["chunk1", "chunk2"], model_size: :small) > A *GenServer* is a long-lived process with a message inbox — Elixir's version of an actor. ```mermaid -graph TD - SUP["RLM.Supervisor\none_for_one"] - - SUP --> REG["RLM.Registry\nnamed process lookup"] - SUP --> PS["Phoenix.PubSub\nevent broadcasting"] - SUP --> TS["RLM.TaskSupervisor\nbash tool tasks"] - SUP --> RUNSUP["RLM.RunSup\nDynamicSupervisor"] - SUP --> ES["RLM.EventStore\nDynamicSupervisor · EventLog Agents"] - SUP --> TEL["RLM.Telemetry\nhandler attachment"] - SUP --> TRACE["RLM.TraceStore\n:dets persistence"] - SUP --> SWEEP["EventLog.Sweeper\nperiodic GC"] - SUP --> WEBTEL["RLMWeb.Telemetry\nPhoenix metrics"] - SUP --> DNS["DNSCluster\ncluster discovery"] - SUP --> EP["RLMWeb.Endpoint\nPhoenix / LiveView"] - - RUNSUP --> RUN["RLM.Run\n:temporary"] +graph LR + SUP["RLM.Supervisor · one_for_one"] - subgraph RunScope["Per-run scope — owned and linked by RLM.Run"] - WD["DynamicSupervisor\nworker pool"] - EVALSUP["Task.Supervisor\neval tasks"] - WD --> W1["RLM.Worker :temporary"] - WD --> W2["RLM.Worker :temporary"] - EVALSUP --> ET["eval Task\nper iteration"] + SUP --> REG["RLM.Registry · process lookup"] + SUP --> PS["Phoenix.PubSub · event broadcasting"] + SUP --> TS["RLM.TaskSupervisor · bash tool tasks"] + SUP --> RUNSUP["RLM.RunSup · DynamicSupervisor"] + + subgraph Obs["Observability"] + direction TB + ES["RLM.EventStore · EventLog Agents"] + TEL["RLM.Telemetry · handler attachment"] + TRACE["RLM.TraceStore · :dets"] + SWEEP["EventLog.Sweeper · periodic GC"] + end + SUP --> ES + SUP --> TEL + SUP --> TRACE + SUP --> SWEEP + + subgraph Web["Web Layer"] + direction TB + WEBTEL["RLMWeb.Telemetry · metrics"] + DNS["DNSCluster · cluster discovery"] + EP["RLMWeb.Endpoint · Phoenix / LiveView"] end + SUP --> WEBTEL + SUP --> DNS + SUP --> EP + + RUNSUP --> RUN["RLM.Run · :temporary"] + subgraph RunScope["Per-run scope — owned and linked by RLM.Run"] + direction TB + WD["DynamicSupervisor · worker pool"] + EVALSUP["Task.Supervisor · eval tasks"] + WD --> W1["RLM.Worker · :temporary"] + WD --> W2["RLM.Worker · :temporary"] + EVALSUP --> ET["eval Task · per iteration"] + end RUN --> WD RUN --> EVALSUP - ETS[/"ETS table\nspan_id → parent_span_id · depth · status\nnot OTP supervision"/] + ETS[/"ETS · span_id, parent, depth, status · not OTP supervision"/] RUN -. "tracks worker relationships" .-> ETS style SUP fill:#ede9fe,stroke:#7c3aed,color:#1a1e27