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
@@ -3,796 +3,277 @@
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
- <!-- Title: PWN_AI_Feedback_Learning_Loop Pages: 1 -->
7
- <svg width="4989pt" height="852pt"
8
- viewBox="0.00 0.00 4989.00 852.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 808.83)">
10
- <title>PWN_AI_Feedback_Learning_Loop</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-808.83 4946.17,-808.83 4946.17,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="2264.74" y="-743.62" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">pwn&#45;ai &#45; Closed Self&#45;Improvement Loop</text>
13
- <text xml:space="preserve" text-anchor="start" x="2132.36" y="-732.17" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world) &#160;· &#160;Mistakes (negative) &#160;· &#160;Reward + Curriculum + Policy (RL) &#160;· &#160;Local&#45;model scaffolding</text>
14
- <g id="clust2" class="cluster">
15
- <title>cluster_core</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M710,-498.62C710,-498.62 1992,-498.62 1992,-498.62 1998,-498.62 2004,-504.62 2004,-510.62 2004,-510.62 2004,-613.62 2004,-613.62 2004,-619.62 1998,-625.62 1992,-625.62 1992,-625.62 710,-625.62 710,-625.62 704,-625.62 698,-619.62 698,-613.62 698,-613.62 698,-510.62 698,-510.62 698,-504.62 704,-498.62 710,-498.62"/>
17
- <text xml:space="preserve" text-anchor="middle" x="1351" y="-602.62" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop &#160;· &#160;budget pressure · TaskSummarizer</text>
18
- </g>
19
- <g id="clust4" class="cluster">
20
- <title>cluster_intro</title>
21
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M752,-301.12C752,-301.12 3588,-301.12 3588,-301.12 3594,-301.12 3600,-307.12 3600,-313.12 3600,-313.12 3600,-429.62 3600,-429.62 3600,-435.62 3594,-441.62 3588,-441.62 3588,-441.62 752,-441.62 752,-441.62 746,-441.62 740,-435.62 740,-429.62 740,-429.62 740,-313.12 740,-313.12 740,-307.12 746,-301.12 752,-301.12"/>
22
- <text xml:space="preserve" text-anchor="middle" x="2170" y="-418.62" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
23
- </g>
24
- <g id="clust5" class="cluster">
25
- <title>cluster_extro</title>
26
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M20,-301.12C20,-301.12 702,-301.12 702,-301.12 708,-301.12 714,-307.12 714,-313.12 714,-313.12 714,-429.62 714,-429.62 714,-435.62 708,-441.62 702,-441.62 702,-441.62 20,-441.62 20,-441.62 14,-441.62 8,-435.62 8,-429.62 8,-429.62 8,-313.12 8,-313.12 8,-307.12 14,-301.12 20,-301.12"/>
27
- <text xml:space="preserve" text-anchor="middle" x="361" y="-418.62" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
28
- </g>
29
- <g id="clust7" class="cluster">
30
- <title>cluster_store</title>
31
- <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M842,-8C842,-8 2091,-8 2091,-8 2097,-8 2103,-14 2103,-20 2103,-20 2103,-122.62 2103,-122.62 2103,-128.62 2097,-134.62 2091,-134.62 2091,-134.62 842,-134.62 842,-134.62 836,-134.62 830,-128.62 830,-122.62 830,-122.62 830,-20 830,-20 830,-14 836,-8 842,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="1466.5" y="-111.62" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
33
- </g>
34
- <!-- User -->
6
+ <!-- Title: PWN_Feedback Pages: 1 -->
7
+ <svg width="1736pt" height="855pt"
8
+ viewBox="0.00 0.00 1736.00 855.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 811.45)">
10
+ <title>PWN_Feedback</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-811.45 1692.7,-811.45 1692.7,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="middle" x="824.75" y="-745.25" font-family="sans-Serif" font-size="20.00" fill="#e2e8f0">pwn&#45;ai &#45; evidence&#45;backed feedback, not automatic improvement</text>
13
+ <!-- Request -->
35
14
  <g id="node1" class="node">
36
- <title>User</title>
37
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M831.88,-726.62C831.88,-726.62 764.12,-726.62 764.12,-726.62 758.12,-726.62 752.12,-720.62 752.12,-714.62 752.12,-714.62 752.12,-702.62 752.12,-702.62 752.12,-696.62 758.12,-690.62 764.12,-690.62 764.12,-690.62 831.88,-690.62 831.88,-690.62 837.88,-690.62 843.88,-696.62 843.88,-702.62 843.88,-702.62 843.88,-714.62 843.88,-714.62 843.88,-720.62 837.88,-726.62 831.88,-726.62"/>
38
- <text xml:space="preserve" text-anchor="middle" x="798" y="-704.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
15
+ <title>Request</title>
16
+ <path fill="#7dd3fc" stroke="#334155" d="M403.25,-737C403.25,-737 220.75,-737 220.75,-737 214.75,-737 208.75,-731 208.75,-725 208.75,-725 208.75,-713 208.75,-713 208.75,-707 214.75,-701 220.75,-701 220.75,-701 403.25,-701 403.25,-701 409.25,-701 415.25,-707 415.25,-713 415.25,-713 415.25,-725 415.25,-725 415.25,-731 409.25,-737 403.25,-737"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="312" y="-715.3" font-family="sans-Serif" font-size="11.00">Original request + additive amendments</text>
39
18
  </g>
40
- <!-- Prompt -->
19
+ <!-- Loop -->
41
20
  <g id="node4" class="node">
42
- <title>Prompt</title>
43
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M817.62,-555.12C817.62,-555.12 718.38,-555.12 718.38,-555.12 712.38,-555.12 706.38,-549.12 706.38,-543.12 706.38,-543.12 706.38,-518.62 706.38,-518.62 706.38,-512.62 712.38,-506.62 718.38,-506.62 718.38,-506.62 817.62,-506.62 817.62,-506.62 823.62,-506.62 829.62,-512.62 829.62,-518.62 829.62,-518.62 829.62,-543.12 829.62,-543.12 829.62,-549.12 823.62,-555.12 817.62,-555.12"/>
44
- <text xml:space="preserve" text-anchor="middle" x="768" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
- <text xml:space="preserve" text-anchor="middle" x="768" y="-527.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">budget · MemoryIndex</text>
46
- <text xml:space="preserve" text-anchor="middle" x="768" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">relevance&#45;ranked ctx</text>
21
+ <title>Loop</title>
22
+ <path fill="#c4b5fd" stroke="#334155" d="M425,-664C425,-664 199,-664 199,-664 193,-664 187,-658 187,-652 187,-652 187,-640 187,-640 187,-634 193,-628 199,-628 199,-628 425,-628 425,-628 431,-628 437,-634 437,-640 437,-640 437,-652 437,-652 437,-658 431,-664 425,-664"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="312" y="-649.05" font-family="sans-Serif" font-size="11.00">Loop / request&#45;owned runtime</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="312" y="-635.55" font-family="sans-Serif" font-size="11.00">TaskSummarizer compass is UX, not acceptance</text>
47
25
  </g>
48
- <!-- User&#45;&gt;Prompt -->
26
+ <!-- Request&#45;&gt;Loop -->
49
27
  <g id="edge1" class="edge">
50
- <title>User&#45;&gt;Prompt</title>
51
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M795.01,-690.13C790.11,-661.41 780.27,-603.75 773.91,-566.52"/>
52
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="776.68,-566.08 772.57,-558.67 771.16,-567.02 776.68,-566.08"/>
53
- <text xml:space="preserve" text-anchor="middle" x="796.55" y="-640.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
54
- </g>
55
- <!-- Mistakes -->
56
- <g id="node13" class="node">
57
- <title>Mistakes</title>
58
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M2746.25,-371.12C2746.25,-371.12 2599.75,-371.12 2599.75,-371.12 2593.75,-371.12 2587.75,-365.12 2587.75,-359.12 2587.75,-359.12 2587.75,-321.12 2587.75,-321.12 2587.75,-315.12 2593.75,-309.12 2599.75,-309.12 2599.75,-309.12 2746.25,-309.12 2746.25,-309.12 2752.25,-309.12 2758.25,-315.12 2758.25,-321.12 2758.25,-321.12 2758.25,-359.12 2758.25,-359.12 2758.25,-365.12 2752.25,-371.12 2746.25,-371.12"/>
59
- <text xml:space="preserve" text-anchor="middle" x="2673" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Mistakes</text>
60
- <text xml:space="preserve" text-anchor="middle" x="2673" y="-343.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">record · resolve</text>
61
- <text xml:space="preserve" text-anchor="middle" x="2673" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">guard · correction_hint</text>
62
- <text xml:space="preserve" text-anchor="middle" x="2673" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
28
+ <title>Request&#45;&gt;Loop</title>
29
+ <path fill="none" stroke="#94a3b8" d="M312,-700.81C312,-693.23 312,-684.1 312,-675.54"/>
30
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="315.5,-675.54 312,-665.54 308.5,-675.54 315.5,-675.54"/>
63
31
  </g>
64
- <!-- User&#45;&gt;Mistakes -->
65
- <g id="edge16" class="edge">
66
- <title>User&#45;&gt;Mistakes</title>
67
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M751.68,-702.95C688.01,-694.89 585.78,-675.09 627,-633.62 633.79,-626.79 2004.48,-627.11 2014,-625.62 2200.82,-596.54 2237.03,-546.24 2420,-498.62 2478.88,-483.3 2501.1,-500.69 2554,-470.62 2592.82,-448.56 2626.13,-409.44 2647.55,-379.96"/>
68
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2649.77,-381.66 2652.13,-373.52 2645.21,-378.41 2649.77,-381.66"/>
69
- <text xml:space="preserve" text-anchor="middle" x="2466.5" y="-532.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">&quot;that&#39;s wrong&quot;</text>
70
- <text xml:space="preserve" text-anchor="middle" x="2466.5" y="-522.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">check_user_correction</text>
71
- </g>
72
- <!-- Fprf -->
73
- <g id="node31" class="node">
74
- <title>Fprf</title>
75
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2094.88,-54.79C2094.88,-56.6 2072.97,-58.06 2046,-58.06 2019.03,-58.06 1997.12,-56.6 1997.12,-54.79 1997.12,-54.79 1997.12,-25.34 1997.12,-25.34 1997.12,-23.53 2019.03,-22.06 2046,-22.06 2072.97,-22.06 2094.88,-23.53 2094.88,-25.34 2094.88,-25.34 2094.88,-54.79 2094.88,-54.79"/>
76
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2094.88,-54.79C2094.88,-52.98 2072.97,-51.52 2046,-51.52 2019.03,-51.52 1997.12,-52.98 1997.12,-54.79"/>
77
- <text xml:space="preserve" text-anchor="middle" x="2046" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">preferences.jsonl</text>
78
- </g>
79
- <!-- User&#45;&gt;Fprf -->
80
- <g id="edge75" class="edge">
81
- <title>User&#45;&gt;Fprf</title>
82
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M763.94,-690.06C738.59,-674.84 711.35,-652.36 730,-633.62 738.77,-624.82 2506.83,-628.14 2519,-625.62 2659.99,-596.51 2677.91,-535.8 2817,-498.62 2993.44,-451.46 3042.72,-461.1 3225,-449.62 3242.96,-448.49 4506.7,-452.55 4521,-441.62 4589.95,-388.94 4599.32,-333.05 4568,-252.12 4541.46,-183.56 4514.13,-164.71 4444,-142.62 4214.87,-70.47 2452.77,-45.9 2105.37,-41.73"/>
83
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2105.5,-38.93 2097.47,-41.64 2105.44,-44.53 2105.5,-38.93"/>
84
- <text xml:space="preserve" text-anchor="middle" x="4617" y="-342.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">user_correction</text>
85
- <text xml:space="preserve" text-anchor="middle" x="4617" y="-331.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">→ DPO pair</text>
86
- </g>
87
- <!-- LLM -->
32
+ <!-- Host -->
88
33
  <g id="node2" class="node">
89
- <title>LLM</title>
90
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M573,-726.62C573,-726.62 497,-726.62 497,-726.62 491,-726.62 485,-720.62 485,-714.62 485,-714.62 485,-702.62 485,-702.62 485,-696.62 491,-690.62 497,-690.62 497,-690.62 573,-690.62 573,-690.62 579,-690.62 585,-696.62 585,-702.62 585,-702.62 585,-714.62 585,-714.62 585,-720.62 579,-726.62 573,-726.62"/>
91
- <text xml:space="preserve" text-anchor="middle" x="535" y="-704.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
34
+ <title>Host</title>
35
+ <path fill="#6ee7b7" stroke="#334155" d="M977.5,-229C977.5,-229 730.5,-229 730.5,-229 724.5,-229 718.5,-223 718.5,-217 718.5,-217 718.5,-192.5 718.5,-192.5 718.5,-186.5 724.5,-180.5 730.5,-180.5 730.5,-180.5 977.5,-180.5 977.5,-180.5 983.5,-180.5 989.5,-186.5 989.5,-192.5 989.5,-192.5 989.5,-217 989.5,-217 989.5,-223 983.5,-229 977.5,-229"/>
36
+ <text xml:space="preserve" text-anchor="middle" x="854" y="-214.55" font-family="sans-Serif" font-size="11.00">Living off the land</text>
37
+ <text xml:space="preserve" text-anchor="middle" x="854" y="-201.05" font-family="sans-Serif" font-size="11.00">DetectOS native PATH inventory API</text>
38
+ <text xml:space="preserve" text-anchor="middle" x="854" y="-187.55" font-family="sans-Serif" font-size="11.00">HOST injects OS summary + PreflightChecker health</text>
92
39
  </g>
