pwn 0.5.742 → 0.5.744

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 (75) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +4 -0
  4. data/documentation/Agent-Tool-Registry.md +2 -2
  5. data/documentation/How-PWN-Works.md +3 -1
  6. data/documentation/Installation.md +1 -0
  7. data/documentation/Recon-Findings-API.md +4 -2
  8. data/documentation/Reinforcement-Learning.md +3 -2
  9. data/documentation/Reporting.md +8 -0
  10. data/documentation/Skills-Memory-Learning.md +13 -4
  11. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +2 -1
  12. data/documentation/diagrams/dot/reinforcement-learning.dot +3 -1
  13. data/documentation/diagrams/dot/reporting-pipeline.dot +6 -0
  14. data/documentation/diagrams/dot/zero-day-research-flow.dot +7 -2
  15. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +406 -398
  16. data/documentation/diagrams/reinforcement-learning.svg +240 -225
  17. data/documentation/diagrams/reporting-pipeline.svg +109 -65
  18. data/documentation/diagrams/zero-day-research-flow.svg +115 -80
  19. data/documentation/pwn-ai-Agent.md +2 -0
  20. data/etc/default_skills/humanizer/LICENSE +21 -0
  21. data/etc/default_skills/humanizer/SKILL.md +650 -0
  22. data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +1 -0
  23. data/etc/default_skills/pwn/ai/agent/metrics/SKILL.md +5 -0
  24. data/etc/default_skills/pwn/ai/agent/mission/SKILL.md +77 -0
  25. data/etc/default_skills/pwn/plugins/recon/SKILL.md +4 -0
  26. data/lib/pwn/ai/agent/confirmation.rb +34 -1
  27. data/lib/pwn/ai/agent/dispatch.rb +4 -1
  28. data/lib/pwn/ai/agent/learning.rb +32 -0
  29. data/lib/pwn/ai/agent/loop.rb +57 -12
  30. data/lib/pwn/ai/agent/metrics.rb +126 -1
  31. data/lib/pwn/ai/agent/mission.rb +455 -0
  32. data/lib/pwn/ai/agent/open_goal.rb +15 -1
  33. data/lib/pwn/ai/agent/prompt_builder.rb +12 -1
  34. data/lib/pwn/ai/agent/task_dag.rb +38 -1
  35. data/lib/pwn/ai/agent/tools/fuzz_campaign.rb +5 -1
  36. data/lib/pwn/ai/agent/tools/job_run.rb +5 -1
  37. data/lib/pwn/ai/agent/tools/nuclei_scan.rb +1 -1
  38. data/lib/pwn/ai/agent.rb +1 -0
  39. data/lib/pwn/ai/cli.rb +29 -7
  40. data/lib/pwn/plugins/exploit_dev.rb +9 -2
  41. data/lib/pwn/plugins/findings.rb +113 -33
  42. data/lib/pwn/plugins/fuzz.rb +7 -2
  43. data/lib/pwn/plugins/jobs.rb +9 -3
  44. data/lib/pwn/plugins/nmap_it.rb +25 -1
  45. data/lib/pwn/plugins/nuclei.rb +35 -15
  46. data/lib/pwn/plugins/recon.rb +88 -0
  47. data/lib/pwn/plugins/redb.rb +1 -1
  48. data/lib/pwn/plugins/repl/mesh.rb +119 -76
  49. data/lib/pwn/plugins/sbom.rb +14 -5
  50. data/lib/pwn/plugins/vault.rb +12 -0
  51. data/lib/pwn/reports.rb +15 -0
  52. data/lib/pwn/version.rb +1 -1
  53. data/spec/integration/reports_spec.rb +3 -3
  54. data/spec/lib/pwn/ai/agent/confirmation_spec.rb +20 -0
  55. data/spec/lib/pwn/ai/agent/dispatch_spec.rb +11 -0
  56. data/spec/lib/pwn/ai/agent/mission_spec.rb +119 -0
  57. data/spec/lib/pwn/ai/agent/open_goal_spec.rb +7 -0
  58. data/spec/lib/pwn/ai/agent/rsi_metrics_spec.rb +44 -0
  59. data/spec/lib/pwn/ai/agent/tools/exploitdev_spec.rb +1 -1
  60. data/spec/lib/pwn/ai/agent/tools/nuclei_scan_spec.rb +7 -4
  61. data/spec/lib/pwn/ai/cli_spec.rb +35 -0
  62. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +1 -1
  63. data/spec/lib/pwn/plugins/findings_spec.rb +3 -3
  64. data/spec/lib/pwn/plugins/findings_structured_spec.rb +24 -28
  65. data/spec/lib/pwn/plugins/jobs_spec.rb +10 -1
  66. data/spec/lib/pwn/plugins/nuclei_spec.rb +5 -3
  67. data/spec/lib/pwn/plugins/redb_spec.rb +19 -1
  68. data/spec/lib/pwn/plugins/repl_mesh_channel_route_spec.rb +1 -0
  69. data/spec/lib/pwn/plugins/repl_mesh_chunk_spec.rb +46 -5
  70. data/spec/lib/pwn/plugins/repl_mesh_history_spec.rb +29 -0
  71. data/spec/lib/pwn/plugins/research_evidence_spec.rb +88 -0
  72. data/spec/lib/pwn/reports_spec.rb +3 -3
  73. data/spec/spec_helper.rb +12 -0
  74. data/third_party/pwn_rdoc.jsonl +59 -1
  75. metadata +10 -3
@@ -4,787 +4,795 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_AI_Feedback_Learning_Loop Pages: 1 -->
7
- <svg width="4612pt" height="852pt"
8
- viewBox="0.00 0.00 4612.00 852.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
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
9
  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 808.83)">
10
10
  <title>PWN_AI_Feedback_Learning_Loop</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-808.83 4569.2,-808.83 4569.2,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="2076.25" 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="1943.87" 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>
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
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_core</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M225,-498.62C225,-498.62 1507,-498.62 1507,-498.62 1513,-498.62 1519,-504.62 1519,-510.62 1519,-510.62 1519,-613.62 1519,-613.62 1519,-619.62 1513,-625.62 1507,-625.62 1507,-625.62 225,-625.62 225,-625.62 219,-625.62 213,-619.62 213,-613.62 213,-613.62 213,-510.62 213,-510.62 213,-504.62 219,-498.62 225,-498.62"/>
17
- <text xml:space="preserve" text-anchor="middle" x="866" y="-602.62" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop &#160;· &#160;budget pressure · TaskSummarizer</text>
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
18
  </g>
19
19
  <g id="clust4" class="cluster">
20
20
  <title>cluster_intro</title>
21
- <path fill="#022c22" stroke="#047857" stroke-width="2" d="M1441,-301.12C1441,-301.12 3103,-301.12 3103,-301.12 3109,-301.12 3115,-307.12 3115,-313.12 3115,-313.12 3115,-429.62 3115,-429.62 3115,-435.62 3109,-441.62 3103,-441.62 3103,-441.62 1441,-441.62 1441,-441.62 1435,-441.62 1429,-435.62 1429,-429.62 1429,-429.62 1429,-313.12 1429,-313.12 1429,-307.12 1435,-301.12 1441,-301.12"/>
22
- <text xml:space="preserve" text-anchor="middle" x="2272" y="-418.62" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
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
23
  </g>
24
24
  <g id="clust5" class="cluster">
25
25
  <title>cluster_extro</title>
26
- <path fill="#422006" stroke="#a16207" stroke-width="2" d="M613,-301.12C613,-301.12 1295,-301.12 1295,-301.12 1301,-301.12 1307,-307.12 1307,-313.12 1307,-313.12 1307,-429.62 1307,-429.62 1307,-435.62 1301,-441.62 1295,-441.62 1295,-441.62 613,-441.62 613,-441.62 607,-441.62 601,-435.62 601,-429.62 601,-429.62 601,-313.12 601,-313.12 601,-307.12 607,-301.12 613,-301.12"/>
27
- <text xml:space="preserve" text-anchor="middle" x="954" y="-418.62" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
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
28
  </g>
29
29
  <g id="clust7" class="cluster">
30
30
  <title>cluster_store</title>
31
- <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M1181,-8C1181,-8 2430,-8 2430,-8 2436,-8 2442,-14 2442,-20 2442,-20 2442,-122.62 2442,-122.62 2442,-128.62 2436,-134.62 2430,-134.62 2430,-134.62 1181,-134.62 1181,-134.62 1175,-134.62 1169,-128.62 1169,-122.62 1169,-122.62 1169,-20 1169,-20 1169,-14 1175,-8 1181,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="1805.5" y="-111.62" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
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
33
  </g>
34
34
  <!-- User -->
35
35
  <g id="node1" class="node">
36
36
  <title>User</title>
37
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M346.88,-726.62C346.88,-726.62 279.12,-726.62 279.12,-726.62 273.12,-726.62 267.12,-720.62 267.12,-714.62 267.12,-714.62 267.12,-702.62 267.12,-702.62 267.12,-696.62 273.12,-690.62 279.12,-690.62 279.12,-690.62 346.88,-690.62 346.88,-690.62 352.88,-690.62 358.88,-696.62 358.88,-702.62 358.88,-702.62 358.88,-714.62 358.88,-714.62 358.88,-720.62 352.88,-726.62 346.88,-726.62"/>
38
- <text xml:space="preserve" text-anchor="middle" x="313" y="-704.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
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>
39
39
  </g>
40
40
  <!-- Prompt -->
41
41
  <g id="node4" class="node">
42
42
  <title>Prompt</title>
43
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M332.62,-555.12C332.62,-555.12 233.38,-555.12 233.38,-555.12 227.38,-555.12 221.38,-549.12 221.38,-543.12 221.38,-543.12 221.38,-518.62 221.38,-518.62 221.38,-512.62 227.38,-506.62 233.38,-506.62 233.38,-506.62 332.62,-506.62 332.62,-506.62 338.62,-506.62 344.62,-512.62 344.62,-518.62 344.62,-518.62 344.62,-543.12 344.62,-543.12 344.62,-549.12 338.62,-555.12 332.62,-555.12"/>
44
- <text xml:space="preserve" text-anchor="middle" x="283" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
- <text xml:space="preserve" text-anchor="middle" x="283" 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="283" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">relevance&#45;ranked ctx</text>
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>
47
47
  </g>
48
48
  <!-- User&#45;&gt;Prompt -->
49
49
  <g id="edge1" class="edge">
50
50
  <title>User&#45;&gt;Prompt</title>
51
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M310.01,-690.13C305.11,-661.41 295.27,-603.75 288.91,-566.52"/>
52
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="291.68,-566.08 287.57,-558.67 286.16,-567.02 291.68,-566.08"/>
53
- <text xml:space="preserve" text-anchor="middle" x="311.55" y="-640.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
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
54
  </g>
55
55
  <!-- Mistakes -->
56
56
  <g id="node13" class="node">
57
57
  <title>Mistakes</title>
58
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M2261.25,-371.12C2261.25,-371.12 2114.75,-371.12 2114.75,-371.12 2108.75,-371.12 2102.75,-365.12 2102.75,-359.12 2102.75,-359.12 2102.75,-321.12 2102.75,-321.12 2102.75,-315.12 2108.75,-309.12 2114.75,-309.12 2114.75,-309.12 2261.25,-309.12 2261.25,-309.12 2267.25,-309.12 2273.25,-315.12 2273.25,-321.12 2273.25,-321.12 2273.25,-359.12 2273.25,-359.12 2273.25,-365.12 2267.25,-371.12 2261.25,-371.12"/>
59
- <text xml:space="preserve" text-anchor="middle" x="2188" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Mistakes</text>
60
- <text xml:space="preserve" text-anchor="middle" x="2188" 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="2188" 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="2188" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
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>
63
63
  </g>
