pwn 0.5.669 → 0.5.673

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile +1 -1
  4. data/README.md +13 -9
  5. data/documentation/AI-Integration.md +1 -1
  6. data/documentation/Agent-Tool-Registry.md +17 -5
  7. data/documentation/Configuration.md +19 -8
  8. data/documentation/Diagrams.md +2 -2
  9. data/documentation/Home.md +2 -2
  10. data/documentation/How-PWN-Works.md +12 -10
  11. data/documentation/Installation.md +3 -1
  12. data/documentation/Mistakes.md +3 -0
  13. data/documentation/Persistence.md +4 -1
  14. data/documentation/Reinforcement-Learning.md +90 -73
  15. data/documentation/Skills-Memory-Learning.md +28 -4
  16. data/documentation/What-is-PWN.md +8 -7
  17. data/documentation/Why-PWN.md +3 -2
  18. data/documentation/diagrams/agent-tool-registry.svg +188 -160
  19. data/documentation/diagrams/dot/agent-tool-registry.dot +7 -4
  20. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  21. data/documentation/diagrams/dot/overall-pwn-architecture.dot +4 -3
  22. data/documentation/diagrams/dot/persistence-filesystem.dot +2 -1
  23. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +11 -4
  24. data/documentation/diagrams/dot/reinforcement-learning.dot +8 -3
  25. data/documentation/diagrams/dot/task-summarizer.dot +24 -12
  26. data/documentation/diagrams/memory-skills-detailed.svg +252 -210
  27. data/documentation/diagrams/overall-pwn-architecture.svg +21 -12
  28. data/documentation/diagrams/persistence-filesystem.svg +127 -113
  29. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +449 -397
  30. data/documentation/diagrams/reinforcement-learning.svg +276 -239
  31. data/documentation/diagrams/task-summarizer.svg +178 -126
  32. data/documentation/pwn-ai-Agent.md +66 -32
  33. data/lib/pwn/ai/agent/curriculum.rb +13 -4
  34. data/lib/pwn/ai/agent/dispatch.rb +3 -0
  35. data/lib/pwn/ai/agent/learning.rb +100 -14
  36. data/lib/pwn/ai/agent/loop.rb +692 -25
  37. data/lib/pwn/ai/agent/metrics.rb +52 -4
  38. data/lib/pwn/ai/agent/mistakes.rb +158 -1
  39. data/lib/pwn/ai/agent/policy.rb +935 -0
  40. data/lib/pwn/ai/agent/prompt_builder.rb +82 -6
  41. data/lib/pwn/ai/agent/reflect.rb +11 -3
  42. data/lib/pwn/ai/agent/registry.rb +18 -3
  43. data/lib/pwn/ai/agent/reward.rb +360 -48
  44. data/lib/pwn/ai/agent/task_summarizer.rb +415 -33
  45. data/lib/pwn/ai/agent/tool_guard.rb +157 -0
  46. data/lib/pwn/ai/agent/tools/policy.rb +76 -0
  47. data/lib/pwn/ai/agent/tools/ruby_eval.rb +27 -1
  48. data/lib/pwn/ai/agent/tools/shell.rb +28 -32
  49. data/lib/pwn/ai/agent.rb +2 -0
  50. data/lib/pwn/config.rb +14 -2
  51. data/lib/pwn/memory.rb +188 -0
  52. data/lib/pwn/sessions.rb +9 -4
  53. data/lib/pwn/version.rb +1 -1
  54. data/spec/integration/reinforced_feedback_loop_spec.rb +35 -9
  55. data/spec/lib/pwn/ai/agent/learning_spec.rb +119 -3
  56. data/spec/lib/pwn/ai/agent/loop_spec.rb +215 -3
  57. data/spec/lib/pwn/ai/agent/metrics_spec.rb +10 -0
  58. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +33 -0
  59. data/spec/lib/pwn/ai/agent/policy_spec.rb +165 -0
  60. data/spec/lib/pwn/ai/agent/prompt_builder_spec.rb +51 -0
  61. data/spec/lib/pwn/ai/agent/reward_spec.rb +75 -0
  62. data/spec/lib/pwn/ai/agent/signal_hygiene_spec.rb +118 -0
  63. data/spec/lib/pwn/ai/agent/task_summarizer_spec.rb +111 -6
  64. data/spec/lib/pwn/ai/agent/tool_guard_spec.rb +61 -0
  65. data/spec/lib/pwn/ai/agent/tools/policy_spec.rb +18 -0
  66. data/spec/lib/pwn/memory_spec.rb +62 -0
  67. data/spec/support/sandbox.rb +2 -0
  68. data/third_party/pwn_rdoc.jsonl +108 -4
  69. metadata +10 -3
@@ -4,734 +4,786 @@
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="4569pt" height="840pt"
8
- viewBox="0.00 0.00 4569.00 840.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
- <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 796.7)">
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">
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,-796.7 4525.47,-796.7 4525.47,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="2054.39" y="-731.5" 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="1942.64" y="-720.05" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world) &#160;· &#160;Mistakes (negative) &#160;· &#160;Reward + Curriculum (RL) &#160;· &#160;Local&#45;model scaffolding</text>
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>
14
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_core</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M172.16,-486.5C172.16,-486.5 1401.16,-486.5 1401.16,-486.5 1407.16,-486.5 1413.16,-492.5 1413.16,-498.5 1413.16,-498.5 1413.16,-601.5 1413.16,-601.5 1413.16,-607.5 1407.16,-613.5 1401.16,-613.5 1401.16,-613.5 172.16,-613.5 172.16,-613.5 166.16,-613.5 160.16,-607.5 160.16,-601.5 160.16,-601.5 160.16,-498.5 160.16,-498.5 160.16,-492.5 166.16,-486.5 172.16,-486.5"/>
17
- <text xml:space="preserve" text-anchor="middle" x="786.66" y="-590.5" 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="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>
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="M1352.16,-289C1352.16,-289 2557.16,-289 2557.16,-289 2563.16,-289 2569.16,-295 2569.16,-301 2569.16,-301 2569.16,-417.5 2569.16,-417.5 2569.16,-423.5 2563.16,-429.5 2557.16,-429.5 2557.16,-429.5 1352.16,-429.5 1352.16,-429.5 1346.16,-429.5 1340.16,-423.5 1340.16,-417.5 1340.16,-417.5 1340.16,-301 1340.16,-301 1340.16,-295 1346.16,-289 1352.16,-289"/>
22
- <text xml:space="preserve" text-anchor="middle" x="1954.66" y="-406.5" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
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>
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="M2638.16,-289C2638.16,-289 3320.16,-289 3320.16,-289 3326.16,-289 3332.16,-295 3332.16,-301 3332.16,-301 3332.16,-417.5 3332.16,-417.5 3332.16,-423.5 3326.16,-429.5 3320.16,-429.5 3320.16,-429.5 2638.16,-429.5 2638.16,-429.5 2632.16,-429.5 2626.16,-423.5 2626.16,-417.5 2626.16,-417.5 2626.16,-301 2626.16,-301 2626.16,-295 2632.16,-289 2638.16,-289"/>
27
- <text xml:space="preserve" text-anchor="middle" x="2979.16" y="-406.5" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
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>
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="M1619.16,-8C1619.16,-8 2735.16,-8 2735.16,-8 2741.16,-8 2747.16,-14 2747.16,-20 2747.16,-20 2747.16,-110.5 2747.16,-110.5 2747.16,-116.5 2741.16,-122.5 2735.16,-122.5 2735.16,-122.5 1619.16,-122.5 1619.16,-122.5 1613.16,-122.5 1607.16,-116.5 1607.16,-110.5 1607.16,-110.5 1607.16,-20 1607.16,-20 1607.16,-14 1613.16,-8 1619.16,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="2177.16" y="-99.5" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
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>
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="M264.03,-714.5C264.03,-714.5 196.28,-714.5 196.28,-714.5 190.28,-714.5 184.28,-708.5 184.28,-702.5 184.28,-702.5 184.28,-690.5 184.28,-690.5 184.28,-684.5 190.28,-678.5 196.28,-678.5 196.28,-678.5 264.03,-678.5 264.03,-678.5 270.03,-678.5 276.03,-684.5 276.03,-690.5 276.03,-690.5 276.03,-702.5 276.03,-702.5 276.03,-708.5 270.03,-714.5 264.03,-714.5"/>
38
- <text xml:space="preserve" text-anchor="middle" x="230.16" y="-692.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
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>
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="M279.78,-543C279.78,-543 180.53,-543 180.53,-543 174.53,-543 168.53,-537 168.53,-531 168.53,-531 168.53,-506.5 168.53,-506.5 168.53,-500.5 174.53,-494.5 180.53,-494.5 180.53,-494.5 279.78,-494.5 279.78,-494.5 285.78,-494.5 291.78,-500.5 291.78,-506.5 291.78,-506.5 291.78,-531 291.78,-531 291.78,-537 285.78,-543 279.78,-543"/>
44
- <text xml:space="preserve" text-anchor="middle" x="230.16" y="-528.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
- <text xml:space="preserve" text-anchor="middle" x="230.16" y="-515.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">budget · MemoryIndex</text>
46
- <text xml:space="preserve" text-anchor="middle" x="230.16" y="-501.55" 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="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>
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="M230.16,-678.01C230.16,-649.29 230.16,-591.62 230.16,-554.4"/>
52
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="232.96,-554.59 230.16,-546.59 227.36,-554.59 232.96,-554.59"/>
53
- <text xml:space="preserve" text-anchor="middle" x="238.41" y="-628.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
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>
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="M1641.41,-359C1641.41,-359 1494.91,-359 1494.91,-359 1488.91,-359 1482.91,-353 1482.91,-347 1482.91,-347 1482.91,-309 1482.91,-309 1482.91,-303 1488.91,-297 1494.91,-297 1494.91,-297 1641.41,-297 1641.41,-297 1647.41,-297 1653.41,-303 1653.41,-309 1653.41,-309 1653.41,-347 1653.41,-347 1653.41,-353 1647.41,-359 1641.41,-359"/>
59
- <text xml:space="preserve" text-anchor="middle" x="1568.16" y="-344.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Mistakes</text>
60
- <text xml:space="preserve" text-anchor="middle" x="1568.16" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">record · resolve</text>
61
- <text xml:space="preserve" text-anchor="middle" x="1568.16" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">guard · correction_hint</text>
62
- <text xml:space="preserve" text-anchor="middle" x="1568.16" y="-304.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
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>
63
63
  </g>
64
64
  <!-- User&#45;&gt;Mistakes -->
65
- <g id="edge14" class="edge">
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="M183.88,-687.7C142.69,-678.05 84.79,-657.18 57.16,-613.5 26.98,-565.8 18.59,-527.71 57.16,-486.5 113.23,-426.57 712.15,-440.72 794.16,-437.5 812.67,-436.77 1443.97,-436.43 1461.16,-429.5 1492.8,-416.75 1520.61,-389.85 1539.94,-367.09"/>
68
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1541.98,-369.02 1544.91,-361.07 1537.66,-365.46 1541.98,-369.02"/>
69
- <text xml:space="preserve" text-anchor="middle" x="103.66" y="-520.7" 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="103.66" y="-510.2" 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="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>
71
71
  </g>
72
72
  <!-- Fprf -->
73
- <g id="node30" class="node">
73
+ <g id="node31" class="node">
74
74
  <title>Fprf</title>