93
- <!-- Dispatch -->
94
- <g id="node5" class="node">
95
- <title>Dispatch</title>
96
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1591.62,-555.12C1591.62,-555.12 1480.38,-555.12 1480.38,-555.12 1474.38,-555.12 1468.38,-549.12 1468.38,-543.12 1468.38,-543.12 1468.38,-518.62 1468.38,-518.62 1468.38,-512.62 1474.38,-506.62 1480.38,-506.62 1480.38,-506.62 1591.62,-506.62 1591.62,-506.62 1597.62,-506.62 1603.62,-512.62 1603.62,-518.62 1603.62,-518.62 1603.62,-543.12 1603.62,-543.12 1603.62,-549.12 1597.62,-555.12 1591.62,-555.12"/>
97
- <text xml:space="preserve" text-anchor="middle" x="1536" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
98
- <text xml:space="preserve" text-anchor="middle" x="1536" y="-527.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tolerant parse</text>
99
- <text xml:space="preserve" text-anchor="middle" x="1536" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">ToolGuard · repair_name</text>
40
+ <!-- Prompt -->
41
+ <g id="node3" class="node">
42
+ <title>Prompt</title>
43
+ <path fill="#c4b5fd" stroke="#334155" d="M396.25,-127.75C396.25,-127.75 153.75,-127.75 153.75,-127.75 147.75,-127.75 141.75,-121.75 141.75,-115.75 141.75,-115.75 141.75,-103.75 141.75,-103.75 141.75,-97.75 147.75,-91.75 153.75,-91.75 153.75,-91.75 396.25,-91.75 396.25,-91.75 402.25,-91.75 408.25,-97.75 408.25,-103.75 408.25,-103.75 408.25,-115.75 408.25,-115.75 408.25,-121.75 402.25,-127.75 396.25,-127.75"/>
44
+ <text xml:space="preserve" text-anchor="middle" x="275" y="-112.8" font-family="sans-Serif" font-size="11.00">PromptBuilder</text>
45
+ <text xml:space="preserve" text-anchor="middle" x="275" y="-99.3" font-family="sans-Serif" font-size="11.00">budgeted memory / skills / lessons / mistakes / policy</text>
100
46
  </g>
101
- <!-- LLM&#45;&gt;Dispatch -->
47
+ <!-- Host&#45;&gt;Prompt -->
102
48
  <g id="edge2" class="edge">
103
- <title>LLM&#45;&gt;Dispatch</title>
104
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M523.92,-679.84C519.67,-664.18 518.29,-645.44 530,-633.62 538.55,-624.99 1393.45,-629.39 1405,-625.62 1443.22,-613.16 1479.82,-585.14 1504.57,-562.95"/>
105
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="521.16,-680.42 526.26,-687.18 526.49,-678.71 521.16,-680.42"/>
106
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="1506.26,-565.2 1510.27,-557.73 1502.48,-561.08 1506.26,-565.2"/>
107
- <text xml:space="preserve" text-anchor="middle" x="549.5" y="-640.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
49
+ <title>Host&#45;&gt;Prompt</title>
50
+ <path fill="none" stroke="#94a3b8" d="M718.33,-181.84C715.53,-181.39 712.75,-180.94 710,-180.5 603.66,-163.39 482.67,-144 395.34,-130.01"/>
51
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="395.98,-126.57 385.55,-128.44 394.87,-133.48 395.98,-126.57"/>
52
+ </g>
53
+ <!-- Prompt&#45;&gt;Loop -->
54
+ <g id="edge3" class="edge">
55
+ <title>Prompt&#45;&gt;Loop</title>
56
+ <path fill="none" stroke="#94a3b8" d="M160.76,-128.21C85.21,-143.09 0,-167.84 0,-203.75 0,-574 0,-574 0,-574 0,-612.54 91.68,-630.16 175.64,-638.22"/>
57
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="175.11,-641.68 185.39,-639.11 175.75,-634.71 175.11,-641.68"/>
58
+ </g>
59
+ <!-- Tools -->
60
+ <g id="node5" class="node">
61
+ <title>Tools</title>
62
+ <path fill="#c4b5fd" stroke="#334155" d="M395,-591C395,-591 229,-591 229,-591 223,-591 217,-585 217,-579 217,-579 217,-567 217,-567 217,-561 223,-555 229,-555 229,-555 395,-555 395,-555 401,-555 407,-561 407,-567 407,-567 407,-579 407,-579 407,-585 401,-591 395,-591"/>
63
+ <text xml:space="preserve" text-anchor="middle" x="312" y="-576.05" font-family="sans-Serif" font-size="11.00">Registry &#45;&gt; Dispatch &#45;&gt; actual tools</text>
64
+ <text xml:space="preserve" text-anchor="middle" x="312" y="-562.55" font-family="sans-Serif" font-size="11.00">permissions / confirmation / sandbox</text>
65
+ </g>
66
+ <!-- Loop&#45;&gt;Tools -->
67
+ <g id="edge4" class="edge">
68
+ <title>Loop&#45;&gt;Tools</title>
69
+ <path fill="none" stroke="#94a3b8" d="M312,-627.81C312,-620.23 312,-611.1 312,-602.54"/>
70
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="315.5,-602.54 312,-592.54 308.5,-602.54 315.5,-602.54"/>
71
+ </g>
72
+ <!-- Final -->
73
+ <g id="node8" class="node">
74
+ <title>Final</title>
75
+ <path fill="#c4b5fd" stroke="#334155" d="M719.25,-416.75C719.25,-416.75 494.75,-416.75 494.75,-416.75 488.75,-416.75 482.75,-410.75 482.75,-404.75 482.75,-404.75 482.75,-392.75 482.75,-392.75 482.75,-386.75 488.75,-380.75 494.75,-380.75 494.75,-380.75 719.25,-380.75 719.25,-380.75 725.25,-380.75 731.25,-386.75 731.25,-392.75 731.25,-392.75 731.25,-404.75 731.25,-404.75 731.25,-410.75 725.25,-416.75 719.25,-416.75"/>
76
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-401.8" font-family="sans-Serif" font-size="11.00">Completion arbiter</text>
77
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-388.3" font-family="sans-Serif" font-size="11.00">no tool calls != done; all original obligations apply</text>
78
+ </g>
79
+ <!-- Loop&#45;&gt;Final -->
80
+ <g id="edge9" class="edge">
81
+ <title>Loop&#45;&gt;Final</title>
82
+ <path fill="none" stroke="#94a3b8" d="M437.43,-628.51C505.71,-612.43 584.69,-580.68 627,-518 645.25,-490.97 633.68,-452.75 621.95,-427.15"/>
83
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="625.2,-425.83 617.66,-418.38 618.91,-428.91 625.2,-425.83"/>
108
84
  </g>
109
85
  <!-- World -->
110
- <g id="node3" class="node">
86
+ <g id="node6" class="node">
111
87
  <title>World</title>
112
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M2019.88,-726.62C2019.88,-726.62 1898.12,-726.62 1898.12,-726.62 1892.12,-726.62 1886.12,-720.62 1886.12,-714.62 1886.12,-714.62 1886.12,-702.62 1886.12,-702.62 1886.12,-696.62 1892.12,-690.62 1898.12,-690.62 1898.12,-690.62 2019.88,-690.62 2019.88,-690.62 2025.88,-690.62 2031.88,-696.62 2031.88,-702.62 2031.88,-702.62 2031.88,-714.62 2031.88,-714.62 2031.88,-720.62 2025.88,-726.62 2019.88,-726.62"/>
113
- <text xml:space="preserve" text-anchor="middle" x="1959" y="-711.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
114
- <text xml:space="preserve" text-anchor="middle" x="1959" y="-698.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · RF · Web · Intel</text>
88
+ <path fill="#fcd34d" stroke="#334155" d="M272.38,-518C272.38,-518 39.62,-518 39.62,-518 33.62,-518 27.62,-512 27.62,-506 27.62,-506 27.62,-481.5 27.62,-481.5 27.62,-475.5 33.62,-469.5 39.62,-469.5 39.62,-469.5 272.38,-469.5 272.38,-469.5 278.38,-469.5 284.38,-475.5 284.38,-481.5 284.38,-481.5 284.38,-506 284.38,-506 284.38,-512 278.38,-518 272.38,-518"/>
89
+ <text xml:space="preserve" text-anchor="middle" x="156" y="-503.55" font-family="sans-Serif" font-size="11.00">Extrospection</text>
90
+ <text xml:space="preserve" text-anchor="middle" x="156" y="-490.05" font-family="sans-Serif" font-size="11.00">on&#45;demand observe / intel / watch / verify / RF etc.</text>
91
+ <text xml:space="preserve" text-anchor="middle" x="156" y="-476.55" font-family="sans-Serif" font-size="11.00">auto baseline: host / repo / env only</text>
92
+ </g>
93
+ <!-- Tools&#45;&gt;World -->
94
+ <g id="edge6" class="edge">
95
+ <title>Tools&#45;&gt;World</title>
96
+ <path fill="none" stroke="#94a3b8" d="M276.99,-554.66C258.46,-545.49 235.23,-533.98 214.09,-523.51"/>
97
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="215.78,-520.45 205.26,-519.14 212.67,-526.72 215.78,-520.45"/>
115
98
  </g>
116
- <!-- Result -->
99
+ <!-- Evidence -->
100
+ <g id="node7" class="node">
101
+ <title>Evidence</title>
102
+ <path fill="#fcd34d" stroke="#334155" d="M617.88,-513.44C617.88,-515.85 555.63,-517.81 479,-517.81 402.37,-517.81 340.12,-515.85 340.12,-513.44 340.12,-513.44 340.12,-474.06 340.12,-474.06 340.12,-471.65 402.37,-469.69 479,-469.69 555.63,-469.69 617.88,-471.65 617.88,-474.06 617.88,-474.06 617.88,-513.44 617.88,-513.44"/>
103
+ <path fill="none" stroke="#334155" d="M617.88,-513.44C617.88,-511.02 555.63,-509.06 479,-509.06 402.37,-509.06 340.12,-511.02 340.12,-513.44"/>
104
+ <text xml:space="preserve" text-anchor="middle" x="479" y="-496.8" font-family="sans-Serif" font-size="11.00">Host receipts / exact&#45;target stat + digest</text>
105
+ <text xml:space="preserve" text-anchor="middle" x="479" y="-483.3" font-family="sans-Serif" font-size="11.00">executed authored checks; failed/unknown stay distinct</text>
106
+ </g>
107
+ <!-- Tools&#45;&gt;Evidence -->
108
+ <g id="edge5" class="edge">
109
+ <title>Tools&#45;&gt;Evidence</title>
110
+ <path fill="none" stroke="#94a3b8" d="M349.48,-554.66C369.66,-545.33 395.06,-533.58 418,-522.97"/>
111
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="419.37,-526.19 426.97,-518.82 416.43,-519.84 419.37,-526.19"/>
112
+ </g>
113
+ <!-- Mistakes -->
117
114
  <g id="node10" class="node">