64
64
  <!-- User&#45;&gt;Mistakes -->
65
65
  <g id="edge16" class="edge">
66
66
  <title>User&#45;&gt;Mistakes</title>
67
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M266.68,-702.95C203.01,-694.89 100.78,-675.09 142,-633.62 148.79,-626.79 1519.47,-627.02 1529,-625.62 1727.86,-596.54 1769.38,-552.52 1963,-498.62 2009.94,-485.56 2027.28,-495.8 2069,-470.62 2106.99,-447.7 2140.2,-409.06 2161.81,-379.95"/>
68
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2163.99,-381.71 2166.44,-373.6 2159.46,-378.42 2163.99,-381.71"/>
69
- <text xml:space="preserve" text-anchor="middle" x="2009.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="2009.5" y="-522.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">check_user_correction</text>
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
71
  </g>
72
72
  <!-- Fprf -->
73
73
  <g id="node31" class="node">
74
74
  <title>Fprf</title>
75
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2433.88,-54.79C2433.88,-56.6 2411.97,-58.06 2385,-58.06 2358.03,-58.06 2336.12,-56.6 2336.12,-54.79 2336.12,-54.79 2336.12,-25.34 2336.12,-25.34 2336.12,-23.53 2358.03,-22.06 2385,-22.06 2411.97,-22.06 2433.88,-23.53 2433.88,-25.34 2433.88,-25.34 2433.88,-54.79 2433.88,-54.79"/>
76
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2433.88,-54.79C2433.88,-52.98 2411.97,-51.52 2385,-51.52 2358.03,-51.52 2336.12,-52.98 2336.12,-54.79"/>
77
- <text xml:space="preserve" text-anchor="middle" x="2385" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">preferences.jsonl</text>
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
78
  </g>
79
79
  <!-- User&#45;&gt;Fprf -->
80
- <g id="edge74" class="edge">
80
+ <g id="edge75" class="edge">
81
81
  <title>User&#45;&gt;Fprf</title>
82
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M278.94,-690.06C253.59,-674.83 226.35,-652.36 245,-633.62 253.9,-624.68 2049.63,-628.12 2062,-625.62 2206.34,-596.53 2225.78,-536.79 2368,-498.62 2529.06,-455.4 2573.63,-461.03 2740,-449.62 2758.65,-448.35 4069.96,-451.23 4086,-441.62 4146.95,-405.11 4104.86,-343.01 4162.25,-301.12 4216.24,-261.73 4267.37,-324.6 4310,-273.12 4356.1,-217.47 4282.03,-164.01 4213,-142.62 4040.85,-89.3 2738.97,-50.75 2444.21,-42.64"/>
83
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2444.6,-39.85 2436.52,-42.43 2444.44,-45.45 2444.6,-39.85"/>
84
- <text xml:space="preserve" text-anchor="middle" x="4194.12" 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="4194.12" y="-331.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">→ DPO pair</text>
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
86
  </g>
87
87
  <!-- LLM -->
88
88
  <g id="node2" class="node">
89
89
  <title>LLM</title>
90
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M88,-726.62C88,-726.62 12,-726.62 12,-726.62 6,-726.62 0,-720.62 0,-714.62 0,-714.62 0,-702.62 0,-702.62 0,-696.62 6,-690.62 12,-690.62 12,-690.62 88,-690.62 88,-690.62 94,-690.62 100,-696.62 100,-702.62 100,-702.62 100,-714.62 100,-714.62 100,-720.62 94,-726.62 88,-726.62"/>
91
- <text xml:space="preserve" text-anchor="middle" x="50" y="-704.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
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>
92
92
  </g>
93
93
  <!-- Dispatch -->
94
94
  <g id="node5" class="node">
95
95
  <title>Dispatch</title>
96
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1106.62,-555.12C1106.62,-555.12 995.38,-555.12 995.38,-555.12 989.38,-555.12 983.38,-549.12 983.38,-543.12 983.38,-543.12 983.38,-518.62 983.38,-518.62 983.38,-512.62 989.38,-506.62 995.38,-506.62 995.38,-506.62 1106.62,-506.62 1106.62,-506.62 1112.62,-506.62 1118.62,-512.62 1118.62,-518.62 1118.62,-518.62 1118.62,-543.12 1118.62,-543.12 1118.62,-549.12 1112.62,-555.12 1106.62,-555.12"/>
97
- <text xml:space="preserve" text-anchor="middle" x="1051" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
98
- <text xml:space="preserve" text-anchor="middle" x="1051" 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="1051" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">ToolGuard · repair_name</text>
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>
100
100
  </g>
101
101
  <!-- LLM&#45;&gt;Dispatch -->
102
102
  <g id="edge2" class="edge">
103
103
  <title>LLM&#45;&gt;Dispatch</title>
104
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M38.92,-679.84C34.67,-664.18 33.29,-645.44 45,-633.62 53.55,-624.99 908.45,-629.39 920,-625.62 958.22,-613.16 994.82,-585.14 1019.57,-562.95"/>
105
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="36.16,-680.42 41.26,-687.18 41.49,-678.71 36.16,-680.42"/>
106
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="1021.26,-565.2 1025.27,-557.73 1017.48,-561.08 1021.26,-565.2"/>
107
- <text xml:space="preserve" text-anchor="middle" x="64.5" y="-640.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
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>
108
108
  </g>
109
109
  <!-- World -->
110
110
  <g id="node3" class="node">
111
111
  <title>World</title>
112
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M1534.88,-726.62C1534.88,-726.62 1413.12,-726.62 1413.12,-726.62 1407.12,-726.62 1401.12,-720.62 1401.12,-714.62 1401.12,-714.62 1401.12,-702.62 1401.12,-702.62 1401.12,-696.62 1407.12,-690.62 1413.12,-690.62 1413.12,-690.62 1534.88,-690.62 1534.88,-690.62 1540.88,-690.62 1546.88,-696.62 1546.88,-702.62 1546.88,-702.62 1546.88,-714.62 1546.88,-714.62 1546.88,-720.62 1540.88,-726.62 1534.88,-726.62"/>
113
- <text xml:space="preserve" text-anchor="middle" x="1474" 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="1474" y="-698.17" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · RF · Web · Intel</text>
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>
115
115
  </g>
116
116
  <!-- Result -->
117
117
  <g id="node10" class="node">
118
118
  <title>Result</title>
119
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M1498.88,-548.88C1498.88,-548.88 1449.12,-548.88 1449.12,-548.88 1443.12,-548.88 1437.12,-542.88 1437.12,-536.88 1437.12,-536.88 1437.12,-524.88 1437.12,-524.88 1437.12,-518.88 1443.12,-512.88 1449.12,-512.88 1449.12,-512.88 1498.88,-512.88 1498.88,-512.88 1504.88,-512.88 1510.88,-518.88 1510.88,-524.88 1510.88,-524.88 1510.88,-536.88 1510.88,-536.88 1510.88,-542.88 1504.88,-548.88 1498.88,-548.88"/>
120
- <text xml:space="preserve" text-anchor="middle" x="1474" y="-533.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
121
- <text xml:space="preserve" text-anchor="middle" x="1474" y="-520.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
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
122
  </g>
123
123
  <!-- World&#45;&gt;Result -->
124
124
  <!-- Snapshot -->
125
125
  <g id="node18" class="node">
126
126
  <title>Snapshot</title>
127
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M946.62,-371.12C946.62,-371.12 781.38,-371.12 781.38,-371.12 775.38,-371.12 769.38,-365.12 769.38,-359.12 769.38,-359.12 769.38,-321.12 769.38,-321.12 769.38,-315.12 775.38,-309.12 781.38,-309.12 781.38,-309.12 946.62,-309.12 946.62,-309.12 952.62,-309.12 958.62,-315.12 958.62,-321.12 958.62,-321.12 958.62,-359.12 958.62,-359.12 958.62,-365.12 952.62,-371.12 946.62,-371.12"/>
128
- <text xml:space="preserve" text-anchor="middle" x="864" 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="864" 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="864" 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="864" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(AUTO_SECTIONS=host/repo/env)</text>
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
132
  </g>
133
133
  <!-- World&#45;&gt;Snapshot -->
134
134
  <g id="edge19" class="edge">
135
135
  <title>World&#45;&gt;Snapshot</title>
136
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1400.7,-699.99C1336.84,-690.67 1259.85,-671.25 1297,-633.62 1309.2,-621.27 1906.09,-632.58 1922,-625.62 2015.38,-584.78 2140.8,-521.96 2069,-449.62 2058.34,-438.89 994.15,-446.96 980,-441.62 946.48,-428.98 916.17,-401.9 894.95,-379.03"/>
137
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="897.15,-377.29 889.71,-373.24 893,-381.05 897.15,-377.29"/>
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
138
  </g>
139
139
  <!-- Observe -->
140
140
  <g id="node19" class="node">
141
141
  <title>Observe</title>
142
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1122.5,-358.12C1122.5,-358.12 1013.5,-358.12 1013.5,-358.12 1007.5,-358.12 1001.5,-352.12 1001.5,-346.12 1001.5,-346.12 1001.5,-334.12 1001.5,-334.12 1001.5,-328.12 1007.5,-322.12 1013.5,-322.12 1013.5,-322.12 1122.5,-322.12 1122.5,-322.12 1128.5,-322.12 1134.5,-328.12 1134.5,-334.12 1134.5,-334.12 1134.5,-346.12 1134.5,-346.12 1134.5,-352.12 1128.5,-358.12 1122.5,-358.12"/>
143
- <text xml:space="preserve" text-anchor="middle" x="1068" 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="1068" y="-329.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon · CVE · web DOM</text>
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
145
  </g>
146
146
  <!-- World&#45;&gt;Observe -->
147
147
  <g id="edge20" class="edge">
148
148
  <title>World&#45;&gt;Observe</title>
149
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M1400.63,-697.04C1345.16,-686.21 1283.64,-666.26 1316,-633.62 1334.52,-614.95 2239.14,-636.71 2263,-625.62 2330.46,-594.28 2306.44,-533.77 2372,-498.62 2462.96,-449.86 2671.78,-522.81 2599,-449.62 2584.87,-435.41 1174.23,-449.95 1156,-441.62 1122.56,-426.35 1096.79,-391.45 1082.01,-367.09"/>
150
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1084.52,-365.84 1078.07,-360.35 1079.69,-368.67 1084.52,-365.84"/>
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
151
  </g>
152
152
  <!-- Verify -->
153
153
  <g id="node20" class="node">
154
154
  <title>Verify</title>
155
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M1286.5,-364.38C1286.5,-364.38 1189.5,-364.38 1189.5,-364.38 1183.5,-364.38 1177.5,-358.38 1177.5,-352.38 1177.5,-352.38 1177.5,-327.88 1177.5,-327.88 1177.5,-321.88 1183.5,-315.88 1189.5,-315.88 1189.5,-315.88 1286.5,-315.88 1286.5,-315.88 1292.5,-315.88 1298.5,-321.88 1298.5,-327.88 1298.5,-327.88 1298.5,-352.38 1298.5,-352.38 1298.5,-358.38 1292.5,-364.38 1286.5,-364.38"/>
156
- <text xml:space="preserve" text-anchor="middle" x="1238" 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="1238" 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="1238" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">revalidate_memory</text>
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
159
  </g>
160
160
  <!-- World&#45;&gt;Verify -->
161
161
  <g id="edge21" class="edge">
162
162
  <title>World&#45;&gt;Verify</title>