75
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1955.03,-48.73C1955.03,-50.53 1933.13,-52 1906.16,-52 1879.19,-52 1857.28,-50.53 1857.28,-48.73 1857.28,-48.73 1857.28,-19.27 1857.28,-19.27 1857.28,-17.47 1879.19,-16 1906.16,-16 1933.13,-16 1955.03,-17.47 1955.03,-19.27 1955.03,-19.27 1955.03,-48.73 1955.03,-48.73"/>
76
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1955.03,-48.73C1955.03,-46.92 1933.13,-45.45 1906.16,-45.45 1879.19,-45.45 1857.28,-46.92 1857.28,-48.73"/>
77
- <text xml:space="preserve" text-anchor="middle" x="1906.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">preferences.jsonl</text>
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>
78
78
  </g>
79
79
  <!-- User&#45;&gt;Fprf -->
80
- <g id="edge69" class="edge">
80
+ <g id="edge74" 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="M184.03,-694.36C131.19,-690.12 48.39,-673.69 21.16,-613.5 -2.11,-562.07 -10.58,-533.17 21.16,-486.5 67.61,-418.19 -143.73,-382.79 1168.16,-167.5 1204.86,-161.48 1803.2,-139.73 1836.16,-122.5 1861.84,-109.08 1881.33,-81.65 1893.15,-61.06"/>
83
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1895.54,-62.52 1896.94,-54.16 1890.63,-59.83 1895.54,-62.52"/>
84
- <text xml:space="preserve" text-anchor="middle" x="516.14" y="-329.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">user_correction</text>
85
- <text xml:space="preserve" text-anchor="middle" x="516.14" y="-319.45" 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="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>
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="M1010.16,-714.5C1010.16,-714.5 934.16,-714.5 934.16,-714.5 928.16,-714.5 922.16,-708.5 922.16,-702.5 922.16,-702.5 922.16,-690.5 922.16,-690.5 922.16,-684.5 928.16,-678.5 934.16,-678.5 934.16,-678.5 1010.16,-678.5 1010.16,-678.5 1016.16,-678.5 1022.16,-684.5 1022.16,-690.5 1022.16,-690.5 1022.16,-702.5 1022.16,-702.5 1022.16,-708.5 1016.16,-714.5 1010.16,-714.5"/>
91
- <text xml:space="preserve" text-anchor="middle" x="972.16" y="-692.8" 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="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>
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="M1001.16,-543C1001.16,-543 943.16,-543 943.16,-543 937.16,-543 931.16,-537 931.16,-531 931.16,-531 931.16,-506.5 931.16,-506.5 931.16,-500.5 937.16,-494.5 943.16,-494.5 943.16,-494.5 1001.16,-494.5 1001.16,-494.5 1007.16,-494.5 1013.16,-500.5 1013.16,-506.5 1013.16,-506.5 1013.16,-531 1013.16,-531 1013.16,-537 1007.16,-543 1001.16,-543"/>
97
- <text xml:space="preserve" text-anchor="middle" x="972.16" y="-528.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
98
- <text xml:space="preserve" text-anchor="middle" x="972.16" y="-515.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tolerant parse</text>
99
- <text xml:space="preserve" text-anchor="middle" x="972.16" y="-501.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repair_name</text>
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>
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="M972.16,-667.33C972.16,-636.66 972.16,-587.57 972.16,-554.52"/>
105
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="969.36,-666.98 972.16,-674.98 974.96,-666.98 969.36,-666.98"/>
106
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="974.96,-554.59 972.16,-546.59 969.36,-554.59 974.96,-554.59"/>
107
- <text xml:space="preserve" text-anchor="middle" x="991.66" y="-628.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
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>
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="M1429.03,-714.5C1429.03,-714.5 1307.28,-714.5 1307.28,-714.5 1301.28,-714.5 1295.28,-708.5 1295.28,-702.5 1295.28,-702.5 1295.28,-690.5 1295.28,-690.5 1295.28,-684.5 1301.28,-678.5 1307.28,-678.5 1307.28,-678.5 1429.03,-678.5 1429.03,-678.5 1435.03,-678.5 1441.03,-684.5 1441.03,-690.5 1441.03,-690.5 1441.03,-702.5 1441.03,-702.5 1441.03,-708.5 1435.03,-714.5 1429.03,-714.5"/>
113
- <text xml:space="preserve" text-anchor="middle" x="1368.16" y="-699.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
114
- <text xml:space="preserve" text-anchor="middle" x="1368.16" y="-686.05" 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="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>
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="M1393.03,-536.75C1393.03,-536.75 1343.28,-536.75 1343.28,-536.75 1337.28,-536.75 1331.28,-530.75 1331.28,-524.75 1331.28,-524.75 1331.28,-512.75 1331.28,-512.75 1331.28,-506.75 1337.28,-500.75 1343.28,-500.75 1343.28,-500.75 1393.03,-500.75 1393.03,-500.75 1399.03,-500.75 1405.03,-506.75 1405.03,-512.75 1405.03,-512.75 1405.03,-524.75 1405.03,-524.75 1405.03,-530.75 1399.03,-536.75 1393.03,-536.75"/>
120
- <text xml:space="preserve" text-anchor="middle" x="1368.16" y="-521.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
121
- <text xml:space="preserve" text-anchor="middle" x="1368.16" y="-508.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
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>
122
122
  </g>
123
123
  <!-- World&#45;&gt;Result -->
124
124
  <!-- Snapshot -->
125
- <g id="node17" class="node">
125
+ <g id="node18" class="node">
126
126
  <title>Snapshot</title>
127
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2975.78,-359C2975.78,-359 2810.53,-359 2810.53,-359 2804.53,-359 2798.53,-353 2798.53,-347 2798.53,-347 2798.53,-309 2798.53,-309 2798.53,-303 2804.53,-297 2810.53,-297 2810.53,-297 2975.78,-297 2975.78,-297 2981.78,-297 2987.78,-303 2987.78,-309 2987.78,-309 2987.78,-347 2987.78,-347 2987.78,-353 2981.78,-359 2975.78,-359"/>
128
- <text xml:space="preserve" text-anchor="middle" x="2893.16" y="-344.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
129
- <text xml:space="preserve" text-anchor="middle" x="2893.16" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain</text>
130
- <text xml:space="preserve" text-anchor="middle" x="2893.16" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repo/env/rf/web</text>
131
- <text xml:space="preserve" text-anchor="middle" x="2893.16" y="-304.05" 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="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>
132
132
  </g>
133
133
  <!-- World&#45;&gt;Snapshot -->
134
- <g id="edge17" class="edge">
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="M1441.65,-685.3C1520,-672.75 1636.42,-648.68 1663.16,-613.5 1697.31,-568.56 1678.37,-540.86 1663.16,-486.5 1656.95,-464.3 1629.92,-453.86 1646.16,-437.5 1657.23,-426.35 2762.46,-435.04 2777.16,-429.5 2810.68,-416.86 2840.99,-389.78 2862.21,-366.91"/>
137
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2864.16,-368.92 2867.45,-361.11 2860.01,-365.17 2864.16,-368.92"/>
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"/>
138
138
  </g>
139
139
  <!-- Observe -->
140
- <g id="node18" class="node">
140
+ <g id="node19" class="node">
141
141
  <title>Observe</title>
142
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M3311.66,-346C3311.66,-346 3202.66,-346 3202.66,-346 3196.66,-346 3190.66,-340 3190.66,-334 3190.66,-334 3190.66,-322 3190.66,-322 3190.66,-316 3196.66,-310 3202.66,-310 3202.66,-310 3311.66,-310 3311.66,-310 3317.66,-310 3323.66,-316 3323.66,-322 3323.66,-322 3323.66,-334 3323.66,-334 3323.66,-340 3317.66,-346 3311.66,-346"/>
143
- <text xml:space="preserve" text-anchor="middle" x="3257.16" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel · watch</text>
144
- <text xml:space="preserve" text-anchor="middle" x="3257.16" y="-317.55" 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="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>
145
145
  </g>
146
146
  <!-- World&#45;&gt;Observe -->
147
- <g id="edge18" class="edge">
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="M1441.59,-690.3C1533.71,-681.83 1682.45,-660.96 1705.16,-613.5 1729.52,-562.59 1714.79,-542.12 1705.16,-486.5 1701.37,-464.6 1679.48,-453.26 1695.16,-437.5 1709.6,-422.98 3150.54,-438.01 3169.16,-429.5 3202.6,-414.22 3228.37,-379.33 3243.15,-354.97"/>
150
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="3245.47,-356.54 3247.09,-348.23 3240.63,-353.72 3245.47,-356.54"/>
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"/>
151
151
  </g>
152
152
  <!-- Verify -->
153
- <g id="node19" class="node">
153
+ <g id="node20" class="node">
154
154
  <title>Verify</title>
155
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M2743.66,-352.25C2743.66,-352.25 2646.66,-352.25 2646.66,-352.25 2640.66,-352.25 2634.66,-346.25 2634.66,-340.25 2634.66,-340.25 2634.66,-315.75 2634.66,-315.75 2634.66,-309.75 2640.66,-303.75 2646.66,-303.75 2646.66,-303.75 2743.66,-303.75 2743.66,-303.75 2749.66,-303.75 2755.66,-309.75 2755.66,-315.75 2755.66,-315.75 2755.66,-340.25 2755.66,-340.25 2755.66,-346.25 2749.66,-352.25 2743.66,-352.25"/>
156
- <text xml:space="preserve" text-anchor="middle" x="2695.16" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">verify (browser)</text>
157
- <text xml:space="preserve" text-anchor="middle" x="2695.16" y="-324.3" 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="2695.16" y="-310.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">revalidate_memory</text>
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>
159
159
  </g>
160
160
  <!-- World&#45;&gt;Verify -->
161
- <g id="edge19" class="edge">
161
+ <g id="edge21" class="edge">
162
162
  <title>World&#45;&gt;Verify</title>
163
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1441.48,-694.14C1602.98,-690.51 1978.63,-678.27 2023.16,-642.5 2097.47,-582.81 2009.96,-494.76 2086.16,-437.5 2108.06,-421.04 2553.57,-439.28 2579.16,-429.5 2615.45,-415.63 2648.03,-384.96 2669.36,-361.12"/>
164
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="2671.29,-363.17 2674.43,-355.3 2667.06,-359.49 2671.29,-363.17"/>
165
- <text xml:space="preserve" text-anchor="middle" x="2097.31" y="-520.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">TransparentBrowser</text>
166
- <text xml:space="preserve" text-anchor="middle" x="2097.31" y="-510.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:headless</text>
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>
167
167
  </g>
168
168
  <!-- RFTune -->
169
- <g id="node20" class="node">
169
+ <g id="node21" class="node">
170
170
  <title>RFTune</title>
171
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M3135.78,-352.25C3135.78,-352.25 3042.53,-352.25 3042.53,-352.25 3036.53,-352.25 3030.53,-346.25 3030.53,-340.25 3030.53,-340.25 3030.53,-315.75 3030.53,-315.75 3030.53,-309.75 3036.53,-303.75 3042.53,-303.75 3042.53,-303.75 3135.78,-303.75 3135.78,-303.75 3141.78,-303.75 3147.78,-309.75 3147.78,-315.75 3147.78,-315.75 3147.78,-340.25 3147.78,-340.25 3147.78,-346.25 3141.78,-352.25 3135.78,-352.25"/>
172
- <text xml:space="preserve" text-anchor="middle" x="3089.16" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rf_tune &#160;📡</text>
173
- <text xml:space="preserve" text-anchor="middle" x="3089.16" y="-324.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tune GQRX · demod</text>
174
- <text xml:space="preserve" text-anchor="middle" x="3089.16" y="-310.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RDS → now_playing</text>
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>
175
175
  </g>
176
176
  <!-- World&#45;&gt;RFTune -->