118
- <title>Result</title>
119
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1983.88,-548.88C1983.88,-548.88 1934.12,-548.88 1934.12,-548.88 1928.12,-548.88 1922.12,-542.88 1922.12,-536.88 1922.12,-536.88 1922.12,-524.88 1922.12,-524.88 1922.12,-518.88 1928.12,-512.88 1934.12,-512.88 1934.12,-512.88 1983.88,-512.88 1983.88,-512.88 1989.88,-512.88 1995.88,-518.88 1995.88,-524.88 1995.88,-524.88 1995.88,-536.88 1995.88,-536.88 1995.88,-542.88 1989.88,-548.88 1983.88,-548.88"/>
120
- <text xml:space="preserve" text-anchor="middle" x="1959" y="-533.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
121
- <text xml:space="preserve" text-anchor="middle" x="1959" y="-520.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
122
- </g>
123
- <!-- World&#45;&gt;Result -->
124
- <!-- Snapshot -->
125
- <g id="node18" class="node">
126
- <title>Snapshot</title>
127
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M353.62,-371.12C353.62,-371.12 188.38,-371.12 188.38,-371.12 182.38,-371.12 176.38,-365.12 176.38,-359.12 176.38,-359.12 176.38,-321.12 176.38,-321.12 176.38,-315.12 182.38,-309.12 188.38,-309.12 188.38,-309.12 353.62,-309.12 353.62,-309.12 359.62,-309.12 365.62,-315.12 365.62,-321.12 365.62,-321.12 365.62,-359.12 365.62,-359.12 365.62,-365.12 359.62,-371.12 353.62,-371.12"/>
128
- <text xml:space="preserve" text-anchor="middle" x="271" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
129
- <text xml:space="preserve" text-anchor="middle" x="271" y="-343.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain</text>
130
- <text xml:space="preserve" text-anchor="middle" x="271" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repo/env/rf/web</text>
131
- <text xml:space="preserve" text-anchor="middle" x="271" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(AUTO_SECTIONS=host/repo/env)</text>
132
- </g>
133
- <!-- World&#45;&gt;Snapshot -->
134
- <g id="edge19" class="edge">
135
- <title>World&#45;&gt;Snapshot</title>
136
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1885.67,-694.86C1835.81,-683.22 1783.77,-663.27 1813,-633.62 1824.22,-622.25 2373.18,-631.59 2388,-625.62 2487.75,-585.49 2629.89,-525.8 2554,-449.62 2543.38,-438.96 401.09,-446.91 387,-441.62 353.46,-429.04 323.15,-401.96 301.93,-379.07"/>
137
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="304.13,-377.33 296.69,-373.27 299.98,-381.08 304.13,-377.33"/>
138
- </g>
139
- <!-- Observe -->
140
- <g id="node19" class="node">
141
- <title>Observe</title>
142
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M529.5,-358.12C529.5,-358.12 420.5,-358.12 420.5,-358.12 414.5,-358.12 408.5,-352.12 408.5,-346.12 408.5,-346.12 408.5,-334.12 408.5,-334.12 408.5,-328.12 414.5,-322.12 420.5,-322.12 420.5,-322.12 529.5,-322.12 529.5,-322.12 535.5,-322.12 541.5,-328.12 541.5,-334.12 541.5,-334.12 541.5,-346.12 541.5,-346.12 541.5,-352.12 535.5,-358.12 529.5,-358.12"/>
143
- <text xml:space="preserve" text-anchor="middle" x="475" y="-343.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel · watch</text>
144
- <text xml:space="preserve" text-anchor="middle" x="475" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon · CVE · web DOM</text>
145
- </g>
146
- <!-- World&#45;&gt;Observe -->
147
- <g id="edge20" class="edge">
148
- <title>World&#45;&gt;Observe</title>
149
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1885.69,-690.71C1844.65,-678.04 1806.25,-658.6 1831,-633.62 1848.29,-616.18 2692.81,-636.13 2715,-625.62 2781.45,-594.17 2756.15,-533.27 2821,-498.62 2925.87,-442.6 3167.94,-533.83 3084,-449.62 3071.64,-437.23 578.93,-448.88 563,-441.62 529.54,-426.39 503.78,-391.48 489.01,-367.11"/>
150
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="491.52,-365.86 485.06,-360.36 486.68,-368.68 491.52,-365.86"/>
151
- </g>
152
- <!-- Verify -->
153
- <g id="node20" class="node">
154
- <title>Verify</title>
155
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M693.5,-364.38C693.5,-364.38 596.5,-364.38 596.5,-364.38 590.5,-364.38 584.5,-358.38 584.5,-352.38 584.5,-352.38 584.5,-327.88 584.5,-327.88 584.5,-321.88 590.5,-315.88 596.5,-315.88 596.5,-315.88 693.5,-315.88 693.5,-315.88 699.5,-315.88 705.5,-321.88 705.5,-327.88 705.5,-327.88 705.5,-352.38 705.5,-352.38 705.5,-358.38 699.5,-364.38 693.5,-364.38"/>
156
- <text xml:space="preserve" text-anchor="middle" x="645" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">verify (browser)</text>
157
- <text xml:space="preserve" text-anchor="middle" x="645" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">fact&#45;check own claims</text>
158
- <text xml:space="preserve" text-anchor="middle" x="645" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">revalidate_memory</text>
159
- </g>
160
- <!-- World&#45;&gt;Verify -->
161
- <g id="edge21" class="edge">
162
- <title>World&#45;&gt;Verify</title>
163
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1897.22,-689.99C1860.5,-676.62 1825.17,-656.65 1848,-633.62 1857.58,-623.97 2814.45,-630.86 2827,-625.62 2900.89,-594.79 2883.34,-534.82 2954.75,-498.62 3028.03,-461.48 3191,-507.82 3133,-449.62 3121.22,-437.81 745.13,-448.67 730,-441.62 700.33,-427.8 677.24,-397.97 662.67,-374.39"/>
164
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="665.17,-373.11 658.68,-367.65 660.35,-375.96 665.17,-373.11"/>
165
- <text xml:space="preserve" text-anchor="middle" x="2996.38" y="-532.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">TransparentBrowser</text>
166
- <text xml:space="preserve" text-anchor="middle" x="2996.38" y="-522.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:headless</text>
167
- </g>
168
- <!-- RFTune -->
169
- <g id="node21" class="node">
170
- <title>RFTune</title>
171
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M121.62,-364.38C121.62,-364.38 28.38,-364.38 28.38,-364.38 22.38,-364.38 16.38,-358.38 16.38,-352.38 16.38,-352.38 16.38,-327.88 16.38,-327.88 16.38,-321.88 22.38,-315.88 28.38,-315.88 28.38,-315.88 121.62,-315.88 121.62,-315.88 127.62,-315.88 133.62,-321.88 133.62,-327.88 133.62,-327.88 133.62,-352.38 133.62,-352.38 133.62,-358.38 127.62,-364.38 121.62,-364.38"/>
172
- <text xml:space="preserve" text-anchor="middle" x="75" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rf_tune &#160;📡</text>
173
- <text xml:space="preserve" text-anchor="middle" x="75" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tune GQRX · demod</text>
174
- <text xml:space="preserve" text-anchor="middle" x="75" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RDS → now_playing</text>
175
- </g>
176
- <!-- World&#45;&gt;RFTune -->
177
- <g id="edge22" class="edge">
178
- <title>World&#45;&gt;RFTune</title>
179
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1932.3,-689.97C1911.52,-674.16 1888.85,-650.89 1906,-633.62 1928.27,-611.19 3021.73,-648.06 3044,-625.62 3083.77,-585.57 3081.87,-540.48 3044,-498.62 2970.57,-417.49 2663.29,-455.26 2554,-449.62 2537.36,-448.77 169.99,-448.89 155,-441.62 126.37,-427.76 104.81,-398.15 91.33,-374.64"/>
180
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="93.8,-373.33 87.5,-367.66 88.89,-376.02 93.8,-373.33"/>
181
- <text xml:space="preserve" text-anchor="middle" x="3101.62" y="-532.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">GQRX remote</text>
182
- <text xml:space="preserve" text-anchor="middle" x="3101.62" y="-522.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:7356 + SDR</text>
115
+ <title>Mistakes</title>
116
+ <path fill="#6ee7b7" stroke="#334155" d="M345.62,-423C345.62,-423 180.38,-423 180.38,-423 174.38,-423 168.38,-417 168.38,-411 168.38,-411 168.38,-386.5 168.38,-386.5 168.38,-380.5 174.38,-374.5 180.38,-374.5 180.38,-374.5 345.62,-374.5 345.62,-374.5 351.62,-374.5 357.62,-380.5 357.62,-386.5 357.62,-386.5 357.62,-411 357.62,-411 357.62,-417 351.62,-423 345.62,-423"/>
117
+ <text xml:space="preserve" text-anchor="middle" x="263" y="-408.55" font-family="sans-Serif" font-size="11.00">Mistakes / Metrics / Reflect</text>
118
+ <text xml:space="preserve" text-anchor="middle" x="263" y="-395.05" font-family="sans-Serif" font-size="11.00">failures, fixes and diagnostic lessons</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="263" y="-381.55" font-family="sans-Serif" font-size="11.00">correlation is not causal proof</text>
183
120
  </g>
184
- <!-- Router -->
185
- <g id="node6" class="node">
186
- <title>Router</title>
187
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M990.62,-555.12C990.62,-555.12 927.38,-555.12 927.38,-555.12 921.38,-555.12 915.38,-549.12 915.38,-543.12 915.38,-543.12 915.38,-518.62 915.38,-518.62 915.38,-512.62 921.38,-506.62 927.38,-506.62 927.38,-506.62 990.62,-506.62 990.62,-506.62 996.62,-506.62 1002.62,-512.62 1002.62,-518.62 1002.62,-518.62 1002.62,-543.12 1002.62,-543.12 1002.62,-549.12 996.62,-555.12 990.62,-555.12"/>
188
- <text xml:space="preserve" text-anchor="middle" x="959" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Registry</text>
189
- <text xml:space="preserve" text-anchor="middle" x="959" y="-527.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool_router</text>
190
- <text xml:space="preserve" text-anchor="middle" x="959" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">CORE + top&#45;K</text>
121
+ <!-- Tools&#45;&gt;Mistakes -->
122
+ <g id="edge11" class="edge">
123
+ <title>Tools&#45;&gt;Mistakes</title>
124
+ <path fill="none" stroke="#94a3b8" d="M309.99,-554.67C307.32,-534.06 301.88,-498.77 293,-469.5 289.37,-457.55 284.32,-444.9 279.4,-433.69"/>
125
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="282.71,-432.51 275.39,-424.84 276.33,-435.4 282.71,-432.51"/>
191
126
  </g>
192
- <!-- Prompt&#45;&gt;Router -->
193
- <g id="edge4" class="edge">
194
- <title>Prompt&#45;&gt;Router</title>
195
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M830.3,-530.88C855.15,-530.88 880.01,-530.88 904.86,-530.88"/>
196
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="904.79,-533.68 912.79,-530.88 904.79,-528.08 904.79,-533.68"/>
127
+ <!-- World&#45;&gt;Prompt -->
128
+ <g id="edge7" class="edge">
129
+ <title>World&#45;&gt;Prompt</title>
130
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M149.68,-469.24C145.2,-450.55 140,-423.67 140,-399.75 140,-399.75 140,-399.75 140,-203.75 140,-169.47 169.89,-146.85 201.54,-132.52"/>
131
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="202.61,-135.87 210.45,-128.75 199.88,-129.43 202.61,-135.87"/>
197
132
  </g>
198
- <!-- Escalate -->
199
- <g id="node9" class="node">
200
- <title>Escalate</title>
201
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1824.75,-548.88C1824.75,-548.88 1717.25,-548.88 1717.25,-548.88 1711.25,-548.88 1705.25,-542.88 1705.25,-536.88 1705.25,-536.88 1705.25,-524.88 1705.25,-524.88 1705.25,-518.88 1711.25,-512.88 1717.25,-512.88 1717.25,-512.88 1824.75,-512.88 1824.75,-512.88 1830.75,-512.88 1836.75,-518.88 1836.75,-524.88 1836.75,-524.88 1836.75,-536.88 1836.75,-536.88 1836.75,-542.88 1830.75,-548.88 1824.75,-548.88"/>
202
- <text xml:space="preserve" text-anchor="middle" x="1771" y="-533.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">escalate</text>
203
- <text xml:space="preserve" text-anchor="middle" x="1771" y="-520.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">&gt;=N fails → Swarm hint</text>
133
+ <!-- World&#45;&gt;Mistakes -->
134
+ <g id="edge12" class="edge">
135
+ <title>World&#45;&gt;Mistakes</title>
136
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M183.28,-469.04C196.61,-457.45 212.83,-443.36 227.15,-430.91"/>
137
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="229.38,-433.61 234.63,-424.41 224.79,-428.33 229.38,-433.61"/>
138
+ <text xml:space="preserve" text-anchor="middle" x="230.71" y="-442.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">correlate</text>
204
139
  </g>
205
- <!-- Dispatch&#45;&gt;Escalate -->
140
+ <!-- Evidence&#45;&gt;Final -->
206
141
  <g id="edge8" class="edge">
207
- <title>Dispatch&#45;&gt;Escalate</title>
208
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1604.29,-530.88C1632.66,-530.88 1665.7,-530.88 1694.84,-530.88"/>
209
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1694.6,-533.68 1702.6,-530.88 1694.6,-528.08 1694.6,-533.68"/>
210
- <text xml:space="preserve" text-anchor="middle" x="1654.44" y="-535.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">turn_fails &gt;= N</text>
142
+ <title>Evidence&#45;&gt;Final</title>
143
+ <path fill="none" stroke="#94a3b8" d="M511.3,-469.28C530.43,-455.38 554.62,-437.8 573.9,-423.8"/>
144
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="575.94,-426.64 581.97,-417.93 571.82,-420.98 575.94,-426.64"/>
211
145
  </g>
212
- <!-- Dispatch&#45;&gt;Result -->
213
- <g id="edge9" class="edge">
214
- <title>Dispatch&#45;&gt;Result</title>
215
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1558.6,-555.71C1588.61,-586.65 1644.94,-637.92 1705.5,-658.12 1760.73,-676.55 1782.92,-680.92 1836.5,-658.12 1884.48,-637.72 1922.76,-588.29 1943.06,-557.39"/>
216
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1945.29,-559.11 1947.24,-550.86 1940.57,-556.09 1945.29,-559.11"/>
146
+ <!-- Reward -->
147
+ <g id="node9" class="node">
148
+ <title>Reward</title>
149
+ <path fill="#6ee7b7" stroke="#334155" d="M693.75,-337.5C693.75,-337.5 520.25,-337.5 520.25,-337.5 514.25,-337.5 508.25,-331.5 508.25,-325.5 508.25,-325.5 508.25,-287.5 508.25,-287.5 508.25,-281.5 514.25,-275.5 520.25,-275.5 520.25,-275.5 693.75,-275.5 693.75,-275.5 699.75,-275.5 705.75,-281.5 705.75,-287.5 705.75,-287.5 705.75,-325.5 705.75,-325.5 705.75,-331.5 699.75,-337.5 693.75,-337.5"/>
150
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-323.05" font-family="sans-Serif" font-size="11.00">Reward + Learning</text>
151
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-309.55" font-family="sans-Serif" font-size="11.00">claimed_completion (judge claim)</text>
152
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-296.05" font-family="sans-Serif" font-size="11.00">verified_completion / false_completion</text>
153
+ <text xml:space="preserve" text-anchor="middle" x="607" y="-282.55" font-family="sans-Serif" font-size="11.00">rate denominator: checked claims</text>
154
+ </g>
155
+ <!-- Final&#45;&gt;Reward -->
156
+ <g id="edge10" class="edge">
157
+ <title>Final&#45;&gt;Reward</title>
158
+ <path fill="none" stroke="#94a3b8" d="M607,-380.35C607,-371.38 607,-360.02 607,-348.96"/>
159
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="610.5,-349.16 607,-339.16 603.5,-349.16 610.5,-349.16"/>
217
160
  </g>
218
- <!-- Metrics -->
161
+ <!-- Policy -->
219
162
  <g id="node11" class="node">
220
- <title>Metrics</title>
221
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M965.88,-364.38C965.88,-364.38 760.12,-364.38 760.12,-364.38 754.12,-364.38 748.12,-358.38 748.12,-352.38 748.12,-352.38 748.12,-327.88 748.12,-327.88 748.12,-321.88 754.12,-315.88 760.12,-315.88 760.12,-315.88 965.88,-315.88 965.88,-315.88 971.88,-315.88 977.88,-321.88 977.88,-327.88 977.88,-327.88 977.88,-352.38 977.88,-352.38 977.88,-358.38 971.88,-364.38 965.88,-364.38"/>
222
- <text xml:space="preserve" text-anchor="middle" x="863" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
223
- <text xml:space="preserve" text-anchor="middle" x="863" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">ESR = verified exploit tools / vulnerable tools</text>
224
- <text xml:space="preserve" text-anchor="middle" x="863" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">ASR = successful attacks / attempts</text>
163
+ <title>Policy</title>
164
+ <path fill="#6ee7b7" stroke="#334155" d="M1300.75,-222.75C1300.75,-222.75 1019.25,-222.75 1019.25,-222.75 1013.25,-222.75 1007.25,-216.75 1007.25,-210.75 1007.25,-210.75 1007.25,-198.75 1007.25,-198.75 1007.25,-192.75 1013.25,-186.75 1019.25,-186.75 1019.25,-186.75 1300.75,-186.75 1300.75,-186.75 1306.75,-186.75 1312.75,-192.75 1312.75,-198.75 1312.75,-198.75 1312.75,-210.75 1312.75,-210.75 1312.75,-216.75 1306.75,-222.75 1300.75,-222.75"/>
165
+ <text xml:space="preserve" text-anchor="middle" x="1160" y="-207.8" font-family="sans-Serif" font-size="11.00">Policy accounting + advisory ranking</text>
166
+ <text xml:space="preserve" text-anchor="middle" x="1160" y="-194.3" font-family="sans-Serif" font-size="11.00">positive training credit requires independent action attribution</text>
225
167
  </g>