163
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1400.55,-693.54C1353.57,-681.49 1306.21,-661.63 1334,-633.62 1344.21,-623.33 2364.59,-631.15 2378,-625.62 2452.6,-594.86 2436.4,-536.31 2507.75,-498.62 2566.14,-467.79 2694.54,-496.47 2648,-449.62 2635.97,-437.52 1435.51,-445.96 1419,-441.62 1366.82,-427.93 1313.61,-395.75 1278.51,-371.46"/>
164
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="1280.18,-369.22 1272.03,-366.9 1276.96,-373.8 1280.18,-369.22"/>
165
- <text xml:space="preserve" text-anchor="middle" x="2549.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="2549.38" y="-522.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:headless</text>
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
167
  </g>
168
168
  <!-- RFTune -->
169
169
  <g id="node21" class="node">
170
170
  <title>RFTune</title>
171
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M714.62,-364.38C714.62,-364.38 621.38,-364.38 621.38,-364.38 615.38,-364.38 609.38,-358.38 609.38,-352.38 609.38,-352.38 609.38,-327.88 609.38,-327.88 609.38,-321.88 615.38,-315.88 621.38,-315.88 621.38,-315.88 714.62,-315.88 714.62,-315.88 720.62,-315.88 726.62,-321.88 726.62,-327.88 726.62,-327.88 726.62,-352.38 726.62,-352.38 726.62,-358.38 720.62,-364.38 714.62,-364.38"/>
172
- <text xml:space="preserve" text-anchor="middle" x="668" 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="668" 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="668" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RDS → now_playing</text>
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
175
  </g>
176
176
  <!-- World&#45;&gt;RFTune -->
177
177
  <g id="edge22" class="edge">
178
178
  <title>World&#45;&gt;RFTune</title>
179
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1431.85,-689.98C1402.53,-675.35 1372,-653.76 1392,-633.62 1415.59,-609.88 2573.41,-649.37 2597,-625.62 2636.78,-585.58 2635.02,-540.34 2597,-498.62 2517.62,-411.54 2186.69,-455.43 2069,-449.62 2050.67,-448.72 764.5,-449.64 748,-441.62 719.39,-427.73 697.83,-398.12 684.34,-374.62"/>
180
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="686.82,-373.31 680.51,-367.64 681.91,-376 686.82,-373.31"/>
181
- <text xml:space="preserve" text-anchor="middle" x="2654.68" 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="2654.68" y="-522.33" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:7356 + SDR</text>
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>
183
183
  </g>
184
184
  <!-- Router -->
185
185
  <g id="node6" class="node">
186
186
  <title>Router</title>
187
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M505.62,-555.12C505.62,-555.12 442.38,-555.12 442.38,-555.12 436.38,-555.12 430.38,-549.12 430.38,-543.12 430.38,-543.12 430.38,-518.62 430.38,-518.62 430.38,-512.62 436.38,-506.62 442.38,-506.62 442.38,-506.62 505.62,-506.62 505.62,-506.62 511.62,-506.62 517.62,-512.62 517.62,-518.62 517.62,-518.62 517.62,-543.12 517.62,-543.12 517.62,-549.12 511.62,-555.12 505.62,-555.12"/>
188
- <text xml:space="preserve" text-anchor="middle" x="474" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Registry</text>
189
- <text xml:space="preserve" text-anchor="middle" x="474" 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="474" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">CORE + top&#45;K</text>
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>
191
191
  </g>
192
192
  <!-- Prompt&#45;&gt;Router -->
193
193
  <g id="edge4" class="edge">
194
194
  <title>Prompt&#45;&gt;Router</title>
195
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M345.3,-530.88C370.15,-530.88 395.01,-530.88 419.86,-530.88"/>
196
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="419.79,-533.68 427.79,-530.88 419.79,-528.08 419.79,-533.68"/>
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"/>
197
197
  </g>
198
198
  <!-- Escalate -->
199
199
  <g id="node9" class="node">
200
200
  <title>Escalate</title>
201
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M1339.75,-548.88C1339.75,-548.88 1232.25,-548.88 1232.25,-548.88 1226.25,-548.88 1220.25,-542.88 1220.25,-536.88 1220.25,-536.88 1220.25,-524.88 1220.25,-524.88 1220.25,-518.88 1226.25,-512.88 1232.25,-512.88 1232.25,-512.88 1339.75,-512.88 1339.75,-512.88 1345.75,-512.88 1351.75,-518.88 1351.75,-524.88 1351.75,-524.88 1351.75,-536.88 1351.75,-536.88 1351.75,-542.88 1345.75,-548.88 1339.75,-548.88"/>
202
- <text xml:space="preserve" text-anchor="middle" x="1286" y="-533.92" font-family="sans-Serif" font-size="11.00" fill="#0f172a">escalate</text>
203
- <text xml:space="preserve" text-anchor="middle" x="1286" y="-520.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">&gt;=N fails → Swarm hint</text>
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>
204
204
  </g>
205
205
  <!-- Dispatch&#45;&gt;Escalate -->
206
206
  <g id="edge8" class="edge">
207
207
  <title>Dispatch&#45;&gt;Escalate</title>
208
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1119.29,-530.88C1147.66,-530.88 1180.7,-530.88 1209.84,-530.88"/>
209
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1209.6,-533.68 1217.6,-530.88 1209.6,-528.08 1209.6,-533.68"/>
210
- <text xml:space="preserve" text-anchor="middle" x="1169.44" y="-535.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">turn_fails &gt;= N</text>
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>
211
211
  </g>
212
212
  <!-- Dispatch&#45;&gt;Result -->
213
213
  <g id="edge9" class="edge">
214
214
  <title>Dispatch&#45;&gt;Result</title>
215
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1073.6,-555.71C1103.61,-586.65 1159.94,-637.92 1220.5,-658.12 1275.73,-676.55 1297.92,-680.92 1351.5,-658.12 1399.48,-637.72 1437.76,-588.29 1458.06,-557.39"/>
216
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1460.29,-559.11 1462.24,-550.86 1455.57,-556.09 1460.29,-559.11"/>
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"/>
217
217
  </g>
218
218
  <!-- Metrics -->
219
219
  <g id="node11" class="node">
220
220
  <title>Metrics</title>
221
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1556.75,-364.38C1556.75,-364.38 1449.25,-364.38 1449.25,-364.38 1443.25,-364.38 1437.25,-358.38 1437.25,-352.38 1437.25,-352.38 1437.25,-327.88 1437.25,-327.88 1437.25,-321.88 1443.25,-315.88 1449.25,-315.88 1449.25,-315.88 1556.75,-315.88 1556.75,-315.88 1562.75,-315.88 1568.75,-321.88 1568.75,-327.88 1568.75,-327.88 1568.75,-352.38 1568.75,-352.38 1568.75,-358.38 1562.75,-364.38 1556.75,-364.38"/>
222
- <text xml:space="preserve" text-anchor="middle" x="1503" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
223
- <text xml:space="preserve" text-anchor="middle" x="1503" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool · PER&#45;ENGINE</text>
224
- <text xml:space="preserve" text-anchor="middle" x="1503" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">success · avg ms</text>
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>
225
225
  </g>
226
226
  <!-- Dispatch&#45;&gt;Metrics -->
227
227
  <g id="edge11" class="edge">
228
228
  <title>Dispatch&#45;&gt;Metrics</title>
229
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1081.75,-505.94C1109.83,-484.62 1149.69,-455.84 1168,-449.62 1230.79,-428.3 1253.17,-459.6 1317,-441.62 1370.54,-426.55 1425.87,-394.1 1462.11,-370.14"/>
230
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1463.27,-372.73 1468.36,-365.95 1460.15,-368.08 1463.27,-372.73"/>
231
- <text xml:space="preserve" text-anchor="middle" x="1199.5" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record(engine:)</text>
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>
232
232
  </g>
233
233
  <!-- Dispatch&#45;&gt;Mistakes -->
234
234
  <g id="edge15" class="edge">
235
235
  <title>Dispatch&#45;&gt;Mistakes</title>
236
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1119.12,-515.29C1144.21,-509.97 1172.88,-503.96 1199,-498.62 1262.03,-485.76 1278.54,-486.02 1341,-470.62 1372.85,-462.78 1379.32,-454.57 1411.75,-449.62 1473.29,-440.23 1911.31,-455.51 1972,-441.62 2027.73,-428.88 2086.26,-400.59 2128.31,-377.27"/>
237
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="2129.58,-379.76 2135.19,-373.4 2126.84,-374.88 2129.58,-379.76"/>
238
- <text xml:space="preserve" text-anchor="middle" x="1430.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="1430.88" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
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>
240
240
  </g>
241
241
  <!-- Curric -->
242
242
  <g id="node16" class="node">
243
243
  <title>Curric</title>
244
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M2872.88,-364.38C2872.88,-364.38 2733.12,-364.38 2733.12,-364.38 2727.12,-364.38 2721.12,-358.38 2721.12,-352.38 2721.12,-352.38 2721.12,-327.88 2721.12,-327.88 2721.12,-321.88 2727.12,-315.88 2733.12,-315.88 2733.12,-315.88 2872.88,-315.88 2872.88,-315.88 2878.88,-315.88 2884.88,-321.88 2884.88,-327.88 2884.88,-327.88 2884.88,-352.38 2884.88,-352.38 2884.88,-358.38 2878.88,-364.38 2872.88,-364.38"/>
245
- <text xml:space="preserve" text-anchor="middle" x="2803" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Curriculum</text>
246
- <text xml:space="preserve" text-anchor="middle" x="2803" 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="2803" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">critic/CF geometry · gate + diet</text>
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
248
  </g>
249
249
  <!-- Dispatch&#45;&gt;Curric -->
250
- <g id="edge67" class="edge">
250
+ <g id="edge68" class="edge">
251
251
  <title>Dispatch&#45;&gt;Curric</title>
252
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M982.71,-511.61C962.63,-506.78 940.54,-501.98 920,-498.62 885.68,-493.02 631.72,-496.29 608.25,-470.62 601.95,-463.74 601.66,-456.24 608.25,-449.62 618.31,-439.53 2647.42,-445.97 2661,-441.62 2703.86,-427.9 2744.93,-396.11 2771.77,-371.93"/>
253
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2773.51,-374.14 2777.51,-366.66 2769.72,-370.01 2773.51,-374.14"/>
254
- <text xml:space="preserve" text-anchor="middle" x="637.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="637.12" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[REPEATING]</text>
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>
256
256
  </g>
257
257
  <!-- Policy -->
258
258
  <g id="node17" class="node">
259
259
  <title>Policy</title>
260
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M1722.62,-371.12C1722.62,-371.12 1623.38,-371.12 1623.38,-371.12 1617.38,-371.12 1611.38,-365.12 1611.38,-359.12 1611.38,-359.12 1611.38,-321.12 1611.38,-321.12 1611.38,-315.12 1617.38,-309.12 1623.38,-309.12 1623.38,-309.12 1722.62,-309.12 1722.62,-309.12 1728.62,-309.12 1734.62,-315.12 1734.62,-321.12 1734.62,-321.12 1734.62,-359.12 1734.62,-359.12 1734.62,-365.12 1728.62,-371.12 1722.62,-371.12"/>
261
- <text xml:space="preserve" text-anchor="middle" x="1673" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Policy</text>
262
- <text xml:space="preserve" text-anchor="middle" x="1673" 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="1673" 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="1673" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">advisory rank only</text>
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>
265
265
  </g>
266
266
  <!-- Dispatch&#45;&gt;Policy -->
267
267
  <g id="edge12" class="edge">
268
268
  <title>Dispatch&#45;&gt;Policy</title>