177
- <g id="edge20" class="edge">
177
+ <g id="edge22" class="edge">
178
178
  <title>World&#45;&gt;RFTune</title>
179
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1441.51,-696.06C1569.49,-695.68 1841.3,-688.85 2065.16,-642.5 2103.83,-634.49 2115.1,-633.49 2149.16,-613.5 2250.41,-554.07 2236.72,-480.02 2346.16,-437.5 2380.49,-424.16 2976.07,-445.7 3009.16,-429.5 3037.73,-415.51 3059.29,-385.92 3072.79,-362.45"/>
180
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="3075.22,-363.84 3076.62,-355.48 3070.32,-361.14 3075.22,-363.84"/>
181
- <text xml:space="preserve" text-anchor="middle" x="2299.26" y="-520.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">GQRX remote</text>
182
- <text xml:space="preserve" text-anchor="middle" x="2299.26" y="-510.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:7356 + SDR</text>
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>
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="M452.78,-543C452.78,-543 389.53,-543 389.53,-543 383.53,-543 377.53,-537 377.53,-531 377.53,-531 377.53,-506.5 377.53,-506.5 377.53,-500.5 383.53,-494.5 389.53,-494.5 389.53,-494.5 452.78,-494.5 452.78,-494.5 458.78,-494.5 464.78,-500.5 464.78,-506.5 464.78,-506.5 464.78,-531 464.78,-531 464.78,-537 458.78,-543 452.78,-543"/>
188
- <text xml:space="preserve" text-anchor="middle" x="421.16" y="-528.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Registry</text>
189
- <text xml:space="preserve" text-anchor="middle" x="421.16" y="-515.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool_router</text>
190
- <text xml:space="preserve" text-anchor="middle" x="421.16" y="-501.55" 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="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>
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="M292.46,-518.75C317.31,-518.75 342.17,-518.75 367.02,-518.75"/>
196
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="366.95,-521.55 374.95,-518.75 366.95,-515.95 366.95,-521.55"/>
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"/>
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="M1233.91,-536.75C1233.91,-536.75 1126.41,-536.75 1126.41,-536.75 1120.41,-536.75 1114.41,-530.75 1114.41,-524.75 1114.41,-524.75 1114.41,-512.75 1114.41,-512.75 1114.41,-506.75 1120.41,-500.75 1126.41,-500.75 1126.41,-500.75 1233.91,-500.75 1233.91,-500.75 1239.91,-500.75 1245.91,-506.75 1245.91,-512.75 1245.91,-512.75 1245.91,-524.75 1245.91,-524.75 1245.91,-530.75 1239.91,-536.75 1233.91,-536.75"/>
202
- <text xml:space="preserve" text-anchor="middle" x="1180.16" y="-521.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">escalate</text>
203
- <text xml:space="preserve" text-anchor="middle" x="1180.16" y="-508.3" 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="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>
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="M1013.75,-518.75C1039.53,-518.75 1073.43,-518.75 1103.91,-518.75"/>
209
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1103.7,-521.55 1111.7,-518.75 1103.7,-515.95 1103.7,-521.55"/>
210
- <text xml:space="preserve" text-anchor="middle" x="1063.78" y="-523.7" 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="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>
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="M990.27,-543.49C1014.55,-574.33 1060.89,-625.49 1114.66,-646 1169.06,-666.75 1192.08,-668.79 1245.66,-646 1293.63,-625.59 1331.92,-576.17 1352.22,-545.27"/>
216
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1354.44,-546.98 1356.4,-538.74 1349.73,-543.96 1354.44,-546.98"/>
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"/>
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="M2548.91,-352.25C2548.91,-352.25 2441.41,-352.25 2441.41,-352.25 2435.41,-352.25 2429.41,-346.25 2429.41,-340.25 2429.41,-340.25 2429.41,-315.75 2429.41,-315.75 2429.41,-309.75 2435.41,-303.75 2441.41,-303.75 2441.41,-303.75 2548.91,-303.75 2548.91,-303.75 2554.91,-303.75 2560.91,-309.75 2560.91,-315.75 2560.91,-315.75 2560.91,-340.25 2560.91,-340.25 2560.91,-346.25 2554.91,-352.25 2548.91,-352.25"/>
222
- <text xml:space="preserve" text-anchor="middle" x="2495.16" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
223
- <text xml:space="preserve" text-anchor="middle" x="2495.16" y="-324.3" 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="2495.16" y="-310.8" 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="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>
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="M1013.68,-504.45C1036.81,-497.7 1066.29,-490.16 1093.16,-486.5 1135.69,-480.7 2608.08,-489.13 2638.16,-458.5 2644.7,-451.84 2643.51,-445.14 2638.16,-437.5 2632.19,-428.98 2625.18,-434.68 2616.16,-429.5 2582.6,-410.25 2549.13,-381.52 2525.93,-359.71"/>
230
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2527.92,-357.74 2520.19,-354.25 2524.05,-361.79 2527.92,-357.74"/>
231
- <text xml:space="preserve" text-anchor="middle" x="2674.13" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record(engine:)</text>
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>
232
232
  </g>
233
233
  <!-- Dispatch&#45;&gt;Mistakes -->
234
- <g id="edge13" class="edge">
234
+ <g id="edge15" class="edge">
235
235
  <title>Dispatch&#45;&gt;Mistakes</title>
236
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M930.54,-505.36C884.62,-491.28 816.2,-468.9 808.91,-458.5 803.55,-450.86 802.35,-444.14 808.91,-437.5 821.64,-424.61 1444.35,-436.27 1461.16,-429.5 1492.39,-416.91 1519.88,-390.55 1539.18,-367.98"/>
237
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1541.28,-369.83 1544.23,-361.88 1536.97,-366.26 1541.28,-369.83"/>
238
- <text xml:space="preserve" text-anchor="middle" x="828.03" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">on failure</text>
239
- <text xml:space="preserve" text-anchor="middle" x="828.03" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
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>
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="M2374.03,-352.25C2374.03,-352.25 2234.28,-352.25 2234.28,-352.25 2228.28,-352.25 2222.28,-346.25 2222.28,-340.25 2222.28,-340.25 2222.28,-315.75 2222.28,-315.75 2222.28,-309.75 2228.28,-303.75 2234.28,-303.75 2234.28,-303.75 2374.03,-303.75 2374.03,-303.75 2380.03,-303.75 2386.03,-309.75 2386.03,-315.75 2386.03,-315.75 2386.03,-340.25 2386.03,-340.25 2386.03,-346.25 2380.03,-352.25 2374.03,-352.25"/>
245
- <text xml:space="preserve" text-anchor="middle" x="2304.16" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Curriculum</text>
246
- <text xml:space="preserve" text-anchor="middle" x="2304.16" y="-324.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">practice · offline_judge</text>
247
- <text xml:space="preserve" text-anchor="middle" x="2304.16" y="-310.8" 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="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>
248
248
  </g>
249
249
  <!-- Dispatch&#45;&gt;Curric -->
250
- <g id="edge62" class="edge">
250
+ <g id="edge67" 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="M975.26,-493.96C979.1,-475.14 987.62,-450 1006.41,-437.5 1034.04,-419.12 2170.46,-442.11 2201.16,-429.5 2235,-415.59 2263.83,-384.71 2282.31,-360.82"/>
253
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="2284.42,-362.67 2286.99,-354.6 2279.94,-359.31 2284.42,-362.67"/>
254
- <text xml:space="preserve" text-anchor="middle" x="1035.28" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">counterfactual</text>
255
- <text xml:space="preserve" text-anchor="middle" x="1035.28" y="-439.45" 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="M982.7,-511.69C962.61,-506.86 940.53,-502.04 920,-498.62 887.88,-493.28 650.15,-494.73 628.25,-470.62 621.97,-463.72 621.66,-456.24 628.25,-449.62 638.21,-439.62 2647.56,-445.93 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="657.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="657.12" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[REPEATING]</text>
256
+ </g>
257
+ <!-- Policy -->
258
+ <g id="node17" class="node">
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>
265
+ </g>
266
+ <!-- Dispatch&#45;&gt;Policy -->
267
+ <g id="edge12" class="edge">
268
+ <title>Dispatch&#45;&gt;Policy</title>
269
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="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>
256
272
  </g>
257
273
  <!-- Dispatch&#45;&gt;Snapshot -->
258
- <g id="edge15" class="edge">
274
+ <g id="edge17" class="edge">
259
275
  <title>Dispatch&#45;&gt;Snapshot</title>
260
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1013.63,-504.4C1083.29,-482.01 1217.3,-439.19 1228.16,-437.5 1270.67,-430.88 2736.88,-444.64 2777.16,-429.5 2810.69,-416.89 2841,-389.81 2862.22,-366.93"/>
261
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="2864.17,-368.94 2867.46,-361.13 2860.02,-365.19 2864.17,-368.94"/>
262
- <text xml:space="preserve" text-anchor="middle" x="1240.16" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
276
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M982.79,-511.11C962.71,-506.26 940.6,-501.58 920,-498.62 859.87,-489.99 415.84,-514.67 374,-470.62 367.57,-463.86 367.47,-456.29 374,-449.62 388.54,-434.77 728.61,-449.09 748,-441.62 781.43,-428.75 811.74,-401.68 832.99,-378.87"/>
277
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="834.93,-380.9 838.24,-373.1 830.79,-377.13 834.93,-380.9"/>
278
+ <text xml:space="preserve" text-anchor="middle" x="386" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
263
279
  </g>
264
280
  <!-- Dispatch&#45;&gt;Observe -->
265
- <g id="edge21" class="edge">
281
+ <g id="edge23" class="edge">
266
282
  <title>Dispatch&#45;&gt;Observe</title>
267
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1013.68,-504.47C1036.81,-497.72 1066.29,-490.19 1093.16,-486.5 1247.19,-465.36 2342.06,-499.05 2492.16,-458.5 2510.69,-453.49 2511.36,-442.44 2529.91,-437.5 2564.23,-428.37 3136.91,-444.37 3169.16,-429.5 3202.55,-414.1 3228.33,-379.24 3243.12,-354.92"/>
268
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="3245.44,-356.5 3247.07,-348.19 3240.61,-353.67 3245.44,-356.5"/>
269
- <text xml:space="preserve" text-anchor="middle" x="2579.03" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">sense tools</text>
270
- <text xml:space="preserve" text-anchor="middle" x="2579.03" y="-439.45" 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="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>
271
287
  </g>
272
288
  <!-- Plan -->
273
289
  <g id="node7" class="node">
274
290
  <title>Plan</title>
275
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M631.78,-536.75C631.78,-536.75 562.53,-536.75 562.53,-536.75 556.53,-536.75 550.53,-530.75 550.53,-524.75 550.53,-524.75 550.53,-512.75 550.53,-512.75 550.53,-506.75 556.53,-500.75 562.53,-500.75 562.53,-500.75 631.78,-500.75 631.78,-500.75 637.78,-500.75 643.78,-506.75 643.78,-512.75 643.78,-512.75 643.78,-524.75 643.78,-524.75 643.78,-530.75 637.78,-536.75 631.78,-536.75"/>
276
- <text xml:space="preserve" text-anchor="middle" x="597.16" y="-521.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">plan_first</text>
277
- <text xml:space="preserve" text-anchor="middle" x="597.16" y="-508.3" 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="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>
278
294
  </g>
279
295
  <!-- Router&#45;&gt;Plan -->
280
296
  <g id="edge5" class="edge">
281
297
  <title>Router&#45;&gt;Plan</title>