226
- <!-- Dispatch&#45;&gt;Metrics -->
227
- <g id="edge11" class="edge">
228
- <title>Dispatch&#45;&gt;Metrics</title>
229
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1581.42,-506.06C1606.54,-489.94 1629.31,-468.26 1611,-449.62 1602.36,-440.82 1179.16,-443.7 1167,-441.62 1081.78,-427.11 987.91,-393.15 927.35,-368.71"/>
230
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="928.58,-366.19 920.12,-365.77 926.47,-371.38 928.58,-366.19"/>
231
- <text xml:space="preserve" text-anchor="middle" x="1649.13" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record(engine:)</text>
168
+ <!-- Reward&#45;&gt;Policy -->
169
+ <g id="edge13" class="edge">
170
+ <title>Reward&#45;&gt;Policy</title>
171
+ <path fill="none" stroke="#94a3b8" d="M706.18,-287.61C803.55,-270.05 951.65,-243.33 1051.96,-225.24"/>
172
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="1052.32,-228.73 1061.54,-223.51 1051.08,-221.84 1052.32,-228.73"/>
232
173
  </g>
233
- <!-- Dispatch&#45;&gt;Mistakes -->
234
- <g id="edge15" class="edge">
235
- <title>Dispatch&#45;&gt;Mistakes</title>
236
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1604.17,-515.21C1655.9,-503.82 1728.67,-487.21 1792,-470.62 1824.14,-462.21 1831.25,-456.52 1863.75,-449.62 2118.16,-395.66 2423.57,-363.32 2576.2,-349.32"/>
237
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="2576.2,-352.14 2583.91,-348.62 2575.69,-346.56 2576.2,-352.14"/>
238
- <text xml:space="preserve" text-anchor="middle" x="1882.88" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">on failure</text>
239
- <text xml:space="preserve" text-anchor="middle" x="1882.88" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
174
+ <!-- Regression -->
175
+ <g id="node12" class="node">
176
+ <title>Regression</title>
177
+ <path fill="#c4b5fd" stroke="#334155" d="M1637.5,-229C1637.5,-229 1342.5,-229 1342.5,-229 1336.5,-229 1330.5,-223 1330.5,-217 1330.5,-217 1330.5,-192.5 1330.5,-192.5 1330.5,-186.5 1336.5,-180.5 1342.5,-180.5 1342.5,-180.5 1637.5,-180.5 1637.5,-180.5 1643.5,-180.5 1649.5,-186.5 1649.5,-192.5 1649.5,-192.5 1649.5,-217 1649.5,-217 1649.5,-223 1643.5,-229 1637.5,-229"/>
178
+ <text xml:space="preserve" text-anchor="middle" x="1490" y="-214.55" font-family="sans-Serif" font-size="11.00">Learning.regression_task</text>
179
+ <text xml:space="preserve" text-anchor="middle" x="1490" y="-201.05" font-family="sans-Serif" font-size="11.00">exact failure/request digest + operator&#45;authored expected bytes</text>
180
+ <text xml:space="preserve" text-anchor="middle" x="1490" y="-187.55" font-family="sans-Serif" font-size="11.00">inert file/JSON recipe; split remains regression</text>
240
181
  </g>
241
- <!-- Curric -->
242
- <g id="node16" class="node">
243
- <title>Curric</title>
244
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M3086.88,-364.38C3086.88,-364.38 2947.12,-364.38 2947.12,-364.38 2941.12,-364.38 2935.12,-358.38 2935.12,-352.38 2935.12,-352.38 2935.12,-327.88 2935.12,-327.88 2935.12,-321.88 2941.12,-315.88 2947.12,-315.88 2947.12,-315.88 3086.88,-315.88 3086.88,-315.88 3092.88,-315.88 3098.88,-321.88 3098.88,-327.88 3098.88,-327.88 3098.88,-352.38 3098.88,-352.38 3098.88,-358.38 3092.88,-364.38 3086.88,-364.38"/>
245
- <text xml:space="preserve" text-anchor="middle" x="3017" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Curriculum</text>
246
- <text xml:space="preserve" text-anchor="middle" x="3017" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">practice · offline_judge</text>
247
- <text xml:space="preserve" text-anchor="middle" x="3017" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">critic/CF geometry · gate + diet</text>
248
- </g>
249
- <!-- Dispatch&#45;&gt;Curric -->
250
- <g id="edge68" class="edge">
251
- <title>Dispatch&#45;&gt;Curric</title>
252
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1467.77,-511.25C1447.69,-506.41 1425.58,-501.69 1405,-498.62 1305.13,-483.73 881.99,-521.17 953.25,-449.62 962.86,-439.98 2901.4,-446.78 2914,-441.62 2947.86,-427.76 2976.69,-396.87 2995.16,-372.97"/>
253
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2997.27,-374.82 2999.84,-366.74 2992.79,-371.46 2997.27,-374.82"/>
254
- <text xml:space="preserve" text-anchor="middle" x="982.12" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">counterfactual</text>
255
- <text xml:space="preserve" text-anchor="middle" x="982.12" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[REPEATING]</text>
182
+ <!-- Reward&#45;&gt;Regression -->
183
+ <g id="edge14" class="edge">
184
+ <title>Reward&#45;&gt;Regression</title>
185
+ <path fill="none" stroke="#94a3b8" d="M706,-295.88C841.81,-282.48 1093.82,-256.81 1319.02,-229.35"/>
186
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="1319.4,-232.83 1328.9,-228.14 1318.55,-225.88 1319.4,-232.83"/>
187
+ <text xml:space="preserve" text-anchor="middle" x="1213.13" y="-248.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">persisted verifier failure</text>
256
188
  </g>
257
- <!-- Policy -->
258
- <g id="node17" class="node">
259
- <title>Policy</title>
260
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M1299.62,-371.12C1299.62,-371.12 1200.38,-371.12 1200.38,-371.12 1194.38,-371.12 1188.38,-365.12 1188.38,-359.12 1188.38,-359.12 1188.38,-321.12 1188.38,-321.12 1188.38,-315.12 1194.38,-309.12 1200.38,-309.12 1200.38,-309.12 1299.62,-309.12 1299.62,-309.12 1305.62,-309.12 1311.62,-315.12 1311.62,-321.12 1311.62,-321.12 1311.62,-359.12 1311.62,-359.12 1311.62,-365.12 1305.62,-371.12 1299.62,-371.12"/>
261
- <text xml:space="preserve" text-anchor="middle" x="1250" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Policy</text>
262
- <text xml:space="preserve" text-anchor="middle" x="1250" y="-343.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">live Q / REINFORCE</text>
263
- <text xml:space="preserve" text-anchor="middle" x="1250" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">begin · observe · finish</text>
264
- <text xml:space="preserve" text-anchor="middle" x="1250" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">advisory rank only</text>
189
+ <!-- Skill -->
190
+ <g id="node15" class="node">
191
+ <title>Skill</title>
192
+ <path fill="#c4b5fd" stroke="#334155" d="M688.5,-222.75C688.5,-222.75 441.5,-222.75 441.5,-222.75 435.5,-222.75 429.5,-216.75 429.5,-210.75 429.5,-210.75 429.5,-198.75 429.5,-198.75 429.5,-192.75 435.5,-186.75 441.5,-186.75 441.5,-186.75 688.5,-186.75 688.5,-186.75 694.5,-186.75 700.5,-192.75 700.5,-198.75 700.5,-198.75 700.5,-210.75 700.5,-210.75 700.5,-216.75 694.5,-222.75 688.5,-222.75"/>
193
+ <text xml:space="preserve" text-anchor="middle" x="565" y="-207.8" font-family="sans-Serif" font-size="11.00">SkillReview default recommend</text>
194
+ <text xml:space="preserve" text-anchor="middle" x="565" y="-194.3" font-family="sans-Serif" font-size="11.00">auto&#45;safe limited to proven additions to existing SOPs</text>
265
195
  </g>
266
- <!-- Dispatch&#45;&gt;Policy -->
267
- <g id="edge12" class="edge">
268
- <title>Dispatch&#45;&gt;Policy</title>
269
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1603.88,-516.98C1650.94,-506.5 1707.65,-490.26 1722,-470.62 1727.51,-463.09 1728.53,-456.29 1722,-449.62 1706.91,-434.22 1353.44,-450.96 1334,-441.62 1307.1,-428.71 1285.7,-402.62 1271.24,-380.27"/>
270
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1273.68,-378.9 1267.08,-373.59 1268.93,-381.86 1273.68,-378.9"/>
271
- <text xml:space="preserve" text-anchor="middle" x="1754.27" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">observe_step</text>
196
+ <!-- Reward&#45;&gt;Skill -->
197
+ <g id="edge20" class="edge">
198
+ <title>Reward&#45;&gt;Skill</title>
199
+ <path fill="none" stroke="#94a3b8" d="M594.17,-275.03C588.61,-261.82 582.14,-246.47 576.72,-233.57"/>
200
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="579.95,-232.25 572.85,-224.39 573.5,-234.96 579.95,-232.25"/>
272
201
  </g>
273
- <!-- Dispatch&#45;&gt;Snapshot -->
274
- <g id="edge17" class="edge">
275
- <title>Dispatch&#45;&gt;Snapshot</title>
276
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1467.83,-510.83C1447.75,-505.98 1425.63,-501.37 1405,-498.62 997.73,-444.45 886.29,-538.02 481,-470.62 437.87,-463.45 425.23,-462.84 387,-441.62 357.07,-425.01 327.96,-399.76 306.39,-378.73"/>
277
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="308.43,-376.8 300.77,-373.16 304.49,-380.78 308.43,-376.8"/>
278
- <text xml:space="preserve" text-anchor="middle" x="493" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
202
+ <!-- Weights -->
203
+ <g id="node16" class="node">
204
+ <title>Weights</title>
205
+ <path fill="#c4b5fd" stroke="#334155" d="M399.88,-229C399.88,-229 218.12,-229 218.12,-229 212.12,-229 206.12,-223 206.12,-217 206.12,-217 206.12,-192.5 206.12,-192.5 206.12,-186.5 212.12,-180.5 218.12,-180.5 218.12,-180.5 399.88,-180.5 399.88,-180.5 405.88,-180.5 411.88,-186.5 411.88,-192.5 411.88,-192.5 411.88,-217 411.88,-217 411.88,-223 405.88,-229 399.88,-229"/>
206
+ <text xml:space="preserve" text-anchor="middle" x="309" y="-214.55" font-family="sans-Serif" font-size="11.00">Curriculum export / optional trainer path</text>
207
+ <text xml:space="preserve" text-anchor="middle" x="309" y="-201.05" font-family="sans-Serif" font-size="11.00">separate from routing&#45;policy promotion</text>
208
+ <text xml:space="preserve" text-anchor="middle" x="309" y="-187.55" font-family="sans-Serif" font-size="11.00">not proof that a live adapter improved</text>
279
209
  </g>
280
- <!-- Dispatch&#45;&gt;Observe -->
281
- <g id="edge23" class="edge">
282
- <title>Dispatch&#45;&gt;Observe</title>
283
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1493.77,-506C1456.88,-486.57 1401.2,-460.63 1349,-449.62 1327.64,-445.12 582.84,-450.74 563,-441.62 529.6,-426.27 503.82,-391.39 489.03,-367.06"/>
284
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="491.54,-365.81 485.08,-360.32 486.71,-368.64 491.54,-365.81"/>
285
- <text xml:space="preserve" text-anchor="middle" x="1462.07" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">sense tools</text>
286
- <text xml:space="preserve" text-anchor="middle" x="1462.07" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">verify/watch/rf_tune/intel</text>
210
+ <!-- Reward&#45;&gt;Weights -->
211
+ <g id="edge22" class="edge">
212
+ <title>Reward&#45;&gt;Weights</title>
213
+ <path fill="none" stroke="#94a3b8" d="M515.97,-275.03C475.92,-261.62 429.24,-246 390.37,-232.99"/>
214
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="391.65,-229.73 381.06,-229.87 389.43,-236.36 391.65,-229.73"/>
215
+ <text xml:space="preserve" text-anchor="middle" x="485" y="-248.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">explicit opt&#45;in</text>
287
216
  </g>
288
- <!-- Plan -->
289
- <g id="node7" class="node">
290
- <title>Plan</title>
291
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1169.62,-548.88C1169.62,-548.88 1100.38,-548.88 1100.38,-548.88 1094.38,-548.88 1088.38,-542.88 1088.38,-536.88 1088.38,-536.88 1088.38,-524.88 1088.38,-524.88 1088.38,-518.88 1094.38,-512.88 1100.38,-512.88 1100.38,-512.88 1169.62,-512.88 1169.62,-512.88 1175.62,-512.88 1181.62,-518.88 1181.62,-524.88 1181.62,-524.88 1181.62,-536.88 1181.62,-536.88 1181.62,-542.88 1175.62,-548.88 1169.62,-548.88"/>
292
- <text xml:space="preserve" text-anchor="middle" x="1135" y="-533.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">plan_first</text>
293
- <text xml:space="preserve" text-anchor="middle" x="1135" y="-520.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(pre&#45;pass, local)</text>
217
+ <!-- Mistakes&#45;&gt;Prompt -->
218
+ <g id="edge19" class="edge">
219
+ <title>Mistakes&#45;&gt;Prompt</title>
220
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M245.1,-374.23C216.52,-333.6 166.74,-248.15 197,-180.5 205.31,-161.92 221.28,-146.25 236.62,-134.5"/>
221
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="238.25,-137.63 244.29,-128.92 234.14,-131.97 238.25,-137.63"/>
294
222
  </g>
295
- <!-- Router&#45;&gt;Plan -->
296
- <g id="edge5" class="edge">
297
- <title>Router&#45;&gt;Plan</title>
298
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1003,-530.88C1027.96,-530.88 1052.92,-530.88 1077.88,-530.88"/>
299
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1077.85,-533.68 1085.85,-530.88 1077.85,-528.08 1077.85,-533.68"/>
223
+ <!-- Policy&#45;&gt;Prompt -->
224
+ <g id="edge23" class="edge">
225
+ <title>Policy&#45;&gt;Prompt</title>
226
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M1043.57,-186.27C1028.59,-184.22 1013.44,-182.24 999,-180.5 798.61,-156.39 566.22,-135.2 419.9,-122.68"/>
227
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="420.41,-119.21 410.15,-121.84 419.82,-126.18 420.41,-119.21"/>
300
228
  </g>