269
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1119.02,-510.89C1154.62,-500.28 1198.66,-486.1 1237,-470.62 1256.54,-462.74 1259.05,-454.68 1279.5,-449.62 1313,-441.34 1558.97,-456.73 1590,-441.62 1616.7,-428.62 1637.84,-402.54 1652.1,-380.21"/>
270
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1654.39,-381.82 1656.19,-373.54 1649.62,-378.89 1654.39,-381.82"/>
271
- <text xml:space="preserve" text-anchor="middle" x="1307.25" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">observe_step</text>
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>
272
272
  </g>
273
273
  <!-- Dispatch&#45;&gt;Snapshot -->
274
274
  <g id="edge17" class="edge">
275
275
  <title>Dispatch&#45;&gt;Snapshot</title>
276
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M982.79,-511.08C962.71,-506.24 940.6,-501.57 920,-498.62 857.67,-489.73 397.41,-516.24 354,-470.62 347.57,-463.86 347.47,-456.29 354,-449.62 369.32,-433.99 727.57,-449.48 748,-441.62 781.44,-428.77 811.75,-401.69 832.99,-378.88"/>
277
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="834.94,-380.91 838.24,-373.11 830.79,-377.15 834.94,-380.91"/>
278
- <text xml:space="preserve" text-anchor="middle" x="366" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
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>
279
279
  </g>
280
280
  <!-- Dispatch&#45;&gt;Observe -->
281
281
  <g id="edge23" class="edge">
282
282
  <title>Dispatch&#45;&gt;Observe</title>
283
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M982.82,-516.72C932.26,-504.02 876.73,-481.94 905.75,-449.62 916.84,-437.28 965.28,-449.28 980,-441.62 1012.44,-424.76 1038.29,-390.56 1053.38,-366.76"/>
284
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1055.61,-368.48 1057.41,-360.2 1050.84,-365.55 1055.61,-368.48"/>
285
- <text xml:space="preserve" text-anchor="middle" x="954.88" 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="954.88" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">verify/watch/rf_tune/intel</text>
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>
287
287
  </g>
288
288
  <!-- Plan -->
289
289
  <g id="node7" class="node">
290
290
  <title>Plan</title>