282
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M465.16,-518.75C490.12,-518.75 515.08,-518.75 540.04,-518.75"/>
283
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="540.01,-521.55 548.01,-518.75 540.01,-515.95 540.01,-521.55"/>
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"/>
284
300
  </g>
285
301
  <!-- TaskSum -->
286
302
  <g id="node8" class="node">
287
303
  <title>TaskSum</title>
288
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M833.41,-543C833.41,-543 740.91,-543 740.91,-543 734.91,-543 728.91,-537 728.91,-531 728.91,-531 728.91,-506.5 728.91,-506.5 728.91,-500.5 734.91,-494.5 740.91,-494.5 740.91,-494.5 833.41,-494.5 833.41,-494.5 839.41,-494.5 845.41,-500.5 845.41,-506.5 845.41,-506.5 845.41,-531 845.41,-531 845.41,-537 839.41,-543 833.41,-543"/>
289
- <text xml:space="preserve" text-anchor="middle" x="787.16" y="-528.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">TaskSummarizer</text>
290
- <text xml:space="preserve" text-anchor="middle" x="787.16" y="-515.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">emit_plan! · about_to</text>
291
- <text xml:space="preserve" text-anchor="middle" x="787.16" y="-501.55" 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="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>
292
308
  </g>
293
309
  <!-- Plan&#45;&gt;TaskSum -->
294
310
  <g id="edge6" class="edge">
295
311
  <title>Plan&#45;&gt;TaskSum</title>
296
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M644.29,-518.75C668.92,-518.75 693.56,-518.75 718.19,-518.75"/>
297
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="718.03,-521.55 726.03,-518.75 718.03,-515.95 718.03,-521.55"/>
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"/>
298
314
  </g>
299
315
  <!-- TaskSum&#45;&gt;Dispatch -->
300
316
  <g id="edge7" class="edge">
301
317
  <title>TaskSum&#45;&gt;Dispatch</title>
302
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M846.06,-518.75C870.99,-518.75 895.92,-518.75 920.85,-518.75"/>
303
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="920.81,-521.55 928.81,-518.75 920.81,-515.95 920.81,-521.55"/>
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"/>
304
320
  </g>
305
321
  <!-- Escalate&#45;&gt;LLM -->
306
- <g id="edge56" class="edge">
322
+ <g id="edge61" class="edge">
307
323
  <title>Escalate&#45;&gt;LLM</title>
308
- <path fill="none" stroke="#a78bfa" stroke-width="2" stroke-dasharray="5,2" d="M1158.92,-537.7C1121.42,-569.38 1043.46,-635.25 1001.09,-671.06"/>
309
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="999.48,-668.75 995.18,-676.05 1003.09,-673.03 999.48,-668.75"/>
310
- <text xml:space="preserve" text-anchor="middle" x="1099.9" y="-633.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Swarm.ask(persona)</text>
311
- <text xml:space="preserve" text-anchor="middle" x="1099.9" y="-623.45" 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="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>
312
328
  </g>
313
329
  <!-- Escalate&#45;&gt;Result -->
314
330
  <!-- Escalate&#45;&gt;Mistakes -->
315
- <g id="edge57" class="edge">
331
+ <g id="edge62" class="edge">
316
332
  <title>Escalate&#45;&gt;Mistakes</title>
317
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1130.53,-499.77C1095.22,-484.41 1057.81,-461.09 1080.91,-437.5 1095.69,-422.4 1441.6,-437.49 1461.16,-429.5 1492.53,-416.69 1520.18,-390.08 1539.51,-367.45"/>
318
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1541.52,-369.41 1544.48,-361.47 1537.22,-365.83 1541.52,-369.41"/>
319
- <text xml:space="preserve" text-anchor="middle" x="1115.03" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record</text>
320
- <text xml:space="preserve" text-anchor="middle" x="1115.03" y="-439.45" 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="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>
321
337
  </g>
322
338
  <!-- Result&#45;&gt;User -->
323
- <g id="edge59" class="edge">
339
+ <g id="edge64" class="edge">
324
340
  <title>Result&#45;&gt;User</title>
325
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M1354.04,-537.43C1336.1,-558.7 1303.11,-593.97 1267.16,-613.5 1220.84,-638.66 1204.26,-634.51 1152.16,-642.5 827.8,-692.26 432.76,-696.33 287.38,-695.96"/>
326
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="287.57,-693.16 279.56,-695.94 287.55,-698.76 287.57,-693.16"/>
327
- <text xml:space="preserve" text-anchor="middle" x="1264.27" y="-628.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
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>
328
344
  </g>
329
345
  <!-- Learning -->
330
346
  <g id="node12" class="node">
331
347
  <title>Learning</title>
332
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1985.16,-359C1985.16,-359 1837.16,-359 1837.16,-359 1831.16,-359 1825.16,-353 1825.16,-347 1825.16,-347 1825.16,-309 1825.16,-309 1825.16,-303 1831.16,-297 1837.16,-297 1837.16,-297 1985.16,-297 1985.16,-297 1991.16,-297 1997.16,-303 1997.16,-309 1997.16,-309 1997.16,-347 1997.16,-347 1997.16,-353 1991.16,-359 1985.16,-359"/>
333
- <text xml:space="preserve" text-anchor="middle" x="1911.16" y="-344.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
334
- <text xml:space="preserve" text-anchor="middle" x="1911.16" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
335
- <text xml:space="preserve" text-anchor="middle" x="1911.16" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">exemplars_for · SFT quality gate</text>
336
- <text xml:space="preserve" text-anchor="middle" x="1911.16" y="-304.05" 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="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>
337
353
  </g>
338
354
  <!-- Result&#45;&gt;Learning -->
339
- <g id="edge12" class="edge">
355
+ <g id="edge13" class="edge">
340
356
  <title>Result&#45;&gt;Learning</title>
341
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1330.79,-503.93C1311.96,-497.55 1288.63,-490.51 1267.16,-486.5 1178.48,-469.93 800.68,-501.61 864.16,-437.5 872.08,-429.5 1664.13,-431.81 1675.16,-429.5 1736.38,-416.69 1801.46,-387.69 1847.74,-364.11"/>
342
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1848.86,-366.68 1854.69,-360.53 1846.3,-361.7 1848.86,-366.68"/>
343
- <text xml:space="preserve" text-anchor="middle" x="895.66" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_introspect</text>
357
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1436.68,-515.8C1417.86,-509.35 1394.52,-502.34 1373,-498.62 1336.18,-492.27 726.87,-497.59 701,-470.62 694.54,-463.89 694.43,-456.25 701,-449.62 711.32,-439.22 1742.38,-447.04 1756,-441.62 1787.86,-428.95 1815.93,-402.05 1835.46,-379.27"/>
358
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1837.52,-381.18 1840.49,-373.24 1833.22,-377.59 1837.52,-381.18"/>
359
+ <text xml:space="preserve" text-anchor="middle" x="732.5" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_introspect</text>
344
360
  </g>
345
361
  <!-- Reward -->
346
362
  <g id="node15" class="node">
347
363
  <title>Reward</title>
348
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M2167.66,-359C2167.66,-359 2052.66,-359 2052.66,-359 2046.66,-359 2040.66,-353 2040.66,-347 2040.66,-347 2040.66,-309 2040.66,-309 2040.66,-303 2046.66,-297 2052.66,-297 2052.66,-297 2167.66,-297 2167.66,-297 2173.66,-297 2179.66,-303 2179.66,-309 2179.66,-309 2179.66,-347 2179.66,-347 2179.66,-353 2173.66,-359 2167.66,-359"/>
349
- <text xml:space="preserve" text-anchor="middle" x="2110.16" y="-344.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reward</text>
350
- <text xml:space="preserve" text-anchor="middle" x="2110.16" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">judge · prm · semantic_ok</text>
351
- <text xml:space="preserve" text-anchor="middle" x="2110.16" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">sentinel warm</text>
352
- <text xml:space="preserve" text-anchor="middle" x="2110.16" y="-304.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">DPO scrub &lt;=40%/src</text>
364
+ <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"/>
365
+ <text xml:space="preserve" text-anchor="middle" x="3037" y="-356.68" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reward</text>
366
+ <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>
367
+ <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>
368
+ <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>
353
369
  </g>
354
370
  <!-- Result&#45;&gt;Reward -->
355
- <g id="edge60" class="edge">
371
+ <g id="edge65" class="edge">
356
372
  <title>Result&#45;&gt;Reward</title>
357
- <path fill="none" stroke="#34d399" stroke-width="2" d="M1330.9,-504.77C1293.09,-489.73 1243.54,-463.65 1269.41,-437.5 1284.06,-422.69 2000.17,-438.05 2019.16,-429.5 2047.08,-416.94 2070.12,-391.19 2086.03,-368.91"/>
358
- <polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="2088.26,-370.61 2090.48,-362.43 2083.64,-367.44 2088.26,-370.61"/>
359
- <text xml:space="preserve" text-anchor="middle" x="1292.28" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">judge · prm</text>
373
+ <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"/>
374
+ <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"/>
375
+ <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>
360
376
  </g>
361
377
  <!-- Result&#45;&gt;Curric -->
362
- <g id="edge61" class="edge">
378
+ <g id="edge66" class="edge">
363
379
  <title>Result&#45;&gt;Curric</title>
364
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1359.09,-500.1C1351.12,-481.83 1343.08,-453.74 1359.16,-437.5 1375.62,-420.88 2179.54,-438.42 2201.16,-429.5 2234.98,-415.55 2263.81,-384.67 2282.3,-360.8"/>
365
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2284.4,-362.65 2286.98,-354.58 2279.93,-359.28 2284.4,-362.65"/>
366
- <text xml:space="preserve" text-anchor="middle" x="1390.66" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">critic · hindsight</text>
380
+ <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"/>
381
+ <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"/>
382
+ <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>
383
+ </g>
384
+ <!-- Result&#45;&gt;Policy -->
385
+ <g id="edge14" class="edge">
386
+ <title>Result&#45;&gt;Policy</title>
387
+ <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"/>
388
+ <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"/>
389
+ <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>
367
390
  </g>
368
391
  <!-- Result&#45;&gt;Observe -->
369
- <g id="edge16" class="edge">
392
+ <g id="edge18" class="edge">
370
393
  <title>Result&#45;&gt;Observe</title>
371
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1405.6,-516.32C1557.17,-510.38 2125.55,-486.68 2303.16,-458.5 2340.21,-452.62 2347.72,-442.39 2384.91,-437.5 2406.51,-434.66 3149.36,-438.6 3169.16,-429.5 3202.56,-414.14 3228.34,-379.27 3243.13,-354.93"/>
372
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="3245.45,-356.52 3247.08,-348.2 3240.62,-353.68 3245.45,-356.52"/>
373
- <text xml:space="preserve" text-anchor="middle" x="2435.53" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
374
- <text xml:space="preserve" text-anchor="middle" x="2435.53" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(AUTO_SECTIONS only)</text>
394
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1436.69,-515.69C1417.88,-509.22 1394.55,-502.22 1373,-498.62 1322.16,-490.15 481.64,-507.61 445.75,-470.62 439.25,-463.93 439.2,-456.27 445.75,-449.62 456.17,-439.05 966.53,-447.86 980,-441.62 1013.37,-426.19 1039.16,-391.33 1053.96,-367.02"/>
395
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1056.27,-368.61 1057.91,-360.3 1051.44,-365.78 1056.27,-368.61"/>
396
+ <text xml:space="preserve" text-anchor="middle" x="496.38" y="-462.07" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
397
+ <text xml:space="preserve" text-anchor="middle" x="496.38" y="-451.57" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(AUTO_SECTIONS only)</text>
375
398
  </g>
376
399
  <!-- Result&#45;&gt;Verify -->