301
- <!-- TaskSum -->
302
- <g id="node8" class="node">
303
- <title>TaskSum</title>
304
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1371.25,-555.12C1371.25,-555.12 1278.75,-555.12 1278.75,-555.12 1272.75,-555.12 1266.75,-549.12 1266.75,-543.12 1266.75,-543.12 1266.75,-518.62 1266.75,-518.62 1266.75,-512.62 1272.75,-506.62 1278.75,-506.62 1278.75,-506.62 1371.25,-506.62 1371.25,-506.62 1377.25,-506.62 1383.25,-512.62 1383.25,-518.62 1383.25,-518.62 1383.25,-543.12 1383.25,-543.12 1383.25,-549.12 1377.25,-555.12 1371.25,-555.12"/>
305
- <text xml:space="preserve" text-anchor="middle" x="1325" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TaskSummarizer</text>
306
- <text xml:space="preserve" text-anchor="middle" x="1325" y="-527.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">emit_plan! · about_to</text>
307
- <text xml:space="preserve" text-anchor="middle" x="1325" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">dedup last_brief_fp</text>
229
+ <!-- Eval -->
230
+ <g id="node13" class="node">
231
+ <title>Eval</title>
232
+ <path fill="#c4b5fd" stroke="#334155" d="M1513.62,-134C1513.62,-134 1312.38,-134 1312.38,-134 1306.38,-134 1300.38,-128 1300.38,-122 1300.38,-122 1300.38,-97.5 1300.38,-97.5 1300.38,-91.5 1306.38,-85.5 1312.38,-85.5 1312.38,-85.5 1513.62,-85.5 1513.62,-85.5 1519.62,-85.5 1525.62,-91.5 1525.62,-97.5 1525.62,-97.5 1525.62,-122 1525.62,-122 1525.62,-128 1519.62,-134 1513.62,-134"/>
233
+ <text xml:space="preserve" text-anchor="middle" x="1413" y="-119.55" font-family="sans-Serif" font-size="11.00">Frozen local snapshot evaluation</text>
234
+ <text xml:space="preserve" text-anchor="middle" x="1413" y="-106.05" font-family="sans-Serif" font-size="11.00">new HOME / off + baseline + candidate</text>
235
+ <text xml:space="preserve" text-anchor="middle" x="1413" y="-92.55" font-family="sans-Serif" font-size="11.00">public held&#45;out tasks; no live LLM gain claim</text>
308
236
  </g>
309
- <!-- Plan&#45;&gt;TaskSum -->
310
- <g id="edge6" class="edge">
311
- <title>Plan&#45;&gt;TaskSum</title>
312
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1182.13,-530.88C1206.76,-530.88 1231.4,-530.88 1256.03,-530.88"/>
313
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1255.87,-533.68 1263.87,-530.88 1255.87,-528.08 1255.87,-533.68"/>
237
+ <!-- Policy&#45;&gt;Eval -->
238
+ <g id="edge16" class="edge">
239
+ <title>Policy&#45;&gt;Eval</title>
240
+ <path fill="none" stroke="#94a3b8" d="M1207.59,-186.26C1244.19,-172.8 1295.48,-153.95 1337.65,-138.45"/>
241
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="1338.84,-141.74 1347.02,-135.01 1336.42,-135.17 1338.84,-141.74"/>
242
+ <text xml:space="preserve" text-anchor="middle" x="1344.34" y="-153.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">explicit frozen snapshots</text>
314
243
  </g>