291
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M684.62,-548.88C684.62,-548.88 615.38,-548.88 615.38,-548.88 609.38,-548.88 603.38,-542.88 603.38,-536.88 603.38,-536.88 603.38,-524.88 603.38,-524.88 603.38,-518.88 609.38,-512.88 615.38,-512.88 615.38,-512.88 684.62,-512.88 684.62,-512.88 690.62,-512.88 696.62,-518.88 696.62,-524.88 696.62,-524.88 696.62,-536.88 696.62,-536.88 696.62,-542.88 690.62,-548.88 684.62,-548.88"/>
292
- <text xml:space="preserve" text-anchor="middle" x="650" 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="650" y="-520.42" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(pre&#45;pass, local)</text>
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>
294
294
  </g>
295
295
  <!-- Router&#45;&gt;Plan -->
296
296
  <g id="edge5" class="edge">
297
297
  <title>Router&#45;&gt;Plan</title>
298
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M518,-530.88C542.96,-530.88 567.92,-530.88 592.88,-530.88"/>
299
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="592.85,-533.68 600.85,-530.88 592.85,-528.08 592.85,-533.68"/>
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"/>
300
300
  </g>
301
301
  <!-- TaskSum -->
302
302
  <g id="node8" class="node">
303
303
  <title>TaskSum</title>
304
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M886.25,-555.12C886.25,-555.12 793.75,-555.12 793.75,-555.12 787.75,-555.12 781.75,-549.12 781.75,-543.12 781.75,-543.12 781.75,-518.62 781.75,-518.62 781.75,-512.62 787.75,-506.62 793.75,-506.62 793.75,-506.62 886.25,-506.62 886.25,-506.62 892.25,-506.62 898.25,-512.62 898.25,-518.62 898.25,-518.62 898.25,-543.12 898.25,-543.12 898.25,-549.12 892.25,-555.12 886.25,-555.12"/>
305
- <text xml:space="preserve" text-anchor="middle" x="840" y="-540.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TaskSummarizer</text>
306
- <text xml:space="preserve" text-anchor="middle" x="840" 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="840" y="-513.67" font-family="sans-Serif" font-size="11.00" fill="#0f172a">dedup last_brief_fp</text>
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>
308
308
  </g>
309
309
  <!-- Plan&#45;&gt;TaskSum -->
310
310
  <g id="edge6" class="edge">
311
311
  <title>Plan&#45;&gt;TaskSum</title>
312
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M697.13,-530.88C721.76,-530.88 746.4,-530.88 771.03,-530.88"/>
313
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="770.87,-533.68 778.87,-530.88 770.87,-528.08 770.87,-533.68"/>
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"/>
314
314
  </g>
315
315
  <!-- TaskSum&#45;&gt;Dispatch -->
316
316
  <g id="edge7" class="edge">
317
317
  <title>TaskSum&#45;&gt;Dispatch</title>
318
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M898.93,-530.88C923.58,-530.88 948.23,-530.88 972.87,-530.88"/>
319
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="972.72,-533.68 980.72,-530.88 972.72,-528.08 972.72,-533.68"/>
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
320
  </g>
321
321
  <!-- Escalate&#45;&gt;LLM -->
322
- <g id="edge61" class="edge">
322
+ <g id="edge62" class="edge">
323
323
  <title>Escalate&#45;&gt;LLM</title>
324
- <path fill="none" stroke="#a78bfa" stroke-width="2" stroke-dasharray="5,2" d="M1265.5,-549.85C1238.73,-572.13 1189.44,-609.15 1140,-625.62 951.03,-688.6 444.56,-674.8 246,-690.62 200.72,-694.23 149.59,-698.68 110.9,-702.12"/>
325
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="111.07,-699.3 103.35,-702.8 111.57,-704.87 111.07,-699.3"/>
326
- <text xml:space="preserve" text-anchor="middle" x="1145.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="1145.07" y="-635.58" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier hint</text>
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
328
  </g>
329
329
  <!-- Escalate&#45;&gt;Result -->
330
330
  <!-- Escalate&#45;&gt;Mistakes -->
331
- <g id="edge62" class="edge">
331
+ <g id="edge63" class="edge">
332
332
  <title>Escalate&#45;&gt;Mistakes</title>
333
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1219.28,-514.88C1152.83,-499.63 1059.94,-477.32 1054.75,-470.62 1049.03,-463.25 1048.18,-456.25 1054.75,-449.62 1063.72,-440.58 1959.57,-444.43 1972,-441.62 2028.24,-428.92 2087.28,-400.26 2129.39,-376.78"/>
334
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2130.54,-379.34 2136.13,-372.97 2127.79,-374.47 2130.54,-379.34"/>
335
- <text xml:space="preserve" text-anchor="middle" x="1088.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="1088.88" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(tool:&#39;escalation&#39;)</text>
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
337
  </g>
338
338
  <!-- Result&#45;&gt;User -->
339
- <g id="edge64" class="edge">
339
+ <g id="edge65" class="edge">
340
340
  <title>Result&#45;&gt;User</title>
341
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1461.75,-549.46C1444.82,-572.05 1411.92,-610.19 1373,-625.62 1358.64,-631.32 271.88,-622.66 261,-633.62 246.13,-648.6 261.21,-668.25 278.89,-683.54"/>
342
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="276.78,-685.43 284.75,-688.31 280.32,-681.09 276.78,-685.43"/>
343
- <text xml:space="preserve" text-anchor="middle" x="276" y="-640.83" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
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
344
  </g>
345
345
  <!-- Learning -->
346
346
  <g id="node12" class="node">
347
347
  <title>Learning</title>
348
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1938,-371.12C1938,-371.12 1790,-371.12 1790,-371.12 1784,-371.12 1778,-365.12 1778,-359.12 1778,-359.12 1778,-321.12 1778,-321.12 1778,-315.12 1784,-309.12 1790,-309.12 1790,-309.12 1938,-309.12 1938,-309.12 1944,-309.12 1950,-315.12 1950,-321.12 1950,-321.12 1950,-359.12 1950,-359.12 1950,-365.12 1944,-371.12 1938,-371.12"/>
349
- <text xml:space="preserve" text-anchor="middle" x="1864" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
350
- <text xml:space="preserve" text-anchor="middle" x="1864" 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="1864" 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="1864" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">fact_check_local_final</text>
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
353
  </g>
354
354
  <!-- Result&#45;&gt;Learning -->
355
355
  <g id="edge13" class="edge">
356
356
  <title>Result&#45;&gt;Learning</title>
357
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1436.68,-515.78C1417.86,-509.34 1394.53,-502.33 1373,-498.62 1335.07,-492.1 707.41,-498.39 680.75,-470.62 674.29,-463.89 674.17,-456.25 680.75,-449.62 691.27,-439.03 1742.12,-447.14 1756,-441.62 1787.86,-428.96 1815.93,-402.06 1835.47,-379.27"/>
358
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1837.52,-381.18 1840.5,-373.24 1833.22,-377.59 1837.52,-381.18"/>
359
- <text xml:space="preserve" text-anchor="middle" x="722.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="722.38" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(deferred after reply)</text>
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>
361
361
  </g>
362
362
  <!-- Reward -->
363
363
  <g id="node15" class="node">
364
364
  <title>Reward</title>
365
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M3094.5,-371.12C3094.5,-371.12 2979.5,-371.12 2979.5,-371.12 2973.5,-371.12 2967.5,-365.12 2967.5,-359.12 2967.5,-359.12 2967.5,-321.12 2967.5,-321.12 2967.5,-315.12 2973.5,-309.12 2979.5,-309.12 2979.5,-309.12 3094.5,-309.12 3094.5,-309.12 3100.5,-309.12 3106.5,-315.12 3106.5,-321.12 3106.5,-321.12 3106.5,-359.12 3106.5,-359.12 3106.5,-365.12 3100.5,-371.12 3094.5,-371.12"/>
366
- <text xml:space="preserve" text-anchor="middle" x="3037" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reward</text>
367
- <text xml:space="preserve" text-anchor="middle" x="3037" 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="3037" 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="3037" y="-316.18" font-family="sans-Serif" font-size="11.00" fill="#0f172a">DPO scrub &lt;=40%/src</text>
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
370
  </g>
371
371
  <!-- Result&#45;&gt;Reward -->
372
- <g id="edge65" class="edge">
372
+ <g id="edge66" class="edge">
373
373
  <title>Result&#45;&gt;Reward</title>
374
- <path fill="none" stroke="#34d399" stroke-width="2" d="M1436.66,-515.9C1417.84,-509.48 1394.5,-502.46 1373,-498.62 1256.39,-477.84 758.66,-533.54 842.25,-449.62 852.36,-439.47 2892.44,-446.26 2906,-441.62 2942.31,-429.22 2976.47,-402.31 3000.8,-379.45"/>
375
- <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="3002.66,-381.55 3006.48,-373.98 2998.77,-377.52 3002.66,-381.55"/>
376
- <text xml:space="preserve" text-anchor="middle" x="865.12" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">judge · prm</text>
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
377
  </g>
378
378
  <!-- Result&#45;&gt;Curric -->
379
- <g id="edge66" class="edge">
379
+ <g id="edge67" class="edge">
380
380
  <title>Result&#45;&gt;Curric</title>
381
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1487.34,-512.42C1503.49,-492.86 1532.7,-462.25 1566,-449.62 1622.89,-428.06 2603.09,-460.28 2661,-441.62 2703.83,-427.83 2744.91,-396.05 2771.76,-371.89"/>
382
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2773.49,-374.1 2777.5,-366.63 2769.71,-369.98 2773.49,-374.1"/>
383
- <text xml:space="preserve" text-anchor="middle" x="1597.5" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">critic · hindsight</text>
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
384
  </g>
385
385
  <!-- Result&#45;&gt;Policy -->
386
386
  <g id="edge14" class="edge">
387
387
  <title>Result&#45;&gt;Policy</title>
388
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1466.27,-512.38C1459.58,-494.23 1453.2,-466.24 1468.75,-449.62 1477.98,-439.77 1577.98,-447.78 1590,-441.62 1616.26,-428.18 1637.29,-402.37 1651.62,-380.28"/>
389
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1653.87,-381.96 1655.73,-373.69 1649.12,-378.99 1653.87,-381.96"/>
390
- <text xml:space="preserve" text-anchor="middle" x="1495.38" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">finish (judge)</text>
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>
391
391
  </g>
392
392
  <!-- Result&#45;&gt;Observe -->
393
393
  <g id="edge18" class="edge">
394
394
  <title>Result&#45;&gt;Observe</title>
395
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1436.69,-515.68C1417.89,-509.21 1394.55,-502.21 1373,-498.62 1321.07,-489.99 462.42,-508.4 425.75,-470.62 419.25,-463.93 419.2,-456.27 425.75,-449.62 436.56,-438.66 966.02,-448.09 980,-441.62 1013.37,-426.2 1039.16,-391.34 1053.96,-367.03"/>
396
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1056.27,-368.62 1057.91,-360.3 1051.44,-365.78 1056.27,-368.62"/>
397
- <text xml:space="preserve" text-anchor="middle" x="476.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="476.38" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(AUTO_SECTIONS only)</text>
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
399
  </g>
400
400
  <!-- Result&#45;&gt;Verify -->
401
- <g id="edge49" class="edge">
401
+ <g id="edge50" class="edge">
402
402
  <title>Result&#45;&gt;Verify</title>
403
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1511.54,-525.02C1572.1,-515.81 1680.57,-492.73 1639,-449.62 1630.51,-440.82 1430.78,-444.91 1419,-441.62 1366.91,-427.12 1313.54,-394.96 1278.38,-370.9"/>
404
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1280.07,-368.66 1271.9,-366.4 1276.87,-373.26 1280.07,-368.66"/>
405
- <text xml:space="preserve" text-anchor="middle" x="1693.6" 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="1693.6" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(CVE / version claims)</text>
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
407
  </g>
408
408
  <!-- Correlate -->
409
409
  <g id="node22" class="node">
410
410
  <title>Correlate</title>
411
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M1318.88,-216.12C1318.88,-216.12 1119.12,-216.12 1119.12,-216.12 1113.12,-216.12 1107.12,-210.12 1107.12,-204.12 1107.12,-204.12 1107.12,-191.62 1107.12,-191.62 1107.12,-185.62 1113.12,-179.62 1119.12,-179.62 1119.12,-179.62 1318.88,-179.62 1318.88,-179.62 1324.88,-179.62 1330.88,-185.62 1330.88,-191.62 1330.88,-191.62 1330.88,-204.12 1330.88,-204.12 1330.88,-210.12 1324.88,-216.12 1318.88,-216.12"/>
412
- <text xml:space="preserve" text-anchor="middle" x="1219" 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="1219" 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>
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
414
  </g>
415
415
  <!-- Metrics&#45;&gt;Correlate -->
416
416
  <g id="edge24" class="edge">
417
417
  <title>Metrics&#45;&gt;Correlate</title>
418
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1451.66,-315.2C1425.36,-302.82 1392.87,-287.37 1364,-273.12 1329.64,-256.17 1291.03,-236.37 1262.3,-221.48"/>
419
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1263.85,-219.13 1255.46,-217.93 1261.27,-224.1 1263.85,-219.13"/>
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
420
  </g>
421
421
  <!-- Fmet -->
422
422
  <g id="node23" class="node">
423
423
  <title>Fmet</title>
424
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1395.5,-54.79C1395.5,-56.6 1379.14,-58.06 1359,-58.06 1338.86,-58.06 1322.5,-56.6 1322.5,-54.79 1322.5,-54.79 1322.5,-25.34 1322.5,-25.34 1322.5,-23.53 1338.86,-22.06 1359,-22.06 1379.14,-22.06 1395.5,-23.53 1395.5,-25.34 1395.5,-25.34 1395.5,-54.79 1395.5,-54.79"/>
425
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1395.5,-54.79C1395.5,-52.98 1379.14,-51.52 1359,-51.52 1338.86,-51.52 1322.5,-52.98 1322.5,-54.79"/>
426
- <text xml:space="preserve" text-anchor="middle" x="1359" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
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
427
  </g>
428
428
  <!-- Metrics&#45;&gt;Fmet -->
429
- <g id="edge32" class="edge">
429
+ <g id="edge33" class="edge">
430
430
  <title>Metrics&#45;&gt;Fmet</title>
431
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1481.45,-315.27C1471.31,-303.23 1459.59,-288.04 1451,-273.12 1410.79,-203.29 1380.46,-112.48 1366.87,-68"/>
432
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1369.63,-67.47 1364.64,-60.62 1364.27,-69.09 1369.63,-67.47"/>
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>
433
441
  </g>
434
442
  <!-- ReflectT -->
435
443
  <g id="node14" class="node">
436
444
  <title>ReflectT</title>
437
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M2627.5,-364.38C2627.5,-364.38 2560.5,-364.38 2560.5,-364.38 2554.5,-364.38 2548.5,-358.38 2548.5,-352.38 2548.5,-352.38 2548.5,-327.88 2548.5,-327.88 2548.5,-321.88 2554.5,-315.88 2560.5,-315.88 2560.5,-315.88 2627.5,-315.88 2627.5,-315.88 2633.5,-315.88 2639.5,-321.88 2639.5,-327.88 2639.5,-327.88 2639.5,-352.38 2639.5,-352.38 2639.5,-358.38 2633.5,-364.38 2627.5,-364.38"/>
438
- <text xml:space="preserve" text-anchor="middle" x="2594" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reflect</text>
439
- <text xml:space="preserve" text-anchor="middle" x="2594" y="-336.43" font-family="sans-Serif" font-size="11.00" fill="#0f172a">teacher&#45;student</text>
440
- <text xml:space="preserve" text-anchor="middle" x="2594" y="-322.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(reflect_engine)</text>
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>
441
449
  </g>
442
450
  <!-- Learning&#45;&gt;ReflectT -->
443
- <g id="edge46" class="edge">
451
+ <g id="edge47" class="edge">
444
452
  <title>Learning&#45;&gt;ReflectT</title>
445
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1918.98,-371.74C1961.63,-394.36 2023.05,-422.85 2081,-434.96 2174.1,-454.41 2201.01,-449.51 2295,-434.96 2382.48,-421.42 2479.42,-386.84 2538.54,-363.4"/>
446
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2539.48,-366.03 2545.86,-360.46 2537.4,-360.84 2539.48,-366.03"/>
447
- <text xml:space="preserve" text-anchor="middle" x="2008" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect()</text>
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>
448
456
  </g>
449
457
  <!-- Learning&#45;&gt;Correlate -->
450
458
  <g id="edge25" class="edge">
451
459
  <title>Learning&#45;&gt;Correlate</title>
452
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1782.25,-308.47C1773.46,-305.74 1764.59,-303.22 1756,-301.12 1669.66,-280.05 1645.47,-288.87 1558,-273.12 1470.93,-257.46 1372.21,-235.33 1303.85,-219.31"/>
453
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1304.75,-216.65 1296.32,-217.55 1303.47,-222.1 1304.75,-216.65"/>
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"/>
454
462
  </g>
455
463
  <!-- Flrn -->
456
464
  <g id="node24" class="node">
457
465
  <title>Flrn</title>
458
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2049.5,-54.79C2049.5,-56.6 2031.8,-58.06 2010,-58.06 1988.2,-58.06 1970.5,-56.6 1970.5,-54.79 1970.5,-54.79 1970.5,-25.34 1970.5,-25.34 1970.5,-23.53 1988.2,-22.06 2010,-22.06 2031.8,-22.06 2049.5,-23.53 2049.5,-25.34 2049.5,-25.34 2049.5,-54.79 2049.5,-54.79"/>
459
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2049.5,-54.79C2049.5,-52.98 2031.8,-51.52 2010,-51.52 1988.2,-51.52 1970.5,-52.98 1970.5,-54.79"/>
460
- <text xml:space="preserve" text-anchor="middle" x="2010" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
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>
461
469
  </g>
462
470
  <!-- Learning&#45;&gt;Flrn -->
463
- <g id="edge34" class="edge">
471
+ <g id="edge35" class="edge">
464
472
  <title>Learning&#45;&gt;Flrn</title>
465
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1878.94,-308.63C1907.66,-250 1970.11,-122.5 1997.12,-67.35"/>
466
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1999.57,-68.72 2000.58,-60.3 1994.54,-66.26 1999.57,-68.72"/>
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"/>
467
475
  </g>
468
476
  <!-- Fmem -->
469
477
  <g id="node26" class="node">
470
478
  <title>Fmem</title>
471
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2169.75,-54.79C2169.75,-56.6 2152.38,-58.06 2131,-58.06 2109.62,-58.06 2092.25,-56.6 2092.25,-54.79 2092.25,-54.79 2092.25,-25.34 2092.25,-25.34 2092.25,-23.53 2109.62,-22.06 2131,-22.06 2152.38,-22.06 2169.75,-23.53 2169.75,-25.34 2169.75,-25.34 2169.75,-54.79 2169.75,-54.79"/>
472
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2169.75,-54.79C2169.75,-52.98 2152.38,-51.52 2131,-51.52 2109.62,-51.52 2092.25,-52.98 2092.25,-54.79"/>
473
- <text xml:space="preserve" text-anchor="middle" x="2131" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
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>
474
482
  </g>
475
483
  <!-- Learning&#45;&gt;Fmem -->
476
- <g id="edge37" class="edge">
484
+ <g id="edge38" class="edge">
477
485
  <title>Learning&#45;&gt;Fmem</title>
478
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1899.41,-308.73C1942.71,-270.59 2016.89,-201.96 2071,-134.62 2088.22,-113.2 2104.85,-86.65 2116.22,-67.31"/>
479
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2118.63,-68.74 2120.22,-60.42 2113.78,-65.93 2118.63,-68.74"/>
480
- <text xml:space="preserve" text-anchor="middle" x="2045.59" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
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>
481
489
  </g>
482
490
  <!-- Fskl -->
483
491
  <g id="node28" class="node">
484
492
  <title>Fskl</title>
485
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1927,-54.79C1927,-56.6 1901.9,-58.06 1871,-58.06 1840.1,-58.06 1815,-56.6 1815,-54.79 1815,-54.79 1815,-25.34 1815,-25.34 1815,-23.53 1840.1,-22.06 1871,-22.06 1901.9,-22.06 1927,-23.53 1927,-25.34 1927,-25.34 1927,-54.79 1927,-54.79"/>
486
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1927,-54.79C1927,-52.98 1901.9,-51.52 1871,-51.52 1840.1,-51.52 1815,-52.98 1815,-54.79"/>
487
- <text xml:space="preserve" text-anchor="middle" x="1871" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/&lt;n&gt;/SKILL.md</text>
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>
488
496
  </g>
489
497
  <!-- Learning&#45;&gt;Fskl -->
490
- <g id="edge38" class="edge">
498
+ <g id="edge39" class="edge">
491
499
  <title>Learning&#45;&gt;Fskl</title>
492
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1828.58,-308.54C1797.38,-277.67 1759.09,-227.82 1774.25,-179.62 1788.43,-134.54 1823.08,-91.32 1846.82,-65.48"/>
493
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1848.73,-67.54 1852.15,-59.79 1844.64,-63.71 1848.73,-67.54"/>
494
- <text xml:space="preserve" text-anchor="middle" x="1782.12" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
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>
495
503
  </g>
496
504
  <!-- Fftn -->
497
505
  <g id="node30" class="node">
498
506
  <title>Fftn</title>
499
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1657.25,-54.79C1657.25,-56.6 1637.86,-58.06 1614,-58.06 1590.14,-58.06 1570.75,-56.6 1570.75,-54.79 1570.75,-54.79 1570.75,-25.34 1570.75,-25.34 1570.75,-23.53 1590.14,-22.06 1614,-22.06 1637.86,-22.06 1657.25,-23.53 1657.25,-25.34 1657.25,-25.34 1657.25,-54.79 1657.25,-54.79"/>
500
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1657.25,-54.79C1657.25,-52.98 1637.86,-51.52 1614,-51.52 1590.14,-51.52 1570.75,-52.98 1570.75,-54.79"/>
501
- <text xml:space="preserve" text-anchor="middle" x="1614" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">finetune/*.jsonl</text>
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>
502
510
  </g>
503
511
  <!-- Learning&#45;&gt;Fftn -->
504
- <g id="edge45" class="edge">
512
+ <g id="edge46" class="edge">
505
513
  <title>Learning&#45;&gt;Fftn</title>
506
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1809.34,-308.51C1773.82,-286.46 1728.49,-254.01 1697.25,-216.12 1659.48,-170.32 1634.23,-104.51 1622.18,-68.02"/>
507
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1624.85,-67.18 1619.74,-60.42 1619.52,-68.89 1624.85,-67.18"/>
508
- <text xml:space="preserve" text-anchor="middle" x="1729.12" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_finetune</text>
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>
509
517
  </g>
510
518
  <!-- Mistakes&#45;&gt;Dispatch -->
511
- <g id="edge54" class="edge">
519
+ <g id="edge55" class="edge">
512
520
  <title>Mistakes&#45;&gt;Dispatch</title>
513
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2133.87,-372C2091.24,-394.89 2029.6,-424.91 1972,-441.62 1966,-443.37 1755.22,-470.06 1749,-470.62 1505.23,-492.65 1441.71,-467.02 1199,-498.62 1176.4,-501.57 1152.11,-506.11 1129.87,-510.82"/>
514
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1129.33,-508.08 1122.1,-512.51 1130.51,-513.55 1129.33,-508.08"/>
515
- <text xml:space="preserve" text-anchor="middle" x="1943.58" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">correction_hint</text>
516
- <text xml:space="preserve" text-anchor="middle" x="1943.58" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(inline, next iter)</text>
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>
517
525
  </g>
518
526
  <!-- Mistakes&#45;&gt;Correlate -->
519
- <g id="edge26" class="edge">
527
+ <g id="edge27" class="edge">
520
528
  <title>Mistakes&#45;&gt;Correlate</title>
521
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M2101.94,-323.19C2062.41,-316.07 2014.89,-307.81 1972,-301.12 1750.21,-266.57 1490.63,-232.78 1341.45,-214"/>
522
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1342.02,-211.26 1333.74,-213.04 1341.32,-216.81 1342.02,-211.26"/>
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"/>
523
531
  </g>
524
532
  <!-- Fmis -->
525
533
  <g id="node25" class="node">
526
534
  <title>Fmis</title>
527
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2293.25,-54.79C2293.25,-56.6 2275.21,-58.06 2253,-58.06 2230.79,-58.06 2212.75,-56.6 2212.75,-54.79 2212.75,-54.79 2212.75,-25.34 2212.75,-25.34 2212.75,-23.53 2230.79,-22.06 2253,-22.06 2275.21,-22.06 2293.25,-23.53 2293.25,-25.34 2293.25,-25.34 2293.25,-54.79 2293.25,-54.79"/>
528
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2293.25,-54.79C2293.25,-52.98 2275.21,-51.52 2253,-51.52 2230.79,-51.52 2212.75,-52.98 2212.75,-54.79"/>
529
- <text xml:space="preserve" text-anchor="middle" x="2253" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
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>
530
538
  </g>
531
539
  <!-- Mistakes&#45;&gt;Fmis -->
532
- <g id="edge35" class="edge">
540
+ <g id="edge36" class="edge">
533
541
  <title>Mistakes&#45;&gt;Fmis</title>
534
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2274.04,-324.45C2332.87,-309.02 2404.77,-277.93 2431,-216.12 2437.34,-201.19 2438.85,-193.82 2431,-179.62 2416.02,-152.54 2401.08,-153.23 2372,-142.62 2347.97,-133.86 2336.64,-148.27 2315,-134.62 2290.16,-118.96 2273.08,-89.32 2263.23,-67.58"/>
535
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2265.84,-66.57 2260.11,-60.33 2260.7,-68.78 2265.84,-66.57"/>
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"/>
536
544
  </g>
537
545
  <!-- Mistakes&#45;&gt;Fmem -->
538
- <g id="edge36" class="edge">
546
+ <g id="edge37" class="edge">
539
547
  <title>Mistakes&#45;&gt;Fmem</title>
540
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2182.11,-308.35C2170.92,-249.82 2146.74,-123.37 2136.15,-67.98"/>
541
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2138.96,-67.76 2134.7,-60.43 2133.46,-68.81 2138.96,-67.76"/>
542
- <text xml:space="preserve" text-anchor="middle" x="2197.23" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
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>
543
551
  </g>
544
552
  <!-- ReflectT&#45;&gt;LLM -->
545
- <g id="edge48" class="edge">
553
+ <g id="edge49" class="edge">
546
554
  <title>ReflectT&#45;&gt;LLM</title>
547
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M2611.16,-365.16C2629.91,-389.29 2662.36,-425.16 2700,-441.62 2712.34,-447.03 2811.79,-439.79 2821,-449.62 2854.05,-484.93 2736.47,-604.44 2693,-625.62 2570.76,-685.21 381.78,-682.94 246,-690.62 200.26,-693.21 148.64,-697.76 109.87,-701.5"/>
548
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="109.94,-698.67 102.25,-702.24 110.49,-704.25 109.94,-698.67"/>
549
- <text xml:space="preserve" text-anchor="middle" x="2862.27" y="-527.58" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect_engine ≠ active</text>
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>
550
558
  </g>
551
559
  <!-- ReflectT&#45;&gt;Fmem -->
552
- <g id="edge47" class="edge">
560
+ <g id="edge48" class="edge">
553
561
  <title>ReflectT&#45;&gt;Fmem</title>
554
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2576.82,-314.89C2550.03,-279.11 2494.74,-212.81 2431,-179.62 2334.74,-129.52 2281,-195.27 2191,-134.62 2167.02,-118.47 2150.56,-89.18 2141.03,-67.66"/>
555
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2143.7,-66.78 2138.01,-60.5 2138.54,-68.95 2143.7,-66.78"/>
556
- <text xml:space="preserve" text-anchor="middle" x="2512.48" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier :lesson</text>
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>
557
565
  </g>
558
566
  <!-- Reward&#45;&gt;Mistakes -->
559
- <g id="edge70" class="edge">
567
+ <g id="edge71" class="edge">
560
568
  <title>Reward&#45;&gt;Mistakes</title>
561
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M3005.29,-372.01C2980.6,-394.44 2944.2,-422.58 2906,-434.96 2686.18,-506.17 2411.94,-426.27 2274.71,-375.51"/>
562
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2275.78,-372.93 2267.31,-372.75 2273.83,-378.17 2275.78,-372.93"/>
563
- <text xml:space="preserve" text-anchor="middle" x="2899" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">sentinel gap</text>
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>
564
572
  </g>
565
573
  <!-- Reward&#45;&gt;Verify -->
566
- <g id="edge68" class="edge">
574
+ <g id="edge69" class="edge">
567
575
  <title>Reward&#45;&gt;Verify</title>
568
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M3005.29,-372.01C2980.6,-394.44 2944.2,-422.58 2906,-434.96 2827.41,-460.42 1499.22,-454.7 1419,-434.96 1368.61,-422.56 1316.71,-393.37 1281.48,-370.62"/>
569
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1283.21,-368.41 1274.98,-366.37 1280.14,-373.09 1283.21,-368.41"/>
570
- <text xml:space="preserve" text-anchor="middle" x="2785" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">verify_as_reward</text>
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>
571
579
  </g>
572
580
  <!-- Reward&#45;&gt;Fprf -->
573
- <g id="edge69" class="edge">
581
+ <g id="edge70" class="edge">
574
582
  <title>Reward&#45;&gt;Fprf</title>
575
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M3048.97,-308.28C3060.11,-274.06 3071.62,-218.55 3047,-179.62 3026.49,-147.2 3005.57,-154.24 2969,-142.62 2782.58,-83.41 2551.06,-56.14 2444.16,-46.02"/>
576
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2444.71,-43.26 2436.48,-45.3 2444.19,-48.83 2444.71,-43.26"/>
577
- <text xml:space="preserve" text-anchor="middle" x="3097.73" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record_preference</text>
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>
578
586
  </g>
579
587
  <!-- Curric&#45;&gt;Fmis -->
580
- <g id="edge72" class="edge">
588
+ <g id="edge73" class="edge">
581
589
  <title>Curric&#45;&gt;Fmis</title>
582
- <path fill="none" stroke="#34d399" stroke-width="1.3" stroke-dasharray="5,2" d="M2813.81,-315.04C2827.54,-280.36 2845.67,-216.48 2812,-179.62 2737.2,-97.75 2410.23,-191.44 2315,-134.62 2289.78,-119.58 2272.77,-89.83 2263.04,-67.89"/>
583
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2265.64,-66.85 2259.96,-60.56 2260.48,-69.02 2265.64,-66.85"/>
584
- <text xml:space="preserve" text-anchor="middle" x="2866.89" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">practice → resolve</text>
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>
585
593
  </g>
586
594
  <!-- Curric&#45;&gt;Fftn -->
587
- <g id="edge73" class="edge">
595
+ <g id="edge74" class="edge">
588
596
  <title>Curric&#45;&gt;Fftn</title>
589
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2775.73,-314.92C2732.09,-277.88 2642.26,-208.42 2552,-179.62 2366.93,-120.59 1848.77,-229.04 1679,-134.62 1652.68,-119.99 1634.68,-89.67 1624.41,-67.5"/>
590
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1627.05,-66.56 1621.27,-60.36 1621.93,-68.81 1627.05,-66.56"/>
591
- <text xml:space="preserve" text-anchor="middle" x="2665.58" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">train_and_gate</text>
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>
592
600
  </g>
593
601
  <!-- Curric&#45;&gt;Fprf -->
594
- <g id="edge71" class="edge">
602
+ <g id="edge72" class="edge">
595
603
  <title>Curric&#45;&gt;Fprf</title>
596
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2865.41,-314.95C2926.13,-287.42 3005.04,-238.52 2974,-179.62 2924.32,-85.35 2583.45,-53.48 2444.14,-44.31"/>
597
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2444.59,-41.53 2436.42,-43.81 2444.23,-47.12 2444.59,-41.53"/>
598
- <text xml:space="preserve" text-anchor="middle" x="3009.11" y="-194.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(loser,winner)</text>
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>
599
607
  </g>
600
608
  <!-- Fpol -->
601
609
  <g id="node32" class="node">
602
610
  <title>Fpol</title>
603
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1527.38,-59.75C1527.38,-62.16 1507.49,-64.12 1483,-64.12 1458.51,-64.12 1438.62,-62.16 1438.62,-59.75 1438.62,-59.75 1438.62,-20.38 1438.62,-20.38 1438.62,-17.96 1458.51,-16 1483,-16 1507.49,-16 1527.38,-17.96 1527.38,-20.38 1527.38,-20.38 1527.38,-59.75 1527.38,-59.75"/>
604
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1527.38,-59.75C1527.38,-57.34 1507.49,-55.38 1483,-55.38 1458.51,-55.38 1438.62,-57.34 1438.62,-59.75"/>
605
- <text xml:space="preserve" text-anchor="middle" x="1483" y="-43.11" font-family="sans-Serif" font-size="11.00" fill="#0f172a">policy.json</text>
606
- <text xml:space="preserve" text-anchor="middle" x="1483" y="-29.61" font-family="sans-Serif" font-size="11.00" fill="#0f172a">policy_traj.jsonl</text>
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>
607
615
  </g>
608
616
  <!-- Policy&#45;&gt;Fpol -->
609
- <g id="edge33" class="edge">
617
+ <g id="edge34" class="edge">
610
618
  <title>Policy&#45;&gt;Fpol</title>
611
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1627.83,-308.24C1598.31,-285.85 1561.07,-253.12 1538,-216.12 1510.1,-171.41 1495.29,-111.37 1488.31,-74.49"/>
612
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1491.07,-74.05 1486.89,-66.67 1485.56,-75.05 1491.07,-74.05"/>
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"/>
613
621
  </g>
614
622
  <!-- Snapshot&#45;&gt;Correlate -->
615
- <g id="edge27" class="edge">
623
+ <g id="edge28" class="edge">
616
624
  <title>Snapshot&#45;&gt;Correlate</title>
617
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M941.47,-308.52C1008.57,-282.01 1103.99,-244.31 1163.65,-220.74"/>
618
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1164.67,-223.35 1171.08,-217.81 1162.61,-218.14 1164.67,-223.35"/>
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"/>
619
627
  </g>
620
628
  <!-- Observe&#45;&gt;Correlate -->
621
- <g id="edge28" class="edge">
629
+ <g id="edge29" class="edge">
622
630
  <title>Observe&#45;&gt;Correlate</title>
623
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1086.82,-321.65C1113.35,-297.01 1161.88,-251.93 1192.18,-223.79"/>
624
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1194.07,-225.85 1198.02,-218.36 1190.26,-221.75 1194.07,-225.85"/>
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"/>
625
633
  </g>
626
634
  <!-- Fext -->
627
635
  <g id="node29" class="node">
628
636
  <title>Fext</title>
629
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1279.12,-54.79C1279.12,-56.6 1256.21,-58.06 1228,-58.06 1199.79,-58.06 1176.88,-56.6 1176.88,-54.79 1176.88,-54.79 1176.88,-25.34 1176.88,-25.34 1176.88,-23.53 1199.79,-22.06 1228,-22.06 1256.21,-22.06 1279.12,-23.53 1279.12,-25.34 1279.12,-25.34 1279.12,-54.79 1279.12,-54.79"/>
630
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1279.12,-54.79C1279.12,-52.98 1256.21,-51.52 1228,-51.52 1199.79,-51.52 1176.88,-52.98 1176.88,-54.79"/>
631
- <text xml:space="preserve" text-anchor="middle" x="1228" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
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>
632
640
  </g>
633
641
  <!-- Observe&#45;&gt;Fext -->
634
- <g id="edge39" class="edge">
642
+ <g id="edge40" class="edge">
635
643
  <title>Observe&#45;&gt;Fext</title>
636
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1057.76,-321.68C1036.91,-283.66 995.28,-192.69 1042,-142.62 1077.51,-104.57 1130.58,-77.56 1170.96,-61"/>
637
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1171.93,-63.63 1178.32,-58.06 1169.85,-58.43 1171.93,-63.63"/>
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"/>
638
646
  </g>
639
647
  <!-- Verify&#45;&gt;Mistakes -->
640
- <g id="edge42" class="edge">
648
+ <g id="edge43" class="edge">
641
649
  <title>Verify&#45;&gt;Mistakes</title>
642
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1273.34,-365.29C1308.38,-388.58 1364.57,-421.56 1419,-434.96 1538.33,-464.33 1851.73,-460.2 1972,-434.96 2025.7,-423.69 2082.35,-398.24 2124.16,-376.54"/>
643
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2125.32,-379.09 2131.1,-372.89 2122.72,-374.14 2125.32,-379.09"/>
644
- <text xml:space="preserve" text-anchor="middle" x="2044" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
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>
645
653
  </g>
646
654
  <!-- Verify&#45;&gt;Correlate -->
647
- <g id="edge29" class="edge">
655
+ <g id="edge30" class="edge">
648
656
  <title>Verify&#45;&gt;Correlate</title>
649
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1234.73,-315.02C1231.4,-290.4 1226.23,-252.24 1222.74,-226.45"/>
650
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1225.55,-226.39 1221.7,-218.83 1220,-227.14 1225.55,-226.39"/>
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"/>
651
659
  </g>
652
660
  <!-- Verify&#45;&gt;Fmis -->
653
- <g id="edge41" class="edge">
661
+ <g id="edge42" class="edge">
654
662
  <title>Verify&#45;&gt;Fmis</title>
655
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1299.28,-324.61C1334.2,-316.75 1378.87,-307.4 1419,-301.12 1600.22,-272.8 2112.2,-347.69 2240,-216.12 2277.78,-177.23 2269.32,-107.83 2260.65,-69.12"/>
656
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="2263.42,-68.68 2258.83,-61.56 2257.98,-69.99 2263.42,-68.68"/>
657
- <text xml:space="preserve" text-anchor="middle" x="2301.19" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted →</text>
658
- <text xml:space="preserve" text-anchor="middle" x="2301.19" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">assumption mistake</text>
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>
659
667
  </g>
660
668
  <!-- Verify&#45;&gt;Fmem -->
661
- <g id="edge43" class="edge">
669
+ <g id="edge44" class="edge">
662
670
  <title>Verify&#45;&gt;Fmem</title>
663
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M1299.12,-326.23C1423.37,-299.91 1701.63,-240.48 1796,-216.12 1811.43,-212.14 2058.26,-144.2 2071,-134.62 2093.88,-117.44 2110.38,-88.77 2120.22,-67.69"/>
664
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="2122.77,-68.85 2123.47,-60.4 2117.66,-66.56 2122.77,-68.85"/>
665
- <text xml:space="preserve" text-anchor="middle" x="1955.44" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale</text>
666
- <text xml:space="preserve" text-anchor="middle" x="1955.44" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED]</text>
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>
667
675
  </g>
