pwn 0.5.779 → 0.5.781

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.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/documentation/AI-Integration.md +4 -4
  4. data/documentation/AWS.md +10 -9
  5. data/documentation/Agent-Tool-Registry.md +20 -17
  6. data/documentation/Blockchain.md +3 -2
  7. data/documentation/Bounty.md +8 -6
  8. data/documentation/BurpSuite.md +6 -10
  9. data/documentation/CLI-Drivers.md +7 -4
  10. data/documentation/Capability-Broker-Sandbox.md +1 -1
  11. data/documentation/Configuration.md +23 -15
  12. data/documentation/Contributing.md +3 -3
  13. data/documentation/Cron.md +3 -2
  14. data/documentation/Diagrams.md +9 -3
  15. data/documentation/Drivers.md +12 -6
  16. data/documentation/Extrospection.md +25 -5
  17. data/documentation/FFI.md +15 -25
  18. data/documentation/Fuzzing.md +13 -13
  19. data/documentation/General-PWN-Usage.md +7 -4
  20. data/documentation/Harness-Evaluation.md +90 -3
  21. data/documentation/Home.md +6 -5
  22. data/documentation/How-PWN-Works.md +9 -10
  23. data/documentation/Installation.md +12 -11
  24. data/documentation/Metasploit.md +13 -19
  25. data/documentation/Mistakes.md +2 -2
  26. data/documentation/NmapIt.md +6 -3
  27. data/documentation/Operability.md +99 -0
  28. data/documentation/Persistence.md +3 -2
  29. data/documentation/Plugin-Degradation.md +4 -2
  30. data/documentation/Plugins.md +4 -11
  31. data/documentation/Policy-Benchmark.md +4 -0
  32. data/documentation/Reinforcement-Learning.md +19 -3
  33. data/documentation/Reporting.md +6 -5
  34. data/documentation/SAST.md +15 -10
  35. data/documentation/SDR-Decoder-Coverage.md +10 -4
  36. data/documentation/SDR.md +28 -40
  37. data/documentation/Session-Workflow.md +25 -12
  38. data/documentation/Sessions.md +7 -0
  39. data/documentation/Skills-Memory-Learning.md +11 -4
  40. data/documentation/Swarm.md +6 -0
  41. data/documentation/Transparent-Browser.md +1 -1
  42. data/documentation/Troubleshooting.md +6 -3
  43. data/documentation/What-is-PWN.md +4 -4
  44. data/documentation/Why-PWN.md +1 -1
  45. data/documentation/diagrams/agent-tool-registry.svg +219 -180
  46. data/documentation/diagrams/ai-integration-tool-calling.svg +35 -34
  47. data/documentation/diagrams/code-scanning-sast.svg +78 -78
  48. data/documentation/diagrams/cron-scheduling.svg +165 -145
  49. data/documentation/diagrams/dot/_THEME.md +6 -4
  50. data/documentation/diagrams/dot/agent-tool-registry.dot +6 -2
  51. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +1 -1
  52. data/documentation/diagrams/dot/code-scanning-sast.dot +8 -8
  53. data/documentation/diagrams/dot/cron-scheduling.dot +2 -0
  54. data/documentation/diagrams/dot/driver-framework.dot +1 -1
  55. data/documentation/diagrams/dot/extrospection-world-awareness.dot +2 -2
  56. data/documentation/diagrams/dot/fuzzing-workflow.dot +3 -3
  57. data/documentation/diagrams/dot/history-to-drivers.dot +1 -1
  58. data/documentation/diagrams/dot/memory-skills-detailed.dot +3 -3
  59. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +2 -2
  60. data/documentation/diagrams/dot/overall-pwn-architecture.dot +33 -121
  61. data/documentation/diagrams/dot/persistence-filesystem.dot +2 -2
  62. data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
  63. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +31 -167
  64. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +1 -1
  65. data/documentation/diagrams/dot/reinforcement-learning.dot +15 -7
  66. data/documentation/diagrams/dot/reporting-pipeline.dot +5 -3
  67. data/documentation/diagrams/dot/reverse-engineering-flow.dot +3 -3
  68. data/documentation/diagrams/dot/sdr-radio-flow.dot +5 -5
  69. data/documentation/diagrams/dot/sessions-cron-automation.dot +1 -1
  70. data/documentation/diagrams/dot/swarm-multi-agent.dot +3 -3
  71. data/documentation/diagrams/dot/task-summarizer.dot +2 -2
  72. data/documentation/diagrams/dot/web-application-testing.dot +4 -3
  73. data/documentation/diagrams/dot/zero-day-research-flow.dot +4 -3
  74. data/documentation/diagrams/driver-framework.svg +1 -1
  75. data/documentation/diagrams/extrospection-world-awareness.svg +178 -178
  76. data/documentation/diagrams/fuzzing-workflow.svg +58 -58
  77. data/documentation/diagrams/history-to-drivers.svg +42 -42
  78. data/documentation/diagrams/memory-skills-detailed.svg +210 -210
  79. data/documentation/diagrams/mistakes-negative-feedback.svg +116 -116
  80. data/documentation/diagrams/overall-pwn-architecture.svg +248 -404
  81. data/documentation/diagrams/persistence-filesystem.svg +143 -143
  82. data/documentation/diagrams/plugin-ecosystem.svg +100 -100
  83. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +233 -752
  84. data/documentation/diagrams/pwn-repl-prototyping.svg +27 -27
  85. data/documentation/diagrams/reinforcement-learning.svg +295 -221
  86. data/documentation/diagrams/reporting-pipeline.svg +94 -80
  87. data/documentation/diagrams/reverse-engineering-flow.svg +31 -31
  88. data/documentation/diagrams/sdr-radio-flow.svg +157 -155
  89. data/documentation/diagrams/sessions-cron-automation.svg +13 -13
  90. data/documentation/diagrams/swarm-multi-agent.svg +86 -86
  91. data/documentation/diagrams/task-summarizer.svg +57 -57
  92. data/documentation/diagrams/web-application-testing.svg +81 -75
  93. data/documentation/diagrams/zero-day-research-flow.svg +101 -92
  94. data/documentation/pwn-REPL.md +5 -3
  95. data/documentation/pwn-ai-Agent.md +18 -14
  96. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  97. data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +1 -0
  98. data/lib/pwn/ai/agent/learning.rb +46 -1
  99. data/lib/pwn/ai/agent/loop.rb +6 -3
  100. data/lib/pwn/ai/agent/policy_evaluation.rb +5 -1
  101. data/lib/pwn/ai/agent/reward.rb +9 -0
  102. data/lib/pwn/version.rb +1 -1
  103. data/spec/fixtures/harness/completion_regressions.json +10 -0
  104. data/spec/fixtures/harness/completion_regressions.json.sha256 +1 -0
  105. data/spec/integration/harness_evaluation_spec.rb +13 -0
  106. data/spec/lib/pwn/ai/agent/learning_spec.rb +22 -0
  107. data/spec/lib/pwn/ai/agent/loop_spec.rb +39 -0
  108. data/spec/lib/pwn/ai/agent/policy_evaluation_spec.rb +6 -1
  109. data/spec/lib/pwn/ai/agent/reward_spec.rb +21 -0
  110. data/spec/support/harness/evaluate.rb +1 -1
  111. data/third_party/pwn_rdoc.jsonl +2 -1
  112. metadata +10 -7
@@ -4,488 +4,562 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Reinforcement_Learning Pages: 1 -->
7
- <svg width="2623pt" height="804pt"
8
- viewBox="0.00 0.00 2623.00 804.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
- <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 760.95)">
7
+ <svg width="2862pt" height="1032pt"
8
+ viewBox="0.00 0.00 2862.00 1032.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 988.45)">
10
10
  <title>PWN_Reinforcement_Learning</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-760.95 2579.82,-760.95 2579.82,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="986.31" y="-695.75" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent &#45; Reward + Curriculum Reinforcement Loop</text>
13
- <text xml:space="preserve" text-anchor="start" x="1071.06" y="-684.3" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">reward signal · credit assignment · memory · self&#45;play · weight loop · intro/extro join</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-988.45 2818.82,-988.45 2818.82,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="1105.81" y="-923.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI::Agent &#45; Reward + Curriculum Reinforcement Loop</text>
13
+ <text xml:space="preserve" text-anchor="start" x="1190.56" y="-911.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">reward signal · credit assignment · memory · self&#45;play · weight loop · intro/extro join</text>
14
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_reward</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M1145,-372.5C1145,-372.5 2085,-372.5 2085,-372.5 2091,-372.5 2097,-378.5 2097,-384.5 2097,-384.5 2097,-483 2097,-483 2097,-489 2091,-495 2085,-495 2085,-495 1145,-495 1145,-495 1139,-495 1133,-489 1133,-483 1133,-483 1133,-384.5 1133,-384.5 1133,-378.5 1139,-372.5 1145,-372.5"/>
17
- <text xml:space="preserve" text-anchor="middle" x="1615" y="-472" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Tier 1 · Reward &#160;(PWN::AI::Agent::Reward)</text>
16
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M1125,-600C1125,-600 2083,-600 2083,-600 2089,-600 2095,-606 2095,-612 2095,-612 2095,-710.5 2095,-710.5 2095,-716.5 2089,-722.5 2083,-722.5 2083,-722.5 1125,-722.5 1125,-722.5 1119,-722.5 1113,-716.5 1113,-710.5 1113,-710.5 1113,-612 1113,-612 1113,-606 1119,-600 1125,-600"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="1604" y="-699.5" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Tier 1 · Reward &#160;(PWN::AI::Agent::Reward)</text>
18
18
  </g>
19
19
  <g id="clust4" class="cluster">
20
20
  <title>cluster_curr</title>
21
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M266,-372.5C266,-372.5 1097,-372.5 1097,-372.5 1103,-372.5 1109,-378.5 1109,-384.5 1109,-384.5 1109,-483 1109,-483 1109,-489 1103,-495 1097,-495 1097,-495 266,-495 266,-495 260,-495 254,-489 254,-483 254,-483 254,-384.5 254,-384.5 254,-378.5 260,-372.5 266,-372.5"/>
22
- <text xml:space="preserve" text-anchor="middle" x="681.5" y="-472" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Tier 4 · Curriculum &#160;(PWN::AI::Agent::Curriculum)</text>
21
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M245,-600C245,-600 1077,-600 1077,-600 1083,-600 1089,-606 1089,-612 1089,-612 1089,-710.5 1089,-710.5 1089,-716.5 1083,-722.5 1077,-722.5 1077,-722.5 245,-722.5 245,-722.5 239,-722.5 233,-716.5 233,-710.5 233,-710.5 233,-612 233,-612 233,-606 239,-600 245,-600"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="661" y="-699.5" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Tier 4 · Curriculum &#160;(PWN::AI::Agent::Curriculum)</text>
23
23
  </g>
24
24
  <g id="clust6" class="cluster">
25
25
  <title>cluster_weight</title>
26
- <path fill="#450a0a" stroke="#b91c1c" stroke-width="2" d="M20,-179C20,-179 761,-179 761,-179 767,-179 773,-185 773,-191 773,-191 773,-301.5 773,-301.5 773,-307.5 767,-313.5 761,-313.5 761,-313.5 20,-313.5 20,-313.5 14,-313.5 8,-307.5 8,-301.5 8,-301.5 8,-191 8,-191 8,-185 14,-179 20,-179"/>
27
- <text xml:space="preserve" text-anchor="middle" x="390.5" y="-290.5" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Tier 5 · Weight Loop</text>
26
+ <path fill="#450a0a" stroke="#b91c1c" stroke-width="2" d="M20,-406.5C20,-406.5 762,-406.5 762,-406.5 768,-406.5 774,-412.5 774,-418.5 774,-418.5 774,-529 774,-529 774,-535 768,-541 762,-541 762,-541 20,-541 20,-541 14,-541 8,-535 8,-529 8,-529 8,-418.5 8,-418.5 8,-412.5 14,-406.5 20,-406.5"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="391" y="-518" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Tier 5 · Weight Loop</text>
28
28
  </g>
29
29
  <g id="clust8" class="cluster">
30
30
  <title>cluster_files</title>
31
- <path fill="#422006" stroke="#a16207" stroke-dasharray="5,2" d="M544,-8C544,-8 1361,-8 1361,-8 1367,-8 1373,-14 1373,-20 1373,-20 1373,-118.5 1373,-118.5 1373,-124.5 1367,-130.5 1361,-130.5 1361,-130.5 544,-130.5 544,-130.5 538,-130.5 532,-124.5 532,-118.5 532,-118.5 532,-20 532,-20 532,-14 538,-8 544,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="952.5" y="-107.5" font-family="sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
31
+ <path fill="#422006" stroke="#a16207" stroke-dasharray="5,2" d="M553,-235.5C553,-235.5 1370,-235.5 1370,-235.5 1376,-235.5 1382,-241.5 1382,-247.5 1382,-247.5 1382,-346 1382,-346 1382,-352 1376,-358 1370,-358 1370,-358 553,-358 553,-358 547,-358 541,-352 541,-346 541,-346 541,-247.5 541,-247.5 541,-241.5 547,-235.5 553,-235.5"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="961.5" y="-335" font-family="sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
33
33
  </g>
34
34
  <!-- Req -->
35
35
  <g id="node1" class="node">
36
36
  <title>Req</title>