315
- <!-- TaskSum&#45;&gt;Dispatch -->
316
- <g id="edge7" class="edge">
317
- <title>TaskSum&#45;&gt;Dispatch</title>
318
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1383.93,-530.88C1408.58,-530.88 1433.23,-530.88 1457.87,-530.88"/>
319
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1457.72,-533.68 1465.72,-530.88 1457.72,-528.08 1457.72,-533.68"/>
320
- </g>
321
- <!-- Escalate&#45;&gt;LLM -->
322
- <g id="edge62" class="edge">
323
- <title>Escalate&#45;&gt;LLM</title>
324
- <path fill="none" stroke="#a78bfa" stroke-width="2" stroke-dasharray="5,2" d="M1750.5,-549.85C1723.73,-572.13 1674.44,-609.15 1625,-625.62 1436.03,-688.6 929.56,-674.8 731,-690.62 685.72,-694.23 634.59,-698.68 595.9,-702.12"/>
325
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="596.07,-699.3 588.35,-702.8 596.57,-704.87 596.07,-699.3"/>
326
- <text xml:space="preserve" text-anchor="middle" x="1630.07" y="-646.08" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Swarm.ask(persona)</text>
327
- <text xml:space="preserve" text-anchor="middle" x="1630.07" y="-635.58" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier hint</text>
328
- </g>
329
- <!-- Escalate&#45;&gt;Result -->
330
- <!-- Escalate&#45;&gt;Mistakes -->
331
- <g id="edge63" class="edge">
332
- <title>Escalate&#45;&gt;Mistakes</title>
333
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1704.45,-515.43C1635.87,-500.23 1538.17,-477.56 1532.75,-470.62 1527,-463.27 1526.47,-456.53 1532.75,-449.62 1567.79,-411.09 2309.37,-362.95 2577.41,-346.74"/>
334
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2577.35,-349.55 2585.16,-346.27 2577.01,-343.96 2577.35,-349.55"/>
335
- <text xml:space="preserve" text-anchor="middle" x="1566.88" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record</text>
336
- <text xml:space="preserve" text-anchor="middle" x="1566.88" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(tool:&#39;escalation&#39;)</text>
337
- </g>
338
- <!-- Result&#45;&gt;User -->
339
- <g id="edge65" class="edge">
340
- <title>Result&#45;&gt;User</title>
341
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1946.75,-549.46C1929.82,-572.05 1896.92,-610.19 1858,-625.62 1843.64,-631.32 756.88,-622.66 746,-633.62 731.13,-648.6 746.21,-668.25 763.89,-683.54"/>
342
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="761.78,-685.43 769.75,-688.31 765.32,-681.09 761.78,-685.43"/>
343
- <text xml:space="preserve" text-anchor="middle" x="761" y="-640.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
344
- </g>
345
- <!-- Learning -->
346
- <g id="node12" class="node">
347
- <title>Learning</title>
348
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1515,-371.12C1515,-371.12 1367,-371.12 1367,-371.12 1361,-371.12 1355,-365.12 1355,-359.12 1355,-359.12 1355,-321.12 1355,-321.12 1355,-315.12 1361,-309.12 1367,-309.12 1367,-309.12 1515,-309.12 1515,-309.12 1521,-309.12 1527,-315.12 1527,-321.12 1527,-321.12 1527,-359.12 1527,-359.12 1527,-365.12 1521,-371.12 1515,-371.12"/>
349
- <text xml:space="preserve" text-anchor="middle" x="1441" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
350
- <text xml:space="preserve" text-anchor="middle" x="1441" y="-343.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
351
- <text xml:space="preserve" text-anchor="middle" x="1441" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">exemplars_for · SFT quality gate</text>
352
- <text xml:space="preserve" text-anchor="middle" x="1441" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">fact_check_local_final</text>
353
- </g>
354
- <!-- Result&#45;&gt;Learning -->
355
- <g id="edge13" class="edge">
356
- <title>Result&#45;&gt;Learning</title>
357
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1921.68,-515.78C1902.86,-509.34 1879.53,-502.33 1858,-498.62 1820.07,-492.1 1192.41,-498.39 1165.75,-470.62 1159.29,-463.89 1159.31,-456.38 1165.75,-449.62 1178.59,-436.16 1315.85,-448.85 1333,-441.62 1364.6,-428.32 1392.68,-401.45 1412.29,-378.84"/>
358
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1414.31,-380.78 1417.33,-372.86 1410.03,-377.17 1414.31,-380.78"/>
359
- <text xml:space="preserve" text-anchor="middle" x="1207.38" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_introspect</text>
360
- <text xml:space="preserve" text-anchor="middle" x="1207.38" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(deferred after reply)</text>
244
+ <!-- Regression&#45;&gt;Eval -->
245
+ <g id="edge15" class="edge">
246
+ <title>Regression&#45;&gt;Eval</title>
247
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M1470.57,-180.28C1461.18,-168.94 1449.76,-155.15 1439.57,-142.85"/>
248
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="1442.46,-140.85 1433.39,-135.38 1437.07,-145.31 1442.46,-140.85"/>
249
+ <text xml:space="preserve" text-anchor="middle" x="1546.43" y="-153.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">regression replay only; never relabel held&#45;out</text>
361
250
  </g>
362
- <!-- Reward -->
363
- <g id="node15" class="node">
364
- <title>Reward</title>
365
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M3579.5,-371.12C3579.5,-371.12 3464.5,-371.12 3464.5,-371.12 3458.5,-371.12 3452.5,-365.12 3452.5,-359.12 3452.5,-359.12 3452.5,-321.12 3452.5,-321.12 3452.5,-315.12 3458.5,-309.12 3464.5,-309.12 3464.5,-309.12 3579.5,-309.12 3579.5,-309.12 3585.5,-309.12 3591.5,-315.12 3591.5,-321.12 3591.5,-321.12 3591.5,-359.12 3591.5,-359.12 3591.5,-365.12 3585.5,-371.12 3579.5,-371.12"/>
366
- <text xml:space="preserve" text-anchor="middle" x="3522" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reward</text>
367
- <text xml:space="preserve" text-anchor="middle" x="3522" y="-343.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">judge · prm · semantic_ok</text>
368
- <text xml:space="preserve" text-anchor="middle" x="3522" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sentinel warm</text>
369
- <text xml:space="preserve" text-anchor="middle" x="3522" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">DPO scrub &lt;=40%/src</text>
370
- </g>
371
- <!-- Result&#45;&gt;Reward -->
372
- <g id="edge66" class="edge">
373
- <title>Result&#45;&gt;Reward</title>
374
- <path fill="none" stroke="#34d399" stroke-width="2" d="M1921.66,-515.87C1902.85,-509.44 1879.51,-502.42 1858,-498.62 1796.13,-487.7 1336.56,-516.14 1293.25,-470.62 1286.82,-463.86 1286.66,-456.24 1293.25,-449.62 1302.2,-440.64 3107.41,-443.2 3120,-441.62 3233.63,-427.38 3361.39,-391.99 3441.77,-367.26"/>
375
- <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="3442.11,-370.09 3448.92,-365.04 3440.45,-364.74 3442.11,-370.09"/>
376
- <text xml:space="preserve" text-anchor="middle" x="1316.12" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">judge · prm</text>
377
- </g>
378
- <!-- Result&#45;&gt;Curric -->
379
- <g id="edge67" class="edge">
380
- <title>Result&#45;&gt;Curric</title>
381
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1973.09,-512.42C1990.11,-492.85 2020.75,-462.23 2055,-449.62 2099.79,-433.14 2869.88,-459.82 2914,-441.62 2947.82,-427.67 2976.66,-396.8 2995.14,-372.92"/>
382
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2997.25,-374.78 2999.82,-366.7 2992.77,-371.41 2997.25,-374.78"/>
383
- <text xml:space="preserve" text-anchor="middle" x="2086.5" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">critic · hindsight</text>
384
- </g>
385
- <!-- Result&#45;&gt;Policy -->
386
- <g id="edge14" class="edge">
387
- <title>Result&#45;&gt;Policy</title>
388
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1954.36,-512.44C1948.2,-493.21 1935.3,-463.2 1912,-449.62 1884.25,-433.46 1363,-455.43 1334,-441.62 1307.05,-428.8 1285.66,-402.71 1271.21,-380.33"/>
389
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1273.65,-378.96 1267.05,-373.64 1268.89,-381.91 1273.65,-378.96"/>
390
- <text xml:space="preserve" text-anchor="middle" x="1960.3" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">finish (judge)</text>
251
+ <!-- Promote -->
252
+ <g id="node14" class="node">
253
+ <title>Promote</title>
254
+ <path fill="#c4b5fd" stroke="#334155" d="M1292.5,-48.5C1292.5,-48.5 1051.5,-48.5 1051.5,-48.5 1045.5,-48.5 1039.5,-42.5 1039.5,-36.5 1039.5,-36.5 1039.5,-12 1039.5,-12 1039.5,-6 1045.5,0 1051.5,0 1051.5,0 1292.5,0 1292.5,0 1298.5,0 1304.5,-6 1304.5,-12 1304.5,-12 1304.5,-36.5 1304.5,-36.5 1304.5,-42.5 1298.5,-48.5 1292.5,-48.5"/>
255
+ <text xml:space="preserve" text-anchor="middle" x="1172" y="-34.05" font-family="sans-Serif" font-size="11.00">Operator approval + stopped writers + explicit target</text>
256
+ <text xml:space="preserve" text-anchor="middle" x="1172" y="-20.55" font-family="sans-Serif" font-size="11.00">fresh replay / per&#45;task + aggregate gates</text>
257
+ <text xml:space="preserve" text-anchor="middle" x="1172" y="-7.05" font-family="sans-Serif" font-size="11.00">versioned receipt / digest&#45;bound rollback</text>
391
258
  </g>
392
- <!-- Result&#45;&gt;Observe -->
259
+ <!-- Eval&#45;&gt;Promote -->
260
+ <g id="edge17" class="edge">
261
+ <title>Eval&#45;&gt;Promote</title>
262
+ <path fill="none" stroke="#94a3b8" d="M1344.58,-85.05C1315.33,-74.91 1281.01,-63.02 1250.7,-52.52"/>
263
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="1252.19,-49.33 1241.6,-49.36 1249.9,-55.95 1252.19,-49.33"/>
264
+ </g>
265
+ <!-- Promote&#45;&gt;Policy -->
393
266
  <g id="edge18" class="edge">
394
- <title>Result&#45;&gt;Observe</title>
395
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1921.7,-515.66C1902.89,-509.19 1879.55,-502.18 1858,-498.62 1633.35,-461.52 1060.94,-485.87 833.75,-470.62 713,-462.52 670.39,-497.42 563,-441.62 530.56,-424.77 504.7,-390.56 489.62,-366.77"/>
396
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="492.16,-365.55 485.59,-360.2 487.39,-368.48 492.16,-365.55"/>
397
- <text xml:space="preserve" text-anchor="middle" x="884.38" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
398
- <text xml:space="preserve" text-anchor="middle" x="884.38" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(AUTO_SECTIONS only)</text>
399
- </g>
400
- <!-- Result&#45;&gt;Verify -->
401
- <g id="edge50" class="edge">
402
- <title>Result&#45;&gt;Verify</title>
403
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1996.19,-524.96C2056.87,-515.59 2166.34,-492.21 2124,-449.62 2110.35,-435.9 747.54,-449.82 730,-441.62 699.95,-427.58 676.64,-397.14 662.1,-373.43"/>
404
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="664.62,-372.19 658.14,-366.73 659.8,-375.04 664.62,-372.19"/>
405
- <text xml:space="preserve" text-anchor="middle" x="2178.85" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">fact_check_local_final</text>
406
- <text xml:space="preserve" text-anchor="middle" x="2178.85" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(CVE / version claims)</text>
407
- </g>
408
- <!-- Correlate -->
409
- <g id="node22" class="node">
410
- <title>Correlate</title>
411
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M942.88,-216.12C942.88,-216.12 743.12,-216.12 743.12,-216.12 737.12,-216.12 731.12,-210.12 731.12,-204.12 731.12,-204.12 731.12,-191.62 731.12,-191.62 731.12,-185.62 737.12,-179.62 743.12,-179.62 743.12,-179.62 942.88,-179.62 942.88,-179.62 948.88,-179.62 954.88,-185.62 954.88,-191.62 954.88,-191.62 954.88,-204.12 954.88,-204.12 954.88,-210.12 948.88,-216.12 942.88,-216.12"/>
412
- <text xml:space="preserve" text-anchor="middle" x="843" y="-200.72" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
413
- <text xml:space="preserve" text-anchor="middle" x="843" y="-186.47" font-family="sans-Serif" font-size="12.00" fill="#0f172a">&quot;I did it wrong&quot; &#160;vs &#160;&quot;the world changed&quot;</text>
414
- </g>
415
- <!-- Metrics&#45;&gt;Correlate -->
416
- <g id="edge24" class="edge">
417
- <title>Metrics&#45;&gt;Correlate</title>
418
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M859.61,-315.33C856.1,-290.77 850.64,-252.48 846.95,-226.57"/>
419
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="849.76,-226.44 845.86,-218.92 844.22,-227.24 849.76,-226.44"/>
420
- </g>
421
- <!-- Fmet -->
422
- <g id="node23" class="node">
423
- <title>Fmet</title>
424
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1056.5,-54.79C1056.5,-56.6 1040.14,-58.06 1020,-58.06 999.86,-58.06 983.5,-56.6 983.5,-54.79 983.5,-54.79 983.5,-25.34 983.5,-25.34 983.5,-23.53 999.86,-22.06 1020,-22.06 1040.14,-22.06 1056.5,-23.53 1056.5,-25.34 1056.5,-25.34 1056.5,-54.79 1056.5,-54.79"/>
425
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1056.5,-54.79C1056.5,-52.98 1040.14,-51.52 1020,-51.52 999.86,-51.52 983.5,-52.98 983.5,-54.79"/>
426
- <text xml:space="preserve" text-anchor="middle" x="1020" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
427
- </g>
428
- <!-- Metrics&#45;&gt;Fmet -->
429
- <g id="edge33" class="edge">
430
- <title>Metrics&#45;&gt;Fmet</title>
431
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M891.92,-315.27C917.74,-292.43 954.66,-255.68 976,-216.12 1001.93,-168.05 1012.95,-104.29 1017.34,-68.49"/>
432
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1020.1,-68.96 1018.23,-60.7 1014.54,-68.33 1020.1,-68.96"/>
433
- </g>
434
- <!-- Learning&#45;&gt;Metrics -->
435
- <g id="edge26" class="edge">
436
- <title>Learning&#45;&gt;Metrics</title>
437
- <path fill="none" stroke="#34d399" stroke-width="1.3" stroke-dasharray="5,2" d="M1417.96,-371.65C1398.4,-395.53 1367.98,-426.49 1333,-440.21 1186.95,-497.48 1001.87,-416.61 913.9,-369.65"/>
438
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="915.29,-367.21 906.92,-365.87 912.62,-372.14 915.29,-367.21"/>
439
- <text xml:space="preserve" text-anchor="middle" x="1072" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">rsi_tick</text>
440
- <text xml:space="preserve" text-anchor="middle" x="1072" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ESR drop writes a lesson</text>
441
- </g>
442
- <!-- ReflectT -->
443
- <g id="node14" class="node">
444
- <title>ReflectT</title>
445
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M2880.5,-364.38C2880.5,-364.38 2813.5,-364.38 2813.5,-364.38 2807.5,-364.38 2801.5,-358.38 2801.5,-352.38 2801.5,-352.38 2801.5,-327.88 2801.5,-327.88 2801.5,-321.88 2807.5,-315.88 2813.5,-315.88 2813.5,-315.88 2880.5,-315.88 2880.5,-315.88 2886.5,-315.88 2892.5,-321.88 2892.5,-327.88 2892.5,-327.88 2892.5,-352.38 2892.5,-352.38 2892.5,-358.38 2886.5,-364.38 2880.5,-364.38"/>
446
- <text xml:space="preserve" text-anchor="middle" x="2847" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reflect</text>
447
- <text xml:space="preserve" text-anchor="middle" x="2847" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">teacher&#45;student</text>
448
- <text xml:space="preserve" text-anchor="middle" x="2847" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(reflect_engine)</text>
449
- </g>
450
- <!-- Learning&#45;&gt;ReflectT -->
451
- <g id="edge47" class="edge">
452
- <title>Learning&#45;&gt;ReflectT</title>
453
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1527.65,-349.93C1716.16,-370.72 2177.76,-418.62 2566,-434.96 2661.03,-438.96 2695.54,-478.7 2780,-434.96 2804.59,-422.22 2822.08,-395.85 2833.01,-374.14"/>
454
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2835.53,-375.37 2836.45,-366.95 2830.47,-372.96 2835.53,-375.37"/>
455
- <text xml:space="preserve" text-anchor="middle" x="2493" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect()</text>
456
- </g>
457
- <!-- Learning&#45;&gt;Correlate -->
458
- <g id="edge25" class="edge">
459
- <title>Learning&#45;&gt;Correlate</title>
460
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1357.33,-308.47C1349.15,-305.84 1340.95,-303.34 1333,-301.12 1261.84,-281.28 1069.07,-242.69 947.61,-219.01"/>
461
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="948.22,-216.28 939.83,-217.5 947.15,-221.78 948.22,-216.28"/>
462
- </g>
463
- <!-- Flrn -->
464
- <g id="node24" class="node">
465
- <title>Flrn</title>
466
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1710.5,-54.79C1710.5,-56.6 1692.8,-58.06 1671,-58.06 1649.2,-58.06 1631.5,-56.6 1631.5,-54.79 1631.5,-54.79 1631.5,-25.34 1631.5,-25.34 1631.5,-23.53 1649.2,-22.06 1671,-22.06 1692.8,-22.06 1710.5,-23.53 1710.5,-25.34 1710.5,-25.34 1710.5,-54.79 1710.5,-54.79"/>
467
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1710.5,-54.79C1710.5,-52.98 1692.8,-51.52 1671,-51.52 1649.2,-51.52 1631.5,-52.98 1631.5,-54.79"/>
468
- <text xml:space="preserve" text-anchor="middle" x="1671" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
469
- </g>
470
- <!-- Learning&#45;&gt;Flrn -->
471
- <g id="edge35" class="edge">
472
- <title>Learning&#45;&gt;Flrn</title>
473
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1520.88,-308.5C1539.88,-298.95 1559.2,-287.16 1575,-273.12 1636.95,-218.09 1659.83,-116.87 1667.5,-68.37"/>
474
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1670.26,-68.86 1668.67,-60.53 1664.72,-68.03 1670.26,-68.86"/>
475
- </g>
476
- <!-- Fmem -->
477
- <g id="node26" class="node">
478
- <title>Fmem</title>
479
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1830.75,-54.79C1830.75,-56.6 1813.38,-58.06 1792,-58.06 1770.62,-58.06 1753.25,-56.6 1753.25,-54.79 1753.25,-54.79 1753.25,-25.34 1753.25,-25.34 1753.25,-23.53 1770.62,-22.06 1792,-22.06 1813.38,-22.06 1830.75,-23.53 1830.75,-25.34 1830.75,-25.34 1830.75,-54.79 1830.75,-54.79"/>
480
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1830.75,-54.79C1830.75,-52.98 1813.38,-51.52 1792,-51.52 1770.62,-51.52 1753.25,-52.98 1753.25,-54.79"/>
481
- <text xml:space="preserve" text-anchor="middle" x="1792" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
482
- </g>
483
- <!-- Learning&#45;&gt;Fmem -->
484
- <g id="edge38" class="edge">
485
- <title>Learning&#45;&gt;Fmem</title>
486
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1527.34,-316.7C1557.41,-306.39 1590.28,-292.14 1617,-273.12 1695.64,-217.19 1754.45,-115.31 1779.17,-67.35"/>
487
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1781.64,-68.67 1782.76,-60.27 1776.65,-66.13 1781.64,-68.67"/>
488
- <text xml:space="preserve" text-anchor="middle" x="1722.65" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
489
- </g>
490
- <!-- Fskl -->
491
- <g id="node28" class="node">
492
- <title>Fskl</title>
493
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1588,-54.79C1588,-56.6 1562.9,-58.06 1532,-58.06 1501.1,-58.06 1476,-56.6 1476,-54.79 1476,-54.79 1476,-25.34 1476,-25.34 1476,-23.53 1501.1,-22.06 1532,-22.06 1562.9,-22.06 1588,-23.53 1588,-25.34 1588,-25.34 1588,-54.79 1588,-54.79"/>
494
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1588,-54.79C1588,-52.98 1562.9,-51.52 1532,-51.52 1501.1,-51.52 1476,-52.98 1476,-54.79"/>
495
- <text xml:space="preserve" text-anchor="middle" x="1532" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/&lt;n&gt;/SKILL.md</text>
496
- </g>
497
- <!-- Learning&#45;&gt;Fskl -->
498
- <g id="edge39" class="edge">
499
- <title>Learning&#45;&gt;Fskl</title>
500
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1445.58,-308.71C1450.86,-276.29 1460.62,-223.67 1474.25,-179.62 1486.66,-139.54 1506.3,-95.06 1519.17,-67.58"/>
501
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1521.69,-68.81 1522.58,-60.38 1516.63,-66.41 1521.69,-68.81"/>
502
- <text xml:space="preserve" text-anchor="middle" x="1482.12" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
503
- </g>
504
- <!-- Fftn -->
505
- <g id="node30" class="node">
506
- <title>Fftn</title>
507
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1318.25,-54.79C1318.25,-56.6 1298.86,-58.06 1275,-58.06 1251.14,-58.06 1231.75,-56.6 1231.75,-54.79 1231.75,-54.79 1231.75,-25.34 1231.75,-25.34 1231.75,-23.53 1251.14,-22.06 1275,-22.06 1298.86,-22.06 1318.25,-23.53 1318.25,-25.34 1318.25,-25.34 1318.25,-54.79 1318.25,-54.79"/>
508
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1318.25,-54.79C1318.25,-52.98 1298.86,-51.52 1275,-51.52 1251.14,-51.52 1231.75,-52.98 1231.75,-54.79"/>
509
- <text xml:space="preserve" text-anchor="middle" x="1275" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">finetune/*.jsonl</text>
510
- </g>
511
- <!-- Learning&#45;&gt;Fftn -->
512
- <g id="edge46" class="edge">
513
- <title>Learning&#45;&gt;Fftn</title>
514
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1424.02,-308.63C1391.3,-249.88 1320.06,-121.97 1289.45,-67.01"/>
515
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1292.03,-65.88 1285.69,-60.25 1287.14,-68.61 1292.03,-65.88"/>
516
- <text xml:space="preserve" text-anchor="middle" x="1403.65" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_finetune</text>
517
- </g>
518
- <!-- Mistakes&#45;&gt;Dispatch -->
519
- <g id="edge55" class="edge">
520
- <title>Mistakes&#45;&gt;Dispatch</title>
521
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2595.91,-372.06C2514.6,-403.12 2382.04,-449.32 2263,-470.62 2009.4,-516.02 1939.52,-465.68 1684,-498.62 1661.39,-501.54 1637.1,-506.07 1614.87,-510.79"/>
522
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1614.32,-508.04 1607.09,-512.47 1615.51,-513.51 1614.32,-508.04"/>
523
- <text xml:space="preserve" text-anchor="middle" x="2387.46" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">correction_hint</text>
524
- <text xml:space="preserve" text-anchor="middle" x="2387.46" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(inline, next iter)</text>
525
- </g>
526
- <!-- Mistakes&#45;&gt;Correlate -->
527
- <g id="edge27" class="edge">
528
- <title>Mistakes&#45;&gt;Correlate</title>
529
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M2586.88,-332.53C2290.44,-309.81 1311.41,-234.77 965.43,-208.26"/>
530
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="965.78,-205.48 957.59,-207.66 965.36,-211.06 965.78,-205.48"/>
531
- </g>
532
- <!-- Fmis -->
533
- <g id="node25" class="node">
534
- <title>Fmis</title>
535
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1954.25,-54.79C1954.25,-56.6 1936.21,-58.06 1914,-58.06 1891.79,-58.06 1873.75,-56.6 1873.75,-54.79 1873.75,-54.79 1873.75,-25.34 1873.75,-25.34 1873.75,-23.53 1891.79,-22.06 1914,-22.06 1936.21,-22.06 1954.25,-23.53 1954.25,-25.34 1954.25,-25.34 1954.25,-54.79 1954.25,-54.79"/>
536
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1954.25,-54.79C1954.25,-52.98 1936.21,-51.52 1914,-51.52 1891.79,-51.52 1873.75,-52.98 1873.75,-54.79"/>
537
- <text xml:space="preserve" text-anchor="middle" x="1914" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
538
- </g>
539
- <!-- Mistakes&#45;&gt;Fmis -->
540
- <g id="edge36" class="edge">
541
- <title>Mistakes&#45;&gt;Fmis</title>
542
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2586.88,-336.7C2501.52,-331.7 2368.46,-316.83 2262,-273.12 2167.23,-234.22 2169.19,-175.01 2072,-142.62 2051.69,-135.86 1994.42,-145.53 1976,-134.62 1950.58,-119.58 1933.53,-89.55 1923.85,-67.56"/>
543
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1926.45,-66.52 1920.78,-60.21 1921.28,-68.67 1926.45,-66.52"/>
544
- </g>
545
- <!-- Mistakes&#45;&gt;Fmem -->
546
- <g id="edge37" class="edge">
547
- <title>Mistakes&#45;&gt;Fmem</title>
548
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2586.86,-332.84C2414.22,-318.99 2032.8,-281.76 1921,-216.12 1861.62,-181.27 1821.38,-107.22 1803.14,-67.52"/>
549
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1805.8,-66.63 1799.98,-60.47 1800.69,-68.91 1805.8,-66.63"/>
550
- <text xml:space="preserve" text-anchor="middle" x="1954" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
551
- </g>
552
- <!-- ReflectT&#45;&gt;LLM -->
553
- <g id="edge49" class="edge">
554
- <title>ReflectT&#45;&gt;LLM</title>
555
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M2855.42,-365.22C2865.3,-389.38 2884.21,-425.29 2914,-441.62 2933.1,-452.1 3290.76,-434.07 3306,-449.62 3324.6,-468.6 3291.62,-480.98 3271.75,-498.62 3210.94,-552.63 3215.01,-594.18 3140,-625.62 3016.53,-677.39 864.67,-683.03 731,-690.62 685.26,-693.22 633.64,-697.77 594.87,-701.5"/>
556
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="594.94,-698.68 587.25,-702.24 595.49,-704.25 594.94,-698.68"/>
557
- <text xml:space="preserve" text-anchor="middle" x="3317.88" y="-527.58" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect_engine ≠ active</text>
558
- </g>
559
- <!-- ReflectT&#45;&gt;Fmem -->
560
- <g id="edge48" class="edge">
561
- <title>ReflectT&#45;&gt;Fmem</title>
562
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2810.29,-314.91C2800.76,-309.59 2790.28,-304.53 2780,-301.12 2684.77,-269.55 2654.88,-290.14 2556,-273.12 2365.4,-240.32 2320.99,-215.82 2131,-179.62 2115.58,-176.69 1865.13,-143.23 1852,-134.62 1827.68,-118.68 1811.2,-89.09 1801.76,-67.44"/>
563
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1804.43,-66.56 1798.78,-60.24 1799.25,-68.7 1804.43,-66.56"/>
564
- <text xml:space="preserve" text-anchor="middle" x="2325.65" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier :lesson</text>
565
- </g>
566
- <!-- Reward&#45;&gt;Mistakes -->
567
- <g id="edge71" class="edge">
568
- <title>Reward&#45;&gt;Mistakes</title>
569
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M3451.72,-361.95C3372.16,-385.41 3238.24,-421.2 3120,-434.96 2969.9,-452.42 2921.29,-488.56 2780,-434.96 2750.31,-423.7 2723.58,-400.01 2704.26,-379.13"/>
570
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2706.49,-377.42 2699.06,-373.35 2702.32,-381.17 2706.49,-377.42"/>
571
- <text xml:space="preserve" text-anchor="middle" x="3384" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">sentinel gap</text>
572
- </g>
573
- <!-- Reward&#45;&gt;Verify -->
574
- <g id="edge69" class="edge">
575
- <title>Reward&#45;&gt;Verify</title>
576
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M3451.72,-361.95C3372.16,-385.41 3238.24,-421.2 3120,-434.96 2988.11,-450.3 851.24,-489.1 730,-434.96 701.9,-422.41 679.22,-395.46 664.38,-373.49"/>
577
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="666.87,-372.18 660.16,-367 662.18,-375.23 666.87,-372.18"/>
578
- <text xml:space="preserve" text-anchor="middle" x="3270" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">verify_as_reward</text>
579
- </g>
580
- <!-- Reward&#45;&gt;Fprf -->
581
- <g id="edge70" class="edge">
582
- <title>Reward&#45;&gt;Fprf</title>
583
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M3451.59,-321.43C3304.02,-284.75 2951.18,-199.12 2652,-142.62 2452,-104.86 2213.51,-66.97 2104.99,-50.12"/>
584
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2105.49,-47.37 2097.16,-48.91 2104.64,-52.9 2105.49,-47.37"/>
585
- <text xml:space="preserve" text-anchor="middle" x="3036.46" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record_preference</text>
586
- </g>
587
- <!-- Curric&#45;&gt;Fmis -->
588
- <g id="edge73" class="edge">
589
- <title>Curric&#45;&gt;Fmis</title>
590
- <path fill="none" stroke="#34d399" stroke-width="1.3" stroke-dasharray="5,2" d="M2954.12,-314.93C2940.94,-310.14 2927.07,-305.3 2914,-301.12 2868.81,-286.68 2856.64,-286.07 2811,-273.12 2725.06,-248.74 2703.35,-243.31 2618.25,-216.12 2570.69,-200.93 2560.86,-189.9 2512,-179.62 2395.03,-155.02 2078.85,-195.53 1976,-134.62 1950.59,-119.58 1933.53,-89.55 1923.85,-67.56"/>
591
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1926.45,-66.52 1920.79,-60.21 1921.28,-68.67 1926.45,-66.52"/>
592
- <text xml:space="preserve" text-anchor="middle" x="2656.12" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">practice → resolve</text>
593
- </g>
594
- <!-- Curric&#45;&gt;Fftn -->
595
- <g id="edge74" class="edge">
596
- <title>Curric&#45;&gt;Fftn</title>
597
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2957.75,-314.91C2943.59,-309.79 2928.4,-304.82 2914,-301.12 2832.6,-280.25 2809.79,-287.53 2727,-273.12 2598.77,-250.82 2562.98,-258.02 2439.75,-216.12 2405.12,-204.35 2401.42,-188.73 2366,-179.62 2310.74,-165.42 1389.97,-162.16 1340,-134.62 1313.63,-120.09 1295.63,-89.75 1285.38,-67.55"/>
598
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1288.02,-66.6 1282.25,-60.4 1282.89,-68.85 1288.02,-66.6"/>
599
- <text xml:space="preserve" text-anchor="middle" x="2470.88" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">train_and_gate</text>
600
- </g>
601
- <!-- Curric&#45;&gt;Fprf -->
602
- <g id="edge72" class="edge">
603
- <title>Curric&#45;&gt;Fprf</title>
604
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2955.61,-314.98C2926.35,-303.05 2891.05,-288.05 2860,-273.12 2750.57,-220.53 2734.6,-182.72 2620,-142.62 2438.86,-79.24 2211.12,-54.03 2105.21,-45.22"/>
605
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2105.51,-42.44 2097.31,-44.58 2105.05,-48.02 2105.51,-42.44"/>
606
- <text xml:space="preserve" text-anchor="middle" x="2789.38" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(loser,winner)</text>
607
- </g>
608
- <!-- Fpol -->
609
- <g id="node32" class="node">
610
- <title>Fpol</title>
611
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1188.38,-59.75C1188.38,-62.16 1168.49,-64.12 1144,-64.12 1119.51,-64.12 1099.62,-62.16 1099.62,-59.75 1099.62,-59.75 1099.62,-20.38 1099.62,-20.38 1099.62,-17.96 1119.51,-16 1144,-16 1168.49,-16 1188.38,-17.96 1188.38,-20.38 1188.38,-20.38 1188.38,-59.75 1188.38,-59.75"/>
612
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1188.38,-59.75C1188.38,-57.34 1168.49,-55.38 1144,-55.38 1119.51,-55.38 1099.62,-57.34 1099.62,-59.75"/>
613
- <text xml:space="preserve" text-anchor="middle" x="1144" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">policy.json</text>
614
- <text xml:space="preserve" text-anchor="middle" x="1144" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">policy_traj.jsonl</text>
615
- </g>
616
- <!-- Policy&#45;&gt;Fpol -->
617
- <g id="edge34" class="edge">
618
- <title>Policy&#45;&gt;Fpol</title>
619
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1239.06,-308.35C1218.91,-251.71 1176.15,-131.47 1155.56,-73.56"/>
620
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1158.31,-72.95 1152.99,-66.35 1153.03,-74.82 1158.31,-72.95"/>
621
- </g>
622
- <!-- Snapshot&#45;&gt;Correlate -->
623
- <g id="edge28" class="edge">
624
- <title>Snapshot&#45;&gt;Correlate</title>
625
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M361.62,-308.52C370.16,-305.91 378.72,-303.4 387,-301.12 507.12,-268.06 647.22,-237.87 740.1,-219.01"/>
626
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="740.57,-221.77 747.85,-217.44 739.45,-216.28 740.57,-221.77"/>
627
- </g>
628
- <!-- Observe&#45;&gt;Correlate -->
629
- <g id="edge29" class="edge">
630
- <title>Observe&#45;&gt;Correlate</title>
631
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M514.22,-321.61C529.38,-315 546.92,-307.53 563,-301.12 637.35,-271.52 724.05,-240.37 781.04,-220.35"/>
632
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="781.8,-223.05 788.42,-217.76 779.95,-217.77 781.8,-223.05"/>
633
- </g>
634
- <!-- Fext -->
635
- <g id="node29" class="node">
636
- <title>Fext</title>
637
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M940.12,-54.79C940.12,-56.6 917.21,-58.06 889,-58.06 860.79,-58.06 837.88,-56.6 837.88,-54.79 837.88,-54.79 837.88,-25.34 837.88,-25.34 837.88,-23.53 860.79,-22.06 889,-22.06 917.21,-22.06 940.12,-23.53 940.12,-25.34 940.12,-25.34 940.12,-54.79 940.12,-54.79"/>
638
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M940.12,-54.79C940.12,-52.98 917.21,-51.52 889,-51.52 860.79,-51.52 837.88,-52.98 837.88,-54.79"/>
639
- <text xml:space="preserve" text-anchor="middle" x="889" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
640
- </g>
641
- <!-- Observe&#45;&gt;Fext -->
642
- <g id="edge40" class="edge">
643
- <title>Observe&#45;&gt;Fext</title>
644
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M490.09,-321.43C522.72,-284.09 603.64,-196.25 687,-142.62 736.98,-110.48 798.49,-80.83 840.41,-61.97"/>
645
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="841.35,-64.62 847.52,-58.8 839.07,-59.51 841.35,-64.62"/>
646
- </g>
647
- <!-- Verify&#45;&gt;Mistakes -->
648
- <g id="edge43" class="edge">
649
- <title>Verify&#45;&gt;Mistakes</title>
650
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M659.08,-365.35C673.52,-388.34 698.3,-420.8 730,-434.96 899.36,-510.59 2208.9,-386.58 2577.02,-349.87"/>
651
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2577.21,-352.67 2584.89,-349.09 2576.65,-347.1 2577.21,-352.67"/>
652
- <text xml:space="preserve" text-anchor="middle" x="2529" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
653
- </g>
654
- <!-- Verify&#45;&gt;Correlate -->
655
- <g id="edge30" class="edge">
656
- <title>Verify&#45;&gt;Correlate</title>
657
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M679.04,-315.02C715.53,-289.17 773.1,-248.38 809.42,-222.66"/>
658
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="810.76,-225.14 815.67,-218.23 807.52,-220.57 810.76,-225.14"/>
659
- </g>
660
- <!-- Verify&#45;&gt;Fmis -->
661
- <g id="edge42" class="edge">
662
- <title>Verify&#45;&gt;Fmis</title>
663
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M691.15,-314.96C703.47,-309.5 716.98,-304.36 730,-301.12 866.49,-267.17 1896.94,-318.86 1993,-216.12 2014.27,-193.38 1962.44,-110.62 1932.86,-67.54"/>
664
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1935.34,-66.2 1928.47,-61.22 1930.74,-69.39 1935.34,-66.2"/>
665
- <text xml:space="preserve" text-anchor="middle" x="2038.49" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted →</text>
666
- <text xml:space="preserve" text-anchor="middle" x="2038.49" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">assumption mistake</text>
667
- </g>
668
- <!-- Verify&#45;&gt;Fmem -->
669
- <g id="edge44" class="edge">
670
- <title>Verify&#45;&gt;Fmem</title>
671
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M692.14,-314.95C704.22,-309.63 717.37,-304.56 730,-301.12 1060.54,-211.26 1161.84,-291.38 1496,-216.12 1509.53,-213.08 1721.1,-143.2 1732,-134.62 1754.49,-116.93 1771.06,-88.34 1781.02,-67.42"/>
672
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1783.54,-68.64 1784.31,-60.2 1778.44,-66.32 1783.54,-68.64"/>
673
- <text xml:space="preserve" text-anchor="middle" x="1637.15" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale</text>
674
- <text xml:space="preserve" text-anchor="middle" x="1637.15" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED]</text>
675
- </g>
676
- <!-- Verify&#45;&gt;Fext -->
677
- <g id="edge45" class="edge">
678
- <title>Verify&#45;&gt;Fext</title>
679
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M642.37,-315.07C639.99,-281.84 640.24,-221.26 667.25,-179.62 705.7,-120.34 779.38,-81.93 831.22,-60.92"/>
680
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="832.07,-63.59 838.48,-58.04 830.01,-58.38 832.07,-63.59"/>
681
- <text xml:space="preserve" text-anchor="middle" x="688.62" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
682
- <text xml:space="preserve" text-anchor="middle" x="688.62" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs</text>
683
- </g>
684
- <!-- RFTune&#45;&gt;Correlate -->
685
- <g id="edge31" class="edge">
686
- <title>RFTune&#45;&gt;Correlate</title>
687
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M119.76,-315.02C131.01,-309.76 143.23,-304.71 155,-301.12 207.92,-285.02 537.51,-239.59 720.63,-215.06"/>
688
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="720.81,-217.86 728.37,-214.03 720.07,-212.31 720.81,-217.86"/>
689
- </g>
690
- <!-- RFTune&#45;&gt;Fext -->
691
- <g id="edge41" class="edge">
692
- <title>RFTune&#45;&gt;Fext</title>
693
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M123.72,-315.01C133.96,-310.21 144.77,-305.35 155,-301.12 400.61,-199.6 701.82,-100.65 828.42,-60.18"/>
694
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="828.95,-62.95 835.72,-57.85 827.25,-57.62 828.95,-62.95"/>
695
- <text xml:space="preserve" text-anchor="middle" x="485.7" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:rf obs</text>
696
- <text xml:space="preserve" text-anchor="middle" x="485.7" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ttl 300s</text>
697
- </g>
698
- <!-- Correlate&#45;&gt;Prompt -->
699
- <g id="edge56" class="edge">
700
- <title>Correlate&#45;&gt;Prompt</title>
701
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M955.79,-204.04C1034.79,-207.59 1142.83,-212.34 1238,-216.12 1303.88,-218.74 3564.22,-253.68 3610,-301.12 3653.36,-346.06 3654.01,-397.32 3610,-441.62 3598.43,-453.27 2444.1,-446.44 2428,-449.62 2403.55,-454.46 2400.42,-465.64 2376,-470.62 2053.26,-536.5 1220.57,-455.6 894,-498.62 876.61,-500.92 858.14,-504.7 840.86,-508.87"/>
702
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="840.3,-506.12 833.22,-510.77 841.65,-511.55 840.3,-506.12"/>
703
- <text xml:space="preserve" text-anchor="middle" x="3682.14" y="-336.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
704
- </g>
705
- <!-- Correlate&#45;&gt;Fmet -->
706
- <!-- Fmet&#45;&gt;Router -->
707
- <g id="edge59" class="edge">
708
- <title>Fmet&#45;&gt;Router</title>
709
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1025.15,-58.63C1032.71,-80.83 1049.13,-118.13 1078,-134.62 1174.79,-189.93 2973.18,-167.59 3084,-179.62 3298.34,-202.91 3347.8,-235.02 3560,-273.12 3598.12,-279.97 3706.91,-271.62 3732,-301.12 3772.45,-348.7 3776.01,-397.33 3732,-441.62 3719.71,-453.99 2494.1,-446.25 2477,-449.62 2452.55,-454.46 2449.42,-465.62 2425,-470.62 2129.31,-531.25 1365.4,-453.18 1067,-498.62 1048.93,-501.38 1029.62,-506.3 1012.41,-511.43"/>
710
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1011.79,-508.69 1004.96,-513.72 1013.43,-514.05 1011.79,-508.69"/>
711
- <text xml:space="preserve" text-anchor="middle" x="3587" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success_rate</text>
712
- <text xml:space="preserve" text-anchor="middle" x="3587" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">→ tie&#45;break</text>
713
- </g>
714
- <!-- Flrn&#45;&gt;Plan -->
715
- <g id="edge58" class="edge">
716
- <title>Flrn&#45;&gt;Plan</title>
717
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1676.71,-58.63C1684.97,-80.82 1702.58,-118.11 1732,-134.62 1804.36,-175.25 3142.48,-170.86 3225,-179.62 3402.49,-198.48 3446.6,-209.81 3620,-252.12 3629.03,-254.33 3774.47,-293.65 3780,-301.12 3817.13,-351.33 3823.93,-397.25 3780,-441.62 3772.18,-449.52 2991.11,-449.3 2980,-449.62 2786.52,-455.26 2738.44,-463.87 2545,-470.62 2256.22,-480.7 1530.75,-455.68 1245,-498.62 1227.28,-501.29 1208.37,-505.96 1191.33,-510.89"/>
718
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1190.82,-508.12 1183.95,-513.09 1192.42,-513.49 1190.82,-508.12"/>
719
- <text xml:space="preserve" text-anchor="middle" x="3728.28" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">exemplars_for</text>
720
- <text xml:space="preserve" text-anchor="middle" x="3728.28" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(few&#45;shot, local)</text>
721
- </g>
722
- <!-- Fmis&#45;&gt;Prompt -->
723
- <g id="edge53" class="edge">
724
- <title>Fmis&#45;&gt;Prompt</title>
725
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1919.89,-58.63C1928.39,-80.82 1946.39,-118.11 1976,-134.62 2112.11,-210.55 3223.04,-162.94 3378,-179.62 3554.59,-198.64 3657.37,-115.62 3771,-252.12 3826.01,-318.21 3799.11,-387.87 3732,-441.62 3720.23,-451.05 2660.98,-447.88 2646,-449.62 2604.34,-454.47 2595.64,-465.58 2554,-470.62 2187.74,-515.03 1259.83,-450.8 894,-498.62 876.6,-500.9 858.14,-504.68 840.86,-508.84"/>
726
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="840.3,-506.09 833.21,-510.74 841.65,-511.53 840.3,-506.09"/>
727
- <text xml:space="preserve" text-anchor="middle" x="3825.96" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">KNOWN MISTAKES</text>
728
- <text xml:space="preserve" text-anchor="middle" x="3825.96" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">+ KNOWN FIXES</text>
729
- </g>
730
- <!-- Fmem&#45;&gt;Prompt -->
731
- <g id="edge51" class="edge">
732
- <title>Fmem&#45;&gt;Prompt</title>
733
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1797.53,-58.62C1805.56,-80.81 1822.78,-118.09 1852,-134.62 1925.81,-176.4 3293.47,-172.66 3378,-179.62 3616.7,-199.29 3681,-188.86 3912,-252.12 3918.75,-253.97 4024.13,-295.29 4028,-301.12 4062.51,-353.17 4072.02,-397.34 4028,-441.62 4014.95,-454.76 2713.16,-446.04 2695,-449.62 2670.55,-454.45 2667.43,-465.68 2643,-470.62 2452.51,-509.22 1086.73,-473.51 894,-498.62 876.27,-500.93 857.44,-504.81 839.88,-509.07"/>
734
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="839.27,-506.33 832.18,-510.98 840.62,-511.77 839.27,-506.33"/>
735
- <text xml:space="preserve" text-anchor="middle" x="3998.22" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
736
- </g>
737
- <!-- Fidx -->
738
- <g id="node27" class="node">
739
- <title>Fidx</title>
740
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1432.75,-54.79C1432.75,-56.6 1416.73,-58.06 1397,-58.06 1377.27,-58.06 1361.25,-56.6 1361.25,-54.79 1361.25,-54.79 1361.25,-25.34 1361.25,-25.34 1361.25,-23.53 1377.27,-22.06 1397,-22.06 1416.73,-22.06 1432.75,-23.53 1432.75,-25.34 1432.75,-25.34 1432.75,-54.79 1432.75,-54.79"/>
741
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1432.75,-54.79C1432.75,-52.98 1416.73,-51.52 1397,-51.52 1377.27,-51.52 1361.25,-52.98 1361.25,-54.79"/>
742
- <text xml:space="preserve" text-anchor="middle" x="1397" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.idx</text>
743
- </g>
744
- <!-- Fidx&#45;&gt;Prompt -->
745
- <g id="edge57" class="edge">
746
- <title>Fidx&#45;&gt;Prompt</title>
747
- <path fill="none" stroke="#fbbf24" stroke-width="2" stroke-dasharray="5,2" d="M1402.16,-58.62C1409.72,-80.8 1426.15,-118.08 1455,-134.62 1540.33,-183.56 3126.79,-174.04 3225,-179.62 3590.28,-200.4 3701.25,-126.86 4045,-252.12 4129.36,-282.87 4178.3,-377.95 4115,-441.62 4101.57,-455.13 2762.68,-445.94 2744,-449.62 2719.55,-454.45 2716.43,-465.68 2692,-470.62 2496.17,-510.26 1092.13,-472.85 894,-498.62 876.6,-500.89 858.13,-504.66 840.86,-508.82"/>
748
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="2" points="840.3,-506.08 833.21,-510.72 841.65,-511.51 840.3,-506.08"/>
749
- <text xml:space="preserve" text-anchor="middle" x="4112.16" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MemoryIndex</text>
750
- <text xml:space="preserve" text-anchor="middle" x="4112.16" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cosine top&#45;K</text>
751
- </g>
752
- <!-- Fskl&#45;&gt;Prompt -->
753
- <g id="edge52" class="edge">
754
- <title>Fskl&#45;&gt;Prompt</title>
755
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1540.47,-58.41C1552.45,-80.73 1576.66,-118.55 1610,-134.62 1710.01,-182.84 3497.31,-171 3608,-179.62 3850.3,-198.5 3970.77,-87.99 4150,-252.12 4212.22,-309.1 4220.48,-381.8 4161,-441.62 4147.6,-455.1 2811.64,-445.95 2793,-449.62 2768.55,-454.45 2765.43,-465.69 2741,-470.62 2539.82,-511.3 1097.54,-472.19 894,-498.62 876.27,-500.93 857.44,-504.8 839.88,-509.05"/>
756
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="839.27,-506.32 832.18,-510.97 840.62,-511.76 839.27,-506.32"/>
757
- <text xml:space="preserve" text-anchor="middle" x="4196.74" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
758
- </g>
759
- <!-- Fext&#45;&gt;Prompt -->
760
- <g id="edge54" class="edge">
761
- <title>Fext&#45;&gt;Prompt</title>
762
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M896.62,-58.38C907.49,-80.68 929.77,-118.47 962,-134.62 1067.41,-187.47 2966.19,-174.75 3084,-179.62 3345.61,-190.46 4036.65,-115.5 4260,-252.12 4332.68,-296.59 4349.08,-381.21 4289,-441.62 4274.83,-455.88 2861.72,-445.74 2842,-449.62 2817.55,-454.45 2814.43,-465.69 2790,-470.62 2583.48,-512.34 1102.94,-471.53 894,-498.62 876.27,-500.92 857.44,-504.8 839.88,-509.05"/>
763
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="839.27,-506.32 832.18,-510.97 840.62,-511.75 839.27,-506.32"/>
764
- <text xml:space="preserve" text-anchor="middle" x="4314.28" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
765
- </g>
766
- <!-- Fftn&#45;&gt;LLM -->
767
- <g id="edge64" class="edge">
768
- <title>Fftn&#45;&gt;LLM</title>
769
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1281.2,-58.41C1290.23,-80.73 1309.35,-118.55 1340,-134.62 1359.09,-144.64 4423.2,-136.98 4444,-142.62 4612.84,-188.44 4821.1,-315.37 4700,-441.62 4692.61,-449.33 4518.67,-449.16 4508,-449.62 4390.65,-454.79 3553.82,-440.07 3452,-498.62 3393.76,-532.12 3427.76,-591.3 3370,-625.62 3351.46,-636.64 3004.54,-653.65 2983,-654.62 1983.01,-700.05 1730.7,-639.34 731,-690.62 685.79,-692.94 634.86,-697.42 596.24,-701.2"/>
770
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="596.39,-698.37 588.71,-701.94 596.94,-703.94 596.39,-698.37"/>
771
- <text xml:space="preserve" text-anchor="middle" x="4767.63" y="-342.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">LoRA (weights)</text>
772
- <text xml:space="preserve" text-anchor="middle" x="4767.63" y="-331.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cron weekly</text>
773
- </g>
774
- <!-- Fprf&#45;&gt;LLM -->
775
- <g id="edge76" class="edge">
776
- <title>Fprf&#45;&gt;LLM</title>
777
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2095.26,-41.64C2396.53,-45.41 3993.68,-68.66 4477,-142.62 4673.29,-172.66 4939.71,-292.13 4809,-441.62 4405.78,-902.8 4051.04,-551.03 3443,-625.62 3326.72,-639.89 3297.93,-647.31 3181,-654.62 2094.12,-722.61 1818.61,-635.54 731,-690.62 685.79,-692.91 634.85,-697.39 596.24,-701.17"/>
778
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="596.39,-698.35 588.71,-701.92 596.94,-703.92 596.39,-698.35"/>
779
- <text xml:space="preserve" text-anchor="middle" x="4873.35" y="-342.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">DPO (weights)</text>
780
- <text xml:space="preserve" text-anchor="middle" x="4873.35" y="-331.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cron weekly</text>
781
- </g>
782
- <!-- Fpol&#45;&gt;Prompt -->
783
- <g id="edge60" class="edge">
784
- <title>Fpol&#45;&gt;Prompt</title>
785
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1153.22,-64.81C1163.38,-87.32 1182.07,-119.82 1210,-134.62 1330.38,-198.43 3526.01,-171.25 3662,-179.62 4135.21,-208.77 4609.44,-189.85 4339,-441.62 4324.28,-455.33 2910.73,-445.73 2891,-449.62 2866.55,-454.45 2863.43,-465.7 2839,-470.62 2627.14,-513.37 1108.34,-470.87 894,-498.62 876.27,-500.92 857.44,-504.79 839.88,-509.04"/>
786
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="839.27,-506.31 832.18,-510.96 840.62,-511.75 839.27,-506.31"/>
787
- <text xml:space="preserve" text-anchor="middle" x="4421.58" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">POLICY block</text>
788
- </g>
789
- <!-- Fpol&#45;&gt;Router -->
790
- <g id="edge61" class="edge">
791
- <title>Fpol&#45;&gt;Router</title>
792
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1152.98,-64.48C1163.05,-87.07 1181.78,-119.95 1210,-134.62 1229.72,-144.88 4389.93,-135.53 4411,-142.62 4436.86,-151.33 4446.19,-156.09 4460,-179.62 4518.93,-280.07 4546.82,-360.78 4463,-441.62 4455.59,-448.77 2990.23,-448.44 2980,-449.62 2938.34,-454.43 2929.64,-465.61 2888,-470.62 2486.19,-519.03 1467.26,-438.74 1067,-498.62 1048.92,-501.33 1029.61,-506.24 1012.4,-511.38"/>
793
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1011.78,-508.64 1004.95,-513.66 1013.42,-513.99 1011.78,-508.64"/>
794
- <text xml:space="preserve" text-anchor="middle" x="4531.3" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Q&#45;advantage</text>
795
- <text xml:space="preserve" text-anchor="middle" x="4531.3" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">visits≥2</text>
267
+ <title>Promote&#45;&gt;Policy</title>
268
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M1170.41,-48.94C1168.22,-81.48 1164.29,-139.96 1161.93,-174.98"/>
269
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="1158.45,-174.59 1161.27,-184.8 1165.44,-175.06 1158.45,-174.59"/>
270
+ <text xml:space="preserve" text-anchor="middle" x="1229.04" y="-106.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">explicit local replace / rollback</text>
271
+ </g>
272
+ <!-- Skill&#45;&gt;Prompt -->
273
+ <g id="edge21" class="edge">
274
+ <title>Skill&#45;&gt;Prompt</title>
275
+ <path fill="none" stroke="#94a3b8" stroke-dasharray="5,2" d="M510.45,-186.26C462.15,-170.77 391.55,-148.13 340.26,-131.68"/>
276
+ <polygon fill="#94a3b8" stroke="#94a3b8" points="341.33,-128.35 330.74,-128.63 339.2,-135.01 341.33,-128.35"/>
796
277
  </g>
797
278
  </g>
798
279
  </svg>