668
676
  <!-- Verify&#45;&gt;Fext -->
669
- <g id="edge44" class="edge">
677
+ <g id="edge45" class="edge">
670
678
  <title>Verify&#45;&gt;Fext</title>
671
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1188.65,-314.99C1136.4,-288.28 1059.27,-245.19 1043.25,-216.12 1005.59,-147.79 1107.77,-90.44 1174.81,-61.43"/>
672
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1175.52,-64.17 1181.79,-58.46 1173.34,-59.01 1175.52,-64.17"/>
673
- <text xml:space="preserve" text-anchor="middle" x="1064.62" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
674
- <text xml:space="preserve" text-anchor="middle" x="1064.62" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs</text>
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>
675
683
  </g>
676
684
  <!-- RFTune&#45;&gt;Correlate -->
677
- <g id="edge30" class="edge">
685
+ <g id="edge31" class="edge">
678
686
  <title>RFTune&#45;&gt;Correlate</title>
679
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M714.21,-314.97C725.09,-309.91 736.79,-304.95 748,-301.12 863.43,-261.77 1000.09,-234.08 1096.39,-217.54"/>
680
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1096.81,-220.3 1104.23,-216.2 1095.87,-214.78 1096.81,-220.3"/>
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"/>
681
689
  </g>
682
690
  <!-- RFTune&#45;&gt;Fext -->