37
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M1027.5,-597.5C1027.5,-597.5 984.5,-597.5 984.5,-597.5 978.5,-597.5 972.5,-591.5 972.5,-585.5 972.5,-585.5 972.5,-573.5 972.5,-573.5 972.5,-567.5 978.5,-561.5 984.5,-561.5 984.5,-561.5 1027.5,-561.5 1027.5,-561.5 1033.5,-561.5 1039.5,-567.5 1039.5,-573.5 1039.5,-573.5 1039.5,-585.5 1039.5,-585.5 1039.5,-591.5 1033.5,-597.5 1027.5,-597.5"/>
38
- <text xml:space="preserve" text-anchor="middle" x="1006" y="-576.38" font-family="sans-Serif" font-size="10.00" fill="#0f172a">👤 &#160;request</text>
37
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M1066.5,-825C1066.5,-825 1023.5,-825 1023.5,-825 1017.5,-825 1011.5,-819 1011.5,-813 1011.5,-813 1011.5,-801 1011.5,-801 1011.5,-795 1017.5,-789 1023.5,-789 1023.5,-789 1066.5,-789 1066.5,-789 1072.5,-789 1078.5,-795 1078.5,-801 1078.5,-801 1078.5,-813 1078.5,-813 1078.5,-819 1072.5,-825 1066.5,-825"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="1045" y="-803.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">👤 &#160;request</text>
39
39
  </g>
40
40
  <!-- Loop -->
41
41
  <g id="node2" class="node">
42
42
  <title>Loop</title>
43
- <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M1275.12,-607.5C1275.12,-607.5 1130.88,-607.5 1130.88,-607.5 1124.88,-607.5 1118.88,-601.5 1118.88,-595.5 1118.88,-595.5 1118.88,-563.5 1118.88,-563.5 1118.88,-557.5 1124.88,-551.5 1130.88,-551.5 1130.88,-551.5 1275.12,-551.5 1275.12,-551.5 1281.12,-551.5 1287.12,-557.5 1287.12,-563.5 1287.12,-563.5 1287.12,-595.5 1287.12,-595.5 1287.12,-601.5 1281.12,-607.5 1275.12,-607.5"/>
44
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-594" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Loop.run</text>
45
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-582" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TaskSummarizer · budget pressure</text>
46
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-570" font-family="sans-Serif" font-size="10.00" fill="#0f172a">plan_first · Dispatch · guard</text>
47
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-558" font-family="sans-Serif" font-size="10.00" fill="#0f172a">final answer</text>
43
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M1314.12,-835C1314.12,-835 1169.88,-835 1169.88,-835 1163.88,-835 1157.88,-829 1157.88,-823 1157.88,-823 1157.88,-791 1157.88,-791 1157.88,-785 1163.88,-779 1169.88,-779 1169.88,-779 1314.12,-779 1314.12,-779 1320.12,-779 1326.12,-785 1326.12,-791 1326.12,-791 1326.12,-823 1326.12,-823 1326.12,-829 1320.12,-835 1314.12,-835"/>
44
+ <text xml:space="preserve" text-anchor="middle" x="1242" y="-821.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Loop.run</text>
45
+ <text xml:space="preserve" text-anchor="middle" x="1242" y="-809.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TaskSummarizer · budget pressure</text>
46
+ <text xml:space="preserve" text-anchor="middle" x="1242" y="-797.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">plan_first · Dispatch · guard</text>
47
+ <text xml:space="preserve" text-anchor="middle" x="1242" y="-785.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">final answer</text>
48
48
  </g>
49
49
  <!-- Req&#45;&gt;Loop -->
50
50
  <g id="edge1" class="edge">
51
51
  <title>Req&#45;&gt;Loop</title>
52
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1039.86,-579.5C1062.22,-579.5 1084.58,-579.5 1106.95,-579.5"/>
53
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="1106.9,-582.3 1114.9,-579.5 1106.9,-576.7 1106.9,-582.3"/>
52
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1078.86,-807C1101.22,-807 1123.58,-807 1145.95,-807"/>
53
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="1145.9,-809.8 1153.9,-807 1145.9,-804.2 1145.9,-809.8"/>
54
54
  </g>
55
55
  <!-- R1 -->
56
56
  <g id="node3" class="node">
57
57
  <title>R1</title>
58
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1853.25,-424.5C1853.25,-424.5 1754.75,-424.5 1754.75,-424.5 1748.75,-424.5 1742.75,-418.5 1742.75,-412.5 1742.75,-412.5 1742.75,-392.5 1742.75,-392.5 1742.75,-386.5 1748.75,-380.5 1754.75,-380.5 1754.75,-380.5 1853.25,-380.5 1853.25,-380.5 1859.25,-380.5 1865.25,-386.5 1865.25,-392.5 1865.25,-392.5 1865.25,-412.5 1865.25,-412.5 1865.25,-418.5 1859.25,-424.5 1853.25,-424.5"/>
59
- <text xml:space="preserve" text-anchor="middle" x="1804" y="-411" font-family="sans-Serif" font-size="10.00" fill="#0f172a">judge (cheap LLM ORM)</text>
60
- <text xml:space="preserve" text-anchor="middle" x="1804" y="-399" font-family="sans-Serif" font-size="10.00" fill="#0f172a">score · verdict · source</text>
61
- <text xml:space="preserve" text-anchor="middle" x="1804" y="-387" font-family="sans-Serif" font-size="10.00" fill="#0f172a">evidence&#45;prior fallback</text>
58
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1833.25,-652C1833.25,-652 1734.75,-652 1734.75,-652 1728.75,-652 1722.75,-646 1722.75,-640 1722.75,-640 1722.75,-620 1722.75,-620 1722.75,-614 1728.75,-608 1734.75,-608 1734.75,-608 1833.25,-608 1833.25,-608 1839.25,-608 1845.25,-614 1845.25,-620 1845.25,-620 1845.25,-640 1845.25,-640 1845.25,-646 1839.25,-652 1833.25,-652"/>
59
+ <text xml:space="preserve" text-anchor="middle" x="1784" y="-638.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">judge (cheap LLM ORM)</text>
60
+ <text xml:space="preserve" text-anchor="middle" x="1784" y="-626.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">score · verdict · source</text>
61
+ <text xml:space="preserve" text-anchor="middle" x="1784" y="-614.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">evidence&#45;prior fallback</text>
62
62
  </g>
63
63
  <!-- Loop&#45;&gt;R1 -->
64
64
  <g id="edge4" class="edge">
65
65
  <title>Loop&#45;&gt;R1</title>
66
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M1287.94,-573.4C1383.99,-566.14 1544.38,-549.48 1678,-513.5 1698.88,-507.88 1705.38,-507.53 1723,-495 1746.43,-478.34 1767.76,-453.67 1782.64,-434.15"/>
67
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="1784.88,-435.83 1787.4,-427.74 1780.38,-432.49 1784.88,-435.83"/>
68
- <text xml:space="preserve" text-anchor="middle" x="1718.88" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">final</text>
66
+ <path fill="none" stroke="#a78bfa" stroke-width="2" d="M1327.01,-797.23C1441.74,-784.28 1639.04,-757.7 1702,-722.5 1727.83,-708.06 1749.75,-682.39 1764.41,-661.91"/>
67
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="1766.65,-663.59 1768.9,-655.41 1762.05,-660.4 1766.65,-663.59"/>
68
+ <text xml:space="preserve" text-anchor="middle" x="1691.43" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">final</text>
69
69
  </g>
70
70
  <!-- R2 -->
71
71
  <g id="node4" class="node">
72
72
  <title>R2</title>
73
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1378.88,-424.5C1378.88,-424.5 1317.12,-424.5 1317.12,-424.5 1311.12,-424.5 1305.12,-418.5 1305.12,-412.5 1305.12,-412.5 1305.12,-392.5 1305.12,-392.5 1305.12,-386.5 1311.12,-380.5 1317.12,-380.5 1317.12,-380.5 1378.88,-380.5 1378.88,-380.5 1384.88,-380.5 1390.88,-386.5 1390.88,-392.5 1390.88,-392.5 1390.88,-412.5 1390.88,-412.5 1390.88,-418.5 1384.88,-424.5 1378.88,-424.5"/>
74
- <text xml:space="preserve" text-anchor="middle" x="1348" y="-411" font-family="sans-Serif" font-size="10.00" fill="#0f172a">prm (process)</text>
75
- <text xml:space="preserve" text-anchor="middle" x="1348" y="-399" font-family="sans-Serif" font-size="10.00" fill="#0f172a">per&#45;step +1/0/&#45;1</text>
76
- <text xml:space="preserve" text-anchor="middle" x="1348" y="-387" font-family="sans-Serif" font-size="10.00" fill="#0f172a">→ Registry.rank</text>
73
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1358.88,-652C1358.88,-652 1297.12,-652 1297.12,-652 1291.12,-652 1285.12,-646 1285.12,-640 1285.12,-640 1285.12,-620 1285.12,-620 1285.12,-614 1291.12,-608 1297.12,-608 1297.12,-608 1358.88,-608 1358.88,-608 1364.88,-608 1370.88,-614 1370.88,-620 1370.88,-620 1370.88,-640 1370.88,-640 1370.88,-646 1364.88,-652 1358.88,-652"/>
74
+ <text xml:space="preserve" text-anchor="middle" x="1328" y="-638.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">prm (process)</text>
75
+ <text xml:space="preserve" text-anchor="middle" x="1328" y="-626.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">per&#45;step +1/0/&#45;1</text>
76
+ <text xml:space="preserve" text-anchor="middle" x="1328" y="-614.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">→ Registry.rank</text>
77
77
  </g>
78
78
  <!-- Loop&#45;&gt;R2 -->
79
79
  <g id="edge5" class="edge">
80
80
  <title>Loop&#45;&gt;R2</title>
81
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1232.75,-550.67C1248.91,-534.96 1268.84,-514.59 1285,-495 1301.28,-475.26 1317.61,-451.4 1329.56,-433"/>
82
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1331.69,-434.86 1333.67,-426.62 1326.98,-431.83 1331.69,-434.86"/>
83
- <text xml:space="preserve" text-anchor="middle" x="1292.54" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">session</text>
81
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1255.63,-778.27C1271.3,-746.38 1296.94,-694.2 1313.12,-661.27"/>
82
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1315.54,-662.71 1316.55,-654.3 1310.51,-660.24 1315.54,-662.71"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="1293.05" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">session</text>
84
84
  </g>
85
85
  <!-- R3 -->
86
86
  <g id="node5" class="node">
87
87
  <title>R3</title>
