pwn 0.5.781 → 0.5.782

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,123 +1,58 @@
1
1
  digraph "PWN_Reinforcement_Learning" {
2
2
  graph [
3
- label=<<B>PWN::AI::Agent - Reward + Curriculum Reinforcement Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">reward signal · credit assignment · memory · self-play · weight loop · intro/extro join</FONT>>,
3
+ label=<<B>PWN::AI::Agent - Reward + Curriculum Reinforcement Loop</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">live accounting · optional curriculum / weights · explicit routing-policy evaluation</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
- rankdir=TB, splines=spline, nodesep=0.55, ranksep=1.05,
6
- bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
5
+ rankdir=TB, splines=polyline, nodesep=0.45, ranksep=0.48,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.4, newrank=true
7
7
  ];
8
- node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
- shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
- edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
8
+ node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a",
10
+ fillcolor="#c4b5fd", margin="0.20,0.16", width=3.8];
11
+ edge [fontname="Helvetica", fontsize=10, color="#94a3b8",
11
12
  fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
13
 
13
- /* L0 — request/loop */
14
- Req [label="👤 request", fillcolor="#7dd3fc"];
15
- Loop [label="Loop.run\nTaskSummarizer · budget pressure\nplan_first · Dispatch · guard\nfinal answer", fillcolor="#7dd3fc", penwidth=2];
16
- {rank=same; Req; Loop}
17
-
18
- /* Tier 1 — Reward signal */
19
- subgraph cluster_reward {
20
- label="Tier 1 · Reward (PWN::AI::Agent::Reward)"; fontcolor="#ddd6fe";
21
- style=rounded; color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
22
- R1 [label="judge (cheap LLM ORM)\nscore · verdict · source\nevidence-prior fallback", fillcolor="#c4b5fd", penwidth=2];
23
- R2 [label="prm (process)\nper-step +1/0/-1\n→ Registry.rank", fillcolor="#c4b5fd"];
24
- R3 [label="sentinel (ring N=40)\nproxy != judge != (1-corr)\nwarm + proxy distrust", fillcolor="#c4b5fd"];
25
- R4 [label="semantic_ok\ngrep exit 1 != failure", fillcolor="#c4b5fd"];
26
- R5 [label="Policy (live MDP)\nplan · complete · usable\nwarm Q + episode budget", fillcolor="#c4b5fd", penwidth=2];
27
- E3 [label="verify_as_reward\nclaim diagnostics; refutation caps", fillcolor="#c4b5fd"];
28
- }
29
- {rank=same; R1; R2; R3; R4; R5; E3}
30
-
31
- /* Tier 4 — Curriculum / self-play */
32
- subgraph cluster_curr {
33
- label="Tier 4 · Curriculum (PWN::AI::Agent::Curriculum)"; fontcolor="#a7f3d0";
34
- style=rounded; color="#047857"; bgcolor="#022c22"; penwidth=2;
35
- S1 [label="practice\nbudget-first + winning_trace DPO\nauto-resolve on judge>=0.7", fillcolor="#6ee7b7", penwidth=2];
36
- S2 [label="counterfactual\nreal_dispatch vs imagined", fillcolor="#6ee7b7"];
37
- S3 [label="critic\ntool-armed · revised_answer DPO", fillcolor="#6ee7b7"];
38
- S4 [label="red_team_plan\nadversarial plan review", fillcolor="#6ee7b7"];
39
- C3 [label="hindsight (HER)\nrelabel achieved-goal", fillcolor="#6ee7b7"];
14
+ // Independent lifecycles, not a mandatory pipeline from each live request.
15
+ subgraph cluster_live {
16
+ label="LIVE REQUEST · Loop / Reward / Policy"; fontsize=12;
17
+ style="rounded,filled"; color="#334155"; fillcolor="#1e293b";
18
+ Run [fillcolor="#7dd3fc", label="1 ACT + OBSERVE\nLoop: plan, Dispatch, guard, final answer\nPolicy: begin_episode / observe_step\nsemantic_ok: grep exit 1 need not be failure"];
19
+ Diagnose [label="2 DIAGNOSE WHEN APPLICABLE\nCurriculum: red_team_plan / critic\ncounterfactual: real vs imagined dispatch\nhindsight: achieved-goal relabel, not proof"];
20
+ Evidence [fillcolor="#fcd34d", label="3 RESOLVE OUTCOME\nHost Verification: pass / fail / unknown\nReward.judge remains a fallible claim\nverify_as_reward: claim diagnostics / caps\nFalse rate = refuted / checked claims"];
21
+ Credit [label="4 ACCOUNT FOR ELIGIBLE CREDIT\nPolicy: Q-learning + REINFORCE\nPositive credit needs independent attribution\nPRM: step rewards; sentinel: proxy distrust\nCalibration: predicted vs actual (Brier)"];
22
+ Retain [fillcolor="#fcd34d", label="5 RETAIN UNDER ~/.pwn/\npolicy.json + policy_traj.jsonl\nsessions/*.jsonl: step_reward\nreward_sentinel.json + mistakes.json\npreferences.jsonl: scrubbed trajectory pairs"];
23
+ Later [fillcolor="#7dd3fc", label="6 INFORM LATER TURNS\nRegistry ranking + advisory policy context\nWarmup and episode budget apply\nRSI records ESR / ASR; ESR drop → lesson\nNo automatic policy-candidate promotion"];
24
+ Run -> Diagnose -> Evidence -> Credit -> Retain -> Later;
40
25
  }
41
- {rank=same; S1; S2; S3; S4; C3}
42
26
 
43
- /* Tier 5 — Weight loop */
44
- subgraph cluster_weight {
45
- label="Tier 5 · Weight Loop"; fontcolor="#fecaca";
46
- style=rounded; color="#b91c1c"; bgcolor="#450a0a"; penwidth=2;
47
- W1 [label="preference ledger\ntrajectory pairs\nscrub + geometry filter\nwrite+export <=40%/src", fillcolor="#fda4af"];
48
- W2 [label="train_and_gate\nSFT+DPO → LoRA vN+1\ngate + preference diet\nexport_ready without trainer", fillcolor="#fda4af", penwidth=2];
49
- W3 [label="calibrate\np(success) vs actual → Brier", fillcolor="#fda4af"];
50
- Rates [label="ESR verified_exploit_tools / vulnerable_tools\nASR successful_attacks / total_attack_attempts\nrsi_tick on an ESR drop", fillcolor="#fda4af"];
27
+ subgraph cluster_curriculum {
28
+ label="OPTIONAL CURRICULUM · independent invocation"; fontsize=12;
29
+ style="rounded,dashed,filled"; color="#94a3b8"; fillcolor="#1e293b";
30
+ Schedule [fillcolor="#7dd3fc", label="A OPT IN / INVOKE EXPLICITLY\nCron seeds disabled by default:\npractice 03:00; offline_judge 03:30 daily\ntrain dry_run 04:00 Sunday\nSeeding jobs does not install system crontab"];
31
+ Practice [fillcolor="#6ee7b7", label="B PRACTICE / OFFLINE JUDGING\nPractice: budget-first; real tools may run\nJudge-qualified resolution + winning traces\nOffline judge: backfill, calibrate, warm sentinel\nRecords: curriculum/ + mistakes / preferences"];
32
+ Export [fillcolor="#fcd34d", label="C EXPORT TRAINING DATA\nLearning.export_finetune + Reward.export_dpo\nEligible sessions / outcomes + preference pairs\nScrub, geometry and source-balance filters\nOutput: finetune/*.jsonl + evaluation set"];
33
+ Train [fillcolor="#fda4af", label="D train_and_gate\nDry run or no trainer → export_ready only\nOtherwise: configured trainer → LoRA adapter\nollama create → candidate vs baseline gate\nPreference-diet gate also required"];
34
+ Model [fillcolor="#6ee7b7", label="E RETAIN GATED ADAPTER VERSION\nOn passing gates: update curriculum model state\nOptional local weight path, not routing policy\nExport alone is not training or improvement"];
35
+ Hygiene [fillcolor="#1e293b", fontcolor="#cbd5e1", style="rounded,dashed,filled",
36
+ label="SEPARATE ENABLED HYGIENE SEED\nLearning.consolidate at 05:00 daily\nMemory maintenance, not model training\nESR = verified_exploit_tools / vulnerable_tools\nASR = successful_attacks / total_attack_attempts"];
37
+ Schedule -> Practice [label="independent jobs; not a job chain", style=dashed];
38
+ Practice -> Export [label="eligible retained data", style=dashed];
39
+ Export -> Train -> Model;
51
40
  }
52
- {rank=same; W1; W2; W3; Rates}
53
41
 
54
- /* Persistence */
55
- subgraph cluster_files {
56
- label="~/.pwn/"; fontcolor="#fde68a"; style="rounded,dashed";
57
- color="#a16207"; bgcolor="#422006";
58
- Fmis [label="mistakes.json", shape=cylinder, fillcolor="#fcd34d"];
59
- Fses [label="sessions/*.jsonl\n(step_reward)", shape=cylinder, fillcolor="#fcd34d"];
60
- Fpol [label="policy.json +\npolicy_traj.jsonl", shape=cylinder, fillcolor="#fcd34d"];
61
- Fprf [label="preferences.jsonl", shape=cylinder, fillcolor="#fcd34d"];
62
- Fcur [label="curriculum/", shape=cylinder, fillcolor="#fcd34d"];
63
- Fftn [label="finetune/*.jsonl", shape=cylinder, fillcolor="#fcd34d"];
64
- Frws [label="reward_sentinel.json", shape=cylinder, fillcolor="#fcd34d"];
42
+ subgraph cluster_policy {
43
+ label="FROZEN POLICY · explicit operator workflow"; fontsize=12;
44
+ style="rounded,dashed,filled"; color="#94a3b8"; fillcolor="#1e293b";
45
+ Select [label="I SELECT SNAPSHOTS\nExplicit baseline + candidate policy bytes\nPolicyEvaluation; not live online writers\nNo automatic handoff from RSI or training"];
46
+ Eval [label="II EVALUATE LOCALLY\nPublic fixed held-out tasks\nOff / baseline / candidate comparisons\nTwo disposable filesystem environments\nRegression replay is a separate split"];
47
+ Gate [fillcolor="#fcd34d", label="III REPLAY ACCEPTANCE\nFresh replay + aggregate nonregression\nPer-task nonregression + held-out gain\nLocal controller evidence only\nNot proof of general live LLM gains"];
48
+ Approve [fillcolor="#6ee7b7", label="IV OPERATOR APPROVAL\nExplicit live policy target\nApproval + stopped writers required\nReplace routing policy, not model weights"];
49
+ Receipt [fillcolor="#fcd34d", label="V RETAIN RECEIPT / ROLLBACK\nVersioned receipt v1 + byte digests\nRollback refuses intervening live writes\nNo silent overwrite of newer policy state"];
50
+ Select -> Eval -> Gate -> Approve -> Receipt;
65
51
  }
66
- {rank=same; Fmis; Fses; Fpol; Fprf; Fcur; Fftn; Frws}
67
-
68
- Ollama [label="ollama create pwn-vN+1\n(local LoRA adapter)", fillcolor="#7dd3fc"];
69
-
70
- /* edges */
71
- Req -> Loop [color="#38bdf8", penwidth=2];
72
- Loop -> R4 [label="Dispatch", color="#a78bfa"];
73
- Loop -> R5 [label="(s,a,r,s')", color="#38bdf8", penwidth=2];
74
- Loop -> R1 [label="final", color="#a78bfa", penwidth=2];
75
- Loop -> R2 [label="session", color="#a78bfa"];
76
- Loop -> R3 [color="#a78bfa"];
77
- R1 -> E3 [label="ground", style=dashed, color="#fbbf24"];
78
- R1 -> Claims [label="fallible judgment", color="#a78bfa"];
79
- R5 -> Fpol [color="#f59e0b"];
80
- Loop -> S4 [label="plan_first", color="#34d399"];
81
- Loop -> S3 [label="final", color="#34d399"];
82
- Loop -> S2 [label="[REPEATING]", color="#fb7185"];
83
- Loop -> C3 [label="failed goal", color="#fb7185"];
84
-
85
- R2 -> Fses [label="step_reward", color="#f59e0b"];
86
- R3 -> Frws [color="#f59e0b"];
87
- R3 -> Fmis [label="reward_signal", color="#fb7185", style=dashed];
88
- S1 -> Fmis [label="auto-resolve", color="#34d399", dir=both];
89
- S1 -> Fcur [color="#f59e0b"];
90
- S2 -> W1 [label="(loser,winner)", color="#fb7185"];
91
- S3 -> W1 [color="#fb7185"];
92
- C3 -> Fses [label="success:soft", color="#f59e0b"];
93
-
94
- W1 -> Fprf [color="#f59e0b", penwidth=2];
95
- Fprf -> W2 [label="export_dpo", color="#f59e0b"];
96
- Fses -> W2 [label="export_finetune", color="#f59e0b"];
97
- W2 -> Fftn [color="#f59e0b"];
98
- W2 -> Ollama [label="optional configured trainer", color="#fb7185", penwidth=2];
99
- Fmis -> W2 [label="eval set", style=dashed, color="#fbbf24", constraint=false];
100
- W3 -> Loop [label="calibration", style=dashed, color="#fbbf24", constraint=false];
101
- Loop -> Rates [label="rsi_tick", color="#34d399", style=dashed, constraint=false];
102
-
103
- /* cron seeds */
104
- Cron [label="⏱ PWN::Cron.install_defaults\npractice · offline_judge\ntrain dry_run · consolidate", fillcolor="#7dd3fc"];
105
- OJ [label="offline_judge\njudges + calibrate + warm sentinel", fillcolor="#6ee7b7"];
106
- MemGC [label="Learning.consolidate\nnightly memory GC", fillcolor="#6ee7b7"];
107
- Cron -> S1 [label="OFF by default: 0 3 * * *", color="#38bdf8", constraint=false];
108
- Cron -> OJ [label="OFF by default: 30 3 * * *", color="#38bdf8", constraint=false];
109
- Cron -> W2 [label="OFF by default: 0 4 * * 0", color="#38bdf8", constraint=false];
110
- Cron -> MemGC [label="0 5 * * *", color="#38bdf8", constraint=false];
111
- OJ -> R1 [label="backfill", style=dashed, color="#a78bfa", constraint=false];
112
- OJ -> W3 [label="p(success)", style=dashed, color="#fbbf24", constraint=false];
113
-
114
- Ollama -> Loop [label="promoted vN+1\n(next session)", style=dashed, color="#fb7185", constraint=false, penwidth=2];
115
-
116
- Checks [label="Host Verification\ncomplete pass / fail / unknown", fillcolor="#7dd3fc"];
117
- Claims [label="Judge claim != verified completion\nfalse rate = refuted / checked claims", fillcolor="#fcd34d"];
118
- Frozen [label="Explicit frozen PolicyEvaluation\npublic local held-out / two filesystem suites", fillcolor="#c4b5fd"];
119
- Promotion [label="Fresh replay + per-task nonregression\noperator approval / stopped writers\nreceipt v1 + rollback refuses intervening writes", fillcolor="#6ee7b7"];
120
- Loop -> Checks; Checks -> Claims; R1 -> Claims; Claims -> R5 [label="attributed eligible credit only"];
121
- Fpol -> Frozen [label="snapshot, not live writes"]; Frozen -> Promotion;
122
- Promotion -> Fpol [label="explicit target", style=dashed];
52
+ {rank=same; Run; Schedule; Select}
53
+ {rank=same; Diagnose; Practice; Eval}
54
+ {rank=same; Evidence; Export; Gate}
55
+ {rank=same; Credit; Train; Approve}
56
+ {rank=same; Retain; Model; Receipt}
57
+ {rank=same; Later; Hygiene}
123
58
  }
@@ -1,76 +1,51 @@
1
1
  digraph "PWN_Swarm" {
2
2
  graph [
3
- label=<<B>PWN::AI::Agent::Swarm - Native Multi-Agent Orchestration</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">personas · ask · debate · broadcast · shared bus (no daemon)</FONT>>,
3
+ label=<<B>PWN::AI::Agent::Swarm - Native Multi-Agent Orchestration</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">personas · ask / debate / broadcast · shared bus (no daemon)</FONT>>,
4
4
  labelloc=t, fontsize=20, fontname="Helvetica",
5
- rankdir=TB, splines=spline, nodesep=0.65, ranksep=1.0,
6
- bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
5
+ rankdir=TB, splines=polyline, nodesep=0.5, ranksep=0.5,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.4, newrank=true, compound=true
7
7
  ];
8
8
  node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
- shape=box, penwidth=1.4, color="#334155", fontcolor="#0f172a"];
10
- edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a",
10
+ fillcolor="#c4b5fd", margin="0.22,0.16", width=4.5];
11
+ edge [fontname="Helvetica", fontsize=10, color="#94a3b8",
11
12
  fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
13
 
13
- /* L0 ─ orchestrator */
14
- Orchestrator [label="👤 Orchestrator\n(you, in pwn-ai)", fillcolor="#7dd3fc"];
15
- LocalLoop [label="🤖 Local Loop.run\n(ai.active = ollama)", fillcolor="#7dd3fc"];
16
- {rank=same; Orchestrator; LocalLoop}
17
-
18
- /* L1 ─ swarm verbs */
19
- subgraph cluster_verbs {
20
- label="Swarm Verbs (toolset: swarm)"; fontcolor="#ddd6fe";
21
- style=rounded; color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
22
- Spawn [label="agent_spawn\ndefine persona", fillcolor="#c4b5fd"];
23
- Ask [label="agent_ask\n1 turn → 1 persona", fillcolor="#c4b5fd"];
24
- Debate [label="agent_debate\nround-robin critique", fillcolor="#c4b5fd"];
25
- Broadcast [label="agent_broadcast\nfan-out ensemble", fillcolor="#c4b5fd"];
26
- Escalate [label="Loop escalation (private)\n(local stuck ≥N fails)\n→ frontier hint", fillcolor="#c4b5fd", penwidth=2];
14
+ subgraph cluster_explicit {
15
+ label="EXPLICIT DELEGATION · operator / calling agent"; fontsize=12;
16
+ style="rounded,filled"; color="#334155"; fillcolor="#1e293b";
17
+ Entry [fillcolor="#7dd3fc", label="Choose target persona(s) + request in pwn-ai\nagent_ask: one turn / one persona\nagent_debate: ordered round-robin critique\nagent_broadcast: parallel fan-out ensemble"];
18
+ }
19
+ subgraph cluster_escalation {
20
+ label="CONDITIONAL ESCALATION · private Loop path"; fontsize=12;
21
+ style="rounded,dashed,filled"; color="#94a3b8"; fillcolor="#1e293b";
22
+ Escalate [label="Local Loop is stuck beyond failure threshold\nConfigured escalation_persona must exist\nAsk for a short frontier corrective hint\nLocal model still owns its final answer"];
27
23
  }
28
- {rank=same; Spawn; Ask; Debate; Broadcast; Escalate}
24
+ {rank=same; Entry; Escalate}
29
25
 
30
- /* L2 ─ personas */
31
- subgraph cluster_personas {
32
- label="Illustrative personas (each = nested Loop; not completion proof)"; fontcolor="#a7f3d0";
33
- style=rounded; color="#047857"; bgcolor="#022c22"; penwidth=2;
34
- Red [label="🔴 red_team\nengine: grok\ntoolsets: terminal,pwn", fillcolor="#6ee7b7"];
35
- Blue [label="🔵 blue_team\nengine: anthropic\ntoolsets: pwn,extrospection", fillcolor="#6ee7b7"];
36
- Recon [label="🛰 recon\nengine: ollama\ntoolsets: terminal,memory", fillcolor="#6ee7b7"];
37
- Xpl [label="💥 exploit_dev\nengine: openai\ntoolsets: pwn,skills", fillcolor="#6ee7b7"];
26
+ subgraph cluster_runtime {
27
+ label="EXECUTION OWNER · Swarm.ask → nested Loop"; fontsize=12;
28
+ style="rounded,filled"; color="#334155"; fillcolor="#1e293b";
29
+ Run [fillcolor="#6ee7b7", label="Select persona engine / model / skills / toolsets\nPer-persona session + recursion-depth guard\nAppend request; run nested Loop; append reply\nTools remain behind Dispatch / confirmation / sandbox\nNo daemon and no fixed provider-to-role assignment"];
38
30
  }
39
- {rank=same; Red; Blue; Recon; Xpl}
31
+ Config [fillcolor="#fcd34d", label="PERSONA DEFINITION · independent setup\nagent_spawn defines a persona in ~/.pwn/agents.yml\nDefinition alone does not execute a turn\nExamples: red_team / blue_team / recon / exploit_dev\nProvider and toolsets are configurable, not role guarantees"];
32
+ {rank=same; Run; Config}
40
33
 
41
- /* L3 ─ shared state */
34
+ subgraph cluster_handoff {
35
+ label="RESULT BOUNDARY · calling runtime retains responsibility"; fontsize=12;
36
+ style="rounded,filled"; color="#334155"; fillcolor="#1e293b";
37
+ Result [label="Return reply + session ID + child inbox / honesty data\nDebate passes the prior speaker's response onward\nBroadcast collects replies; escalation returns a hint\nReplies, consensus and bus entries are not completion proof\nParent must recheck child artifacts / evidence"];
38
+ }
42
39
  subgraph cluster_state {
43
- label="Shared State ~/.pwn/"; fontcolor="#fde68a";
44
- style=rounded; color="#a16207"; bgcolor="#422006"; penwidth=2;
45
- Agents [label="agents.yml\npersona registry", shape=cylinder, fillcolor="#fcd34d"];
46
- Bus [label="swarm/<id>/bus.jsonl\nappend-only chat", shape=cylinder, fillcolor="#fcd34d"];
47
- Pmap [label="swarm/<id>/personas.json\nname → session_id", shape=cylinder, fillcolor="#fcd34d"];
48
- Sess [label="sessions/*.jsonl\nper-persona transcript", shape=cylinder, fillcolor="#fcd34d"];
40
+ label="CONTINUITY · ~/.pwn/"; fontsize=12;
41
+ style="rounded,filled"; color="#334155"; fillcolor="#1e293b";
42
+ State [fillcolor="#fcd34d", label="swarm/<id>/bus.jsonl: append-only conversation\nswarm/<id>/personas.json: name → session_id\nsessions/*.jsonl: per-persona transcripts\nUse swarm_id to join existing work; swarm_bus to inspect\nBus tail supplies context, not independent verification"];
49
43
  }
50
- {rank=same; Agents; Bus; Pmap; Sess}
51
-
52
- /* edges */
53
- Orchestrator -> Spawn [color="#38bdf8"];
54
- Orchestrator -> Ask [color="#38bdf8"];
55
- Orchestrator -> Debate [color="#38bdf8", penwidth=2];
56
- Orchestrator -> Broadcast [color="#38bdf8"];
57
- LocalLoop -> Escalate [label="escalation_persona", color="#fb7185", penwidth=2];
58
-
59
- Spawn -> Red [style=invis];
60
- Ask -> Red [color="#34d399"];
61
- Debate -> Blue [color="#34d399"];
62
- Debate -> Recon [color="#34d399"];
63
- Broadcast -> Xpl [color="#34d399"];
64
- Escalate -> Blue [label="ask 3-line hint", color="#34d399", penwidth=2];
65
-
66
- Red -> Agents [style=invis];
67
- Red -> Bus [label="append reply", color="#f59e0b"];
68
- Blue -> Bus [color="#f59e0b"];
69
- Recon -> Pmap [color="#f59e0b"];
70
- Xpl -> Sess [color="#f59e0b"];
44
+ {rank=same; Result; State}
71
45
 
72
- Spawn -> Agents [label="write", color="#f59e0b", constraint=false];
73
- Bus -> Debate [label="tail → context", style=dashed, color="#fbbf24", constraint=false];
74
- Bus -> Orchestrator [label="swarm_bus()", style=dashed, color="#38bdf8", constraint=false];
75
- Blue -> LocalLoop [label="frontier_hint\n(synthetic tool result)", style=dashed, color="#fb7185", constraint=false, penwidth=2];
46
+ Entry -> Run [ltail=cluster_explicit, lhead=cluster_runtime, label="ask / debate / broadcast", color="#38bdf8", weight=10];
47
+ Escalate -> Run [ltail=cluster_escalation, lhead=cluster_runtime, label="conditional hint request", style=dashed];
48
+ Config -> Run [lhead=cluster_runtime, label="read definition", constraint=false];
49
+ Run -> Result [ltail=cluster_runtime, lhead=cluster_handoff, label="observed child result", weight=10];
50
+ Run -> State [ltail=cluster_runtime, lhead=cluster_state, label="retain request / reply / session", color="#f59e0b"];
76
51
  }