683
- <g id="edge40" class="edge">
691
+ <g id="edge41" class="edge">
684
692
  <title>RFTune&#45;&gt;Fext</title>
685
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M712.14,-314.99C780.49,-277.68 916.15,-203.91 1032,-142.62 1084.75,-114.72 1145.85,-83.18 1185.62,-62.76"/>
686
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1186.68,-65.36 1192.52,-59.22 1184.12,-60.38 1186.68,-65.36"/>
687
- <text xml:space="preserve" text-anchor="middle" x="974.49" y="-199.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:rf obs</text>
688
- <text xml:space="preserve" text-anchor="middle" x="974.49" y="-189.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ttl 300s</text>
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>
689
697
  </g>
690
698
  <!-- Correlate&#45;&gt;Prompt -->
691
- <g id="edge55" class="edge">
699
+ <g id="edge56" class="edge">
692
700
  <title>Correlate&#45;&gt;Prompt</title>
693
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1331.84,-203.9C1739.02,-222.15 3109.47,-284.74 3125,-301.12 3167.96,-346.45 3169.01,-397.32 3125,-441.62 3113.43,-453.27 1959.1,-446.44 1943,-449.62 1918.55,-454.46 1915.42,-465.64 1891,-470.62 1568.26,-536.5 735.57,-455.6 409,-498.62 391.61,-500.92 373.14,-504.7 355.86,-508.87"/>
694
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="355.3,-506.12 348.22,-510.77 356.65,-511.55 355.3,-506.12"/>
695
- <text xml:space="preserve" text-anchor="middle" x="3196.99" y="-336.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
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>
696
704
  </g>
697
705
  <!-- Correlate&#45;&gt;Fmet -->
698
706
  <!-- Fmet&#45;&gt;Router -->
699
- <g id="edge58" class="edge">
707
+ <g id="edge59" class="edge">
700
708
  <title>Fmet&#45;&gt;Router</title>
701
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1364.16,-58.62C1371.73,-80.8 1388.16,-118.07 1417,-134.62 1583.68,-230.27 2973.3,-95.33 3146,-179.62 3258.01,-234.3 3333.85,-353.21 3246,-441.62 3233.72,-453.98 2009.09,-446.25 1992,-449.62 1967.55,-454.46 1964.42,-465.62 1940,-470.62 1644.31,-531.25 880.4,-453.18 582,-498.62 563.93,-501.38 544.62,-506.3 527.41,-511.43"/>
702
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="526.79,-508.69 519.96,-513.72 528.43,-514.05 526.79,-508.69"/>
703
- <text xml:space="preserve" text-anchor="middle" x="3283.32" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success_rate</text>
704
- <text xml:space="preserve" text-anchor="middle" x="3283.32" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">→ tie&#45;break</text>
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>
705
713
  </g>
706
714
  <!-- Flrn&#45;&gt;Plan -->
707
- <g id="edge57" class="edge">
715
+ <g id="edge58" class="edge">
708
716
  <title>Flrn&#45;&gt;Plan</title>