377
- <g id="edge46" class="edge">
400
+ <g id="edge49" class="edge">
378
401
  <title>Result&#45;&gt;Verify</title>
379
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1405.51,-515.9C1507,-510.9 1796.4,-496.8 2037.16,-486.5 2077.21,-484.79 2730.37,-487.39 2758.16,-458.5 2785.16,-430.43 2755.96,-388.56 2728.97,-360.09"/>
380
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="2731.16,-358.32 2723.57,-354.56 2727.16,-362.24 2731.16,-358.32"/>
381
- <text xml:space="preserve" text-anchor="middle" x="2813.4" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">fact_check_local_final</text>
382
- <text xml:space="preserve" text-anchor="middle" x="2813.4" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(CVE / version claims)</text>
402
+ <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"/>
403
+ <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"/>
404
+ <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>
405
+ <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>
383
406
  </g>
384
407
  <!-- Correlate -->
385
- <g id="node21" class="node">
408
+ <g id="node22" class="node">
386
409
  <title>Correlate</title>
387
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M3110.03,-204C3110.03,-204 2910.28,-204 2910.28,-204 2904.28,-204 2898.28,-198 2898.28,-192 2898.28,-192 2898.28,-179.5 2898.28,-179.5 2898.28,-173.5 2904.28,-167.5 2910.28,-167.5 2910.28,-167.5 3110.03,-167.5 3110.03,-167.5 3116.03,-167.5 3122.03,-173.5 3122.03,-179.5 3122.03,-179.5 3122.03,-192 3122.03,-192 3122.03,-198 3116.03,-204 3110.03,-204"/>
388
- <text xml:space="preserve" text-anchor="middle" x="3010.16" y="-188.6" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
389
- <text xml:space="preserve" text-anchor="middle" x="3010.16" y="-174.35" 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>
410
+ <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"/>
411
+ <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>
412
+ <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>
390
413
  </g>
391
414
  <!-- Metrics&#45;&gt;Correlate -->
392
- <g id="edge22" class="edge">
415
+ <g id="edge24" class="edge">
393
416
  <title>Metrics&#45;&gt;Correlate</title>
394
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M2561.55,-305.49C2579.24,-299.94 2598.38,-294.1 2616.16,-289 2722.4,-258.55 2845.88,-227.15 2925.88,-207.31"/>
395
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2926.42,-210.07 2933.51,-205.43 2925.07,-204.63 2926.42,-210.07"/>
417
+ <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"/>
418
+ <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"/>
396
419
  </g>
397
420
  <!-- Fmet -->
398
- <g id="node22" class="node">
421
+ <g id="node23" class="node">
399
422
  <title>Fmet</title>
400
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2593.66,-48.73C2593.66,-50.53 2577.3,-52 2557.16,-52 2537.02,-52 2520.66,-50.53 2520.66,-48.73 2520.66,-48.73 2520.66,-19.27 2520.66,-19.27 2520.66,-17.47 2537.02,-16 2557.16,-16 2577.3,-16 2593.66,-17.47 2593.66,-19.27 2593.66,-19.27 2593.66,-48.73 2593.66,-48.73"/>
401
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2593.66,-48.73C2593.66,-46.92 2577.3,-45.45 2557.16,-45.45 2537.02,-45.45 2520.66,-46.92 2520.66,-48.73"/>
402
- <text xml:space="preserve" text-anchor="middle" x="2557.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
423
+ <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"/>
424
+ <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"/>
425
+ <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>
403
426
  </g>
404
427
  <!-- Metrics&#45;&gt;Fmet -->
405
- <g id="edge30" class="edge">
428
+ <g id="edge32" class="edge">
406
429
  <title>Metrics&#45;&gt;Fmet</title>
407
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2554.44,-303.17C2635.46,-270.32 2771.58,-214.04 2778.16,-204 2798.55,-172.9 2772.33,-145.18 2738.16,-130.5 2712.99,-119.69 2638.86,-136.23 2615.16,-122.5 2591.88,-109.01 2576.16,-81.98 2567.03,-61.52"/>
408
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2569.62,-60.47 2563.94,-54.18 2564.46,-62.64 2569.62,-60.47"/>
430
+ <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"/>
431
+ <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"/>
409
432
  </g>
410
433
  <!-- ReflectT -->
411
434
  <g id="node14" class="node">
412
435
  <title>ReflectT</title>
413
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M1427.66,-352.25C1427.66,-352.25 1360.66,-352.25 1360.66,-352.25 1354.66,-352.25 1348.66,-346.25 1348.66,-340.25 1348.66,-340.25 1348.66,-315.75 1348.66,-315.75 1348.66,-309.75 1354.66,-303.75 1360.66,-303.75 1360.66,-303.75 1427.66,-303.75 1427.66,-303.75 1433.66,-303.75 1439.66,-309.75 1439.66,-315.75 1439.66,-315.75 1439.66,-340.25 1439.66,-340.25 1439.66,-346.25 1433.66,-352.25 1427.66,-352.25"/>
414
- <text xml:space="preserve" text-anchor="middle" x="1394.16" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reflect</text>
415
- <text xml:space="preserve" text-anchor="middle" x="1394.16" y="-324.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">teacher&#45;student</text>
416
- <text xml:space="preserve" text-anchor="middle" x="1394.16" y="-310.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(reflect_engine)</text>
436
+ <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"/>
437
+ <text xml:space="preserve" text-anchor="middle" x="2594" y="-349.93" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Reflect</text>
438
+ <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>
439
+ <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>
417
440
  </g>
418
441
  <!-- Learning&#45;&gt;ReflectT -->
419
- <g id="edge43" class="edge">
442
+ <g id="edge46" class="edge">
420
443
  <title>Learning&#45;&gt;ReflectT</title>
421
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1851.02,-359.64C1804.46,-382.26 1737.59,-410.76 1675.16,-422.83 1581.78,-440.89 1545.62,-466.57 1461.16,-422.83 1436.57,-410.1 1419.08,-383.72 1408.14,-362.01"/>
422
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1410.68,-360.83 1404.71,-354.82 1405.63,-363.25 1410.68,-360.83"/>
423
- <text xml:space="preserve" text-anchor="middle" x="1767.16" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect()</text>
444
+ <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"/>
445
+ <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"/>
446
+ <text xml:space="preserve" text-anchor="middle" x="2008" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect()</text>
424
447
  </g>
425
448
  <!-- Learning&#45;&gt;Correlate -->
426
- <g id="edge23" class="edge">
449
+ <g id="edge25" class="edge">
427
450
  <title>Learning&#45;&gt;Correlate</title>
428
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1991.64,-296.37C2000.83,-293.56 2010.14,-291.02 2019.16,-289 2040.14,-284.29 2626.99,-225.15 2887.54,-199.02"/>
429
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2887.79,-201.81 2895.47,-198.23 2887.23,-196.24 2887.79,-201.81"/>
451
+ <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"/>
452
+ <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"/>
430
453
  </g>
431
454
  <!-- Flrn -->
432
- <g id="node23" class="node">
455
+ <g id="node24" class="node">
433
456
  <title>Flrn</title>
434
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1814.66,-48.73C1814.66,-50.53 1796.95,-52 1775.16,-52 1753.36,-52 1735.66,-50.53 1735.66,-48.73 1735.66,-48.73 1735.66,-19.27 1735.66,-19.27 1735.66,-17.47 1753.36,-16 1775.16,-16 1796.95,-16 1814.66,-17.47 1814.66,-19.27 1814.66,-19.27 1814.66,-48.73 1814.66,-48.73"/>
435
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1814.66,-48.73C1814.66,-46.92 1796.95,-45.45 1775.16,-45.45 1753.36,-45.45 1735.66,-46.92 1735.66,-48.73"/>
436
- <text xml:space="preserve" text-anchor="middle" x="1775.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
457
+ <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"/>
458
+ <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"/>
459
+ <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>
437
460
  </g>
438
461
  <!-- Learning&#45;&gt;Flrn -->
439
- <g id="edge31" class="edge">
462
+ <g id="edge34" class="edge">
440
463
  <title>Learning&#45;&gt;Flrn</title>
441
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1824.71,-318.39C1754.75,-306.11 1661.73,-276.32 1623.16,-204 1607.17,-174.02 1615.82,-149.24 1644.16,-130.5 1670.28,-113.23 1687.27,-138.54 1714.16,-122.5 1737.6,-108.51 1754.27,-81.62 1764.2,-61.32"/>
442
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1766.62,-62.75 1767.46,-54.31 1761.55,-60.39 1766.62,-62.75"/>
464
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1878.94,-308.63C1907.66,-250 1970.11,-122.5 1997.12,-67.35"/>
465
+ <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"/>
443
466
  </g>
444
467
  <!-- Fmem -->
445
- <g id="node25" class="node">
468
+ <g id="node26" class="node">
446
469
  <title>Fmem</title>
447
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1692.91,-48.73C1692.91,-50.53 1675.54,-52 1654.16,-52 1632.78,-52 1615.41,-50.53 1615.41,-48.73 1615.41,-48.73 1615.41,-19.27 1615.41,-19.27 1615.41,-17.47 1632.78,-16 1654.16,-16 1675.54,-16 1692.91,-17.47 1692.91,-19.27 1692.91,-19.27 1692.91,-48.73 1692.91,-48.73"/>
448
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1692.91,-48.73C1692.91,-46.92 1675.54,-45.45 1654.16,-45.45 1632.78,-45.45 1615.41,-46.92 1615.41,-48.73"/>
449
- <text xml:space="preserve" text-anchor="middle" x="1654.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
470
+ <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"/>
471
+ <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"/>
472
+ <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>
450
473
  </g>
451
474
  <!-- Learning&#45;&gt;Fmem -->
452
- <g id="edge34" class="edge">
475
+ <g id="edge37" class="edge">
453
476
  <title>Learning&#45;&gt;Fmem</title>
454
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1824.47,-317.22C1769.21,-308.31 1697.48,-291.66 1640.16,-261 1607.15,-243.35 1593.21,-238.27 1578.16,-204 1555.43,-152.24 1599.71,-91.92 1629.72,-59.17"/>
455
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1631.45,-61.41 1634.9,-53.66 1627.38,-57.57 1631.45,-61.41"/>
456
- <text xml:space="preserve" text-anchor="middle" x="1591.66" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
477
+ <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"/>
478
+ <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"/>
479
+ <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>
457
480
  </g>
458
481
  <!-- Fskl -->
459
- <g id="node27" class="node">
482
+ <g id="node28" class="node">
460
483
  <title>Fskl</title>
461
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2348.16,-48.73C2348.16,-50.53 2323.06,-52 2292.16,-52 2261.26,-52 2236.16,-50.53 2236.16,-48.73 2236.16,-48.73 2236.16,-19.27 2236.16,-19.27 2236.16,-17.47 2261.26,-16 2292.16,-16 2323.06,-16 2348.16,-17.47 2348.16,-19.27 2348.16,-19.27 2348.16,-48.73 2348.16,-48.73"/>
462
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2348.16,-48.73C2348.16,-46.92 2323.06,-45.45 2292.16,-45.45 2261.26,-45.45 2236.16,-46.92 2236.16,-48.73"/>
463
- <text xml:space="preserve" text-anchor="middle" x="2292.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/&lt;n&gt;/SKILL.md</text>
484
+ <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"/>
485
+ <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"/>
486
+ <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>
464
487
  </g>
465
488
  <!-- Learning&#45;&gt;Fskl -->
466
- <g id="edge35" class="edge">
489
+ <g id="edge38" class="edge">
467
490
  <title>Learning&#45;&gt;Fskl</title>