88
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1253,-424.5C1253,-424.5 1153,-424.5 1153,-424.5 1147,-424.5 1141,-418.5 1141,-412.5 1141,-412.5 1141,-392.5 1141,-392.5 1141,-386.5 1147,-380.5 1153,-380.5 1153,-380.5 1253,-380.5 1253,-380.5 1259,-380.5 1265,-386.5 1265,-392.5 1265,-392.5 1265,-412.5 1265,-412.5 1265,-418.5 1259,-424.5 1253,-424.5"/>
89
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-411" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sentinel (ring N=40)</text>
90
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-399" font-family="sans-Serif" font-size="10.00" fill="#0f172a">proxy != judge != (1&#45;corr)</text>
91
- <text xml:space="preserve" text-anchor="middle" x="1203" y="-387" font-family="sans-Serif" font-size="10.00" fill="#0f172a">warm + proxy distrust</text>
88
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1233,-652C1233,-652 1133,-652 1133,-652 1127,-652 1121,-646 1121,-640 1121,-640 1121,-620 1121,-620 1121,-614 1127,-608 1133,-608 1133,-608 1233,-608 1233,-608 1239,-608 1245,-614 1245,-620 1245,-620 1245,-640 1245,-640 1245,-646 1239,-652 1233,-652"/>
89
+ <text xml:space="preserve" text-anchor="middle" x="1183" y="-638.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sentinel (ring N=40)</text>
90
+ <text xml:space="preserve" text-anchor="middle" x="1183" y="-626.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">proxy != judge != (1&#45;corr)</text>
91
+ <text xml:space="preserve" text-anchor="middle" x="1183" y="-614.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">warm + proxy distrust</text>
92
92
  </g>
93
93
  <!-- Loop&#45;&gt;R3 -->
94
94
  <g id="edge6" class="edge">
95
95
  <title>Loop&#45;&gt;R3</title>
96
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1203,-550.77C1203,-519.15 1203,-467.59 1203,-434.62"/>
97
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1205.8,-435 1203,-427 1200.2,-435 1205.8,-435"/>
96
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1232.65,-778.27C1221.95,-746.52 1204.46,-694.65 1193.35,-661.7"/>
97
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1196.1,-661.08 1190.89,-654.4 1190.79,-662.87 1196.1,-661.08"/>
98
98
  </g>
99
99
  <!-- R4 -->
100
100
  <g id="node6" class="node">
101
101
  <title>R4</title>
102
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1690.5,-420.5C1690.5,-420.5 1611.5,-420.5 1611.5,-420.5 1605.5,-420.5 1599.5,-414.5 1599.5,-408.5 1599.5,-408.5 1599.5,-396.5 1599.5,-396.5 1599.5,-390.5 1605.5,-384.5 1611.5,-384.5 1611.5,-384.5 1690.5,-384.5 1690.5,-384.5 1696.5,-384.5 1702.5,-390.5 1702.5,-396.5 1702.5,-396.5 1702.5,-408.5 1702.5,-408.5 1702.5,-414.5 1696.5,-420.5 1690.5,-420.5"/>
103
- <text xml:space="preserve" text-anchor="middle" x="1651" y="-405" font-family="sans-Serif" font-size="10.00" fill="#0f172a">semantic_ok</text>
104
- <text xml:space="preserve" text-anchor="middle" x="1651" y="-393" font-family="sans-Serif" font-size="10.00" fill="#0f172a">grep exit 1 != failure</text>
102
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1501.5,-648C1501.5,-648 1422.5,-648 1422.5,-648 1416.5,-648 1410.5,-642 1410.5,-636 1410.5,-636 1410.5,-624 1410.5,-624 1410.5,-618 1416.5,-612 1422.5,-612 1422.5,-612 1501.5,-612 1501.5,-612 1507.5,-612 1513.5,-618 1513.5,-624 1513.5,-624 1513.5,-636 1513.5,-636 1513.5,-642 1507.5,-648 1501.5,-648"/>
103
+ <text xml:space="preserve" text-anchor="middle" x="1462" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">semantic_ok</text>
104
+ <text xml:space="preserve" text-anchor="middle" x="1462" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">grep exit 1 != failure</text>
105
105
  </g>
106
106
  <!-- Loop&#45;&gt;R4 -->
107
107
  <g id="edge2" class="edge">
108
108
  <title>Loop&#45;&gt;R4</title>
109
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1287.94,-575.8C1368.46,-569.69 1489.98,-550.97 1579,-495 1604.6,-478.9 1624.87,-450.36 1637.3,-429.43"/>
110
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1639.61,-431.02 1641.16,-422.69 1634.75,-428.24 1639.61,-431.02"/>
111
- <text xml:space="preserve" text-anchor="middle" x="1579.22" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Dispatch</text>
109
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1304.29,-778.16C1332.47,-763.86 1365.16,-744.75 1391,-722.5 1413.17,-703.42 1433.07,-676.47 1446.12,-656.77"/>
110
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1448.38,-658.43 1450.38,-650.19 1443.68,-655.39 1448.38,-658.43"/>
111
+ <text xml:space="preserve" text-anchor="middle" x="1398.31" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Dispatch</text>
112
112
  </g>
113
113
  <!-- R5 -->
114
114
  <g id="node7" class="node">
115
115
  <title>R5</title>
116
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1547.25,-424.5C1547.25,-424.5 1442.75,-424.5 1442.75,-424.5 1436.75,-424.5 1430.75,-418.5 1430.75,-412.5 1430.75,-412.5 1430.75,-392.5 1430.75,-392.5 1430.75,-386.5 1436.75,-380.5 1442.75,-380.5 1442.75,-380.5 1547.25,-380.5 1547.25,-380.5 1553.25,-380.5 1559.25,-386.5 1559.25,-392.5 1559.25,-392.5 1559.25,-412.5 1559.25,-412.5 1559.25,-418.5 1553.25,-424.5 1547.25,-424.5"/>
117
- <text xml:space="preserve" text-anchor="middle" x="1495" y="-411" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Policy (live MDP)</text>
118
- <text xml:space="preserve" text-anchor="middle" x="1495" y="-399" font-family="sans-Serif" font-size="10.00" fill="#0f172a">plan · complete · usable</text>
119
- <text xml:space="preserve" text-anchor="middle" x="1495" y="-387" font-family="sans-Serif" font-size="10.00" fill="#0f172a">warm Q + episode budget</text>
116
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1670.25,-652C1670.25,-652 1565.75,-652 1565.75,-652 1559.75,-652 1553.75,-646 1553.75,-640 1553.75,-640 1553.75,-620 1553.75,-620 1553.75,-614 1559.75,-608 1565.75,-608 1565.75,-608 1670.25,-608 1670.25,-608 1676.25,-608 1682.25,-614 1682.25,-620 1682.25,-620 1682.25,-640 1682.25,-640 1682.25,-646 1676.25,-652 1670.25,-652"/>
117
+ <text xml:space="preserve" text-anchor="middle" x="1618" y="-638.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Policy (live MDP)</text>
118
+ <text xml:space="preserve" text-anchor="middle" x="1618" y="-626.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">plan · complete · usable</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="1618" y="-614.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">warm Q + episode budget</text>
120
120
  </g>
121
121
  <!-- Loop&#45;&gt;R5 -->
122
122
  <g id="edge3" class="edge">
123
123
  <title>Loop&#45;&gt;R5</title>
124
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1288.02,-554.02C1327.48,-540.31 1373.79,-520.73 1411,-495 1435.15,-478.3 1457.37,-453.49 1472.88,-433.91"/>
125
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="1474.99,-435.76 1477.67,-427.72 1470.56,-432.34 1474.99,-435.76"/>
126
- <text xml:space="preserve" text-anchor="middle" x="1411.56" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(s,a,r,s&#39;)</text>
124
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1326.89,-794.36C1388.01,-783.08 1470.52,-761.71 1534,-722.5 1559.3,-706.87 1581.71,-681.54 1597.01,-661.48"/>
125
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="1599.21,-663.22 1601.72,-655.13 1594.71,-659.89 1599.21,-663.22"/>
126
+ <text xml:space="preserve" text-anchor="middle" x="1535.69" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(s,a,r,s&#39;)</text>
127
127
  </g>
128
128
  <!-- S2 -->
129
129
  <g id="node10" class="node">
130
130
  <title>S2</title>
131
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M739.62,-420.5C739.62,-420.5 634.38,-420.5 634.38,-420.5 628.38,-420.5 622.38,-414.5 622.38,-408.5 622.38,-408.5 622.38,-396.5 622.38,-396.5 622.38,-390.5 628.38,-384.5 634.38,-384.5 634.38,-384.5 739.62,-384.5 739.62,-384.5 745.62,-384.5 751.62,-390.5 751.62,-396.5 751.62,-396.5 751.62,-408.5 751.62,-408.5 751.62,-414.5 745.62,-420.5 739.62,-420.5"/>
132
- <text xml:space="preserve" text-anchor="middle" x="687" y="-405" font-family="sans-Serif" font-size="10.00" fill="#0f172a">counterfactual</text>
133
- <text xml:space="preserve" text-anchor="middle" x="687" y="-393" font-family="sans-Serif" font-size="10.00" fill="#0f172a">real_dispatch vs imagined</text>
131
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M562.62,-648C562.62,-648 457.38,-648 457.38,-648 451.38,-648 445.38,-642 445.38,-636 445.38,-636 445.38,-624 445.38,-624 445.38,-618 451.38,-612 457.38,-612 457.38,-612 562.62,-612 562.62,-612 568.62,-612 574.62,-618 574.62,-624 574.62,-624 574.62,-636 574.62,-636 574.62,-642 568.62,-648 562.62,-648"/>
132
+ <text xml:space="preserve" text-anchor="middle" x="510" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">counterfactual</text>
133
+ <text xml:space="preserve" text-anchor="middle" x="510" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">real_dispatch vs imagined</text>
134
134
  </g>
135
135
  <!-- Loop&#45;&gt;S2 -->
136
136
  <g id="edge12" class="edge">
137
137
  <title>Loop&#45;&gt;S2</title>
138
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1118.07,-562.43C993.33,-538.77 774.81,-497.13 771,-495 742.58,-479.12 718.47,-450.15 703.47,-429.05"/>
139
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="705.95,-427.73 699.1,-422.73 701.35,-430.91 705.95,-427.73"/>
140
- <text xml:space="preserve" text-anchor="middle" x="884.09" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[REPEATING]</text>
138
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1157.14,-788.65C1138.07,-785.13 1117.89,-781.68 1099,-779 987.41,-763.18 694.03,-776.3 595,-722.5 566.07,-706.78 541.56,-677.52 526.4,-656.31"/>
139
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="528.85,-654.93 521.99,-649.96 524.25,-658.12 528.85,-654.93"/>
140
+ <text xml:space="preserve" text-anchor="middle" x="666.52" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[REPEATING]</text>
141
141
  </g>
142
142
  <!-- S3 -->
143
143
  <g id="node11" class="node">
144
144
  <title>S3</title>
145
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M569.88,-420.5C569.88,-420.5 430.12,-420.5 430.12,-420.5 424.12,-420.5 418.12,-414.5 418.12,-408.5 418.12,-408.5 418.12,-396.5 418.12,-396.5 418.12,-390.5 424.12,-384.5 430.12,-384.5 430.12,-384.5 569.88,-384.5 569.88,-384.5 575.88,-384.5 581.88,-390.5 581.88,-396.5 581.88,-396.5 581.88,-408.5 581.88,-408.5 581.88,-414.5 575.88,-420.5 569.88,-420.5"/>
146
- <text xml:space="preserve" text-anchor="middle" x="500" y="-405" font-family="sans-Serif" font-size="10.00" fill="#0f172a">critic</text>
147
- <text xml:space="preserve" text-anchor="middle" x="500" y="-393" font-family="sans-Serif" font-size="10.00" fill="#0f172a">tool&#45;armed · revised_answer DPO</text>
145
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M392.88,-648C392.88,-648 253.12,-648 253.12,-648 247.12,-648 241.12,-642 241.12,-636 241.12,-636 241.12,-624 241.12,-624 241.12,-618 247.12,-612 253.12,-612 253.12,-612 392.88,-612 392.88,-612 398.88,-612 404.88,-618 404.88,-624 404.88,-624 404.88,-636 404.88,-636 404.88,-642 398.88,-648 392.88,-648"/>
146
+ <text xml:space="preserve" text-anchor="middle" x="323" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">critic</text>
147
+ <text xml:space="preserve" text-anchor="middle" x="323" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">tool&#45;armed · revised_answer DPO</text>
148
148
  </g>
149
149
  <!-- Loop&#45;&gt;S3 -->
150
150
  <g id="edge11" class="edge">
151
151
  <title>Loop&#45;&gt;S3</title>
152
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1118.09,-561.54C1099.02,-557.99 1078.85,-554.44 1060,-551.5 857.35,-519.9 788.69,-579.93 602,-495 568.83,-479.91 538.83,-450.12 520.09,-428.62"/>
153
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="522.3,-426.89 514.98,-422.62 518.03,-430.52 522.3,-426.89"/>
154
- <text xml:space="preserve" text-anchor="middle" x="653.29" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">final</text>
152
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1157.18,-788.36C1138.11,-784.85 1117.91,-781.48 1099,-779 949.97,-759.46 562.11,-784.09 425,-722.5 391.56,-707.48 361.43,-677.4 342.73,-655.82"/>
153
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="344.95,-654.11 337.64,-649.8 340.67,-657.72 344.95,-654.11"/>
154
+ <text xml:space="preserve" text-anchor="middle" x="481.79" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">final</text>
155
155
  </g>
156
156
  <!-- S4 -->
157
157
  <g id="node12" class="node">
158
158
  <title>S4</title>
159
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M365.88,-420.5C365.88,-420.5 274.12,-420.5 274.12,-420.5 268.12,-420.5 262.12,-414.5 262.12,-408.5 262.12,-408.5 262.12,-396.5 262.12,-396.5 262.12,-390.5 268.12,-384.5 274.12,-384.5 274.12,-384.5 365.88,-384.5 365.88,-384.5 371.88,-384.5 377.88,-390.5 377.88,-396.5 377.88,-396.5 377.88,-408.5 377.88,-408.5 377.88,-414.5 371.88,-420.5 365.88,-420.5"/>
160
- <text xml:space="preserve" text-anchor="middle" x="320" y="-405" font-family="sans-Serif" font-size="10.00" fill="#0f172a">red_team_plan</text>
161
- <text xml:space="preserve" text-anchor="middle" x="320" y="-393" font-family="sans-Serif" font-size="10.00" fill="#0f172a">adversarial plan review</text>
159
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M718.88,-648C718.88,-648 627.12,-648 627.12,-648 621.12,-648 615.12,-642 615.12,-636 615.12,-636 615.12,-624 615.12,-624 615.12,-618 621.12,-612 627.12,-612 627.12,-612 718.88,-612 718.88,-612 724.88,-612 730.88,-618 730.88,-624 730.88,-624 730.88,-636 730.88,-636 730.88,-642 724.88,-648 718.88,-648"/>
160
+ <text xml:space="preserve" text-anchor="middle" x="673" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">red_team_plan</text>
161
+ <text xml:space="preserve" text-anchor="middle" x="673" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">adversarial plan review</text>
162
162
  </g>
163
163
  <!-- Loop&#45;&gt;S4 -->
164
164
  <g id="edge10" class="edge">
165
165
  <title>Loop&#45;&gt;S4</title>
166
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1118.18,-560.92C1099.1,-557.4 1078.91,-554.02 1060,-551.5 913.65,-531.99 528.68,-563.71 398,-495 369.91,-480.23 347.67,-450.73 334.24,-429.2"/>
167
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="336.74,-427.92 330.22,-422.5 331.94,-430.8 336.74,-427.92"/>
168
- <text xml:space="preserve" text-anchor="middle" x="463.09" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">plan_first</text>
166
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1157,-789.58C1137.93,-786 1117.79,-782.3 1099,-779 944.67,-751.91 887.53,-799.39 751,-722.5 723.51,-707.02 701.28,-677.91 687.69,-656.67"/>
167
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="690.2,-655.4 683.61,-650.07 685.44,-658.35 690.2,-655.4"/>
168
+ <text xml:space="preserve" text-anchor="middle" x="801.08" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">plan_first</text>
169
169
  </g>
170
170
  <!-- C3 -->
171
171
  <g id="node13" class="node">
172
172
  <title>C3</title>
173
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M886.75,-420.5C886.75,-420.5 803.25,-420.5 803.25,-420.5 797.25,-420.5 791.25,-414.5 791.25,-408.5 791.25,-408.5 791.25,-396.5 791.25,-396.5 791.25,-390.5 797.25,-384.5 803.25,-384.5 803.25,-384.5 886.75,-384.5 886.75,-384.5 892.75,-384.5 898.75,-390.5 898.75,-396.5 898.75,-396.5 898.75,-408.5 898.75,-408.5 898.75,-414.5 892.75,-420.5 886.75,-420.5"/>
174
- <text xml:space="preserve" text-anchor="middle" x="845" y="-405" font-family="sans-Serif" font-size="10.00" fill="#0f172a">hindsight (HER)</text>
175
- <text xml:space="preserve" text-anchor="middle" x="845" y="-393" font-family="sans-Serif" font-size="10.00" fill="#0f172a">relabel achieved&#45;goal</text>
173
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M866.75,-648C866.75,-648 783.25,-648 783.25,-648 777.25,-648 771.25,-642 771.25,-636 771.25,-636 771.25,-624 771.25,-624 771.25,-618 777.25,-612 783.25,-612 783.25,-612 866.75,-612 866.75,-612 872.75,-612 878.75,-618 878.75,-624 878.75,-624 878.75,-636 878.75,-636 878.75,-642 872.75,-648 866.75,-648"/>
174
+ <text xml:space="preserve" text-anchor="middle" x="825" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">hindsight (HER)</text>
175
+ <text xml:space="preserve" text-anchor="middle" x="825" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">relabel achieved&#45;goal</text>
176
176
  </g>
177
177
  <!-- Loop&#45;&gt;C3 -->
178
178
  <g id="edge13" class="edge">
179
179
  <title>Loop&#45;&gt;C3</title>
180
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1117.96,-559.42C1046.76,-542.38 951.7,-516.82 919,-495 893.72,-478.13 872.83,-449.98 859.77,-429.34"/>
181
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="862.26,-428.05 855.69,-422.69 857.49,-430.97 862.26,-428.05"/>
182
- <text xml:space="preserve" text-anchor="middle" x="978.39" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">failed goal</text>
180
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1161.34,-778.08C1110.96,-761.73 1044.39,-742.07 984,-730.5 965.37,-726.93 915.72,-731.47 899,-722.5 871.75,-707.88 850.85,-678.56 838.32,-657.03"/>
181
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="840.78,-655.69 834.43,-650.07 835.89,-658.42 840.78,-655.69"/>
182
+ <text xml:space="preserve" text-anchor="middle" x="1048.34" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">failed goal</text>
183
183
  </g>
184
184
  <!-- Rates -->
185
185
  <g id="node17" class="node">
186
186
  <title>Rates</title>
187
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M753.12,-237C753.12,-237 548.88,-237 548.88,-237 542.88,-237 536.88,-231 536.88,-225 536.88,-225 536.88,-205 536.88,-205 536.88,-199 542.88,-193 548.88,-193 548.88,-193 753.12,-193 753.12,-193 759.12,-193 765.12,-199 765.12,-205 765.12,-205 765.12,-225 765.12,-225 765.12,-231 759.12,-237 753.12,-237"/>
188
- <text xml:space="preserve" text-anchor="middle" x="651" y="-223.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ESR verified_exploit_tools / vulnerable_tools</text>
189
- <text xml:space="preserve" text-anchor="middle" x="651" y="-211.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ASR successful_attacks / total_attack_attempts</text>
190
- <text xml:space="preserve" text-anchor="middle" x="651" y="-199.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rsi_tick on an ESR drop</text>
187
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M754.12,-464.5C754.12,-464.5 549.88,-464.5 549.88,-464.5 543.88,-464.5 537.88,-458.5 537.88,-452.5 537.88,-452.5 537.88,-432.5 537.88,-432.5 537.88,-426.5 543.88,-420.5 549.88,-420.5 549.88,-420.5 754.12,-420.5 754.12,-420.5 760.12,-420.5 766.12,-426.5 766.12,-432.5 766.12,-432.5 766.12,-452.5 766.12,-452.5 766.12,-458.5 760.12,-464.5 754.12,-464.5"/>
188
+ <text xml:space="preserve" text-anchor="middle" x="652" y="-451" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ESR verified_exploit_tools / vulnerable_tools</text>
189
+ <text xml:space="preserve" text-anchor="middle" x="652" y="-439" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ASR successful_attacks / total_attack_attempts</text>
190
+ <text xml:space="preserve" text-anchor="middle" x="652" y="-427" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rsi_tick on an ESR drop</text>
191
191
  </g>
192
192
  <!-- Loop&#45;&gt;Rates -->
193
193
  <g id="edge29" class="edge">
194
194
  <title>Loop&#45;&gt;Rates</title>
195
- <path fill="none" stroke="#34d399" stroke-width="1.3" stroke-dasharray="5,2" d="M1287.85,-573.74C1507.5,-561 2079.57,-525.08 2107,-495 2143.68,-454.77 2144.6,-411.88 2107,-372.5 2008.75,-269.61 964.92,-352.1 828,-313.5 775.95,-298.83 722.41,-266.47 688.04,-243.05"/>
196
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="689.95,-240.97 681.78,-238.72 686.77,-245.58 689.95,-240.97"/>
197
- <text xml:space="preserve" text-anchor="middle" x="2149.11" y="-399.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">rsi_tick</text>
198
- </g>
199
- <!-- R1&#45;&gt;R5 -->
200
- <g id="edge8" class="edge">
201
- <title>R1&#45;&gt;R5</title>
202
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1789.55,-425.39C1775.38,-445.49 1751.75,-473.35 1723,-485.46 1664.43,-510.13 1638.86,-509.42 1580,-485.46 1554.1,-474.91 1531.78,-452.26 1516.53,-433.28"/>
203
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1518.75,-431.58 1511.63,-426.98 1514.33,-435.01 1518.75,-431.58"/>
204
- <text xml:space="preserve" text-anchor="middle" x="1651" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">terminal</text>
195
+ <path fill="none" stroke="#34d399" stroke-width="1.3" stroke-dasharray="5,2" d="M1326.82,-804.13C1534.12,-798.68 2053.3,-779.44 2105,-722.5 2141.6,-682.19 2139.44,-642.17 2105,-600 2069.14,-556.08 1911.39,-554.91 1855,-549 1797.76,-543 874.5,-556.25 819,-541 769.01,-527.27 718.57,-494.63 686.41,-470.89"/>
196
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="688.29,-468.8 680.21,-466.24 684.93,-473.28 688.29,-468.8"/>
197
+ <text xml:space="preserve" text-anchor="middle" x="2145.89" y="-626.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">rsi_tick</text>
198
+ </g>
199
+ <!-- Checks -->
200
+ <g id="node30" class="node">
201
+ <title>Checks</title>
202
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M2372.75,-648C2372.75,-648 2247.25,-648 2247.25,-648 2241.25,-648 2235.25,-642 2235.25,-636 2235.25,-636 2235.25,-624 2235.25,-624 2235.25,-618 2241.25,-612 2247.25,-612 2247.25,-612 2372.75,-612 2372.75,-612 2378.75,-612 2384.75,-618 2384.75,-624 2384.75,-624 2384.75,-636 2384.75,-636 2384.75,-642 2378.75,-648 2372.75,-648"/>
203
+ <text xml:space="preserve" text-anchor="middle" x="2310" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Host Verification</text>
204
+ <text xml:space="preserve" text-anchor="middle" x="2310" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">complete pass / fail / unknown</text>
205
+ </g>
206
+ <!-- Loop&#45;&gt;Checks -->
207
+ <g id="edge37" class="edge">
208
+ <title>Loop&#45;&gt;Checks</title>
209
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1326.85,-801.69C1547.23,-790.08 2126.24,-756.68 2206,-722.5 2240.21,-707.84 2271.06,-677.47 2290.12,-655.74"/>
210
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2292,-657.84 2295.07,-649.94 2287.74,-654.2 2292,-657.84"/>
205
211
  </g>
206
212
  <!-- E3 -->
207
213
  <g id="node8" class="node">
208
214
  <title>E3</title>
209
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M2077.12,-420.5C2077.12,-420.5 1956.88,-420.5 1956.88,-420.5 1950.88,-420.5 1944.88,-414.5 1944.88,-408.5 1944.88,-408.5 1944.88,-396.5 1944.88,-396.5 1944.88,-390.5 1950.88,-384.5 1956.88,-384.5 1956.88,-384.5 2077.12,-384.5 2077.12,-384.5 2083.12,-384.5 2089.12,-390.5 2089.12,-396.5 2089.12,-396.5 2089.12,-408.5 2089.12,-408.5 2089.12,-414.5 2083.12,-420.5 2077.12,-420.5"/>
210
- <text xml:space="preserve" text-anchor="middle" x="2017" y="-405" font-family="sans-Serif" font-size="10.00" fill="#0f172a">verify_as_reward</text>
211
- <text xml:space="preserve" text-anchor="middle" x="2017" y="-393" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extro_verify caps/floors judge</text>
215
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M2075.12,-648C2075.12,-648 1936.88,-648 1936.88,-648 1930.88,-648 1924.88,-642 1924.88,-636 1924.88,-636 1924.88,-624 1924.88,-624 1924.88,-618 1930.88,-612 1936.88,-612 1936.88,-612 2075.12,-612 2075.12,-612 2081.12,-612 2087.12,-618 2087.12,-624 2087.12,-624 2087.12,-636 2087.12,-636 2087.12,-642 2081.12,-648 2075.12,-648"/>
216
+ <text xml:space="preserve" text-anchor="middle" x="2006" y="-632.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">verify_as_reward</text>
217
+ <text xml:space="preserve" text-anchor="middle" x="2006" y="-620.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">claim diagnostics; refutation caps</text>
212
218
  </g>
213
219
  <!-- R1&#45;&gt;E3 -->
214
220
  <g id="edge7" class="edge">
215
221
  <title>R1&#45;&gt;E3</title>
216
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1866.18,-402.5C1887.67,-402.5 1912.09,-402.5 1934.92,-402.5"/>
217
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1934.63,-405.3 1942.63,-402.5 1934.63,-399.7 1934.63,-405.3"/>
218
- <text xml:space="preserve" text-anchor="middle" x="1905.06" y="-407.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ground</text>
222
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1846.13,-630C1867.35,-630 1891.54,-630 1914.56,-630"/>
223
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1914.38,-632.8 1922.38,-630 1914.38,-627.2 1914.38,-632.8"/>
224
+ <text xml:space="preserve" text-anchor="middle" x="1885.06" y="-634.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ground</text>
225
+ </g>
226
+ <!-- Claims -->
227
+ <g id="node26" class="node">
228
+ <title>Claims</title>
229
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1904.88,-460.5C1904.88,-460.5 1753.12,-460.5 1753.12,-460.5 1747.12,-460.5 1741.12,-454.5 1741.12,-448.5 1741.12,-448.5 1741.12,-436.5 1741.12,-436.5 1741.12,-430.5 1747.12,-424.5 1753.12,-424.5 1753.12,-424.5 1904.88,-424.5 1904.88,-424.5 1910.88,-424.5 1916.88,-430.5 1916.88,-436.5 1916.88,-436.5 1916.88,-448.5 1916.88,-448.5 1916.88,-454.5 1910.88,-460.5 1904.88,-460.5"/>
230
+ <text xml:space="preserve" text-anchor="middle" x="1829" y="-445" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Judge claim != verified completion</text>
231
+ <text xml:space="preserve" text-anchor="middle" x="1829" y="-433" font-family="sans-Serif" font-size="10.00" fill="#0f172a">false rate = refuted / checked claims</text>
232
+ </g>
233
+ <!-- R1&#45;&gt;Claims -->
234
+ <g id="edge8" class="edge">
235
+ <title>R1&#45;&gt;Claims</title>
236
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1778.63,-607.01C1775.53,-590.78 1773.05,-568.28 1777.5,-549 1784.2,-519.98 1800.03,-489.72 1812.39,-469.08"/>
237
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1814.61,-470.82 1816.4,-462.54 1809.83,-467.89 1814.61,-470.82"/>
238
+ <text xml:space="preserve" text-anchor="middle" x="1811.25" y="-556.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">fallible judgment</text>
239
+ </g>
240
+ <!-- R1&#45;&gt;Claims -->
241
+ <g id="edge39" class="edge">
242
+ <title>R1&#45;&gt;Claims</title>
243
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1819.44,-607.11C1831.82,-597.42 1844.3,-584.83 1851,-570 1865.63,-537.62 1853.51,-496.51 1842.28,-470.1"/>
244
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1844.87,-469.03 1839.04,-462.88 1839.76,-471.32 1844.87,-469.03"/>
219
245
  </g>
220
246
  <!-- Fses -->
221
247
  <g id="node19" class="node">
222
248
  <title>Fses</title>
223
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M875.5,-56C875.5,-58.21 856.45,-60 833,-60 809.55,-60 790.5,-58.21 790.5,-56 790.5,-56 790.5,-20 790.5,-20 790.5,-17.79 809.55,-16 833,-16 856.45,-16 875.5,-17.79 875.5,-20 875.5,-20 875.5,-56 875.5,-56"/>
224
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M875.5,-56C875.5,-53.79 856.45,-52 833,-52 809.55,-52 790.5,-53.79 790.5,-56"/>
225
- <text xml:space="preserve" text-anchor="middle" x="833" y="-40.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
226
- <text xml:space="preserve" text-anchor="middle" x="833" y="-28.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(step_reward)</text>
249
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M884.5,-283.5C884.5,-285.71 865.45,-287.5 842,-287.5 818.55,-287.5 799.5,-285.71 799.5,-283.5 799.5,-283.5 799.5,-247.5 799.5,-247.5 799.5,-245.29 818.55,-243.5 842,-243.5 865.45,-243.5 884.5,-245.29 884.5,-247.5 884.5,-247.5 884.5,-283.5 884.5,-283.5"/>
250
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M884.5,-283.5C884.5,-281.29 865.45,-279.5 842,-279.5 818.55,-279.5 799.5,-281.29 799.5,-283.5"/>
251
+ <text xml:space="preserve" text-anchor="middle" x="842" y="-268" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
252
+ <text xml:space="preserve" text-anchor="middle" x="842" y="-256" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(step_reward)</text>
227
253
  </g>
228
254
  <!-- R2&#45;&gt;Fses -->
229
255
  <g id="edge14" class="edge">
230
256
  <title>R2&#45;&gt;Fses</title>
231
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1349.48,-379.88C1351.27,-335.03 1348.41,-231.66 1290,-179 1201.51,-99.22 1143.47,-151.2 1025,-138.5 1010.72,-136.97 908.5,-137.57 896,-130.5 872.17,-117.02 855.39,-90.34 845.17,-69.26"/>
232
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="847.78,-68.21 841.89,-62.11 842.69,-70.55 847.78,-68.21"/>
233
- <text xml:space="preserve" text-anchor="middle" x="1372.61" y="-211.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">step_reward</text>
257
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1324.52,-607.66C1316.02,-562.88 1289.92,-458.91 1224,-406.5 1156.42,-352.76 1119.54,-377.7 1034,-366 1005.54,-362.11 930,-372.14 905,-358 881.17,-344.52 864.39,-317.84 854.17,-296.76"/>
258
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="856.78,-295.71 850.89,-289.61 851.69,-298.05 856.78,-295.71"/>
259
+ <text xml:space="preserve" text-anchor="middle" x="1332.5" y="-439.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">step_reward</text>
234
260
  </g>
235
261
  <!-- Fmis -->
236
262
  <g id="node18" class="node">
237
263
  <title>Fmis</title>
238
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1096.38,-52.73C1096.38,-54.53 1079.17,-56 1058,-56 1036.83,-56 1019.62,-54.53 1019.62,-52.73 1019.62,-52.73 1019.62,-23.27 1019.62,-23.27 1019.62,-21.47 1036.83,-20 1058,-20 1079.17,-20 1096.38,-21.47 1096.38,-23.27 1096.38,-23.27 1096.38,-52.73 1096.38,-52.73"/>
239
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M1096.38,-52.73C1096.38,-50.92 1079.17,-49.45 1058,-49.45 1036.83,-49.45 1019.62,-50.92 1019.62,-52.73"/>
240
- <text xml:space="preserve" text-anchor="middle" x="1058" y="-34.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
264
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1105.38,-280.23C1105.38,-282.03 1088.17,-283.5 1067,-283.5 1045.83,-283.5 1028.62,-282.03 1028.62,-280.23 1028.62,-280.23 1028.62,-250.77 1028.62,-250.77 1028.62,-248.97 1045.83,-247.5 1067,-247.5 1088.17,-247.5 1105.38,-248.97 1105.38,-250.77 1105.38,-250.77 1105.38,-280.23 1105.38,-280.23"/>
265
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M1105.38,-280.23C1105.38,-278.42 1088.17,-276.95 1067,-276.95 1045.83,-276.95 1028.62,-278.42 1028.62,-280.23"/>
266
+ <text xml:space="preserve" text-anchor="middle" x="1067" y="-262" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
241
267
  </g>
242
268
  <!-- R3&#45;&gt;Fmis -->
243
269
  <g id="edge16" class="edge">
244
270
  <title>R3&#45;&gt;Fmis</title>
245
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1215.25,-380.11C1222.93,-364 1230.43,-341.37 1225,-321.5 1217.3,-293.35 1114.98,-129.34 1074.41,-64.94"/>
246
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1076.79,-63.48 1070.16,-58.21 1072.06,-66.47 1076.79,-63.48"/>
247
- <text xml:space="preserve" text-anchor="middle" x="1250.45" y="-211.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reward_signal</text>
271
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1176.5,-607.47C1164.46,-567.69 1137.73,-480.01 1114,-406.5 1101.25,-367 1085.82,-321.46 1076.21,-293.32"/>
272
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1078.94,-292.66 1073.7,-286 1073.65,-294.47 1078.94,-292.66"/>
273
+ <text xml:space="preserve" text-anchor="middle" x="1185.11" y="-439.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reward_signal</text>
248
274
  </g>
249
275
  <!-- Frws -->
250
276
  <g id="node24" class="node">
251
277
  <title>Frws</title>
252
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1241.62,-52.73C1241.62,-54.53 1218.04,-56 1189,-56 1159.96,-56 1136.38,-54.53 1136.38,-52.73 1136.38,-52.73 1136.38,-23.27 1136.38,-23.27 1136.38,-21.47 1159.96,-20 1189,-20 1218.04,-20 1241.62,-21.47 1241.62,-23.27 1241.62,-23.27 1241.62,-52.73 1241.62,-52.73"/>
253
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M1241.62,-52.73C1241.62,-50.92 1218.04,-49.45 1189,-49.45 1159.96,-49.45 1136.38,-50.92 1136.38,-52.73"/>
254
- <text xml:space="preserve" text-anchor="middle" x="1189" y="-34.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward_sentinel.json</text>
278
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1250.62,-280.23C1250.62,-282.03 1227.04,-283.5 1198,-283.5 1168.96,-283.5 1145.38,-282.03 1145.38,-280.23 1145.38,-280.23 1145.38,-250.77 1145.38,-250.77 1145.38,-248.97 1168.96,-247.5 1198,-247.5 1227.04,-247.5 1250.62,-248.97 1250.62,-250.77 1250.62,-250.77 1250.62,-280.23 1250.62,-280.23"/>
279
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M1250.62,-280.23C1250.62,-278.42 1227.04,-276.95 1198,-276.95 1168.96,-276.95 1145.38,-278.42 1145.38,-280.23"/>
280
+ <text xml:space="preserve" text-anchor="middle" x="1198" y="-262" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward_sentinel.json</text>
255
281
  </g>
256
282
  <!-- R3&#45;&gt;Frws -->
257
283
  <g id="edge15" class="edge">
258
284
  <title>R3&#45;&gt;Frws</title>
259
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1199.82,-380.06C1193.52,-335.26 1180.29,-228.44 1183,-138.5 1183.74,-114.05 1185.49,-86.26 1186.91,-66.28"/>
260
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1189.68,-66.74 1187.47,-58.56 1184.1,-66.34 1189.68,-66.74"/>
285
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1242.42,-607.44C1300.13,-585.89 1380.32,-554.14 1389,-541 1421.94,-491.11 1422.35,-456.11 1389,-406.5 1357.13,-359.1 1315.62,-392.36 1270,-358 1246.23,-340.1 1225.99,-312.53 1213.08,-292.33"/>
286
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1215.48,-290.89 1208.88,-285.57 1210.72,-293.84 1215.48,-290.89"/>
261
287
  </g>
262
288
  <!-- Fpol -->
263
289
  <g id="node20" class="node">
264
290
  <title>Fpol</title>
265
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1364.75,-56C1364.75,-58.21 1346.04,-60 1323,-60 1299.96,-60 1281.25,-58.21 1281.25,-56 1281.25,-56 1281.25,-20 1281.25,-20 1281.25,-17.79 1299.96,-16 1323,-16 1346.04,-16 1364.75,-17.79 1364.75,-20 1364.75,-20 1364.75,-56 1364.75,-56"/>
266
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M1364.75,-56C1364.75,-53.79 1346.04,-52 1323,-52 1299.96,-52 1281.25,-53.79 1281.25,-56"/>
267
- <text xml:space="preserve" text-anchor="middle" x="1323" y="-40.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy.json +</text>
268
- <text xml:space="preserve" text-anchor="middle" x="1323" y="-28.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy_traj.jsonl</text>
291
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1373.75,-283.5C1373.75,-285.71 1355.04,-287.5 1332,-287.5 1308.96,-287.5 1290.25,-285.71 1290.25,-283.5 1290.25,-283.5 1290.25,-247.5 1290.25,-247.5 1290.25,-245.29 1308.96,-243.5 1332,-243.5 1355.04,-243.5 1373.75,-245.29 1373.75,-247.5 1373.75,-247.5 1373.75,-283.5 1373.75,-283.5"/>
292
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M1373.75,-283.5C1373.75,-281.29 1355.04,-279.5 1332,-279.5 1308.96,-279.5 1290.25,-281.29 1290.25,-283.5"/>
293
+ <text xml:space="preserve" text-anchor="middle" x="1332" y="-268" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy.json +</text>
294
+ <text xml:space="preserve" text-anchor="middle" x="1332" y="-256" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy_traj.jsonl</text>
269
295
  </g>
270
296
  <!-- R5&#45;&gt;Fpol -->
271
297
  <g id="edge9" class="edge">
272
298
  <title>R5&#45;&gt;Fpol</title>
273
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1496.34,-379.76C1498.07,-338.9 1498.15,-248.48 1471,-179 1451.37,-128.77 1402.63,-88.71 1366.41,-64.53"/>
274
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1368.3,-62.42 1360.07,-60.39 1365.24,-67.11 1368.3,-62.42"/>
299
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1600.75,-607.14C1551.56,-544.79 1410.56,-366.07 1354.95,-295.59"/>
300
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1357.28,-294.02 1350.13,-289.48 1352.88,-297.49 1357.28,-294.02"/>
275
301
  </g>
276
302
  <!-- S1 -->
277
303
  <g id="node9" class="node">
278
304
  <title>S1</title>
279
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M1088.75,-424.5C1088.75,-424.5 951.25,-424.5 951.25,-424.5 945.25,-424.5 939.25,-418.5 939.25,-412.5 939.25,-412.5 939.25,-392.5 939.25,-392.5 939.25,-386.5 945.25,-380.5 951.25,-380.5 951.25,-380.5 1088.75,-380.5 1088.75,-380.5 1094.75,-380.5 1100.75,-386.5 1100.75,-392.5 1100.75,-392.5 1100.75,-412.5 1100.75,-412.5 1100.75,-418.5 1094.75,-424.5 1088.75,-424.5"/>
280
- <text xml:space="preserve" text-anchor="middle" x="1020" y="-411" font-family="sans-Serif" font-size="10.00" fill="#0f172a">practice</text>
281
- <text xml:space="preserve" text-anchor="middle" x="1020" y="-399" font-family="sans-Serif" font-size="10.00" fill="#0f172a">budget&#45;first + winning_trace DPO</text>
282
- <text xml:space="preserve" text-anchor="middle" x="1020" y="-387" font-family="sans-Serif" font-size="10.00" fill="#0f172a">auto&#45;resolve on judge&gt;=0.7</text>
305
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M1068.75,-652C1068.75,-652 931.25,-652 931.25,-652 925.25,-652 919.25,-646 919.25,-640 919.25,-640 919.25,-620 919.25,-620 919.25,-614 925.25,-608 931.25,-608 931.25,-608 1068.75,-608 1068.75,-608 1074.75,-608 1080.75,-614 1080.75,-620 1080.75,-620 1080.75,-640 1080.75,-640 1080.75,-646 1074.75,-652 1068.75,-652"/>
306
+ <text xml:space="preserve" text-anchor="middle" x="1000" y="-638.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">practice</text>
307
+ <text xml:space="preserve" text-anchor="middle" x="1000" y="-626.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">budget&#45;first + winning_trace DPO</text>
308
+ <text xml:space="preserve" text-anchor="middle" x="1000" y="-614.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">auto&#45;resolve on judge&gt;=0.7</text>
283
309
  </g>
284
310
  <!-- S1&#45;&gt;Fmis -->
285
311
  <g id="edge17" class="edge">
286
312
  <title>S1&#45;&gt;Fmis</title>
287
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1023.31,-369.96C1030.66,-299.84 1048.25,-132.01 1055.15,-66.17"/>
288
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1020.55,-369.44 1022.5,-377.68 1026.12,-370.02 1020.55,-369.44"/>
289
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1057.91,-66.71 1055.96,-58.46 1052.34,-66.13 1057.91,-66.71"/>
290
- <text xml:space="preserve" text-anchor="middle" x="1068.28" y="-211.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto&#45;resolve</text>
313
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1013.49,-598.31C1017.02,-589.32 1020.52,-579.39 1023,-570 1049.35,-470.09 1061.03,-347.25 1065.15,-293.66"/>
314
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1011.01,-596.97 1010.59,-605.44 1016.2,-599.09 1011.01,-596.97"/>
315
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1067.93,-294.04 1065.72,-285.85 1062.34,-293.62 1067.93,-294.04"/>
316
+ <text xml:space="preserve" text-anchor="middle" x="1078.43" y="-439.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto&#45;resolve</text>
291
317
  </g>
292
318
  <!-- Fcur -->
293
319
  <g id="node22" class="node">
294
320
  <title>Fcur</title>
295
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M980,-52.73C980,-54.53 965.66,-56 948,-56 930.34,-56 916,-54.53 916,-52.73 916,-52.73 916,-23.27 916,-23.27 916,-21.47 930.34,-20 948,-20 965.66,-20 980,-21.47 980,-23.27 980,-23.27 980,-52.73 980,-52.73"/>
296
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M980,-52.73C980,-50.92 965.66,-49.45 948,-49.45 930.34,-49.45 916,-50.92 916,-52.73"/>
297
- <text xml:space="preserve" text-anchor="middle" x="948" y="-34.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum/</text>
321
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M989,-280.23C989,-282.03 974.66,-283.5 957,-283.5 939.34,-283.5 925,-282.03 925,-280.23 925,-280.23 925,-250.77 925,-250.77 925,-248.97 939.34,-247.5 957,-247.5 974.66,-247.5 989,-248.97 989,-250.77 989,-250.77 989,-280.23 989,-280.23"/>
322
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M989,-280.23C989,-278.42 974.66,-276.95 957,-276.95 939.34,-276.95 925,-278.42 925,-280.23"/>
323
+ <text xml:space="preserve" text-anchor="middle" x="957" y="-262" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum/</text>
298
324
  </g>
299
325
  <!-- S1&#45;&gt;Fcur -->
300
326
  <g id="edge18" class="edge">
301
327
  <title>S1&#45;&gt;Fcur</title>
302
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1015.66,-379.64C1003.17,-316.74 967.15,-135.4 953.41,-66.24"/>
303
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="956.17,-65.74 951.86,-58.44 950.67,-66.83 956.17,-65.74"/>
328
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M997.41,-607.14C989.95,-544.24 968.43,-362.9 960.23,-293.74"/>
329
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="963.03,-293.58 959.31,-285.96 957.47,-294.24 963.03,-293.58"/>
304
330
  </g>
305
331
  <!-- W1 -->
306
332
  <g id="node14" class="node">
307
333
  <title>W1</title>
308
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M301.5,-243C301.5,-243 204.5,-243 204.5,-243 198.5,-243 192.5,-237 192.5,-231 192.5,-231 192.5,-199 192.5,-199 192.5,-193 198.5,-187 204.5,-187 204.5,-187 301.5,-187 301.5,-187 307.5,-187 313.5,-193 313.5,-199 313.5,-199 313.5,-231 313.5,-231 313.5,-237 307.5,-243 301.5,-243"/>
309
- <text xml:space="preserve" text-anchor="middle" x="253" y="-229.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preference ledger</text>
310
- <text xml:space="preserve" text-anchor="middle" x="253" y="-217.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">trajectory pairs</text>
311
- <text xml:space="preserve" text-anchor="middle" x="253" y="-205.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">scrub + geometry filter</text>
312
- <text xml:space="preserve" text-anchor="middle" x="253" y="-193.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">write+export &lt;=40%/src</text>
334
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M125.5,-470.5C125.5,-470.5 28.5,-470.5 28.5,-470.5 22.5,-470.5 16.5,-464.5 16.5,-458.5 16.5,-458.5 16.5,-426.5 16.5,-426.5 16.5,-420.5 22.5,-414.5 28.5,-414.5 28.5,-414.5 125.5,-414.5 125.5,-414.5 131.5,-414.5 137.5,-420.5 137.5,-426.5 137.5,-426.5 137.5,-458.5 137.5,-458.5 137.5,-464.5 131.5,-470.5 125.5,-470.5"/>
335
+ <text xml:space="preserve" text-anchor="middle" x="77" y="-457" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preference ledger</text>
336
+ <text xml:space="preserve" text-anchor="middle" x="77" y="-445" font-family="sans-Serif" font-size="10.00" fill="#0f172a">trajectory pairs</text>
337
+ <text xml:space="preserve" text-anchor="middle" x="77" y="-433" font-family="sans-Serif" font-size="10.00" fill="#0f172a">scrub + geometry filter</text>
338
+ <text xml:space="preserve" text-anchor="middle" x="77" y="-421" font-family="sans-Serif" font-size="10.00" fill="#0f172a">write+export &lt;=40%/src</text>
313
339
  </g>
314
340
  <!-- S2&#45;&gt;W1 -->
315
341
  <g id="edge19" class="edge">
316
342
  <title>S2&#45;&gt;W1</title>
317
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M637.8,-383.85C626.13,-379.91 613.68,-375.89 602,-372.5 508.93,-345.49 485.18,-339.71 390,-321.5 365.31,-316.78 355.95,-325.77 334,-313.5 308.39,-299.19 287.49,-273.34 273.34,-251.86"/>
318
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="275.78,-250.47 269.12,-245.23 271.05,-253.48 275.78,-250.47"/>
319
- <text xml:space="preserve" text-anchor="middle" x="517.83" y="-328.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(loser,winner)</text>
343
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M460.8,-611.36C449.13,-607.41 436.68,-603.4 425,-600 332.36,-573.06 308.75,-567.18 214,-549 189.31,-544.26 179.95,-553.27 158,-541 132.39,-526.69 111.49,-500.84 97.34,-479.36"/>
344
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="99.78,-477.97 93.12,-472.73 95.05,-480.98 99.78,-477.97"/>
345
+ <text xml:space="preserve" text-anchor="middle" x="341.36" y="-556.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(loser,winner)</text>
320
346
  </g>
321
347
  <!-- S3&#45;&gt;W1 -->
322
348
  <g id="edge20" class="edge">
323
349
  <title>S3&#45;&gt;W1</title>
324
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M456.3,-383.99C421.09,-368.6 371.46,-343.95 334,-313.5 312.09,-295.69 291.79,-271.24 277,-251.28"/>
325
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="279.33,-249.72 272.36,-244.9 274.8,-253.02 279.33,-249.72"/>
350
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M279.57,-611.44C244.58,-596.02 195.25,-571.35 158,-541 136.11,-523.16 115.81,-498.71 101.01,-478.75"/>
351
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="103.35,-477.2 96.38,-472.38 98.82,-480.5 103.35,-477.2"/>
326
352
  </g>
327
353
  <!-- C3&#45;&gt;Fses -->
328
354
  <g id="edge21" class="edge">
329
355
  <title>C3&#45;&gt;Fses</title>
330
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M844.42,-384.02C842.52,-326.61 836.46,-143.38 834.02,-69.91"/>
331
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="836.83,-70.16 833.77,-62.26 831.24,-70.35 836.83,-70.16"/>
332
- <text xml:space="preserve" text-anchor="middle" x="867.57" y="-211.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success:true</text>
356
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M825.82,-611.52C828.51,-554.11 837.11,-370.88 840.55,-297.41"/>
357
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="843.33,-297.88 840.91,-289.76 837.74,-297.62 843.33,-297.88"/>
358
+ <text xml:space="preserve" text-anchor="middle" x="859.94" y="-439.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success:soft</text>
333
359
  </g>
334
360
  <!-- Fprf -->
335
361
  <g id="node21" class="node">
336
362
  <title>Fprf</title>
337
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M750.12,-52.73C750.12,-54.53 729.9,-56 705,-56 680.1,-56 659.88,-54.53 659.88,-52.73 659.88,-52.73 659.88,-23.27 659.88,-23.27 659.88,-21.47 680.1,-20 705,-20 729.9,-20 750.12,-21.47 750.12,-23.27 750.12,-23.27 750.12,-52.73 750.12,-52.73"/>
338
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M750.12,-52.73C750.12,-50.92 729.9,-49.45 705,-49.45 680.1,-49.45 659.88,-50.92 659.88,-52.73"/>
339
- <text xml:space="preserve" text-anchor="middle" x="705" y="-34.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preferences.jsonl</text>
363
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M639.12,-280.23C639.12,-282.03 618.9,-283.5 594,-283.5 569.1,-283.5 548.88,-282.03 548.88,-280.23 548.88,-280.23 548.88,-250.77 548.88,-250.77 548.88,-248.97 569.1,-247.5 594,-247.5 618.9,-247.5 639.12,-248.97 639.12,-250.77 639.12,-250.77 639.12,-280.23 639.12,-280.23"/>
364
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M639.12,-280.23C639.12,-278.42 618.9,-276.95 594,-276.95 569.1,-276.95 548.88,-278.42 548.88,-280.23"/>
365
+ <text xml:space="preserve" text-anchor="middle" x="594" y="-262" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preferences.jsonl</text>
340
366
  </g>
341
367
  <!-- W1&#45;&gt;Fprf -->
342
368
  <g id="edge22" class="edge">
343
369
  <title>W1&#45;&gt;Fprf</title>
344
- <path fill="none" stroke="#f59e0b" stroke-width="2" d="M311.09,-186.4C318.68,-183.54 326.44,-180.97 334,-179 397.77,-162.4 572.27,-182.53 629,-149 660.79,-130.21 682.42,-92.3 694.24,-66.28"/>
345
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="2" points="696.75,-67.52 697.36,-59.07 691.61,-65.29 696.75,-67.52"/>
370
+ <path fill="none" stroke="#f59e0b" stroke-width="2" d="M123.65,-413.91C154.46,-397.08 196.34,-376.78 236,-366 275.18,-355.35 287.28,-366.42 327,-358 405.42,-341.37 492.65,-308.63 545.4,-287.16"/>
371
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="2" points="546.34,-289.8 552.68,-284.17 544.22,-284.62 546.34,-289.8"/>
346
372
  </g>
347
373
  <!-- W2 -->
348
374
  <g id="node15" class="node">
349
375
  <title>W2</title>
350
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M140.38,-243C140.38,-243 27.62,-243 27.62,-243 21.62,-243 15.62,-237 15.62,-231 15.62,-231 15.62,-199 15.62,-199 15.62,-193 21.62,-187 27.62,-187 27.62,-187 140.38,-187 140.38,-187 146.38,-187 152.38,-193 152.38,-199 152.38,-199 152.38,-231 152.38,-231 152.38,-237 146.38,-243 140.38,-243"/>
351
- <text xml:space="preserve" text-anchor="middle" x="84" y="-229.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">train_and_gate</text>
352
- <text xml:space="preserve" text-anchor="middle" x="84" y="-217.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">SFT+DPO → LoRA vN+1</text>
353
- <text xml:space="preserve" text-anchor="middle" x="84" y="-205.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">gate + preference diet</text>
354
- <text xml:space="preserve" text-anchor="middle" x="84" y="-193.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">export_ready without trainer</text>
376
+ <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M302.38,-470.5C302.38,-470.5 189.62,-470.5 189.62,-470.5 183.62,-470.5 177.62,-464.5 177.62,-458.5 177.62,-458.5 177.62,-426.5 177.62,-426.5 177.62,-420.5 183.62,-414.5 189.62,-414.5 189.62,-414.5 302.38,-414.5 302.38,-414.5 308.38,-414.5 314.38,-420.5 314.38,-426.5 314.38,-426.5 314.38,-458.5 314.38,-458.5 314.38,-464.5 308.38,-470.5 302.38,-470.5"/>
377
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-457" font-family="sans-Serif" font-size="10.00" fill="#0f172a">train_and_gate</text>
378
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-445" font-family="sans-Serif" font-size="10.00" fill="#0f172a">SFT+DPO → LoRA vN+1</text>
379
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-433" font-family="sans-Serif" font-size="10.00" fill="#0f172a">gate + preference diet</text>
380
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-421" font-family="sans-Serif" font-size="10.00" fill="#0f172a">export_ready without trainer</text>
355
381
  </g>
356
382
  <!-- Fftn -->
357
383
  <g id="node23" class="node">
358
384
  <title>Fftn</title>
359
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M620.25,-52.73C620.25,-54.53 602.21,-56 580,-56 557.79,-56 539.75,-54.53 539.75,-52.73 539.75,-52.73 539.75,-23.27 539.75,-23.27 539.75,-21.47 557.79,-20 580,-20 602.21,-20 620.25,-21.47 620.25,-23.27 620.25,-23.27 620.25,-52.73 620.25,-52.73"/>
360
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M620.25,-52.73C620.25,-50.92 602.21,-49.45 580,-49.45 557.79,-49.45 539.75,-50.92 539.75,-52.73"/>
361
- <text xml:space="preserve" text-anchor="middle" x="580" y="-34.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">finetune/*.jsonl</text>
385
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M759.25,-280.23C759.25,-282.03 741.21,-283.5 719,-283.5 696.79,-283.5 678.75,-282.03 678.75,-280.23 678.75,-280.23 678.75,-250.77 678.75,-250.77 678.75,-248.97 696.79,-247.5 719,-247.5 741.21,-247.5 759.25,-248.97 759.25,-250.77 759.25,-250.77 759.25,-280.23 759.25,-280.23"/>
386
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M759.25,-280.23C759.25,-278.42 741.21,-276.95 719,-276.95 696.79,-276.95 678.75,-278.42 678.75,-280.23"/>
387
+ <text xml:space="preserve" text-anchor="middle" x="719" y="-262" font-family="sans-Serif" font-size="10.00" fill="#0f172a">finetune/*.jsonl</text>
362
388
  </g>
363
389
  <!-- W2&#45;&gt;Fftn -->
364
390
  <g id="edge25" class="edge">
365
391
  <title>W2&#45;&gt;Fftn</title>
366
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M153.05,-186.17C159.44,-183.71 165.83,-181.28 172,-179 300.22,-131.53 453.08,-80.56 530.21,-55.23"/>
367
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="530.64,-58.04 537.36,-52.88 528.89,-52.71 530.64,-58.04"/>
392
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M312.03,-413.64C319.69,-410.98 327.46,-408.52 335,-406.5 475.65,-368.84 536.38,-436.51 659,-358 682.86,-342.72 699.29,-314.19 708.84,-293.03"/>
393
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="711.4,-294.16 711.97,-285.71 706.25,-291.96 711.4,-294.16"/>
368
394
  </g>
369
395
  <!-- Ollama -->
370
396
  <g id="node25" class="node">
371
397
  <title>Ollama</title>
372
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M133.25,-56C133.25,-56 34.75,-56 34.75,-56 28.75,-56 22.75,-50 22.75,-44 22.75,-44 22.75,-32 22.75,-32 22.75,-26 28.75,-20 34.75,-20 34.75,-20 133.25,-20 133.25,-20 139.25,-20 145.25,-26 145.25,-32 145.25,-32 145.25,-44 145.25,-44 145.25,-50 139.25,-56 133.25,-56"/>
373
- <text xml:space="preserve" text-anchor="middle" x="84" y="-40.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ollama create pwn&#45;vN+1</text>
374
- <text xml:space="preserve" text-anchor="middle" x="84" y="-28.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(local LoRA adapter)</text>
398
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M295.25,-283.5C295.25,-283.5 196.75,-283.5 196.75,-283.5 190.75,-283.5 184.75,-277.5 184.75,-271.5 184.75,-271.5 184.75,-259.5 184.75,-259.5 184.75,-253.5 190.75,-247.5 196.75,-247.5 196.75,-247.5 295.25,-247.5 295.25,-247.5 301.25,-247.5 307.25,-253.5 307.25,-259.5 307.25,-259.5 307.25,-271.5 307.25,-271.5 307.25,-277.5 301.25,-283.5 295.25,-283.5"/>
399
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-268" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ollama create pwn&#45;vN+1</text>
400
+ <text xml:space="preserve" text-anchor="middle" x="246" y="-256" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(local LoRA adapter)</text>
375
401
  </g>
376
402
  <!-- W2&#45;&gt;Ollama -->
377
403
  <g id="edge26" class="edge">
378
404
  <title>W2&#45;&gt;Ollama</title>
379
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M84,-186.27C84,-153.68 84,-99.91 84,-67.14"/>
380
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="86.8,-67.52 84,-59.52 81.2,-67.52 86.8,-67.52"/>
381
- <text xml:space="preserve" text-anchor="middle" x="95.62" y="-140.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">LoRA</text>
405
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M246,-413.77C246,-381.18 246,-327.41 246,-294.64"/>
406
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="248.8,-295.02 246,-287.02 243.2,-295.02 248.8,-295.02"/>
407
+ <text xml:space="preserve" text-anchor="middle" x="299.62" y="-367.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">optional configured trainer</text>
382
408
  </g>
383
409
  <!-- W3 -->
384
410
  <g id="node16" class="node">
385
411
  <title>W3</title>
386
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M484.38,-233C484.38,-233 365.62,-233 365.62,-233 359.62,-233 353.62,-227 353.62,-221 353.62,-221 353.62,-209 353.62,-209 353.62,-203 359.62,-197 365.62,-197 365.62,-197 484.38,-197 484.38,-197 490.38,-197 496.38,-203 496.38,-209 496.38,-209 496.38,-221 496.38,-221 496.38,-227 490.38,-233 484.38,-233"/>
387
- <text xml:space="preserve" text-anchor="middle" x="425" y="-217.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">calibrate</text>
388
- <text xml:space="preserve" text-anchor="middle" x="425" y="-205.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">p(success) vs actual → Brier</text>
412
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M485.38,-460.5C485.38,-460.5 366.62,-460.5 366.62,-460.5 360.62,-460.5 354.62,-454.5 354.62,-448.5 354.62,-448.5 354.62,-436.5 354.62,-436.5 354.62,-430.5 360.62,-424.5 366.62,-424.5 366.62,-424.5 485.38,-424.5 485.38,-424.5 491.38,-424.5 497.38,-430.5 497.38,-436.5 497.38,-436.5 497.38,-448.5 497.38,-448.5 497.38,-454.5 491.38,-460.5 485.38,-460.5"/>
413
+ <text xml:space="preserve" text-anchor="middle" x="426" y="-445" font-family="sans-Serif" font-size="10.00" fill="#0f172a">calibrate</text>
414
+ <text xml:space="preserve" text-anchor="middle" x="426" y="-433" font-family="sans-Serif" font-size="10.00" fill="#0f172a">p(success) vs actual → Brier</text>
389
415
  </g>
390
416
  <!-- W3&#45;&gt;Loop -->
391
417
  <g id="edge28" class="edge">
392
418
  <title>W3&#45;&gt;Loop</title>
393
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M435.15,-233.27C449.86,-256.41 479.47,-296.51 517,-313.5 600.87,-351.46 2109.07,-306.26 2173,-372.5 2210.81,-411.68 2206.94,-452.43 2173,-495 2145.91,-528.97 1536.38,-562.25 1297.67,-574.02"/>
394
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1297.77,-571.21 1289.92,-574.4 1298.05,-576.81 1297.77,-571.21"/>
395
- <text xml:space="preserve" text-anchor="middle" x="2221.3" y="-399.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">calibration</text>
419
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M436.08,-460.93C450.71,-484.25 480.22,-524.57 518,-541 535.03,-548.41 1836.45,-548.09 1855,-549 1977.6,-555.04 2322.31,-509.29 2405,-600 2441.68,-640.24 2441.91,-682.48 2405,-722.5 2368.93,-761.62 1607.46,-792.81 1336.6,-802.7"/>
420
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1336.64,-799.9 1328.75,-802.99 1336.84,-805.5 1336.64,-799.9"/>
421
+ <text xml:space="preserve" text-anchor="middle" x="2453.97" y="-626.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">calibration</text>
396
422
  </g>
397
423
  <!-- Fmis&#45;&gt;W2 -->
398
424
  <g id="edge27" class="edge">
399
425
  <title>Fmis&#45;&gt;W2</title>
400
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1052.26,-56.6C1044.25,-78.05 1027.53,-113.52 1000,-130.5 929.67,-173.88 897.41,-142.96 815,-149 672.34,-159.45 311.82,-148.82 172,-179 166.88,-180.11 161.67,-181.48 156.47,-183.04"/>
401
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="155.79,-180.31 149.02,-185.42 157.49,-185.65 155.79,-180.31"/>
402
- <text xml:space="preserve" text-anchor="middle" x="999.56" y="-140.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">eval set</text>
426
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1061.26,-284.11C1053.26,-305.57 1036.55,-341.05 1009,-358 881.09,-436.67 481.6,-373.98 335,-406.5 329.83,-407.65 324.57,-409.05 319.32,-410.63"/>
427
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="318.55,-407.94 311.78,-413.04 320.25,-413.27 318.55,-407.94"/>
428
+ <text xml:space="preserve" text-anchor="middle" x="1008.13" y="-367.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">eval set</text>
403
429
  </g>
404
430
  <!-- Fses&#45;&gt;W2 -->
405
431
  <g id="edge24" class="edge">
406
432
  <title>Fses&#45;&gt;W2</title>
407
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M824.7,-60.62C815.09,-82.37 797.05,-114.86 770,-130.5 712.29,-163.88 236.91,-163.82 172,-179 167,-180.17 161.9,-181.58 156.82,-183.14"/>
408
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="156.3,-180.37 149.56,-185.51 158.03,-185.69 156.3,-180.37"/>
409
- <text xml:space="preserve" text-anchor="middle" x="772.86" y="-140.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_finetune</text>
433
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M833.23,-288.06C823.35,-309.43 805.19,-341.32 779,-358 768.55,-364.66 681.29,-374.92 669,-376.5 521.18,-395.54 480.04,-372.21 335,-406.5 330.18,-407.64 325.27,-408.99 320.36,-410.49"/>
434
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="319.56,-407.8 312.81,-412.92 321.28,-413.13 319.56,-407.8"/>
435
+ <text xml:space="preserve" text-anchor="middle" x="776.81" y="-367.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_finetune</text>
436
+ </g>
437
+ <!-- Frozen -->
438
+ <g id="node31" class="node">
439
+ <title>Frozen</title>
440
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M1316.12,-157C1316.12,-157 1135.88,-157 1135.88,-157 1129.88,-157 1123.88,-151 1123.88,-145 1123.88,-145 1123.88,-133 1123.88,-133 1123.88,-127 1129.88,-121 1135.88,-121 1135.88,-121 1316.12,-121 1316.12,-121 1322.12,-121 1328.12,-127 1328.12,-133 1328.12,-133 1328.12,-145 1328.12,-145 1328.12,-151 1322.12,-157 1316.12,-157"/>
441
+ <text xml:space="preserve" text-anchor="middle" x="1226" y="-141.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Explicit frozen PolicyEvaluation</text>
442
+ <text xml:space="preserve" text-anchor="middle" x="1226" y="-129.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">public local held&#45;out / two filesystem suites</text>
443
+ </g>
444
+ <!-- Fpol&#45;&gt;Frozen -->
445
+ <g id="edge41" class="edge">
446
+ <title>Fpol&#45;&gt;Frozen</title>
447
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1312.58,-243.11C1302.58,-232 1290.26,-218.12 1279.5,-205.5 1268.25,-192.3 1255.99,-177.34 1246.05,-165.05"/>
448
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1248.32,-163.41 1241.12,-158.93 1243.96,-166.92 1248.32,-163.41"/>
449
+ <text xml:space="preserve" text-anchor="middle" x="1328.25" y="-196.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">snapshot, not live writes</text>
410
450
  </g>
411
451
  <!-- Fprf&#45;&gt;W2 -->
412
452
  <g id="edge23" class="edge">
413
453
  <title>Fprf&#45;&gt;W2</title>
414
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M698.27,-56.53C688.88,-78.26 669.61,-114.38 640,-130.5 622.27,-140.15 478.6,-136.64 458.5,-138.5 330.45,-150.35 296.29,-146 172,-179 167.57,-180.18 163.05,-181.51 158.53,-182.96"/>
415
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="157.82,-180.25 151.12,-185.45 159.6,-185.56 157.82,-180.25"/>
416
- <text xml:space="preserve" text-anchor="middle" x="481.75" y="-140.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_dpo</text>
454
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M560.24,-283.47C502.58,-312.47 384.17,-372.02 310.31,-409.16"/>
455
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="309.17,-406.6 303.28,-412.69 311.69,-411.6 309.17,-406.6"/>
456
+ <text xml:space="preserve" text-anchor="middle" x="412.08" y="-367.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_dpo</text>
417
457
  </g>
418
458
  <!-- Ollama&#45;&gt;Loop -->
419
459
  <g id="edge36" class="edge">
420
460
  <title>Ollama&#45;&gt;Loop</title>
421
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M145.78,-55.79C230.05,-77.79 386.12,-115.37 522,-130.5 633.1,-142.87 913.41,-131.73 1025,-138.5 1302.29,-155.33 2079.87,-155.25 2253,-372.5 2286.93,-415.08 2287.45,-452.84 2253,-495 2226.88,-526.96 2202.9,-507.98 2162,-513.5 1997.2,-535.74 1507.72,-562.75 1299.01,-573.62"/>
422
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1298.95,-570.82 1291.11,-574.03 1299.24,-576.41 1298.95,-570.82"/>
423
- <text xml:space="preserve" text-anchor="middle" x="2251.45" y="-333.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">promoted vN+1</text>
424
- <text xml:space="preserve" text-anchor="middle" x="2251.45" y="-323.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(next session)</text>
461
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M287.53,-284.13C342.18,-306.31 441.78,-343.3 531,-358 586.15,-367.09 978.13,-364.3 1034,-366 1435.55,-378.2 1542.66,-329.79 1937,-406.5 2190.54,-455.82 2335.83,-389.13 2485,-600 2516.44,-644.45 2519.62,-680.48 2485,-722.5 2481.58,-726.65 2395.34,-740.33 2390,-741 2187.36,-766.35 1575.31,-792.7 1337.73,-802.26"/>
462
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1337.95,-799.45 1330.07,-802.56 1338.17,-805.04 1337.95,-799.45"/>
463
+ <text xml:space="preserve" text-anchor="middle" x="2492.42" y="-561.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">promoted vN+1</text>
464
+ <text xml:space="preserve" text-anchor="middle" x="2492.42" y="-550.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(next session)</text>
465
+ </g>
466
+ <!-- Claims&#45;&gt;R5 -->
467
+ <g id="edge40" class="edge">
468
+ <title>Claims&#45;&gt;R5</title>
469
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1782.15,-461.03C1742.29,-478.07 1685.97,-507.48 1650.25,-549 1638.28,-562.91 1630.38,-581.84 1625.4,-597.79"/>
470
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1622.74,-596.92 1623.21,-605.38 1628.12,-598.47 1622.74,-596.92"/>
471
+ <text xml:space="preserve" text-anchor="middle" x="1707.62" y="-556.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">attributed eligible credit only</text>
425
472
  </g>
426
473
  <!-- Cron -->
427
- <g id="node26" class="node">
474
+ <g id="node27" class="node">
428
475
  <title>Cron</title>
429
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M1912,-601.88C1912,-601.88 1782,-601.88 1782,-601.88 1776,-601.88 1770,-595.88 1770,-589.88 1770,-589.88 1770,-569.12 1770,-569.12 1770,-563.12 1776,-557.12 1782,-557.12 1782,-557.12 1912,-557.12 1912,-557.12 1918,-557.12 1924,-563.12 1924,-569.12 1924,-569.12 1924,-589.88 1924,-589.88 1924,-595.88 1918,-601.88 1912,-601.88"/>
430
- <text xml:space="preserve" text-anchor="middle" x="1847" y="-588.38" font-family="sans-Serif" font-size="10.00" fill="#0f172a">⏱ &#160;PWN::Cron.install_defaults</text>
431
- <text xml:space="preserve" text-anchor="middle" x="1847" y="-575.62" font-family="sans-Serif" font-size="10.00" fill="#0f172a">practice · offline_judge</text>
432
- <text xml:space="preserve" text-anchor="middle" x="1847" y="-563.62" font-family="sans-Serif" font-size="10.00" fill="#0f172a">train dry_run · consolidate</text>
476
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M2044,-829.38C2044,-829.38 1914,-829.38 1914,-829.38 1908,-829.38 1902,-823.38 1902,-817.38 1902,-817.38 1902,-796.62 1902,-796.62 1902,-790.62 1908,-784.62 1914,-784.62 1914,-784.62 2044,-784.62 2044,-784.62 2050,-784.62 2056,-790.62 2056,-796.62 2056,-796.62 2056,-817.38 2056,-817.38 2056,-823.38 2050,-829.38 2044,-829.38"/>
477
+ <text xml:space="preserve" text-anchor="middle" x="1979" y="-815.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">⏱ &#160;PWN::Cron.install_defaults</text>
478
+ <text xml:space="preserve" text-anchor="middle" x="1979" y="-803.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">practice · offline_judge</text>
479
+ <text xml:space="preserve" text-anchor="middle" x="1979" y="-791.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">train dry_run · consolidate</text>
433
480
  </g>
434
481
  <!-- Cron&#45;&gt;S1 -->
435
482
  <g id="edge30" class="edge">
436
483
  <title>Cron&#45;&gt;S1</title>
437
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M1824.15,-556.52C1803.51,-538.27 1771.33,-513.65 1738,-503 1705.45,-492.6 1154.86,-507.35 1123,-495 1090.48,-482.4 1061.59,-454.47 1042.75,-432.76"/>
438
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="1045.08,-431.18 1037.78,-426.88 1040.8,-434.8 1045.08,-431.18"/>
439
- <text xml:space="preserve" text-anchor="middle" x="1776.62" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">0 3 * * *</text>
484
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M1918.28,-784.05C1864.39,-765.76 1783.09,-741.05 1710,-730.5 1676.62,-725.68 1134.45,-734.69 1103,-722.5 1070.48,-709.9 1041.59,-681.97 1022.75,-660.26"/>
485
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="1025.08,-658.68 1017.78,-654.38 1020.8,-662.3 1025.08,-658.68"/>
486
+ <text xml:space="preserve" text-anchor="middle" x="1809.77" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">OFF by default: 0 3 * * *</text>
440
487
  </g>
441
488
  <!-- Cron&#45;&gt;W2 -->
442
489
  <g id="edge32" class="edge">
443
490
  <title>Cron&#45;&gt;W2</title>
444
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M1924.27,-570.06C2026.82,-557.61 2201,-531.77 2253,-495 2324.27,-444.61 2406.6,-383.33 2345,-321.5 2334.35,-310.81 185.78,-319.65 172,-313.5 143.76,-300.88 120.73,-274.26 105.33,-252.01"/>
445
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="107.67,-250.47 100.9,-245.38 103.01,-253.58 107.67,-250.47"/>
446
- <text xml:space="preserve" text-anchor="middle" x="2382.46" y="-399.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">0 4 * * 0</text>
491
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M2056.64,-801.41C2180.91,-792.72 2417.39,-770.3 2485,-722.5 2554.95,-673.04 2629.47,-609.69 2569,-549 2558.05,-538.01 349.18,-547.29 335,-541 306.45,-528.34 283.08,-501.54 267.46,-479.23"/>
492
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="269.96,-477.94 263.16,-472.88 265.33,-481.07 269.96,-477.94"/>
493
+ <text xml:space="preserve" text-anchor="middle" x="2638.98" y="-626.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">OFF by default: 0 4 * * 0</text>
447
494
  </g>
448
495
  <!-- OJ -->
449
- <g id="node27" class="node">
496
+ <g id="node28" class="node">
450
497
  <title>OJ</title>
451
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M2379,-597.5C2379,-597.5 2237,-597.5 2237,-597.5 2231,-597.5 2225,-591.5 2225,-585.5 2225,-585.5 2225,-573.5 2225,-573.5 2225,-567.5 2231,-561.5 2237,-561.5 2237,-561.5 2379,-561.5 2379,-561.5 2385,-561.5 2391,-567.5 2391,-573.5 2391,-573.5 2391,-585.5 2391,-585.5 2391,-591.5 2385,-597.5 2379,-597.5"/>
452
- <text xml:space="preserve" text-anchor="middle" x="2308" y="-582" font-family="sans-Serif" font-size="10.00" fill="#0f172a">offline_judge</text>
453
- <text xml:space="preserve" text-anchor="middle" x="2308" y="-570" font-family="sans-Serif" font-size="10.00" fill="#0f172a">judges + calibrate + warm sentinel</text>
498
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M2618,-825C2618,-825 2476,-825 2476,-825 2470,-825 2464,-819 2464,-813 2464,-813 2464,-801 2464,-801 2464,-795 2470,-789 2476,-789 2476,-789 2618,-789 2618,-789 2624,-789 2630,-795 2630,-801 2630,-801 2630,-813 2630,-813 2630,-819 2624,-825 2618,-825"/>
499
+ <text xml:space="preserve" text-anchor="middle" x="2547" y="-809.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">offline_judge</text>
500
+ <text xml:space="preserve" text-anchor="middle" x="2547" y="-797.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">judges + calibrate + warm sentinel</text>
454
501
  </g>
455
502
  <!-- Cron&#45;&gt;OJ -->
456
503
  <g id="edge31" class="edge">
457
504
  <title>Cron&#45;&gt;OJ</title>
458
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M1924.42,-579.5C2004.35,-579.5 2129.1,-579.5 2214.49,-579.5"/>
459
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="2214.47,-582.3 2222.47,-579.5 2214.47,-576.7 2214.47,-582.3"/>
460
- <text xml:space="preserve" text-anchor="middle" x="2074.5" y="-584.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">30 3 * * *</text>
505
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M2056.49,-807C2159.92,-807 2342.91,-807 2453.77,-807"/>
506
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="2453.64,-809.8 2461.64,-807 2453.64,-804.2 2453.64,-809.8"/>
507
+ <text xml:space="preserve" text-anchor="middle" x="2260" y="-811.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">OFF by default: 30 3 * * *</text>
461
508
  </g>
462
509
  <!-- MemGC -->
463
- <g id="node28" class="node">
510
+ <g id="node29" class="node">
464
511
  <title>MemGC</title>
465
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M2524.62,-597.5C2524.62,-597.5 2443.38,-597.5 2443.38,-597.5 2437.38,-597.5 2431.38,-591.5 2431.38,-585.5 2431.38,-585.5 2431.38,-573.5 2431.38,-573.5 2431.38,-567.5 2437.38,-561.5 2443.38,-561.5 2443.38,-561.5 2524.62,-561.5 2524.62,-561.5 2530.62,-561.5 2536.62,-567.5 2536.62,-573.5 2536.62,-573.5 2536.62,-585.5 2536.62,-585.5 2536.62,-591.5 2530.62,-597.5 2524.62,-597.5"/>
466
- <text xml:space="preserve" text-anchor="middle" x="2484" y="-582" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Learning.consolidate</text>
467
- <text xml:space="preserve" text-anchor="middle" x="2484" y="-570" font-family="sans-Serif" font-size="10.00" fill="#0f172a">nightly memory GC</text>
512
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M2763.62,-825C2763.62,-825 2682.38,-825 2682.38,-825 2676.38,-825 2670.38,-819 2670.38,-813 2670.38,-813 2670.38,-801 2670.38,-801 2670.38,-795 2676.38,-789 2682.38,-789 2682.38,-789 2763.62,-789 2763.62,-789 2769.62,-789 2775.62,-795 2775.62,-801 2775.62,-801 2775.62,-813 2775.62,-813 2775.62,-819 2769.62,-825 2763.62,-825"/>
513
+ <text xml:space="preserve" text-anchor="middle" x="2723" y="-809.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Learning.consolidate</text>
514
+ <text xml:space="preserve" text-anchor="middle" x="2723" y="-797.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">nightly memory GC</text>
468
515
  </g>
469
516
  <!-- Cron&#45;&gt;MemGC -->
470
517
  <g id="edge33" class="edge">
471
518
  <title>Cron&#45;&gt;MemGC</title>
472
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M1903.22,-602.39C1943.71,-617.6 2000.08,-636.18 2051.62,-644.12 2102.18,-651.92 2169.95,-666.14 2411,-607.5 2417.8,-605.85 2424.82,-603.72 2431.7,-601.38"/>
473
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="2432.51,-604.07 2439.11,-598.75 2430.63,-598.79 2432.51,-604.07"/>
474
- <text xml:space="preserve" text-anchor="middle" x="2067" y="-647.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">0 5 * * *</text>
519
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M2044.01,-829.98C2090.56,-845.18 2155.11,-863.71 2213.62,-871.62 2310.06,-884.66 2555.21,-857.01 2650,-835 2656.91,-833.4 2664.04,-831.28 2671.01,-828.93"/>
520
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="2671.93,-831.57 2678.53,-826.26 2670.06,-826.3 2671.93,-831.57"/>
521
+ <text xml:space="preserve" text-anchor="middle" x="2229" y="-874.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">0 5 * * *</text>
475
522
  </g>
476
523
  <!-- OJ&#45;&gt;R1 -->
477
524
  <g id="edge34" class="edge">
478
525
  <title>OJ&#45;&gt;R1</title>
479
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M2369.14,-560.89C2406.6,-547.22 2443.27,-526.65 2420,-503 2410.35,-493.2 1938,-499.48 1925,-495 1888.38,-482.38 1853.89,-454.06 1831.18,-432.24"/>
480
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1833.31,-430.4 1825.64,-426.8 1829.38,-434.4 1833.31,-430.4"/>
481
- <text xml:space="preserve" text-anchor="middle" x="2440.77" y="-504.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">backfill</text>
526
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M2589.97,-788.42C2620.49,-773.56 2652.68,-751.41 2632,-730.5 2617.8,-716.14 1924.11,-729.03 1905,-722.5 1868.34,-709.98 1833.87,-681.64 1811.17,-659.79"/>
527
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1813.29,-657.95 1805.62,-654.34 1809.36,-661.95 1813.29,-657.95"/>
528
+ <text xml:space="preserve" text-anchor="middle" x="2651.92" y="-732.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">backfill</text>
482
529
  </g>
483
530
  <!-- OJ&#45;&gt;W3 -->
484
531
  <g id="edge35" class="edge">
485
532
  <title>OJ&#45;&gt;W3</title>
486
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2369.27,-560.86C2408.3,-548.24 2453.61,-530.55 2465,-513.5 2516.46,-436.5 2462.49,-370.67 2384,-321.5 2362.03,-307.73 540.79,-323.82 517,-313.5 483.34,-298.9 456.25,-265.31 440.4,-241.65"/>
487
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="442.85,-240.28 436.15,-235.09 438.15,-243.33 442.85,-240.28"/>
488
- <text xml:space="preserve" text-anchor="middle" x="2507.34" y="-399.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">p(success)</text>
533
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2615.36,-788.4C2647.55,-775.99 2682.09,-755.5 2697,-722.5 2719.41,-672.88 2724.3,-647.11 2697,-600 2674.14,-560.56 2652.03,-560.81 2608,-549 2579.96,-541.48 544.63,-552.55 518,-541 484.34,-526.41 457.25,-492.81 441.4,-469.16"/>
534
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="443.85,-467.79 437.15,-462.59 439.15,-470.83 443.85,-467.79"/>
535
+ <text xml:space="preserve" text-anchor="middle" x="2737.81" y="-626.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">p(success)</text>
536
+ </g>
537
+ <!-- Checks&#45;&gt;Claims -->
538
+ <g id="edge38" class="edge">
539
+ <title>Checks&#45;&gt;Claims</title>
540
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2266.28,-611.41C2219.79,-593.33 2143.77,-565.56 2076,-549 2052.86,-543.35 2045.7,-548.22 2023,-541 1964.89,-522.53 1902.75,-488.47 1864.89,-465.9"/>
541
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1866.71,-463.73 1858.41,-462 1863.82,-468.52 1866.71,-463.73"/>
542
+ </g>
543
+ <!-- Promotion -->
544
+ <g id="node32" class="node">
545
+ <title>Promotion</title>
546
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M1414.62,-44C1414.62,-44 1219.38,-44 1219.38,-44 1213.38,-44 1207.38,-38 1207.38,-32 1207.38,-32 1207.38,-12 1207.38,-12 1207.38,-6 1213.38,0 1219.38,0 1219.38,0 1414.62,0 1414.62,0 1420.62,0 1426.62,-6 1426.62,-12 1426.62,-12 1426.62,-32 1426.62,-32 1426.62,-38 1420.62,-44 1414.62,-44"/>
547
+ <text xml:space="preserve" text-anchor="middle" x="1317" y="-30.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Fresh replay + per&#45;task nonregression</text>
548
+ <text xml:space="preserve" text-anchor="middle" x="1317" y="-18.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">operator approval / stopped writers</text>
549
+ <text xml:space="preserve" text-anchor="middle" x="1317" y="-6.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">receipt v1 + rollback refuses intervening writes</text>
550
+ </g>
551
+ <!-- Frozen&#45;&gt;Promotion -->
552
+ <g id="edge42" class="edge">
553
+ <title>Frozen&#45;&gt;Promotion</title>
554
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1239.82,-120.53C1254.17,-102.4 1276.86,-73.73 1293.93,-52.15"/>
555
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1295.95,-54.11 1298.72,-46.1 1291.56,-50.64 1295.95,-54.11"/>
556
+ </g>
557
+ <!-- Promotion&#45;&gt;Fpol -->
558
+ <g id="edge43" class="edge">
559
+ <title>Promotion&#45;&gt;Fpol</title>
560
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M1328.22,-44.51C1344.14,-76.35 1372.51,-138.39 1383,-195 1385.87,-210.48 1377.77,-224.97 1367.24,-236.67"/>
561
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1365.43,-234.51 1361.82,-242.18 1369.42,-238.44 1365.43,-234.51"/>
562
+ <text xml:space="preserve" text-anchor="middle" x="1400.34" y="-135.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">explicit target</text>
489
563
  </g>
490
564
  </g>
491
565
  </svg>