709
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2015.73,-58.58C2024.02,-80.73 2041.66,-117.97 2071,-134.62 2180.85,-196.99 3086.51,-141.69 3207,-179.62 3263.92,-197.54 3291.38,-199.76 3320,-252.12 3360.69,-326.57 3360.64,-385.52 3297,-441.62 3288.64,-448.99 2506.13,-449.3 2495,-449.62 2301.52,-455.26 2253.44,-463.87 2060,-470.62 1771.22,-480.7 1045.75,-455.68 760,-498.62 742.28,-501.29 723.37,-505.96 706.33,-510.89"/>
710
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="705.82,-508.12 698.95,-513.09 707.42,-513.49 705.82,-508.12"/>
711
- <text xml:space="preserve" text-anchor="middle" x="3362.46" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">exemplars_for</text>
712
- <text xml:space="preserve" text-anchor="middle" x="3362.46" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(few&#45;shot, local)</text>
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>
713
721
  </g>
714
722
  <!-- Fmis&#45;&gt;Prompt -->
715
- <g id="edge52" class="edge">
723
+ <g id="edge53" class="edge">
716
724
  <title>Fmis&#45;&gt;Prompt</title>
717
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2258.93,-58.56C2267.47,-80.68 2285.51,-117.89 2315,-134.62 2408.55,-187.7 3178.92,-148.91 3282,-179.62 3313.05,-188.88 3434.87,-197.94 3405,-273.12 3366.98,-368.82 3340.4,-400.5 3246,-441.62 3218.37,-453.66 2190.94,-446.14 2161,-449.62 2119.34,-454.47 2110.64,-465.58 2069,-470.62 1702.74,-515.03 774.83,-450.8 409,-498.62 391.6,-500.9 373.14,-504.68 355.86,-508.84"/>
718
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="355.3,-506.09 348.21,-510.74 356.65,-511.53 355.3,-506.09"/>
719
- <text xml:space="preserve" text-anchor="middle" x="3450.53" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">KNOWN MISTAKES</text>
720
- <text xml:space="preserve" text-anchor="middle" x="3450.53" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">+ KNOWN FIXES</text>
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>
721
729
  </g>
722
730
  <!-- Fmem&#45;&gt;Prompt -->
723
- <g id="edge50" class="edge">
731
+ <g id="edge51" class="edge">
724
732
  <title>Fmem&#45;&gt;Prompt</title>
725
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2136.56,-58.57C2144.62,-80.7 2161.88,-117.92 2191,-134.62 2296.23,-195 3161.42,-166.17 3282,-179.62 3461.72,-199.68 3757.45,-110.67 3678,-273.12 3669.09,-291.33 3655.47,-285.98 3642,-301.12 3593.5,-355.66 3620.47,-405.59 3557,-441.62 3540.73,-450.86 2228.35,-446 2210,-449.62 2185.55,-454.45 2182.43,-465.68 2158,-470.62 1967.51,-509.22 601.73,-473.51 409,-498.62 391.27,-500.93 372.44,-504.81 354.88,-509.07"/>
726
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="354.27,-506.33 347.18,-510.98 355.62,-511.77 354.27,-506.33"/>
727
- <text xml:space="preserve" text-anchor="middle" x="3718.9" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
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>
728
736
  </g>
729
737
  <!-- Fidx -->
730
738
  <g id="node27" class="node">
731
739
  <title>Fidx</title>
732
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1771.75,-54.79C1771.75,-56.6 1755.73,-58.06 1736,-58.06 1716.27,-58.06 1700.25,-56.6 1700.25,-54.79 1700.25,-54.79 1700.25,-25.34 1700.25,-25.34 1700.25,-23.53 1716.27,-22.06 1736,-22.06 1755.73,-22.06 1771.75,-23.53 1771.75,-25.34 1771.75,-25.34 1771.75,-54.79 1771.75,-54.79"/>
733
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1771.75,-54.79C1771.75,-52.98 1755.73,-51.52 1736,-51.52 1716.27,-51.52 1700.25,-52.98 1700.25,-54.79"/>
734
- <text xml:space="preserve" text-anchor="middle" x="1736" y="-36.36" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.idx</text>
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>
735
743
  </g>
736
744
  <!-- Fidx&#45;&gt;Prompt -->
737
- <g id="edge56" class="edge">
745
+ <g id="edge57" class="edge">
738
746
  <title>Fidx&#45;&gt;Prompt</title>
739
- <path fill="none" stroke="#fbbf24" stroke-width="2" stroke-dasharray="5,2" d="M1741.18,-58.59C1748.76,-80.75 1765.21,-117.99 1794,-134.62 1862.01,-173.91 3128.69,-173.68 3207,-179.62 3477.42,-200.15 3946.12,-38.56 3810,-273.12 3797.41,-294.82 3780.08,-284.85 3761,-301.12 3700.04,-353.13 3720.17,-406.8 3648,-441.62 3613.25,-458.39 2296.85,-442.16 2259,-449.62 2234.55,-454.45 2231.43,-465.68 2207,-470.62 2011.17,-510.26 607.13,-472.85 409,-498.62 391.6,-500.89 373.13,-504.66 355.86,-508.82"/>
740
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="2" points="355.3,-506.08 348.21,-510.72 356.65,-511.51 355.3,-506.08"/>
741
- <text xml:space="preserve" text-anchor="middle" x="3848.62" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MemoryIndex</text>
742
- <text xml:space="preserve" text-anchor="middle" x="3848.62" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cosine top&#45;K</text>
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>
743
751
  </g>
744
752
  <!-- Fskl&#45;&gt;Prompt -->
745
- <g id="edge51" class="edge">
753
+ <g id="edge52" class="edge">
746
754
  <title>Fskl&#45;&gt;Prompt</title>
747
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1879.49,-58.38C1891.48,-80.68 1915.71,-118.46 1949,-134.62 2109.39,-212.49 3376.02,-158.07 3553,-179.62 4867.04,-339.68 3994.89,-109.6 3886,-273.12 3868.11,-299.99 3843.28,-279.86 3819,-301.12 3764.6,-348.75 3799.6,-405.45 3737,-441.62 3719.82,-451.56 2327.47,-445.78 2308,-449.62 2283.55,-454.45 2280.43,-465.69 2256,-470.62 2054.82,-511.3 612.54,-472.19 409,-498.62 391.27,-500.93 372.44,-504.8 354.88,-509.05"/>
748
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="354.27,-506.32 347.18,-510.97 355.62,-511.76 354.27,-506.32"/>
749
- <text xml:space="preserve" text-anchor="middle" x="3933.04" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
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>
750
758
  </g>
751
759
  <!-- Fext&#45;&gt;Prompt -->
752
- <g id="edge53" class="edge">
760
+ <g id="edge54" class="edge">
753
761
  <title>Fext&#45;&gt;Prompt</title>
754
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1235.82,-58.75C1246.76,-81.08 1268.98,-118.51 1301,-134.62 1392.58,-180.72 3043.62,-174.16 3146,-179.62 3342.16,-190.1 4141.46,-114.93 4025,-273.12 4000.17,-306.86 3969.48,-277.33 3935,-301.12 3869.73,-346.17 3896.2,-406.7 3825,-441.62 3806.69,-450.6 2377,-445.68 2357,-449.62 2332.55,-454.45 2329.43,-465.69 2305,-470.62 2098.48,-512.34 617.94,-471.53 409,-498.62 391.27,-500.92 372.44,-504.8 354.88,-509.05"/>
755
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="354.27,-506.32 347.18,-510.97 355.62,-511.75 354.27,-506.32"/>
756
- <text xml:space="preserve" text-anchor="middle" x="4062.8" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
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>
757
765
  </g>
758
766
  <!-- Fftn&#45;&gt;LLM -->
759
- <g id="edge63" class="edge">
767
+ <g id="edge64" class="edge">
760
768
  <title>Fftn&#45;&gt;LLM</title>
761
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1620.2,-58.4C1629.23,-80.72 1648.35,-118.54 1679,-134.62 1710.16,-150.98 4179.12,-133.1 4213,-142.62 4305.37,-168.61 4429.31,-188.01 4385,-273.12 4374.98,-292.37 4360.72,-286.16 4345,-301.12 4287.76,-355.62 4306.18,-405.27 4236,-441.62 4218.42,-450.73 4077.77,-448.5 4058,-449.62 3741.32,-467.64 3658.15,-442.28 3346,-498.62 3150.74,-533.87 3113.04,-589.17 2918,-625.62 2334.15,-734.74 839.18,-660.33 246,-690.62 200.79,-692.93 149.86,-697.41 111.24,-701.19"/>
762
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="111.39,-698.36 103.71,-701.93 111.94,-703.93 111.39,-698.36"/>
763
- <text xml:space="preserve" text-anchor="middle" x="4376.5" y="-342.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">LoRA (weights)</text>
764
- <text xml:space="preserve" text-anchor="middle" x="4376.5" y="-331.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cron weekly</text>
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>
765
773
  </g>
766
774
  <!-- Fprf&#45;&gt;LLM -->
767
- <g id="edge75" class="edge">
775
+ <g id="edge76" class="edge">
768
776
  <title>Fprf&#45;&gt;LLM</title>
769
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2434.28,-42.48C2691.51,-50.06 3882.26,-87.6 4247,-142.62 4314.04,-152.74 4344.74,-134.12 4395,-179.62 4481.55,-257.98 4492.12,-354.87 4414,-441.62 4038.24,-858.92 3721.86,-561.39 3164,-625.62 3009.82,-643.38 2971.02,-647.09 2816,-654.62 1675.01,-710.09 1386.89,-633.23 246,-690.62 200.79,-692.9 149.85,-697.38 111.24,-701.16"/>
770
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="111.39,-698.34 103.71,-701.91 111.94,-703.91 111.39,-698.34"/>
771
- <text xml:space="preserve" text-anchor="middle" x="4496.37" y="-342.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">DPO (weights)</text>
772
- <text xml:space="preserve" text-anchor="middle" x="4496.37" y="-331.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cron weekly</text>
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>
773
781
  </g>
774
782
  <!-- Fpol&#45;&gt;Prompt -->
775
- <g id="edge59" class="edge">
783
+ <g id="edge60" class="edge">
776
784
  <title>Fpol&#45;&gt;Prompt</title>
777
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1492.23,-64.79C1502.4,-87.28 1521.1,-119.77 1549,-134.62 1650.34,-188.57 3500.61,-169.87 3615,-179.62 3833.73,-198.28 4234.15,-99.36 4100,-273.12 4069.96,-312.04 4032.08,-271.3 3993,-301.12 3935.7,-344.85 3974.31,-405.4 3912,-441.62 3893.92,-452.14 2426.52,-445.58 2406,-449.62 2381.55,-454.44 2378.43,-465.7 2354,-470.62 2142.14,-513.37 623.34,-470.87 409,-498.62 391.27,-500.92 372.44,-504.79 354.88,-509.04"/>
778
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="354.27,-506.31 347.18,-510.96 355.62,-511.75 354.27,-506.31"/>
779
- <text xml:space="preserve" text-anchor="middle" x="4141.65" y="-259.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">POLICY block</text>
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>
780
788
  </g>
781
789
  <!-- Fpol&#45;&gt;Router -->
782
- <g id="edge60" class="edge">
790
+ <g id="edge61" class="edge">
783
791
  <title>Fpol&#45;&gt;Router</title>
784
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1491.98,-64.47C1502.06,-87.07 1520.79,-119.95 1549,-134.62 1581.42,-151.49 4145.55,-130.43 4180,-142.62 4239.33,-163.63 4274.38,-224.03 4235,-273.12 4199.1,-317.87 4157.52,-270.53 4109,-301.12 4041.92,-343.43 4070.2,-406.71 3999,-441.62 3980.24,-450.82 2515.75,-447.23 2495,-449.62 2453.34,-454.43 2444.64,-465.61 2403,-470.62 2001.19,-519.03 982.26,-438.74 582,-498.62 563.92,-501.33 544.61,-506.24 527.4,-511.38"/>
785
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="526.78,-508.64 519.95,-513.66 528.42,-513.99 526.78,-508.64"/>
786
- <text xml:space="preserve" text-anchor="middle" x="4273.84" y="-264.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Q&#45;advantage</text>
787
- <text xml:space="preserve" text-anchor="middle" x="4273.84" y="-254.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">visits≥2</text>
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>
788
796
  </g>
789
797
  </g>
790
798
  </svg>