468
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1965.02,-296.42C2028.01,-259.39 2133.88,-193.14 2214.16,-122.5 2235.95,-103.33 2257.67,-78.36 2272.63,-60"/>
469
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2274.54,-62.1 2277.38,-54.11 2270.18,-58.58 2274.54,-62.1"/>
470
- <text xml:space="preserve" text-anchor="middle" x="2166.21" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
491
+ <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"/>
492
+ <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"/>
493
+ <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>
471
494
  </g>
472
495
  <!-- Fftn -->
473
- <g id="node29" class="node">
496
+ <g id="node30" class="node">
474
497
  <title>Fftn</title>
475
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2477.41,-48.73C2477.41,-50.53 2458.02,-52 2434.16,-52 2410.29,-52 2390.91,-50.53 2390.91,-48.73 2390.91,-48.73 2390.91,-19.27 2390.91,-19.27 2390.91,-17.47 2410.29,-16 2434.16,-16 2458.02,-16 2477.41,-17.47 2477.41,-19.27 2477.41,-19.27 2477.41,-48.73 2477.41,-48.73"/>
476
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2477.41,-48.73C2477.41,-46.92 2458.02,-45.45 2434.16,-45.45 2410.29,-45.45 2390.91,-46.92 2390.91,-48.73"/>
477
- <text xml:space="preserve" text-anchor="middle" x="2434.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">finetune/*.jsonl</text>
498
+ <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"/>
499
+ <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"/>
500
+ <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>
478
501
  </g>
479
502
  <!-- Learning&#45;&gt;Fftn -->
480
- <g id="edge42" class="edge">
503
+ <g id="edge45" class="edge">
481
504
  <title>Learning&#45;&gt;Fftn</title>
482
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1988.03,-296.33C2014.77,-285.43 2044.89,-272.92 2072.16,-261 2080.52,-257.34 2363.1,-128.29 2370.16,-122.5 2391.01,-105.39 2408.57,-80.02 2419.99,-60.99"/>
483
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2422.35,-62.51 2423.95,-54.19 2417.51,-59.69 2422.35,-62.51"/>
484
- <text xml:space="preserve" text-anchor="middle" x="2305.71" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_finetune</text>
505
+ <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"/>
506
+ <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"/>
507
+ <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>
485
508
  </g>
486
509
  <!-- Mistakes&#45;&gt;Dispatch -->
487
- <g id="edge51" class="edge">
510
+ <g id="edge54" class="edge">
488
511
  <title>Mistakes&#45;&gt;Dispatch</title>
489
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1546.11,-359.81C1522.01,-390.77 1480.35,-436.88 1432.16,-458.5 1363.19,-489.44 1167.69,-473.89 1093.16,-486.5 1070.28,-490.37 1045.41,-496.46 1024.19,-502.24"/>
490
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1023.65,-499.48 1016.7,-504.32 1025.15,-504.88 1023.65,-499.48"/>
491
- <text xml:space="preserve" text-anchor="middle" x="1499.91" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">correction_hint</text>
492
- <text xml:space="preserve" text-anchor="middle" x="1499.91" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(inline, next iter)</text>
512
+ <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"/>
513
+ <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"/>
514
+ <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>
515
+ <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>
493
516
  </g>
494
517
  <!-- Mistakes&#45;&gt;Correlate -->
495
- <g id="edge24" class="edge">
518
+ <g id="edge26" class="edge">
496
519
  <title>Mistakes&#45;&gt;Correlate</title>
497
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1654.29,-311.89C1698.92,-304.37 1754.37,-295.53 1804.16,-289 2235,-232.51 2344.8,-236 2778.16,-204 2813.69,-201.38 2852.28,-198.51 2887.6,-195.89"/>
498
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2887.74,-198.68 2895.51,-195.3 2887.32,-193.1 2887.74,-198.68"/>
520
+ <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"/>
521
+ <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"/>
499
522
  </g>
500
523
  <!-- Fmis -->
501
- <g id="node24" class="node">
524
+ <g id="node25" class="node">
502
525
  <title>Fmis</title>
503
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2078.41,-48.73C2078.41,-50.53 2060.37,-52 2038.16,-52 2015.95,-52 1997.91,-50.53 1997.91,-48.73 1997.91,-48.73 1997.91,-19.27 1997.91,-19.27 1997.91,-17.47 2015.95,-16 2038.16,-16 2060.37,-16 2078.41,-17.47 2078.41,-19.27 2078.41,-19.27 2078.41,-48.73 2078.41,-48.73"/>
504
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2078.41,-48.73C2078.41,-46.92 2060.37,-45.45 2038.16,-45.45 2015.95,-45.45 1997.91,-46.92 1997.91,-48.73"/>
505
- <text xml:space="preserve" text-anchor="middle" x="2038.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
526
+ <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"/>
527
+ <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"/>
528
+ <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>
506
529
  </g>
507
530
  <!-- Mistakes&#45;&gt;Fmis -->
508
- <g id="edge32" class="edge">
531
+ <g id="edge35" class="edge">
509
532
  <title>Mistakes&#45;&gt;Fmis</title>
510
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1583.2,-296.02C1602.95,-258.93 1641.31,-198.01 1693.16,-167.5 1802.92,-102.91 1867.99,-189.72 1976.16,-122.5 1999.33,-108.1 2016.29,-81.51 2026.56,-61.41"/>
511
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2028.96,-62.88 2029.94,-54.46 2023.92,-60.43 2028.96,-62.88"/>
533
+ <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"/>
534
+ <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"/>
512
535
  </g>
513
536
  <!-- Mistakes&#45;&gt;Fmem -->
514
- <g id="edge33" class="edge">
537
+ <g id="edge36" class="edge">
515
538
  <title>Mistakes&#45;&gt;Fmem</title>
516
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1482.8,-296.01C1475.5,-293.57 1468.22,-291.2 1461.16,-289 1365.11,-259.06 1214.66,-251.42 1270.16,-167.5 1343.97,-55.89 1519.31,-36.94 1605.13,-34.6"/>
517
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1604.99,-37.41 1612.93,-34.44 1604.87,-31.81 1604.99,-37.41"/>
518
- <text xml:space="preserve" text-anchor="middle" x="1303.16" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
539
+ <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"/>
540
+ <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"/>
541
+ <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>
519
542
  </g>
520
543
  <!-- ReflectT&#45;&gt;LLM -->
521
- <g id="edge45" class="edge">
544
+ <g id="edge48" class="edge">
522
545
  <title>ReflectT&#45;&gt;LLM</title>
523
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M1403.03,-353.07C1413.17,-376.85 1432.21,-412.12 1461.16,-429.5 1476.67,-438.81 1530.01,-424.1 1542.16,-437.5 1605.56,-507.47 1502.93,-562.98 1423.16,-613.5 1359.02,-654.12 1139.98,-679.74 1032.55,-690.16"/>
524
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1032.48,-687.35 1024.78,-690.9 1033.01,-692.92 1032.48,-687.35"/>
525
- <text xml:space="preserve" text-anchor="middle" x="1607.51" y="-515.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">reflect_engine ≠ active</text>
546
+ <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"/>
547
+ <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"/>
548
+ <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>
526
549
  </g>
527
550
  <!-- ReflectT&#45;&gt;Fmem -->
528
- <g id="edge44" class="edge">
551
+ <g id="edge47" class="edge">
529
552
  <title>ReflectT&#45;&gt;Fmem</title>
530
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1347.92,-313.94C1273.27,-290.47 1139.24,-237.05 1188.16,-167.5 1236.72,-98.45 1495.64,-56.22 1605.17,-41.21"/>
531
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1605.48,-43.99 1613.03,-40.14 1604.73,-38.44 1605.48,-43.99"/>
532
- <text xml:space="preserve" text-anchor="middle" x="1218.16" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier :lesson</text>
553
+ <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"/>
554
+ <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"/>
555
+ <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>
533
556
  </g>
534
557
  <!-- Reward&#45;&gt;Mistakes -->
535
- <g id="edge65" class="edge">
558
+ <g id="edge70" class="edge">
536
559
  <title>Reward&#45;&gt;Mistakes</title>
537
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M2090.16,-359.64C2074.05,-381.95 2049.17,-410.04 2019.16,-422.83 1931.26,-460.31 1897.98,-440.98 1804.16,-422.83 1745.84,-411.55 1683.64,-385.94 1637.74,-364.17"/>
538
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1638.98,-361.66 1630.56,-360.73 1636.56,-366.71 1638.98,-361.66"/>
539
- <text xml:space="preserve" text-anchor="middle" x="1721.16" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">sentinel gap</text>
560
+ <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"/>
561
+ <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"/>
562
+ <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>
540
563
  </g>
541
564
  <!-- Reward&#45;&gt;Verify -->
542
- <g id="edge63" class="edge">
565
+ <g id="edge68" class="edge">
543
566
  <title>Reward&#45;&gt;Verify</title>
544
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2130.15,-359.64C2146.27,-381.95 2171.14,-410.04 2201.16,-422.83 2278.43,-455.78 2500.04,-451.06 2579.16,-422.83 2614.09,-410.37 2646.09,-382.38 2667.59,-360.02"/>
545
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="2669.41,-362.17 2672.85,-354.42 2665.33,-358.33 2669.41,-362.17"/>
546
- <text xml:space="preserve" text-anchor="middle" x="2258.16" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">verify_as_reward</text>
567
+ <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"/>
568
+ <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"/>
569
+ <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>
547
570
  </g>
548
571
  <!-- Reward&#45;&gt;Fprf -->
549
- <g id="edge64" class="edge">
572
+ <g id="edge69" class="edge">
550
573
  <title>Reward&#45;&gt;Fprf</title>
551
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2041.25,-296.06C2033.88,-293.4 2026.43,-290.98 2019.16,-289 1881.42,-251.47 1782.59,-326.57 1709.41,-204 1701.09,-190.07 1700.21,-180.86 1709.41,-167.5 1735.51,-129.58 1762.36,-144.67 1806.16,-130.5 1819.29,-126.25 1824.6,-130.04 1836.16,-122.5 1859.89,-107.01 1879.28,-80.81 1891.59,-61.11"/>
552
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1893.98,-62.56 1895.72,-54.26 1889.19,-59.67 1893.98,-62.56"/>
553
- <text xml:space="preserve" text-anchor="middle" x="1747.28" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record_preference</text>
574
+ <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"/>
575
+ <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"/>
576
+ <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>
554
577
  </g>
555
578
  <!-- Curric&#45;&gt;Fmis -->
556
- <g id="edge67" class="edge">
579
+ <g id="edge72" class="edge">
557
580
  <title>Curric&#45;&gt;Fmis</title>
558
- <path fill="none" stroke="#34d399" stroke-width="1.3" stroke-dasharray="5,2" d="M2242.21,-302.81C2158.86,-269.97 2020.16,-214.19 2013.41,-204 1984.54,-160.44 2007.15,-96.75 2024.04,-61.3"/>
559
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="2026.48,-62.68 2027.52,-54.27 2021.46,-60.2 2026.48,-62.68"/>
560
- <text xml:space="preserve" text-anchor="middle" x="2051.28" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">practice → resolve</text>
581
+ <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"/>
582
+ <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"/>
583
+ <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>
561
584
  </g>
562
585
  <!-- Curric&#45;&gt;Fftn -->
563
- <g id="edge68" class="edge">
586
+ <g id="edge73" class="edge">
564
587
  <title>Curric&#45;&gt;Fftn</title>
565
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2369.64,-302.82C2464.26,-267.8 2628.2,-206.83 2630.16,-204 2639.39,-190.66 2639.55,-180.73 2630.16,-167.5 2601.27,-126.82 2571.48,-146.33 2524.16,-130.5 2513.09,-126.8 2508.65,-129.29 2499.16,-122.5 2476.73,-106.46 2458.78,-80.34 2447.47,-60.81"/>
566
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2450.06,-59.69 2443.71,-54.07 2445.17,-62.42 2450.06,-59.69"/>
567
- <text xml:space="preserve" text-anchor="middle" x="2668.27" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">train_and_gate</text>
588
+ <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"/>
589
+ <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"/>
590
+ <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>
568
591
  </g>
569
592
  <!-- Curric&#45;&gt;Fprf -->
570
- <g id="edge66" class="edge">
593
+ <g id="edge71" class="edge">
571
594
  <title>Curric&#45;&gt;Fprf</title>
572
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2242.5,-302.8C2228.99,-297.9 2214.68,-293.03 2201.16,-289 2081.71,-253.42 2012.26,-300.93 1933.91,-204 1901.08,-163.38 1900.24,-98.93 1902.94,-62.48"/>
573
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1905.73,-62.73 1903.65,-54.52 1900.15,-62.24 1905.73,-62.73"/>
574
- <text xml:space="preserve" text-anchor="middle" x="1962.03" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(loser,winner)</text>
595
+ <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"/>
596
+ <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"/>
597
+ <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>
598
+ </g>
599
+ <!-- Fpol -->
600
+ <g id="node32" class="node">
601
+ <title>Fpol</title>
602
+ <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"/>
603
+ <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"/>
604
+ <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>
605
+ <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>
606
+ </g>
607
+ <!-- Policy&#45;&gt;Fpol -->
608
+ <g id="edge33" class="edge">
609
+ <title>Policy&#45;&gt;Fpol</title>
610
+ <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"/>
611
+ <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"/>
575
612
  </g>
576
613
  <!-- Snapshot&#45;&gt;Correlate -->
577
- <g id="edge25" class="edge">
614
+ <g id="edge27" class="edge">
578
615
  <title>Snapshot&#45;&gt;Correlate</title>
579
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M2919.76,-296.62C2929.41,-285.48 2940.35,-272.73 2950.16,-261 2963.52,-245.01 2978.23,-226.82 2989.74,-212.44"/>
580
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="2991.74,-214.42 2994.54,-206.43 2987.36,-210.93 2991.74,-214.42"/>
616
+ <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"/>
617
+ <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"/>
581
618
  </g>
582
619
  <!-- Observe&#45;&gt;Correlate -->
583
- <g id="edge26" class="edge">
620
+ <g id="edge28" class="edge">
584
621
  <title>Observe&#45;&gt;Correlate</title>
585
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M3226.38,-309.52C3181.97,-284.31 3099.87,-237.69 3050.62,-209.72"/>
586
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="3052.16,-207.38 3043.82,-205.87 3049.4,-212.25 3052.16,-207.38"/>
622
+ <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"/>
623
+ <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"/>
587
624
  </g>
588
625
  <!-- Fext -->
589
- <g id="node28" class="node">
626
+ <g id="node29" class="node">
590
627
  <title>Fext</title>
591
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2739.28,-48.73C2739.28,-50.53 2716.37,-52 2688.16,-52 2659.95,-52 2637.03,-50.53 2637.03,-48.73 2637.03,-48.73 2637.03,-19.27 2637.03,-19.27 2637.03,-17.47 2659.95,-16 2688.16,-16 2716.37,-16 2739.28,-17.47 2739.28,-19.27 2739.28,-19.27 2739.28,-48.73 2739.28,-48.73"/>
592
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2739.28,-48.73C2739.28,-46.92 2716.37,-45.45 2688.16,-45.45 2659.95,-45.45 2637.03,-46.92 2637.03,-48.73"/>
593
- <text xml:space="preserve" text-anchor="middle" x="2688.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
628
+ <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"/>
629
+ <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"/>
630
+ <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>
594
631
  </g>
595
632
  <!-- Observe&#45;&gt;Fext -->
596
- <g id="edge36" class="edge">
633
+ <g id="edge39" class="edge">
597
634
  <title>Observe&#45;&gt;Fext</title>
598
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M3263.49,-309.3C3273.42,-278.28 3289.02,-213.04 3263.16,-167.5 3247.32,-139.59 3231.18,-141.84 3201.16,-130.5 3044.86,-71.48 2847.53,-47.94 2749.4,-39.38"/>
599
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2749.81,-36.61 2741.6,-38.72 2749.34,-42.19 2749.81,-36.61"/>
635
+ <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"/>
636
+ <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"/>
600
637
  </g>
601
638
  <!-- Verify&#45;&gt;Mistakes -->
602
- <g id="edge39" class="edge">
639
+ <g id="edge42" class="edge">
603
640
  <title>Verify&#45;&gt;Mistakes</title>
604
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M2674.19,-352.98C2652.98,-376.14 2617.87,-409.02 2579.16,-422.83 2498.05,-451.77 1888.7,-439.18 1804.16,-422.83 1745.84,-411.55 1683.64,-385.94 1637.74,-364.17"/>
605
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1638.98,-361.66 1630.56,-360.73 1636.56,-366.71 1638.98,-361.66"/>
606
- <text xml:space="preserve" text-anchor="middle" x="2111.16" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
641
+ <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"/>
642
+ <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"/>
643
+ <text xml:space="preserve" text-anchor="middle" x="2044" y="-456.82" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
607
644
  </g>
608
645
  <!-- Verify&#45;&gt;Correlate -->
609
- <g id="edge27" class="edge">
646
+ <g id="edge29" class="edge">
610
647
  <title>Verify&#45;&gt;Correlate</title>
611
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M2746.7,-302.92C2756.78,-298.26 2767.29,-293.45 2777.16,-289 2839.45,-260.9 2911.53,-229.43 2958.83,-208.92"/>
612
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="2959.92,-211.5 2966.15,-205.75 2957.69,-206.36 2959.92,-211.5"/>
648
+ <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"/>
649
+ <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"/>
613
650
  </g>
614
651
  <!-- Verify&#45;&gt;Fmis -->
615
- <g id="edge38" class="edge">
652
+ <g id="edge41" class="edge">
616
653
  <title>Verify&#45;&gt;Fmis</title>
617
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M2672.42,-302.85C2654.37,-284.42 2627.96,-259.03 2602.16,-240 2576.21,-220.85 2566.97,-220.32 2539.16,-204 2484.56,-171.96 2477.93,-148.22 2417.16,-130.5 2383.33,-120.64 2131.25,-139.08 2100.16,-122.5 2076.13,-109.69 2059.31,-82.95 2049.32,-62.38"/>
618
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="2051.97,-61.44 2046.09,-55.33 2046.88,-63.77 2051.97,-61.44"/>
619
- <text xml:space="preserve" text-anchor="middle" x="2579.66" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted →</text>
620
- <text xml:space="preserve" text-anchor="middle" x="2579.66" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">assumption mistake</text>
654
+ <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"/>
655
+ <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"/>
656
+ <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>
657
+ <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>
621
658
  </g>
622
659
  <!-- Verify&#45;&gt;Fmem -->
623
- <g id="edge40" class="edge">
660
+ <g id="edge43" class="edge">
624
661
  <title>Verify&#45;&gt;Fmem</title>
625
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M2638.42,-302.76C2582.3,-278.54 2494.14,-239.86 2418.91,-204 2386.61,-188.61 2381.63,-177.07 2347.16,-167.5 2211.28,-129.78 1836.52,-192.61 1714.16,-122.5 1690.46,-108.92 1674.08,-81.71 1664.5,-61.22"/>
626
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="1667.17,-60.33 1661.37,-54.15 1662.05,-62.6 1667.17,-60.33"/>
627
- <text xml:space="preserve" text-anchor="middle" x="2448.53" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale</text>
628
- <text xml:space="preserve" text-anchor="middle" x="2448.53" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED]</text>
662
+ <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"/>
663
+ <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"/>
664
+ <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>
665
+ <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>
629
666
  </g>
630
667
  <!-- Verify&#45;&gt;Fext -->
631
- <g id="edge41" class="edge">
668
+ <g id="edge44" class="edge">
632
669
  <title>Verify&#45;&gt;Fext</title>
633
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M2743.04,-302.81C2754.07,-297.8 2765.88,-292.88 2777.16,-289 2939.25,-233.29 3246.02,-304.59 3143.16,-167.5 3095.6,-104.11 2861.98,-61.1 2749.24,-43.68"/>
634
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2749.98,-40.96 2741.65,-42.52 2749.13,-46.5 2749.98,-40.96"/>
635
- <text xml:space="preserve" text-anchor="middle" x="3183.66" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
636
- <text xml:space="preserve" text-anchor="middle" x="3183.66" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs</text>
670
+ <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"/>
671
+ <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"/>
672
+ <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>
673
+ <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>
637
674
  </g>
638
675
  <!-- RFTune&#45;&gt;Correlate -->
639
- <g id="edge28" class="edge">
676
+ <g id="edge30" class="edge">
640
677
  <title>RFTune&#45;&gt;Correlate</title>
641
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M3075.58,-302.89C3061.53,-277.95 3039.65,-239.1 3025.11,-213.3"/>
642
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="3027.63,-212.07 3021.27,-206.47 3022.76,-214.82 3027.63,-212.07"/>
678
+ <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"/>
679
+ <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"/>
643
680
  </g>
644
681
  <!-- RFTune&#45;&gt;Fext -->
645
- <g id="edge37" class="edge">
682
+ <g id="edge40" class="edge">
646
683
  <title>RFTune&#45;&gt;Fext</title>
647
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M3132.32,-302.75C3180.92,-272.23 3248.95,-217.71 3215.16,-167.5 3163.06,-90.07 2876.72,-53.18 2749.32,-40.42"/>
648
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="2749.89,-37.66 2741.65,-39.66 2749.34,-43.23 2749.89,-37.66"/>
649
- <text xml:space="preserve" text-anchor="middle" x="3238.85" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:rf obs</text>
650
- <text xml:space="preserve" text-anchor="middle" x="3238.85" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ttl 300s</text>
684
+ <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"/>
685
+ <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"/>
686
+ <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>
687
+ <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>
651
688
  </g>
652
689
  <!-- Correlate&#45;&gt;Prompt -->
653
- <g id="edge52" class="edge">
690
+ <g id="edge55" class="edge">
654
691
  <title>Correlate&#45;&gt;Prompt</title>
655
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M3114.41,-204.98C3201.15,-222.51 3314.71,-251.82 3342.16,-289 3379.25,-339.23 3384.94,-384.01 3342.16,-429.5 3270.01,-506.21 2974.4,-454.69 2869.16,-458.5 2590.1,-468.6 633.14,-451.1 356.16,-486.5 338.76,-488.72 320.29,-492.49 303.01,-496.64"/>
656
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="302.45,-493.9 295.36,-498.54 303.8,-499.33 302.45,-493.9"/>
657
- <text xml:space="preserve" text-anchor="middle" x="3411.52" y="-324.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
692
+ <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"/>
693
+ <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"/>
694
+ <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>
658
695
  </g>
659
696
  <!-- Correlate&#45;&gt;Fmet -->
660
697
  <!-- Fmet&#45;&gt;Router -->
661
- <g id="edge55" class="edge">
698
+ <g id="edge58" class="edge">
662
699
  <title>Fmet&#45;&gt;Router</title>
663
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2563.08,-52.53C2571.19,-73.41 2587.91,-107.37 2615.16,-122.5 2628.96,-130.16 2883.41,-129.48 2899.16,-130.5 3061.43,-141.02 3109.1,-115.45 3263.16,-167.5 3401.44,-214.22 3559.73,-321.86 3461.16,-429.5 3362.02,-537.76 3278.77,-451.26 3132.16,-458.5 2843.27,-472.76 815.31,-444.36 529.16,-486.5 511.07,-489.16 491.77,-494.06 474.55,-499.2"/>
664
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="473.93,-496.46 467.1,-501.49 475.57,-501.82 473.93,-496.46"/>
665
- <text xml:space="preserve" text-anchor="middle" x="3460.25" y="-252.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success_rate</text>
666
- <text xml:space="preserve" text-anchor="middle" x="3460.25" y="-241.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">→ tie&#45;break</text>
700
+ <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"/>
701
+ <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"/>
702
+ <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>
703
+ <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>
667
704
  </g>
668
705
  <!-- Flrn&#45;&gt;Plan -->
669
- <g id="edge54" class="edge">
706
+ <g id="edge57" class="edge">
670
707
  <title>Flrn&#45;&gt;Plan</title>
671
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1781.66,-52.54C1790.45,-73.44 1808.32,-107.41 1836.16,-122.5 1975.62,-198.1 3105.67,-148.48 3263.16,-167.5 3417.42,-186.13 3459.93,-184.77 3605.16,-240 3615.44,-243.91 3685.63,-279.49 3691.16,-289 3722.53,-342.99 3728.16,-379.2 3691.16,-429.5 3665.5,-464.38 3640.93,-451.77 3598.16,-458.5 3280.82,-508.4 1025.11,-440.64 707.16,-486.5 689.5,-489.05 670.69,-493.66 653.7,-498.57"/>
672
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="653.23,-495.79 646.36,-500.75 654.83,-501.15 653.23,-495.79"/>
673
- <text xml:space="preserve" text-anchor="middle" x="3679.49" y="-252.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">exemplars_for</text>
674
- <text xml:space="preserve" text-anchor="middle" x="3679.49" y="-241.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(few&#45;shot, local)</text>
708
+ <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"/>
709
+ <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"/>
710
+ <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>
711
+ <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>
675
712
  </g>
676
713
  <!-- Fmis&#45;&gt;Prompt -->
677
- <g id="edge49" class="edge">
714
+ <g id="edge52" class="edge">
678
715
  <title>Fmis&#45;&gt;Prompt</title>
679
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2044.86,-52.54C2053.88,-73.43 2072.13,-107.4 2100.16,-122.5 2228.56,-191.7 3267.59,-148.09 3412.16,-167.5 4238.7,-278.47 3801.21,-107.24 3718.16,-261 3587.55,-502.82 3406.67,-445.04 3132.16,-458.5 2824.07,-473.61 662.15,-447.55 356.16,-486.5 338.75,-488.72 320.28,-492.47 303.01,-496.63"/>
680
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="302.45,-493.88 295.36,-498.53 303.8,-499.32 302.45,-493.88"/>
681
- <text xml:space="preserve" text-anchor="middle" x="3772.64" y="-252.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">KNOWN MISTAKES</text>
682
- <text xml:space="preserve" text-anchor="middle" x="3772.64" y="-241.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">+ KNOWN FIXES</text>
716
+ <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"/>
717
+ <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"/>
718
+ <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>
719
+ <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>
683
720
  </g>
684
721
  <!-- Fmem&#45;&gt;Prompt -->
685
- <g id="edge47" class="edge">
722
+ <g id="edge50" class="edge">
686
723
  <title>Fmem&#45;&gt;Prompt</title>
687
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1660.47,-52.54C1669.03,-73.44 1686.51,-107.42 1714.16,-122.5 1751.95,-143.11 3220.24,-164.22 3263.16,-167.5 3524.39,-187.44 3616.62,-117.42 3848.16,-240 3924.48,-280.41 3935.19,-355.21 3891.16,-429.5 3877.47,-452.6 3864.15,-451.74 3838.16,-458.5 3650.93,-507.18 548.09,-462.27 356.16,-486.5 338.42,-488.74 319.58,-492.59 302.03,-496.84"/>
688
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="301.41,-494.11 294.33,-498.76 302.77,-499.54 301.41,-494.11"/>
689
- <text xml:space="preserve" text-anchor="middle" x="3911.02" y="-247.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
724
+ <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"/>
725
+ <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"/>
726
+ <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>
690
727
  </g>
691
728
  <!-- Fidx -->
692
- <g id="node26" class="node">
729
+ <g id="node27" class="node">
693
730
  <title>Fidx</title>
694
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M2192.91,-48.73C2192.91,-50.53 2176.88,-52 2157.16,-52 2137.43,-52 2121.41,-50.53 2121.41,-48.73 2121.41,-48.73 2121.41,-19.27 2121.41,-19.27 2121.41,-17.47 2137.43,-16 2157.16,-16 2176.88,-16 2192.91,-17.47 2192.91,-19.27 2192.91,-19.27 2192.91,-48.73 2192.91,-48.73"/>
695
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M2192.91,-48.73C2192.91,-46.92 2176.88,-45.45 2157.16,-45.45 2137.43,-45.45 2121.41,-46.92 2121.41,-48.73"/>
696
- <text xml:space="preserve" text-anchor="middle" x="2157.16" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.idx</text>
731
+ <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"/>
732
+ <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"/>
733
+ <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>
697
734
  </g>
698
735
  <!-- Fidx&#45;&gt;Prompt -->
699
- <g id="edge53" class="edge">
736
+ <g id="edge56" class="edge">
700
737
  <title>Fidx&#45;&gt;Prompt</title>
701
- <path fill="none" stroke="#fbbf24" stroke-width="2" stroke-dasharray="5,2" d="M2163.1,-52.51C2171.21,-73.36 2187.95,-107.3 2215.16,-122.5 2344.52,-194.79 3400.79,-151.9 3548.16,-167.5 3730,-186.75 3835.8,-99.77 3953.16,-240 4007.43,-304.85 3979.16,-356.69 3936.16,-429.5 3924.62,-449.03 3915.79,-451.66 3894.16,-458.5 3800.45,-488.12 453.67,-474.2 356.16,-486.5 338.75,-488.7 320.28,-492.45 303,-496.6"/>
702
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="2" points="302.45,-493.86 295.36,-498.5 303.8,-499.29 302.45,-493.86"/>
703
- <text xml:space="preserve" text-anchor="middle" x="3995.66" y="-252.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MemoryIndex</text>
704
- <text xml:space="preserve" text-anchor="middle" x="3995.66" y="-241.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cosine top&#45;K</text>
738
+ <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"/>
739
+ <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"/>
740
+ <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>
741
+ <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>
705
742
  </g>
706
743
  <!-- Fskl&#45;&gt;Prompt -->
707
- <g id="edge48" class="edge">
744
+ <g id="edge51" class="edge">
708
745
  <title>Fskl&#45;&gt;Prompt</title>
709
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2301.64,-52.65C2314.02,-73.66 2337.86,-107.74 2369.16,-122.5 2509.42,-188.65 3610.77,-144.67 3764.16,-167.5 3886.63,-185.73 3957.85,-141.71 4033.16,-240 4085.62,-308.48 4042.06,-359.85 3991.16,-429.5 3976.68,-449.32 3967.75,-451.71 3944.16,-458.5 3752.6,-513.65 553.93,-461.56 356.16,-486.5 338.42,-488.74 319.58,-492.59 302.03,-496.84"/>
710
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="301.41,-494.1 294.33,-498.75 302.77,-499.54 301.41,-494.1"/>
711
- <text xml:space="preserve" text-anchor="middle" x="4073.48" y="-247.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
746
+ <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"/>
747
+ <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"/>
748
+ <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>
712
749
  </g>
713
750
  <!-- Fext&#45;&gt;Prompt -->
714
- <g id="edge50" class="edge">
751
+ <g id="edge53" class="edge">
715
752
  <title>Fext&#45;&gt;Prompt</title>
716
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M2739.69,-38.07C2985.52,-53.3 4030.47,-124.53 4111.16,-240 4161.39,-311.89 4113.86,-363.45 4056.16,-429.5 4036.67,-451.81 4025,-451.78 3996.16,-458.5 3799.21,-504.4 556.8,-461.21 356.16,-486.5 338.42,-488.74 319.58,-492.59 302.03,-496.83"/>
717
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="301.41,-494.1 294.33,-498.75 302.77,-499.54 301.41,-494.1"/>
718
- <text xml:space="preserve" text-anchor="middle" x="4150.76" y="-247.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
753
+ <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"/>
754
+ <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"/>
755
+ <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>
719
756
  </g>
720
757
  <!-- Fftn&#45;&gt;LLM -->
721
- <g id="edge58" class="edge">
758
+ <g id="edge63" class="edge">
722
759
  <title>Fftn&#45;&gt;LLM</title>
723
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M2441.41,-52.57C2451.11,-73.5 2470.48,-107.5 2499.16,-122.5 2638.45,-195.34 3757.61,-144.82 3913.16,-167.5 4038.23,-185.74 4111.01,-139.88 4188.16,-240 4242.25,-310.19 4187.86,-365.9 4126.16,-429.5 4102.14,-454.26 4087.81,-450.9 4054.16,-458.5 3856.97,-503.06 3801.66,-470.15 3600.16,-486.5 3038.28,-532.08 2900.07,-568.38 2338.16,-613.5 2207.18,-624.02 1282.48,-677.59 1033.68,-691.95"/>
724
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1033.54,-689.16 1025.71,-692.41 1033.86,-694.75 1033.54,-689.16"/>
725
- <text xml:space="preserve" text-anchor="middle" x="4241.82" y="-329.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">LoRA (weights)</text>
726
- <text xml:space="preserve" text-anchor="middle" x="4241.82" y="-319.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cron weekly</text>
760
+ <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"/>
761
+ <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"/>
762
+ <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>
763
+ <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>
727
764
  </g>
728
765
  <!-- Fprf&#45;&gt;LLM -->
729
- <g id="edge70" class="edge">
766
+ <g id="edge75" class="edge">
730
767
  <title>Fprf&#45;&gt;LLM</title>
731
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1914.34,-52.63C1925.15,-73.61 1946.38,-107.66 1976.16,-122.5 2054.36,-161.47 3460.95,-162.28 3548.16,-167.5 3901.88,-188.69 4017.73,-97.46 4342.16,-240 4422.34,-275.23 4447.83,-358.8 4396.16,-429.5 4190.82,-710.45 1621.81,-663.13 1274.16,-678.5 1190.82,-682.19 1094.61,-687.84 1033.61,-691.61"/>
732
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1033.47,-688.81 1025.66,-692.1 1033.81,-694.4 1033.47,-688.81"/>
733
- <text xml:space="preserve" text-anchor="middle" x="4452.65" y="-329.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">DPO (weights)</text>
734
- <text xml:space="preserve" text-anchor="middle" x="4452.65" y="-319.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">cron weekly</text>
768
+ <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"/>
769
+ <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"/>
770
+ <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>
771
+ <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>
772
+ </g>
773
+ <!-- Fpol&#45;&gt;Prompt -->
774
+ <g id="edge59" class="edge">
775
+ <title>Fpol&#45;&gt;Prompt</title>
776
+ <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"/>
777
+ <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"/>
778
+ <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>
779
+ </g>
780
+ <!-- Fpol&#45;&gt;Router -->
781
+ <g id="edge60" class="edge">
782
+ <title>Fpol&#45;&gt;Router</title>
783
+ <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"/>
784
+ <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"/>
785
+ <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>
786
+ <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>
735
787
  </g>
736
788
  </g>
737
789
  </svg>