pwn 0.5.621 → 0.5.626

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 (124) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -2
  3. data/Gemfile +1 -1
  4. data/README.md +7 -1
  5. data/bin/pwn_gqrx_scanner +78 -9
  6. data/documentation/Agent-Tool-Registry.md +3 -3
  7. data/documentation/Configuration.md +301 -47
  8. data/documentation/Cron.md +5 -3
  9. data/documentation/Diagrams.md +1 -1
  10. data/documentation/Extrospection.md +472 -26
  11. data/documentation/FFI.md +72 -8
  12. data/documentation/Home.md +4 -4
  13. data/documentation/How-PWN-Works.md +7 -3
  14. data/documentation/Mistakes.md +9 -0
  15. data/documentation/SDR.md +83 -10
  16. data/documentation/Skills-Memory-Learning.md +101 -11
  17. data/documentation/diagrams/agent-tool-registry.svg +56 -55
  18. data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
  19. data/documentation/diagrams/aws-cloud-security.svg +25 -25
  20. data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
  21. data/documentation/diagrams/code-scanning-sast.svg +25 -25
  22. data/documentation/diagrams/cron-scheduling.svg +23 -23
  23. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  24. data/documentation/diagrams/dot/extrospection-world-awareness.dot +33 -6
  25. data/documentation/diagrams/dot/hardware-hacking.dot +3 -1
  26. data/documentation/diagrams/dot/memory-skills-detailed.dot +4 -2
  27. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +4 -2
  28. data/documentation/diagrams/dot/overall-pwn-architecture.dot +3 -3
  29. data/documentation/diagrams/dot/persistence-filesystem.dot +3 -3
  30. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +10 -4
  31. data/documentation/diagrams/dot/sdr-radio-flow.dot +39 -16
  32. data/documentation/diagrams/driver-framework.svg +13 -13
  33. data/documentation/diagrams/extrospection-world-awareness.svg +383 -177
  34. data/documentation/diagrams/fuzzing-workflow.svg +24 -24
  35. data/documentation/diagrams/hardware-hacking.svg +84 -69
  36. data/documentation/diagrams/history-to-drivers.svg +18 -18
  37. data/documentation/diagrams/memory-skills-detailed.svg +137 -120
  38. data/documentation/diagrams/mistakes-negative-feedback.svg +152 -137
  39. data/documentation/diagrams/network-infra-testing.svg +27 -27
  40. data/documentation/diagrams/overall-pwn-architecture.svg +97 -97
  41. data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
  42. data/documentation/diagrams/persistence-filesystem.svg +100 -94
  43. data/documentation/diagrams/plugin-ecosystem.svg +35 -35
  44. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +254 -207
  45. data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
  46. data/documentation/diagrams/reporting-pipeline.svg +18 -18
  47. data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
  48. data/documentation/diagrams/sdr-radio-flow.svg +223 -91
  49. data/documentation/diagrams/sessions-cron-automation.svg +18 -18
  50. data/documentation/diagrams/swarm-multi-agent.svg +39 -39
  51. data/documentation/diagrams/web-application-testing.svg +26 -26
  52. data/documentation/diagrams/zero-day-research-flow.svg +25 -25
  53. data/documentation/pwn-ai-Agent.md +16 -10
  54. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  55. data/lib/pwn/ai/agent/assembly.rb +1 -1
  56. data/lib/pwn/ai/agent/btc.rb +1 -1
  57. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  58. data/lib/pwn/ai/agent/extrospection.rb +2562 -57
  59. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  60. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  61. data/lib/pwn/ai/agent/learning.rb +16 -16
  62. data/lib/pwn/ai/agent/loop.rb +1 -1
  63. data/lib/pwn/ai/agent/{introspection.rb → reflect.rb} +12 -12
  64. data/lib/pwn/ai/agent/sast.rb +1 -1
  65. data/lib/pwn/ai/agent/tools/extrospection.rb +311 -8
  66. data/lib/pwn/ai/agent/tools/learning.rb +7 -7
  67. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  68. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  69. data/lib/pwn/ai/agent.rb +1 -1
  70. data/lib/pwn/ai/open_ai.rb +10 -6
  71. data/lib/pwn/config.rb +5 -4
  72. data/lib/pwn/ffi/adalm_pluto.rb +498 -0
  73. data/lib/pwn/ffi/fftw.rb +192 -0
  74. data/lib/pwn/ffi/hack_rf.rb +193 -0
  75. data/lib/pwn/ffi/liquid.rb +244 -0
  76. data/lib/pwn/ffi/rtl_sdr.rb +210 -0
  77. data/lib/pwn/ffi/soapy_sdr.rb +177 -0
  78. data/lib/pwn/ffi/stdio.rb +9 -1
  79. data/lib/pwn/ffi/volk.rb +241 -0
  80. data/lib/pwn/ffi.rb +45 -2
  81. data/lib/pwn/plugins/burp_suite.rb +2 -2
  82. data/lib/pwn/sast/pom_version.rb +2 -2
  83. data/lib/pwn/sast/test_case_engine.rb +1 -1
  84. data/lib/pwn/sdr/decoder/adsb.rb +201 -12
  85. data/lib/pwn/sdr/decoder/apt.rb +19 -5
  86. data/lib/pwn/sdr/decoder/base.rb +314 -1
  87. data/lib/pwn/sdr/decoder/bluetooth.rb +91 -18
  88. data/lib/pwn/sdr/decoder/dect.rb +81 -23
  89. data/lib/pwn/sdr/decoder/dsp.rb +229 -15
  90. data/lib/pwn/sdr/decoder/flex.rb +23 -6
  91. data/lib/pwn/sdr/decoder/gps.rb +80 -18
  92. data/lib/pwn/sdr/decoder/gsm.rb +83 -28
  93. data/lib/pwn/sdr/decoder/iridium.rb +80 -18
  94. data/lib/pwn/sdr/decoder/lora.rb +84 -28
  95. data/lib/pwn/sdr/decoder/lte.rb +80 -18
  96. data/lib/pwn/sdr/decoder/morse.rb +23 -6
  97. data/lib/pwn/sdr/decoder/p25.rb +90 -31
  98. data/lib/pwn/sdr/decoder/pager.rb +23 -6
  99. data/lib/pwn/sdr/decoder/pocsag.rb +23 -6
  100. data/lib/pwn/sdr/decoder/rds.rb +219 -52
  101. data/lib/pwn/sdr/decoder/rfid.rb +81 -27
  102. data/lib/pwn/sdr/decoder/rtl433.rb +85 -27
  103. data/lib/pwn/sdr/decoder/rtty.rb +23 -6
  104. data/lib/pwn/sdr/decoder/wifi.rb +86 -32
  105. data/lib/pwn/sdr/decoder/zigbee.rb +88 -35
  106. data/lib/pwn/sdr/decoder.rb +6 -5
  107. data/lib/pwn/sdr/frequency_allocation.rb +124 -81
  108. data/lib/pwn/sdr/gqrx.rb +1513 -165
  109. data/lib/pwn/version.rb +1 -1
  110. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +96 -0
  111. data/spec/lib/pwn/ai/agent/{introspection_spec.rb → reflect_spec.rb} +3 -3
  112. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +8 -24
  113. data/spec/lib/pwn/ffi/adalm_pluto_spec.rb +37 -0
  114. data/spec/lib/pwn/ffi/fftw_spec.rb +26 -0
  115. data/spec/lib/pwn/ffi/hack_rf_spec.rb +25 -0
  116. data/spec/lib/pwn/ffi/liquid_spec.rb +42 -0
  117. data/spec/lib/pwn/ffi/rtl_sdr_spec.rb +24 -0
  118. data/spec/lib/pwn/ffi/soapy_sdr_spec.rb +25 -0
  119. data/spec/lib/pwn/ffi/volk_spec.rb +36 -0
  120. data/spec/lib/pwn/sdr/decoder/base_iq_spec.rb +65 -0
  121. data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +50 -4
  122. data/spec/lib/pwn/sdr/decoder/rds_spec.rb +45 -4
  123. data/third_party/pwn_rdoc.jsonl +279 -30
  124. metadata +21 -5
@@ -4,417 +4,464 @@
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="1891pt" height="723pt"
8
- viewBox="0.00 0.00 1891.00 723.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 679.95)">
7
+ <svg width="1985pt" height="817pt"
8
+ viewBox="0.00 0.00 1985.00 817.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 773.7)">
10
10
  <title>PWN_AI_Feedback_Learning_Loop</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-679.95 1847.84,-679.95 1847.84,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="708.82" y="-614.75" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">pwn&#45;ai — Closed Self&#45;Improvement Loop</text>
13
- <text xml:space="preserve" text-anchor="start" x="715.94" y="-603.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world) &#160;· &#160;Mistakes (negative feedback)</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-773.7 1942.12,-773.7 1942.12,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="755.96" y="-708.5" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">pwn&#45;ai — Closed Self&#45;Improvement Loop</text>
13
+ <text xml:space="preserve" text-anchor="start" x="763.09" y="-697.05" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world) &#160;· &#160;Mistakes (negative feedback)</text>
14
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_core</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M376.77,-424C376.77,-424 713.77,-424 713.77,-424 719.77,-424 725.77,-430 725.77,-436 725.77,-436 725.77,-495.25 725.77,-495.25 725.77,-501.25 719.77,-507.25 713.77,-507.25 713.77,-507.25 376.77,-507.25 376.77,-507.25 370.77,-507.25 364.77,-501.25 364.77,-495.25 364.77,-495.25 364.77,-436 364.77,-436 364.77,-430 370.77,-424 376.77,-424"/>
17
- <text xml:space="preserve" text-anchor="middle" x="545.27" y="-484.25" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop</text>
16
+ <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M55.88,-486.5C55.88,-486.5 392.88,-486.5 392.88,-486.5 398.88,-486.5 404.88,-492.5 404.88,-498.5 404.88,-498.5 404.88,-589 404.88,-589 404.88,-595 398.88,-601 392.88,-601 392.88,-601 55.88,-601 55.88,-601 49.88,-601 43.88,-595 43.88,-589 43.88,-589 43.88,-498.5 43.88,-498.5 43.88,-492.5 49.88,-486.5 55.88,-486.5"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="224.38" y="-578" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop</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="M666.77,-257.75C666.77,-257.75 1178.77,-257.75 1178.77,-257.75 1184.77,-257.75 1190.77,-263.75 1190.77,-269.75 1190.77,-269.75 1190.77,-355 1190.77,-355 1190.77,-361 1184.77,-367 1178.77,-367 1178.77,-367 666.77,-367 666.77,-367 660.77,-367 654.77,-361 654.77,-355 654.77,-355 654.77,-269.75 654.77,-269.75 654.77,-263.75 660.77,-257.75 666.77,-257.75"/>
22
- <text xml:space="preserve" text-anchor="middle" x="922.77" y="-344" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
21
+ <path fill="#022c22" stroke="#047857" stroke-width="2" d="M61.88,-289C61.88,-289 573.88,-289 573.88,-289 579.88,-289 585.88,-295 585.88,-301 585.88,-301 585.88,-417.5 585.88,-417.5 585.88,-423.5 579.88,-429.5 573.88,-429.5 573.88,-429.5 61.88,-429.5 61.88,-429.5 55.88,-429.5 49.88,-423.5 49.88,-417.5 49.88,-417.5 49.88,-301 49.88,-301 49.88,-295 55.88,-289 61.88,-289"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="317.88" y="-406.5" 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="M182.77,-264.5C182.77,-264.5 615.77,-264.5 615.77,-264.5 621.77,-264.5 627.77,-270.5 627.77,-276.5 627.77,-276.5 627.77,-348.25 627.77,-348.25 627.77,-354.25 621.77,-360.25 615.77,-360.25 615.77,-360.25 182.77,-360.25 182.77,-360.25 176.77,-360.25 170.77,-354.25 170.77,-348.25 170.77,-348.25 170.77,-276.5 170.77,-276.5 170.77,-270.5 176.77,-264.5 182.77,-264.5"/>
27
- <text xml:space="preserve" text-anchor="middle" x="399.27" y="-337.25" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
26
+ <path fill="#422006" stroke="#a16207" stroke-width="2" d="M624.88,-289C624.88,-289 1306.88,-289 1306.88,-289 1312.88,-289 1318.88,-295 1318.88,-301 1318.88,-301 1318.88,-417.5 1318.88,-417.5 1318.88,-423.5 1312.88,-429.5 1306.88,-429.5 1306.88,-429.5 624.88,-429.5 624.88,-429.5 618.88,-429.5 612.88,-423.5 612.88,-417.5 612.88,-417.5 612.88,-301 612.88,-301 612.88,-295 618.88,-289 624.88,-289"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="965.88" y="-406.5" 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="M326.77,-8C326.77,-8 1011.77,-8 1011.77,-8 1017.77,-8 1023.77,-14 1023.77,-20 1023.77,-20 1023.77,-79.25 1023.77,-79.25 1023.77,-85.25 1017.77,-91.25 1011.77,-91.25 1011.77,-91.25 326.77,-91.25 326.77,-91.25 320.77,-91.25 314.77,-85.25 314.77,-79.25 314.77,-79.25 314.77,-20 314.77,-20 314.77,-14 320.77,-8 326.77,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="669.27" y="-68.25" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
31
+ <path fill="#1e293b" stroke="#334155" stroke-dasharray="5,2" d="M312.88,-8C312.88,-8 995.88,-8 995.88,-8 1001.88,-8 1007.88,-14 1007.88,-20 1007.88,-20 1007.88,-110.5 1007.88,-110.5 1007.88,-116.5 1001.88,-122.5 995.88,-122.5 995.88,-122.5 312.88,-122.5 312.88,-122.5 306.88,-122.5 300.88,-116.5 300.88,-110.5 300.88,-110.5 300.88,-20 300.88,-20 300.88,-14 306.88,-8 312.88,-8"/>
32
+ <text xml:space="preserve" text-anchor="middle" x="654.38" y="-99.5" 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="M574.64,-597.75C574.64,-597.75 506.89,-597.75 506.89,-597.75 500.89,-597.75 494.89,-591.75 494.89,-585.75 494.89,-585.75 494.89,-573.75 494.89,-573.75 494.89,-567.75 500.89,-561.75 506.89,-561.75 506.89,-561.75 574.64,-561.75 574.64,-561.75 580.64,-561.75 586.64,-567.75 586.64,-573.75 586.64,-573.75 586.64,-585.75 586.64,-585.75 586.64,-591.75 580.64,-597.75 574.64,-597.75"/>
38
- <text xml:space="preserve" text-anchor="middle" x="540.77" y="-576.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
37
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.4" d="M79.75,-691.5C79.75,-691.5 12,-691.5 12,-691.5 6,-691.5 0,-685.5 0,-679.5 0,-679.5 0,-667.5 0,-667.5 0,-661.5 6,-655.5 12,-655.5 12,-655.5 79.75,-655.5 79.75,-655.5 85.75,-655.5 91.75,-661.5 91.75,-667.5 91.75,-667.5 91.75,-679.5 91.75,-679.5 91.75,-685.5 85.75,-691.5 79.75,-691.5"/>
38
+ <text xml:space="preserve" text-anchor="middle" x="45.88" y="-669.8" 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="M562.27,-468C562.27,-468 501.27,-468 501.27,-468 495.27,-468 489.27,-462 489.27,-456 489.27,-456 489.27,-444 489.27,-444 489.27,-438 495.27,-432 501.27,-432 501.27,-432 562.27,-432 562.27,-432 568.27,-432 574.27,-438 574.27,-444 574.27,-444 574.27,-456 574.27,-456 574.27,-462 568.27,-468 562.27,-468"/>
44
- <text xml:space="preserve" text-anchor="middle" x="531.77" y="-453.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
- <text xml:space="preserve" text-anchor="middle" x="531.77" y="-439.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">inject context</text>
43
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M125.38,-530.5C125.38,-530.5 64.38,-530.5 64.38,-530.5 58.38,-530.5 52.38,-524.5 52.38,-518.5 52.38,-518.5 52.38,-506.5 52.38,-506.5 52.38,-500.5 58.38,-494.5 64.38,-494.5 64.38,-494.5 125.38,-494.5 125.38,-494.5 131.38,-494.5 137.38,-500.5 137.38,-506.5 137.38,-506.5 137.38,-518.5 137.38,-518.5 137.38,-524.5 131.38,-530.5 125.38,-530.5"/>
44
+ <text xml:space="preserve" text-anchor="middle" x="94.88" y="-515.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
+ <text xml:space="preserve" text-anchor="middle" x="94.88" y="-502.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">inject context</text>
46
46
  </g>
47
47
  <!-- User&#45;&gt;Prompt -->
48
48
  <g id="edge1" class="edge">
49
49
  <title>User&#45;&gt;Prompt</title>
50
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M539.54,-561.25C538.05,-540.16 535.53,-504.42 533.77,-479.36"/>
51
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="536.58,-479.5 533.23,-471.71 531,-479.89 536.58,-479.5"/>
52
- <text xml:space="preserve" text-anchor="middle" x="545.06" y="-517.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
50
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M41.63,-654.97C39.23,-642.06 37.41,-624.19 41.38,-609 47.96,-583.79 62.83,-558.19 75.23,-539.85"/>
51
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="77.42,-541.61 79.7,-533.45 72.83,-538.4 77.42,-541.61"/>
52
+ <text xml:space="preserve" text-anchor="middle" x="49.62" y="-610.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
53
53
  </g>
54
54
  <!-- Mistakes -->
55
55
  <g id="node9" class="node">
56
56
  <title>Mistakes</title>
57
- <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M1002.02,-327.75C1002.02,-327.75 855.52,-327.75 855.52,-327.75 849.52,-327.75 843.52,-321.75 843.52,-315.75 843.52,-315.75 843.52,-277.75 843.52,-277.75 843.52,-271.75 849.52,-265.75 855.52,-265.75 855.52,-265.75 1002.02,-265.75 1002.02,-265.75 1008.02,-265.75 1014.02,-271.75 1014.02,-277.75 1014.02,-277.75 1014.02,-315.75 1014.02,-315.75 1014.02,-321.75 1008.02,-327.75 1002.02,-327.75"/>
58
- <text xml:space="preserve" text-anchor="middle" x="928.77" y="-313.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Mistakes</text>
59
- <text xml:space="preserve" text-anchor="middle" x="928.77" y="-299.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">record · resolve</text>
60
- <text xml:space="preserve" text-anchor="middle" x="928.77" y="-286.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">guard · correction_hint</text>
61
- <text xml:space="preserve" text-anchor="middle" x="928.77" y="-272.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
57
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M566.12,-359C566.12,-359 419.62,-359 419.62,-359 413.62,-359 407.62,-353 407.62,-347 407.62,-347 407.62,-309 407.62,-309 407.62,-303 413.62,-297 419.62,-297 419.62,-297 566.12,-297 566.12,-297 572.12,-297 578.12,-303 578.12,-309 578.12,-309 578.12,-347 578.12,-347 578.12,-353 572.12,-359 566.12,-359"/>
58
+ <text xml:space="preserve" text-anchor="middle" x="492.88" y="-344.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Mistakes</text>
59
+ <text xml:space="preserve" text-anchor="middle" x="492.88" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">record · resolve</text>
60
+ <text xml:space="preserve" text-anchor="middle" x="492.88" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">guard · correction_hint</text>
61
+ <text xml:space="preserve" text-anchor="middle" x="492.88" y="-304.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
62
62
  </g>
63
63
  <!-- User&#45;&gt;Mistakes -->
64
64
  <g id="edge9" class="edge">
65
65
  <title>User&#45;&gt;Mistakes</title>
66
- <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M494.25,-567.02C415.12,-547.04 262.68,-508.42 261.77,-507.25 239.08,-478.02 240.43,-454.22 261.77,-424 299.31,-370.83 335.74,-386.66 399.77,-375 445.91,-366.6 776.92,-380.71 821.77,-367 844.17,-360.15 866.35,-347.12 884.65,-334.2"/>
67
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="885.82,-336.8 890.65,-329.84 882.53,-332.27 885.82,-336.8"/>
68
- <text xml:space="preserve" text-anchor="middle" x="308.27" y="-451.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">&quot;that&#39;s wrong&quot;</text>
69
- <text xml:space="preserve" text-anchor="middle" x="308.27" y="-441.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">check_user_correction</text>
66
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M62.3,-655.03C77.98,-639.69 103.14,-618.39 129.88,-609 159.77,-598.5 383.59,-605.96 414.88,-601 592.88,-572.79 628.08,-526.18 803.88,-486.5 842.51,-477.78 954.17,-488.62 979.88,-458.5 985.93,-451.4 986.4,-444.17 979.88,-437.5 965.22,-422.53 622.32,-437.29 602.88,-429.5 570.94,-416.72 542.51,-390.1 522.55,-367.47"/>
67
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="524.73,-365.71 517.39,-361.46 520.48,-369.36 524.73,-365.71"/>
68
+ <text xml:space="preserve" text-anchor="middle" x="850.38" y="-514.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">&quot;that&#39;s wrong&quot;</text>
69
+ <text xml:space="preserve" text-anchor="middle" x="850.38" y="-503.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">check_user_correction</text>
70
70
  </g>
71
71
  <!-- LLM -->
72
72
  <g id="node2" class="node">
73
73
  <title>LLM</title>
74
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M726.77,-597.75C726.77,-597.75 650.77,-597.75 650.77,-597.75 644.77,-597.75 638.77,-591.75 638.77,-585.75 638.77,-585.75 638.77,-573.75 638.77,-573.75 638.77,-567.75 644.77,-561.75 650.77,-561.75 650.77,-561.75 726.77,-561.75 726.77,-561.75 732.77,-561.75 738.77,-567.75 738.77,-573.75 738.77,-573.75 738.77,-585.75 738.77,-585.75 738.77,-591.75 732.77,-597.75 726.77,-597.75"/>
75
- <text xml:space="preserve" text-anchor="middle" x="688.77" y="-576.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
74
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M520.88,-691.5C520.88,-691.5 444.88,-691.5 444.88,-691.5 438.88,-691.5 432.88,-685.5 432.88,-679.5 432.88,-679.5 432.88,-667.5 432.88,-667.5 432.88,-661.5 438.88,-655.5 444.88,-655.5 444.88,-655.5 520.88,-655.5 520.88,-655.5 526.88,-655.5 532.88,-661.5 532.88,-667.5 532.88,-667.5 532.88,-679.5 532.88,-679.5 532.88,-685.5 526.88,-691.5 520.88,-691.5"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="482.88" y="-669.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
76
76
  </g>
77
77
  <!-- Dispatch -->
78
78
  <g id="node5" class="node">
79
79
  <title>Dispatch</title>
80
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M705.77,-468C705.77,-468 671.77,-468 671.77,-468 665.77,-468 659.77,-462 659.77,-456 659.77,-456 659.77,-444 659.77,-444 659.77,-438 665.77,-432 671.77,-432 671.77,-432 705.77,-432 705.77,-432 711.77,-432 717.77,-438 717.77,-444 717.77,-444 717.77,-456 717.77,-456 717.77,-462 711.77,-468 705.77,-468"/>
81
- <text xml:space="preserve" text-anchor="middle" x="688.77" y="-453.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
82
- <text xml:space="preserve" text-anchor="middle" x="688.77" y="-439.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">tool calls</text>
80
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M384.88,-530.5C384.88,-530.5 350.88,-530.5 350.88,-530.5 344.88,-530.5 338.88,-524.5 338.88,-518.5 338.88,-518.5 338.88,-506.5 338.88,-506.5 338.88,-500.5 344.88,-494.5 350.88,-494.5 350.88,-494.5 384.88,-494.5 384.88,-494.5 390.88,-494.5 396.88,-500.5 396.88,-506.5 396.88,-506.5 396.88,-518.5 396.88,-518.5 396.88,-524.5 390.88,-530.5 384.88,-530.5"/>
81
+ <text xml:space="preserve" text-anchor="middle" x="367.88" y="-515.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
82
+ <text xml:space="preserve" text-anchor="middle" x="367.88" y="-502.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool calls</text>
83
83
  </g>
84
84
  <!-- LLM&#45;&gt;Dispatch -->
85
85
  <g id="edge2" class="edge">
86
86
  <title>LLM&#45;&gt;Dispatch</title>
87
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M688.77,-550.28C688.77,-529.21 688.77,-500.63 688.77,-479.54"/>
88
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="685.97,-550.23 688.77,-558.23 691.57,-550.23 685.97,-550.23"/>
89
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="691.57,-479.72 688.77,-471.72 685.97,-479.72 691.57,-479.72"/>
90
- <text xml:space="preserve" text-anchor="middle" x="708.27" y="-517.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
87
+ <path fill="none" stroke="#a78bfa" stroke-width="2" d="M463.91,-646.28C442.56,-616.76 408.07,-569.08 386.75,-539.6"/>
88
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="461.4,-647.58 468.35,-652.42 465.93,-644.3 461.4,-647.58"/>
89
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="389.06,-538.01 382.1,-533.17 384.52,-541.29 389.06,-538.01"/>
90
+ <text xml:space="preserve" text-anchor="middle" x="461.89" y="-610.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
91
91
  </g>
92
92
  <!-- World -->
93
93
  <g id="node3" class="node">
94
94
  <title>World</title>
95
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M439.64,-597.75C439.64,-597.75 317.89,-597.75 317.89,-597.75 311.89,-597.75 305.89,-591.75 305.89,-585.75 305.89,-585.75 305.89,-573.75 305.89,-573.75 305.89,-567.75 311.89,-561.75 317.89,-561.75 317.89,-561.75 439.64,-561.75 439.64,-561.75 445.64,-561.75 451.64,-567.75 451.64,-573.75 451.64,-573.75 451.64,-585.75 451.64,-585.75 451.64,-591.75 445.64,-597.75 439.64,-597.75"/>
96
- <text xml:space="preserve" text-anchor="middle" x="378.77" y="-582.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
97
- <text xml:space="preserve" text-anchor="middle" x="378.77" y="-569.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · RF · Web · Intel</text>
95
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M277.75,-691.5C277.75,-691.5 156,-691.5 156,-691.5 150,-691.5 144,-685.5 144,-679.5 144,-679.5 144,-667.5 144,-667.5 144,-661.5 150,-655.5 156,-655.5 156,-655.5 277.75,-655.5 277.75,-655.5 283.75,-655.5 289.75,-661.5 289.75,-667.5 289.75,-667.5 289.75,-679.5 289.75,-679.5 289.75,-685.5 283.75,-691.5 277.75,-691.5"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="216.88" y="-676.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="216.88" y="-663.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · RF · Web · Intel</text>
98
98
  </g>
99
99
  <!-- Result -->
100
100
  <g id="node6" class="node">
101
101
  <title>Result</title>
102
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M434.64,-468C434.64,-468 384.89,-468 384.89,-468 378.89,-468 372.89,-462 372.89,-456 372.89,-456 372.89,-444 372.89,-444 372.89,-438 378.89,-432 384.89,-432 384.89,-432 434.64,-432 434.64,-432 440.64,-432 446.64,-438 446.64,-444 446.64,-444 446.64,-456 446.64,-456 446.64,-462 440.64,-468 434.64,-468"/>
103
- <text xml:space="preserve" text-anchor="middle" x="409.77" y="-453.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
104
- <text xml:space="preserve" text-anchor="middle" x="409.77" y="-439.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
102
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M241.75,-530.5C241.75,-530.5 192,-530.5 192,-530.5 186,-530.5 180,-524.5 180,-518.5 180,-518.5 180,-506.5 180,-506.5 180,-500.5 186,-494.5 192,-494.5 192,-494.5 241.75,-494.5 241.75,-494.5 247.75,-494.5 253.75,-500.5 253.75,-506.5 253.75,-506.5 253.75,-518.5 253.75,-518.5 253.75,-524.5 247.75,-530.5 241.75,-530.5"/>
103
+ <text xml:space="preserve" text-anchor="middle" x="216.88" y="-515.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
104
+ <text xml:space="preserve" text-anchor="middle" x="216.88" y="-502.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
105
105
  </g>
106
106
  <!-- World&#45;&gt;Result -->
107
107
  <!-- Snapshot -->
108
108
  <g id="node10" class="node">
109
109
  <title>Snapshot</title>
110
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M607.77,-321C607.77,-321 531.77,-321 531.77,-321 525.77,-321 519.77,-315 519.77,-309 519.77,-309 519.77,-284.5 519.77,-284.5 519.77,-278.5 525.77,-272.5 531.77,-272.5 531.77,-272.5 607.77,-272.5 607.77,-272.5 613.77,-272.5 619.77,-278.5 619.77,-284.5 619.77,-284.5 619.77,-309 619.77,-309 619.77,-315 613.77,-321 607.77,-321"/>
111
- <text xml:space="preserve" text-anchor="middle" x="569.77" y="-306.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
112
- <text xml:space="preserve" text-anchor="middle" x="569.77" y="-293.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain</text>
113
- <text xml:space="preserve" text-anchor="middle" x="569.77" y="-279.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">repo/env/rf/web</text>
110
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M798.5,-359C798.5,-359 633.25,-359 633.25,-359 627.25,-359 621.25,-353 621.25,-347 621.25,-347 621.25,-309 621.25,-309 621.25,-303 627.25,-297 633.25,-297 633.25,-297 798.5,-297 798.5,-297 804.5,-297 810.5,-303 810.5,-309 810.5,-309 810.5,-347 810.5,-347 810.5,-353 804.5,-359 798.5,-359"/>
111
+ <text xml:space="preserve" text-anchor="middle" x="715.88" y="-344.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
112
+ <text xml:space="preserve" text-anchor="middle" x="715.88" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain</text>
113
+ <text xml:space="preserve" text-anchor="middle" x="715.88" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">repo/env/rf/web</text>
114
+ <text xml:space="preserve" text-anchor="middle" x="715.88" y="-304.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">(AUTO_SECTIONS=host/repo/env)</text>
114
115
  </g>
115
116
  <!-- World&#45;&gt;Snapshot -->
116
117
  <g id="edge12" class="edge">
117
118
  <title>World&#45;&gt;Snapshot</title>
118
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M452.34,-565.13C459.57,-563.93 466.81,-562.78 473.77,-561.75 541.5,-551.72 729.96,-572.73 779.77,-525.75 829.07,-479.24 849.47,-424.12 802.77,-375 790.66,-362.26 660.97,-373.81 644.77,-367 625.29,-358.81 607.69,-343.23 594.44,-328.92"/>
119
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="596.64,-327.18 589.23,-323.07 592.46,-330.9 596.64,-327.18"/>
119
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M231.12,-654.97C244.84,-639.59 267.11,-618.26 291.88,-609 323.67,-597.11 872.47,-616.1 902.88,-601 942.2,-581.46 1044.24,-469.23 1013.88,-437.5 999.88,-422.88 850.68,-436.99 831.88,-429.5 798.59,-416.25 768.27,-389.19 746.98,-366.49"/>
120
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="749.19,-364.76 741.73,-360.75 745.06,-368.54 749.19,-364.76"/>
120
121
  </g>
121
122
  <!-- Observe -->
122
123
  <g id="node11" class="node">
123
124
  <title>Observe</title>
124
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M464.27,-314.75C464.27,-314.75 355.27,-314.75 355.27,-314.75 349.27,-314.75 343.27,-308.75 343.27,-302.75 343.27,-302.75 343.27,-290.75 343.27,-290.75 343.27,-284.75 349.27,-278.75 355.27,-278.75 355.27,-278.75 464.27,-278.75 464.27,-278.75 470.27,-278.75 476.27,-284.75 476.27,-290.75 476.27,-290.75 476.27,-302.75 476.27,-302.75 476.27,-308.75 470.27,-314.75 464.27,-314.75"/>
125
- <text xml:space="preserve" text-anchor="middle" x="409.77" y="-299.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">observe · intel · watch</text>
126
- <text xml:space="preserve" text-anchor="middle" x="409.77" y="-286.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">recon · CVE · web DOM</text>
125
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1298.38,-346C1298.38,-346 1189.38,-346 1189.38,-346 1183.38,-346 1177.38,-340 1177.38,-334 1177.38,-334 1177.38,-322 1177.38,-322 1177.38,-316 1183.38,-310 1189.38,-310 1189.38,-310 1298.38,-310 1298.38,-310 1304.38,-310 1310.38,-316 1310.38,-322 1310.38,-322 1310.38,-334 1310.38,-334 1310.38,-340 1304.38,-346 1298.38,-346"/>
126
+ <text xml:space="preserve" text-anchor="middle" x="1243.88" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel · watch</text>
127
+ <text xml:space="preserve" text-anchor="middle" x="1243.88" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon · CVE · web DOM</text>
127
128
  </g>
128
129
  <!-- World&#45;&gt;Observe -->
129
130
  <g id="edge13" class="edge">
130
131
  <title>World&#45;&gt;Observe</title>
131
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M452.31,-564.9C459.55,-563.74 466.79,-562.67 473.77,-561.75 520.53,-555.59 864.86,-560.49 896.77,-525.75 908.6,-512.87 967.57,-465.4 811.77,-375 781.68,-357.54 531.53,-378.71 498.77,-367 472.96,-357.77 448.76,-337.93 432.13,-321.84"/>
132
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="434.52,-320.26 426.88,-316.6 430.57,-324.23 434.52,-320.26"/>
132
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M242.56,-654.86C266.7,-639.39 304.49,-618.01 340.88,-609 375.77,-600.36 955.17,-615.91 987.88,-601 1049.89,-572.73 1041.31,-534.32 1089.88,-486.5 1117.49,-459.3 1128.38,-456.81 1155.88,-429.5 1180.53,-405.01 1206.48,-374.75 1223.75,-353.87"/>
133
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="1225.76,-355.84 1228.68,-347.88 1221.43,-352.28 1225.76,-355.84"/>
133
134
  </g>
134
135
  <!-- Verify -->
135
136
  <g id="node12" class="node">
136
137
  <title>Verify</title>
137
- <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M288.27,-321C288.27,-321 191.27,-321 191.27,-321 185.27,-321 179.27,-315 179.27,-309 179.27,-309 179.27,-284.5 179.27,-284.5 179.27,-278.5 185.27,-272.5 191.27,-272.5 191.27,-272.5 288.27,-272.5 288.27,-272.5 294.27,-272.5 300.27,-278.5 300.27,-284.5 300.27,-284.5 300.27,-309 300.27,-309 300.27,-315 294.27,-321 288.27,-321"/>
138
- <text xml:space="preserve" text-anchor="middle" x="239.77" y="-306.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">verify (browser)</text>
139
- <text xml:space="preserve" text-anchor="middle" x="239.77" y="-293.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">fact&#45;check own claims</text>
140
- <text xml:space="preserve" text-anchor="middle" x="239.77" y="-279.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">revalidate_memory</text>
138
+ <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M1122.38,-352.25C1122.38,-352.25 1025.38,-352.25 1025.38,-352.25 1019.38,-352.25 1013.38,-346.25 1013.38,-340.25 1013.38,-340.25 1013.38,-315.75 1013.38,-315.75 1013.38,-309.75 1019.38,-303.75 1025.38,-303.75 1025.38,-303.75 1122.38,-303.75 1122.38,-303.75 1128.38,-303.75 1134.38,-309.75 1134.38,-315.75 1134.38,-315.75 1134.38,-340.25 1134.38,-340.25 1134.38,-346.25 1128.38,-352.25 1122.38,-352.25"/>
139
+ <text xml:space="preserve" text-anchor="middle" x="1073.88" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">verify (browser)</text>
140
+ <text xml:space="preserve" text-anchor="middle" x="1073.88" y="-324.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">fact&#45;check own claims</text>
141
+ <text xml:space="preserve" text-anchor="middle" x="1073.88" y="-310.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">revalidate_memory</text>
141
142
  </g>
142
143
  <!-- World&#45;&gt;Verify -->
143
144
  <g id="edge14" class="edge">
144
145
  <title>World&#45;&gt;Verify</title>
145
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M452.3,-564.85C459.54,-563.7 466.79,-562.65 473.77,-561.75 524.62,-555.23 898.96,-563.39 933.77,-525.75 936.94,-522.32 935.4,-519.62 933.77,-515.25 904.82,-437.87 886.67,-409.86 811.77,-375 787.08,-363.51 347.26,-376.56 321.77,-367 301.16,-359.27 282.11,-343.93 267.57,-329.65"/>
146
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="269.68,-327.81 262.09,-324.04 265.68,-331.72 269.68,-327.81"/>
147
- <text xml:space="preserve" text-anchor="middle" x="971.59" y="-451.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">TransparentBrowser</text>
148
- <text xml:space="preserve" text-anchor="middle" x="971.59" y="-441.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:headless</text>
146
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M253.64,-654.85C287.97,-639.38 341.11,-618 389.88,-609 406.21,-605.98 974.07,-610.24 987.88,-601 1065.79,-548.85 1075.5,-425.1 1075.27,-364.15"/>
147
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="1078.07,-364.17 1075.16,-356.21 1072.47,-364.25 1078.07,-364.17"/>
148
+ <text xml:space="preserve" text-anchor="middle" x="1102.2" y="-514.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">TransparentBrowser</text>
149
+ <text xml:space="preserve" text-anchor="middle" x="1102.2" y="-503.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:headless</text>
150
+ </g>
151
+ <!-- RFTune -->
152
+ <g id="node13" class="node">
153
+ <title>RFTune</title>
154
+ <path fill="#fcd34d" stroke="#334155" stroke-width="2" d="M958.5,-352.25C958.5,-352.25 865.25,-352.25 865.25,-352.25 859.25,-352.25 853.25,-346.25 853.25,-340.25 853.25,-340.25 853.25,-315.75 853.25,-315.75 853.25,-309.75 859.25,-303.75 865.25,-303.75 865.25,-303.75 958.5,-303.75 958.5,-303.75 964.5,-303.75 970.5,-309.75 970.5,-315.75 970.5,-315.75 970.5,-340.25 970.5,-340.25 970.5,-346.25 964.5,-352.25 958.5,-352.25"/>
155
+ <text xml:space="preserve" text-anchor="middle" x="911.88" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">rf_tune &#160;📡</text>
156
+ <text xml:space="preserve" text-anchor="middle" x="911.88" y="-324.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tune GQRX · demod</text>
157
+ <text xml:space="preserve" text-anchor="middle" x="911.88" y="-310.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">RDS → now_playing</text>
158
+ </g>
159
+ <!-- World&#45;&gt;RFTune -->
160
+ <g id="edge15" class="edge">
161
+ <title>World&#45;&gt;RFTune</title>
162
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M272.2,-654.83C326.87,-637.7 406.84,-613.65 438.88,-609 450.56,-607.31 1280.57,-609.39 1288.88,-601 1324.69,-564.85 1321.06,-525.92 1288.88,-486.5 1220.02,-402.17 1156.17,-455.96 1048.88,-437.5 1023.66,-433.16 1014.09,-442.19 991.88,-429.5 964.6,-413.92 943.11,-385.05 929.31,-362.24"/>
163
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="931.83,-361.01 925.39,-355.51 926.99,-363.83 931.83,-361.01"/>
164
+ <text xml:space="preserve" text-anchor="middle" x="1342.89" y="-514.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">GQRX remote</text>
165
+ <text xml:space="preserve" text-anchor="middle" x="1342.89" y="-503.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:7356 + SDR</text>
149
166
  </g>
150
167
  <!-- Prompt&#45;&gt;Dispatch -->
151
168
  <g id="edge4" class="edge">
152
169
  <title>Prompt&#45;&gt;Dispatch</title>
153
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M574.7,-450C599.61,-450 624.52,-450 649.44,-450"/>
154
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="649.39,-452.8 657.39,-450 649.39,-447.2 649.39,-452.8"/>
170
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M101.92,-530.95C113.51,-558.28 139.46,-608.41 180.38,-628.25 209.57,-642.4 223.43,-640.75 253.38,-628.25 296.4,-610.29 331.51,-567.43 351.05,-539.2"/>
171
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="353.36,-540.79 355.51,-532.59 348.71,-537.66 353.36,-540.79"/>
155
172
  </g>
156
173
  <!-- Dispatch&#45;&gt;Result -->
157
174
  <g id="edge5" class="edge">
158
175
  <title>Dispatch&#45;&gt;Result</title>
159
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M671.46,-468.49C650.68,-489.19 613.69,-521.53 574.27,-534.5 538.38,-546.31 523.95,-549.49 489.27,-534.5 462.25,-522.82 440.17,-496.95 426.2,-476.88"/>
160
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="428.59,-475.42 421.81,-470.33 423.94,-478.54 428.59,-475.42"/>
176
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M338.6,-512.5C313.8,-512.5 289,-512.5 264.21,-512.5"/>
177
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="264.3,-509.7 256.3,-512.5 264.3,-515.3 264.3,-509.7"/>
161
178
  </g>
162
179
  <!-- Metrics -->
163
180
  <g id="node7" class="node">
164
181
  <title>Metrics</title>
165
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M788.52,-314.75C788.52,-314.75 675.02,-314.75 675.02,-314.75 669.02,-314.75 663.02,-308.75 663.02,-302.75 663.02,-302.75 663.02,-290.75 663.02,-290.75 663.02,-284.75 669.02,-278.75 675.02,-278.75 675.02,-278.75 788.52,-278.75 788.52,-278.75 794.52,-278.75 800.52,-284.75 800.52,-290.75 800.52,-290.75 800.52,-302.75 800.52,-302.75 800.52,-308.75 794.52,-314.75 788.52,-314.75"/>
166
- <text xml:space="preserve" text-anchor="middle" x="731.77" y="-299.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
167
- <text xml:space="preserve" text-anchor="middle" x="731.77" y="-286.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool success · avg ms</text>
182
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M352.62,-346C352.62,-346 239.12,-346 239.12,-346 233.12,-346 227.12,-340 227.12,-334 227.12,-334 227.12,-322 227.12,-322 227.12,-316 233.12,-310 239.12,-310 239.12,-310 352.62,-310 352.62,-310 358.62,-310 364.62,-316 364.62,-322 364.62,-322 364.62,-334 364.62,-334 364.62,-340 358.62,-346 352.62,-346"/>
183
+ <text xml:space="preserve" text-anchor="middle" x="295.88" y="-331.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
184
+ <text xml:space="preserve" text-anchor="middle" x="295.88" y="-317.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool success · avg ms</text>
168
185
  </g>
169
186
  <!-- Dispatch&#45;&gt;Metrics -->
170
187
  <g id="edge6" class="edge">
171
188
  <title>Dispatch&#45;&gt;Metrics</title>
172
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M670.29,-431.36C657.12,-416.55 643.13,-394.72 651.52,-375 660.77,-353.24 679.5,-334.64 696.53,-321.15"/>
173
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="697.96,-323.58 702.63,-316.51 694.57,-319.13 697.96,-323.58"/>
174
- <text xml:space="preserve" text-anchor="middle" x="667.64" y="-382.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
189
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M338.53,-501.85C318.86,-493.68 294.48,-479.83 282.62,-458.5 264.85,-426.52 274.86,-383.19 284.62,-355.66"/>
190
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="287.13,-356.94 287.32,-348.47 281.88,-354.97 287.13,-356.94"/>
191
+ <text xml:space="preserve" text-anchor="middle" x="298.75" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
175
192
  </g>
176
193
  <!-- Dispatch&#45;&gt;Mistakes -->
177
194
  <g id="edge8" class="edge">
178
195
  <title>Dispatch&#45;&gt;Mistakes</title>
179
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M718.28,-439.05C743.96,-429.76 781.69,-414.55 811.77,-396 839.59,-378.84 867.75,-355.43 889.46,-335.76"/>
180
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="891.22,-337.95 895.22,-330.48 887.44,-333.82 891.22,-337.95"/>
181
- <text xml:space="preserve" text-anchor="middle" x="858.49" y="-387.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">on failure</text>
182
- <text xml:space="preserve" text-anchor="middle" x="858.49" y="-376.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
196
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M360.76,-493.93C355.46,-477.76 350.96,-453.86 362.62,-437.5 368.97,-428.6 376.52,-435.14 385.88,-429.5 413.23,-413 439.45,-388.56 459.09,-367.91"/>
197
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="461.08,-369.89 464.49,-362.13 456.98,-366.07 461.08,-369.89"/>
198
+ <text xml:space="preserve" text-anchor="middle" x="381.75" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">on failure</text>
199
+ <text xml:space="preserve" text-anchor="middle" x="381.75" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
183
200
  </g>
184
201
  <!-- Dispatch&#45;&gt;Snapshot -->
185
202
  <g id="edge10" class="edge">
186
203
  <title>Dispatch&#45;&gt;Snapshot</title>
187
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M659.25,-432.87C644.41,-423.61 627.03,-410.88 614.77,-396 598.9,-376.75 587.38,-351 579.97,-330.69"/>
188
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="582.69,-329.98 577.4,-323.35 577.4,-331.83 582.69,-329.98"/>
189
- <text xml:space="preserve" text-anchor="middle" x="626.77" y="-382.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
204
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M397.41,-506.03C434.8,-498.45 500.64,-482.85 552.88,-458.5 601.4,-435.88 648.34,-396.08 679.29,-366.56"/>
205
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="681.19,-368.61 685,-361.04 677.3,-364.58 681.19,-368.61"/>
206
+ <text xml:space="preserve" text-anchor="middle" x="599.62" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
207
+ </g>
208
+ <!-- Dispatch&#45;&gt;Observe -->
209
+ <g id="edge16" class="edge">
210
+ <title>Dispatch&#45;&gt;Observe</title>
211
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M379.85,-493.83C393.23,-475.82 416.71,-448.95 444.62,-437.5 481.19,-422.51 1119.98,-446.02 1155.88,-429.5 1189.27,-414.13 1215.05,-379.25 1229.84,-354.93"/>
212
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1232.16,-356.51 1233.79,-348.19 1227.33,-353.68 1232.16,-356.51"/>
213
+ <text xml:space="preserve" text-anchor="middle" x="493.75" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">sense tools</text>
214
+ <text xml:space="preserve" text-anchor="middle" x="493.75" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">verify/watch/rf_tune/intel</text>
190
215
  </g>
191
216
  <!-- Result&#45;&gt;User -->
192
- <g id="edge38" class="edge">
217
+ <g id="edge43" class="edge">
193
218
  <title>Result&#45;&gt;User</title>
194
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M422.03,-468.54C432.47,-481.87 448.77,-499.22 467.77,-507.25 481.59,-513.09 727.32,-504.48 737.77,-515.25 741.02,-518.6 740.61,-522.05 737.77,-525.75 733.37,-531.49 654.26,-551.51 597.65,-565.23"/>
195
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="597.08,-562.49 589.96,-567.09 598.39,-567.94 597.08,-562.49"/>
196
- <text xml:space="preserve" text-anchor="middle" x="755.05" y="-517.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
219
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M208.06,-531.18C198.03,-550.06 180.23,-580.09 158.88,-601 139.08,-620.38 113.18,-637.23 91.18,-649.7"/>
220
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="89.99,-647.15 84.34,-653.47 92.7,-652.05 89.99,-647.15"/>
221
+ <text xml:space="preserve" text-anchor="middle" x="163.19" y="-610.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
197
222
  </g>
198
223
  <!-- Learning -->
199
224
  <g id="node8" class="node">
200
225
  <title>Learning</title>
201
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M1170.52,-321C1170.52,-321 1069.02,-321 1069.02,-321 1063.02,-321 1057.02,-315 1057.02,-309 1057.02,-309 1057.02,-284.5 1057.02,-284.5 1057.02,-278.5 1063.02,-272.5 1069.02,-272.5 1069.02,-272.5 1170.52,-272.5 1170.52,-272.5 1176.52,-272.5 1182.52,-278.5 1182.52,-284.5 1182.52,-284.5 1182.52,-309 1182.52,-309 1182.52,-315 1176.52,-321 1170.52,-321"/>
202
- <text xml:space="preserve" text-anchor="middle" x="1119.77" y="-306.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
203
- <text xml:space="preserve" text-anchor="middle" x="1119.77" y="-293.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
204
- <text xml:space="preserve" text-anchor="middle" x="1119.77" y="-279.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">consolidate · distill_skill</text>
226
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M171.62,-352.25C171.62,-352.25 70.12,-352.25 70.12,-352.25 64.12,-352.25 58.12,-346.25 58.12,-340.25 58.12,-340.25 58.12,-315.75 58.12,-315.75 58.12,-309.75 64.12,-303.75 70.12,-303.75 70.12,-303.75 171.62,-303.75 171.62,-303.75 177.62,-303.75 183.62,-309.75 183.62,-315.75 183.62,-315.75 183.62,-340.25 183.62,-340.25 183.62,-346.25 177.62,-352.25 171.62,-352.25"/>
227
+ <text xml:space="preserve" text-anchor="middle" x="120.88" y="-337.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
228
+ <text xml:space="preserve" text-anchor="middle" x="120.88" y="-324.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
229
+ <text xml:space="preserve" text-anchor="middle" x="120.88" y="-310.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">consolidate · distill_skill</text>
205
230
  </g>
206
231
  <!-- Result&#45;&gt;Learning -->
207
232
  <g id="edge7" class="edge">
208
233
  <title>Result&#45;&gt;Learning</title>
209
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M445.63,-431.31C452.81,-428.41 460.41,-425.77 467.77,-424 714.4,-364.49 806.38,-475.4 1035.77,-367 1055.89,-357.49 1075.27,-342.08 1090.33,-328.21"/>
210
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="1092.05,-330.44 1095.94,-322.91 1088.2,-326.37 1092.05,-330.44"/>
211
- <text xml:space="preserve" text-anchor="middle" x="1032.88" y="-382.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">auto_reflect</text>
234
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M207.67,-494C191.64,-463.52 158.36,-400.26 137.99,-361.53"/>
235
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="140.47,-360.24 134.27,-354.46 135.51,-362.84 140.47,-360.24"/>
236
+ <text xml:space="preserve" text-anchor="middle" x="220.01" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_introspect</text>
212
237
  </g>
213
238
  <!-- Result&#45;&gt;Observe -->
214
239
  <g id="edge11" class="edge">
215
240
  <title>Result&#45;&gt;Observe</title>
216
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M409.77,-431.35C409.77,-405.17 409.77,-355.81 409.77,-324.97"/>
217
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="412.57,-325.25 409.77,-317.25 406.97,-325.25 412.57,-325.25"/>
218
- <text xml:space="preserve" text-anchor="middle" x="442.39" y="-382.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
241
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M254.01,-500.88C272.97,-495.83 296.5,-490.11 317.88,-486.5 451.66,-463.91 491.62,-496.5 621.88,-458.5 641.43,-452.79 642.86,-442.46 662.62,-437.5 689.21,-430.83 1131.01,-441.02 1155.88,-429.5 1189.23,-414.04 1215.02,-379.19 1229.83,-354.89"/>
242
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1232.14,-356.48 1233.78,-348.17 1227.31,-353.64 1232.14,-356.48"/>
243
+ <text xml:space="preserve" text-anchor="middle" x="713.25" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
244
+ <text xml:space="preserve" text-anchor="middle" x="713.25" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(AUTO_SECTIONS only)</text>
219
245
  </g>
220
246
  <!-- Correlate -->
221
- <g id="node13" class="node">
247
+ <g id="node14" class="node">
222
248
  <title>Correlate</title>
223
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M675.64,-172.75C675.64,-172.75 475.89,-172.75 475.89,-172.75 469.89,-172.75 463.89,-166.75 463.89,-160.75 463.89,-160.75 463.89,-148.25 463.89,-148.25 463.89,-142.25 469.89,-136.25 475.89,-136.25 475.89,-136.25 675.64,-136.25 675.64,-136.25 681.64,-136.25 687.64,-142.25 687.64,-148.25 687.64,-148.25 687.64,-160.75 687.64,-160.75 687.64,-166.75 681.64,-172.75 675.64,-172.75"/>
224
- <text xml:space="preserve" text-anchor="middle" x="575.77" y="-157.35" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
225
- <text xml:space="preserve" text-anchor="middle" x="575.77" y="-143.1" font-family="Helvetica,sans-Serif" font-size="12.00" fill="#0f172a">&quot;I did it wrong&quot; &#160;vs &#160;&quot;the world changed&quot;</text>
249
+ <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M815.75,-204C815.75,-204 616,-204 616,-204 610,-204 604,-198 604,-192 604,-192 604,-179.5 604,-179.5 604,-173.5 610,-167.5 616,-167.5 616,-167.5 815.75,-167.5 815.75,-167.5 821.75,-167.5 827.75,-173.5 827.75,-179.5 827.75,-179.5 827.75,-192 827.75,-192 827.75,-198 821.75,-204 815.75,-204"/>
250
+ <text xml:space="preserve" text-anchor="middle" x="715.88" y="-188.6" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
251
+ <text xml:space="preserve" text-anchor="middle" x="715.88" 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>
226
252
  </g>
227
253
  <!-- Metrics&#45;&gt;Correlate -->
228
- <g id="edge15" class="edge">
254
+ <g id="edge17" class="edge">
229
255
  <title>Metrics&#45;&gt;Correlate</title>
230
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M712.33,-278.27C684.8,-253.53 634.35,-208.17 603.08,-180.05"/>
231
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="605.23,-178.23 597.41,-174.96 601.49,-182.39 605.23,-178.23"/>
256
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M333.91,-309.4C349.77,-302.47 368.5,-294.8 385.88,-289 434.54,-272.75 448.66,-275.51 497.88,-261 552.36,-244.94 613.52,-223.84 657.15,-208.23"/>
257
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="658.03,-210.89 664.62,-205.56 656.14,-205.62 658.03,-210.89"/>
232
258
  </g>
233
259
  <!-- Fmet -->
234
- <g id="node14" class="node">
260
+ <g id="node15" class="node">
235
261
  <title>Fmet</title>
236
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M541.27,-48.73C541.27,-50.53 524.91,-52 504.77,-52 484.63,-52 468.27,-50.53 468.27,-48.73 468.27,-48.73 468.27,-19.27 468.27,-19.27 468.27,-17.47 484.63,-16 504.77,-16 524.91,-16 541.27,-17.47 541.27,-19.27 541.27,-19.27 541.27,-48.73 541.27,-48.73"/>
237
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M541.27,-48.73C541.27,-46.92 524.91,-45.45 504.77,-45.45 484.63,-45.45 468.27,-46.92 468.27,-48.73"/>
238
- <text xml:space="preserve" text-anchor="middle" x="504.77" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
262
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M731.38,-48.73C731.38,-50.53 715.02,-52 694.88,-52 674.73,-52 658.38,-50.53 658.38,-48.73 658.38,-48.73 658.38,-19.27 658.38,-19.27 658.38,-17.47 674.73,-16 694.88,-16 715.02,-16 731.38,-17.47 731.38,-19.27 731.38,-19.27 731.38,-48.73 731.38,-48.73"/>
263
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M731.38,-48.73C731.38,-46.92 715.02,-45.45 694.88,-45.45 674.73,-45.45 658.38,-46.92 658.38,-48.73"/>
264
+ <text xml:space="preserve" text-anchor="middle" x="694.88" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
239
265
  </g>
240
266
  <!-- Metrics&#45;&gt;Fmet -->
241
- <g id="edge22" class="edge">
267
+ <g id="edge25" class="edge">
242
268
  <title>Metrics&#45;&gt;Fmet</title>
243
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M734.76,-278.23C739.19,-246.02 743.59,-176.97 708.77,-136.25 664.64,-84.65 621.2,-125.84 562.77,-91.25 548.84,-83.01 535.69,-70.77 525.44,-59.81"/>
244
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="527.59,-58.01 520.15,-53.95 523.43,-61.77 527.59,-58.01"/>
269
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M319.95,-309.44C362.75,-278.62 455.43,-213.7 538.88,-167.5 580.81,-144.28 600.46,-153.67 636.88,-122.5 656.63,-105.59 672.38,-80.36 682.45,-61.33"/>
270
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="684.89,-62.7 686.04,-54.3 679.91,-60.15 684.89,-62.7"/>
245
271
  </g>
246
272
  <!-- Learning&#45;&gt;Correlate -->
247
- <g id="edge16" class="edge">
273
+ <g id="edge18" class="edge">
248
274
  <title>Learning&#45;&gt;Correlate</title>
249
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M1071.59,-271.91C1060.04,-266.77 1047.61,-261.7 1035.77,-257.75 923.4,-220.29 791.01,-192.5 697.18,-175.42"/>
250
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="697.96,-172.71 689.58,-174.05 696.96,-178.23 697.96,-172.71"/>
275
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M169.14,-303.19C180.96,-297.99 193.71,-292.89 205.88,-289 335.38,-247.64 488.95,-219.56 593.49,-203.45"/>
276
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="593.7,-206.25 601.19,-202.27 592.85,-200.71 593.7,-206.25"/>
251
277
  </g>
252
278
  <!-- Flrn -->
253
- <g id="node15" class="node">
279
+ <g id="node16" class="node">
254
280
  <title>Flrn</title>
255
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1015.27,-48.73C1015.27,-50.53 997.56,-52 975.77,-52 953.97,-52 936.27,-50.53 936.27,-48.73 936.27,-48.73 936.27,-19.27 936.27,-19.27 936.27,-17.47 953.97,-16 975.77,-16 997.56,-16 1015.27,-17.47 1015.27,-19.27 1015.27,-19.27 1015.27,-48.73 1015.27,-48.73"/>
256
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M1015.27,-48.73C1015.27,-46.92 997.56,-45.45 975.77,-45.45 953.97,-45.45 936.27,-46.92 936.27,-48.73"/>
257
- <text xml:space="preserve" text-anchor="middle" x="975.77" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
281
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M495.38,-48.73C495.38,-50.53 477.67,-52 455.88,-52 434.08,-52 416.38,-50.53 416.38,-48.73 416.38,-48.73 416.38,-19.27 416.38,-19.27 416.38,-17.47 434.08,-16 455.88,-16 477.67,-16 495.38,-17.47 495.38,-19.27 495.38,-19.27 495.38,-48.73 495.38,-48.73"/>
282
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M495.38,-48.73C495.38,-46.92 477.67,-45.45 455.88,-45.45 434.08,-45.45 416.38,-46.92 416.38,-48.73"/>
283
+ <text xml:space="preserve" text-anchor="middle" x="455.88" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
258
284
  </g>
259
285
  <!-- Learning&#45;&gt;Flrn -->
260
- <g id="edge23" class="edge">
286
+ <g id="edge26" class="edge">
261
287
  <title>Learning&#45;&gt;Flrn</title>
262
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1164.03,-271.94C1172.88,-267.22 1182.11,-262.31 1190.77,-257.75 1214.69,-245.15 1230.72,-252.85 1244.77,-229.75 1274.9,-180.19 1280.7,-144.78 1244.77,-99.25 1217.95,-65.28 1095.51,-47.29 1025.42,-39.62"/>
263
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1026.1,-36.88 1017.85,-38.82 1025.51,-42.45 1026.1,-36.88"/>
288
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M118.59,-303.26C115.86,-259.16 117.58,-165.88 175.88,-130.5 196.69,-117.87 373.5,-134.16 394.88,-122.5 418.98,-109.35 435.63,-82.08 445.37,-61.45"/>
289
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="447.85,-62.76 448.56,-54.32 442.74,-60.48 447.85,-62.76"/>
264
290
  </g>
265
291
  <!-- Fmem -->
266
- <g id="node17" class="node">
292
+ <g id="node18" class="node">
267
293
  <title>Fmem</title>
268
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M785.52,-48.73C785.52,-50.53 768.15,-52 746.77,-52 725.39,-52 708.02,-50.53 708.02,-48.73 708.02,-48.73 708.02,-19.27 708.02,-19.27 708.02,-17.47 725.39,-16 746.77,-16 768.15,-16 785.52,-17.47 785.52,-19.27 785.52,-19.27 785.52,-48.73 785.52,-48.73"/>
269
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M785.52,-48.73C785.52,-46.92 768.15,-45.45 746.77,-45.45 725.39,-45.45 708.02,-46.92 708.02,-48.73"/>
270
- <text xml:space="preserve" text-anchor="middle" x="746.77" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
294
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M615.62,-48.73C615.62,-50.53 598.26,-52 576.88,-52 555.49,-52 538.12,-50.53 538.12,-48.73 538.12,-48.73 538.12,-19.27 538.12,-19.27 538.12,-17.47 555.49,-16 576.88,-16 598.26,-16 615.62,-17.47 615.62,-19.27 615.62,-19.27 615.62,-48.73 615.62,-48.73"/>
295
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M615.62,-48.73C615.62,-46.92 598.26,-45.45 576.88,-45.45 555.49,-45.45 538.12,-46.92 538.12,-48.73"/>
296
+ <text xml:space="preserve" text-anchor="middle" x="576.88" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
271
297
  </g>
272
298
  <!-- Learning&#45;&gt;Fmem -->
273
- <g id="edge26" class="edge">
299
+ <g id="edge29" class="edge">
274
300
  <title>Learning&#45;&gt;Fmem</title>
275
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1105.94,-271.82C1085.11,-237.61 1042.65,-174.63 991.77,-136.25 957.9,-110.7 944.97,-109.36 903.77,-99.25 862.19,-89.05 846.97,-108.47 807.77,-91.25 791.97,-84.31 777.61,-71.55 766.79,-59.94"/>
276
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="768.93,-58.13 761.52,-54.02 764.74,-61.85 768.93,-58.13"/>
277
- <text xml:space="preserve" text-anchor="middle" x="1044.3" y="-151.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
301
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M157,-303.23C208.4,-270.06 306.24,-209.26 394.88,-167.5 396.51,-166.73 515.45,-123.61 516.88,-122.5 537.83,-106.19 554.21,-80.5 564.52,-61.17"/>
302
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="566.9,-62.67 568.06,-54.27 561.92,-60.11 566.9,-62.67"/>
303
+ <text xml:space="preserve" text-anchor="middle" x="408.38" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
278
304
  </g>
279
305
  <!-- Fskl -->
280
- <g id="node18" class="node">
306
+ <g id="node19" class="node">
281
307
  <title>Fskl</title>
282
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M892.77,-48.73C892.77,-50.53 878.43,-52 860.77,-52 843.11,-52 828.77,-50.53 828.77,-48.73 828.77,-48.73 828.77,-19.27 828.77,-19.27 828.77,-17.47 843.11,-16 860.77,-16 878.43,-16 892.77,-17.47 892.77,-19.27 892.77,-19.27 892.77,-48.73 892.77,-48.73"/>
283
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M892.77,-48.73C892.77,-46.92 878.43,-45.45 860.77,-45.45 843.11,-45.45 828.77,-46.92 828.77,-48.73"/>
284
- <text xml:space="preserve" text-anchor="middle" x="860.77" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
308
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M372.88,-48.73C372.88,-50.53 358.53,-52 340.88,-52 323.22,-52 308.88,-50.53 308.88,-48.73 308.88,-48.73 308.88,-19.27 308.88,-19.27 308.88,-17.47 323.22,-16 340.88,-16 358.53,-16 372.88,-17.47 372.88,-19.27 372.88,-19.27 372.88,-48.73 372.88,-48.73"/>
309
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M372.88,-48.73C372.88,-46.92 358.53,-45.45 340.88,-45.45 323.22,-45.45 308.88,-46.92 308.88,-48.73"/>
310
+ <text xml:space="preserve" text-anchor="middle" x="340.88" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
285
311
  </g>
286
312
  <!-- Learning&#45;&gt;Fskl -->
287
- <g id="edge27" class="edge">
313
+ <g id="edge30" class="edge">
288
314
  <title>Learning&#45;&gt;Fskl</title>
289
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1131.34,-272C1149.96,-229.99 1179.87,-142.88 1131.77,-99.25 1113.9,-83.04 936.79,-101.12 914.77,-91.25 900.01,-84.64 887.27,-71.95 877.88,-60.3"/>
290
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="880.19,-58.72 873.12,-54.05 875.74,-62.11 880.19,-58.72"/>
291
- <text xml:space="preserve" text-anchor="middle" x="1165.63" y="-151.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
315
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M97.9,-303.29C87.45,-291.41 75.71,-276.31 67.88,-261 41.45,-209.37 25.53,-170.14 67.88,-130.5 133.19,-69.35 239.85,-47.06 298.65,-39.16"/>
316
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="298.82,-41.96 306.4,-38.17 298.12,-36.4 298.82,-41.96"/>
317
+ <text xml:space="preserve" text-anchor="middle" x="51.8" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
292
318
  </g>
293
319
  <!-- Mistakes&#45;&gt;Dispatch -->
294
- <g id="edge36" class="edge">
320
+ <g id="edge41" class="edge">
295
321
  <title>Mistakes&#45;&gt;Dispatch</title>
296
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M891.01,-328.6C871.51,-342.8 846.64,-358.37 821.77,-367 803.79,-373.24 752.78,-365.12 736.52,-375 718.98,-385.65 706.71,-405.46 699.01,-421.9"/>
297
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="696.62,-420.37 696,-428.82 701.76,-422.6 696.62,-420.37"/>
298
- <text xml:space="preserve" text-anchor="middle" x="769.14" y="-387.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">correction_hint</text>
299
- <text xml:space="preserve" text-anchor="middle" x="769.14" y="-376.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">(inline, next iter)</text>
322
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M516.21,-359.73C536.28,-383.52 567.52,-414.82 602.88,-429.5 620.44,-436.79 760.74,-423.74 773.88,-437.5 780.32,-444.25 780.03,-451.49 773.88,-458.5 761.85,-472.19 508.5,-497.96 408.22,-507.67"/>
323
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="408.04,-504.88 400.35,-508.43 408.58,-510.45 408.04,-504.88"/>
324
+ <text xml:space="preserve" text-anchor="middle" x="811.23" y="-449.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">correction_hint</text>
325
+ <text xml:space="preserve" text-anchor="middle" x="811.23" y="-439.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(inline, next iter)</text>
300
326
  </g>
301
327
  <!-- Mistakes&#45;&gt;Correlate -->
302
- <g id="edge17" class="edge">
328
+ <g id="edge19" class="edge">
303
329
  <title>Mistakes&#45;&gt;Correlate</title>
304
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M850.86,-264.8C784.18,-238.3 689.85,-200.83 630.78,-177.36"/>
305
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="631.91,-174.79 623.44,-174.44 629.84,-180 631.91,-174.79"/>
330
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M564.39,-296.08C585.43,-285.92 608.1,-273.9 627.88,-261 650.24,-246.42 673.22,-226.85 690.08,-211.46"/>
331
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="691.96,-213.53 695.93,-206.05 688.16,-209.42 691.96,-213.53"/>
306
332
  </g>
307
333
  <!-- Fmis -->
308
- <g id="node16" class="node">
334
+ <g id="node17" class="node">
309
335
  <title>Fmis</title>
310
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M665.02,-48.73C665.02,-50.53 646.98,-52 624.77,-52 602.56,-52 584.52,-50.53 584.52,-48.73 584.52,-48.73 584.52,-19.27 584.52,-19.27 584.52,-17.47 602.56,-16 624.77,-16 646.98,-16 665.02,-17.47 665.02,-19.27 665.02,-19.27 665.02,-48.73 665.02,-48.73"/>
311
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M665.02,-48.73C665.02,-46.92 646.98,-45.45 624.77,-45.45 602.56,-45.45 584.52,-46.92 584.52,-48.73"/>
312
- <text xml:space="preserve" text-anchor="middle" x="624.77" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
336
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M855.12,-48.73C855.12,-50.53 837.08,-52 814.88,-52 792.67,-52 774.62,-50.53 774.62,-48.73 774.62,-48.73 774.62,-19.27 774.62,-19.27 774.62,-17.47 792.67,-16 814.88,-16 837.08,-16 855.12,-17.47 855.12,-19.27 855.12,-19.27 855.12,-48.73 855.12,-48.73"/>
337
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M855.12,-48.73C855.12,-46.92 837.08,-45.45 814.88,-45.45 792.67,-45.45 774.62,-46.92 774.62,-48.73"/>
338
+ <text xml:space="preserve" text-anchor="middle" x="814.88" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">mistakes.json</text>
313
339
  </g>
314
340
  <!-- Mistakes&#45;&gt;Fmis -->
315
- <g id="edge24" class="edge">
341
+ <g id="edge27" class="edge">
316
342
  <title>Mistakes&#45;&gt;Fmis</title>
317
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M896.64,-264.86C861.75,-231.82 803.87,-178.47 750.77,-136.25 723.55,-114.61 713.92,-112.97 686.77,-91.25 674.32,-81.29 661.16,-69.54 650.18,-59.36"/>
318
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="652.15,-57.37 644.4,-53.95 648.32,-61.46 652.15,-57.37"/>
343
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M502.04,-296.28C514.45,-260.04 540.11,-200.55 582.88,-167.5 644.72,-119.71 688.66,-167.05 752.88,-122.5 775.06,-107.11 792.01,-81.07 802.53,-61.39"/>
344
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="804.99,-62.74 806.15,-54.34 800.01,-60.18 804.99,-62.74"/>
319
345
  </g>
320
346
  <!-- Mistakes&#45;&gt;Fmem -->
321
- <g id="edge25" class="edge">
347
+ <g id="edge28" class="edge">
322
348
  <title>Mistakes&#45;&gt;Fmem</title>
323
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M929.54,-265.05C928.83,-221.04 920.41,-140.75 871.77,-99.25 849.96,-80.64 833.77,-103.32 807.77,-91.25 792.23,-84.03 777.96,-71.38 767.14,-59.9"/>
324
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="769.3,-58.12 761.86,-54.05 765.14,-61.87 769.3,-58.12"/>
325
- <text xml:space="preserve" text-anchor="middle" x="948.53" y="-151.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
349
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M468.39,-296.09C445.21,-262.78 417.22,-209 440.88,-167.5 460.32,-133.4 488.21,-149.32 516.88,-122.5 535.95,-104.66 552.3,-79.73 563.09,-61.05"/>
350
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="565.49,-62.5 566.97,-54.15 560.61,-59.76 565.49,-62.5"/>
351
+ <text xml:space="preserve" text-anchor="middle" x="473.88" y="-182.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
326
352
  </g>
327
353
  <!-- Snapshot&#45;&gt;Correlate -->
328
- <g id="edge18" class="edge">
354
+ <g id="edge20" class="edge">
329
355
  <title>Snapshot&#45;&gt;Correlate</title>
330
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M570.79,-271.96C571.83,-247.51 573.46,-209.45 574.57,-183.54"/>
331
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="577.37,-183.68 574.91,-175.56 571.77,-183.44 577.37,-183.68"/>
356
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M715.88,-296.57C715.88,-272.15 715.88,-238.15 715.88,-214.47"/>
357
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="718.68,-214.67 715.88,-206.67 713.08,-214.67 718.68,-214.67"/>
332
358
  </g>
333
359
  <!-- Observe&#45;&gt;Correlate -->
334
- <g id="edge19" class="edge">
360
+ <g id="edge21" class="edge">
335
361
  <title>Observe&#45;&gt;Correlate</title>
336
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M430.46,-278.27C459.74,-253.53 513.43,-208.17 546.71,-180.05"/>
337
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="548.49,-182.22 552.79,-174.91 544.87,-177.94 548.49,-182.22"/>
362
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1207.19,-309.41C1191.62,-302.4 1173.1,-294.67 1155.88,-289 1046.09,-252.86 916.88,-224.45 827,-206.84"/>
363
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="827.65,-204.11 819.26,-205.33 826.58,-209.61 827.65,-204.11"/>
338
364
  </g>
339
365
  <!-- Fext -->
340
- <g id="node19" class="node">
366
+ <g id="node20" class="node">
341
367
  <title>Fext</title>
342
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M424.89,-48.73C424.89,-50.53 401.98,-52 373.77,-52 345.56,-52 322.64,-50.53 322.64,-48.73 322.64,-48.73 322.64,-19.27 322.64,-19.27 322.64,-17.47 345.56,-16 373.77,-16 401.98,-16 424.89,-17.47 424.89,-19.27 424.89,-19.27 424.89,-48.73 424.89,-48.73"/>
343
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M424.89,-48.73C424.89,-46.92 401.98,-45.45 373.77,-45.45 345.56,-45.45 322.64,-46.92 322.64,-48.73"/>
344
- <text xml:space="preserve" text-anchor="middle" x="373.77" y="-30.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
368
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M1000,-48.73C1000,-50.53 977.08,-52 948.88,-52 920.67,-52 897.75,-50.53 897.75,-48.73 897.75,-48.73 897.75,-19.27 897.75,-19.27 897.75,-17.47 920.67,-16 948.88,-16 977.08,-16 1000,-17.47 1000,-19.27 1000,-19.27 1000,-48.73 1000,-48.73"/>
369
+ <path fill="none" stroke="#334155" stroke-width="1.4" d="M1000,-48.73C1000,-46.92 977.08,-45.45 948.88,-45.45 920.67,-45.45 897.75,-46.92 897.75,-48.73"/>
370
+ <text xml:space="preserve" text-anchor="middle" x="948.88" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
345
371
  </g>
346
372
  <!-- Observe&#45;&gt;Fext -->
347
- <g id="edge28" class="edge">
373
+ <g id="edge31" class="edge">
348
374
  <title>Observe&#45;&gt;Fext</title>
349
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M388.59,-278.41C363.94,-256.7 324.6,-216.97 308.77,-172.75 294.11,-131.79 325.14,-86.58 349.19,-59.5"/>
350
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="351.06,-61.6 354.41,-53.81 346.94,-57.81 351.06,-61.6"/>
375
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1250.01,-309.76C1259.72,-279.45 1275.46,-215.29 1253.88,-167.5 1212.56,-76.05 1086.75,-47.7 1010.22,-38.92"/>
376
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1010.89,-36.18 1002.64,-38.11 1010.3,-41.75 1010.89,-36.18"/>
377
+ </g>
378
+ <!-- Verify&#45;&gt;Mistakes -->
379
+ <g id="edge34" class="edge">
380
+ <title>Verify&#45;&gt;Mistakes</title>
381
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" stroke-dasharray="5,2" d="M1060.51,-353.2C1046.75,-376.17 1022.95,-408.62 991.88,-422.83 913.26,-458.78 683.91,-452.94 602.88,-422.83 572.64,-411.6 545.16,-387.91 525.22,-367.03"/>
382
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="527.33,-365.18 519.83,-361.22 523.22,-368.99 527.33,-365.18"/>
383
+ <text xml:space="preserve" text-anchor="middle" x="954.88" y="-444.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted</text>
351
384
  </g>
352
385
  <!-- Verify&#45;&gt;Correlate -->
353
- <g id="edge20" class="edge">
386
+ <g id="edge22" class="edge">
354
387
  <title>Verify&#45;&gt;Correlate</title>
355
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M290.76,-271.63C300.99,-266.93 311.69,-262.11 321.77,-257.75 389.27,-228.55 467.95,-197.3 519.64,-177.14"/>
356
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="520.38,-179.86 526.82,-174.35 518.35,-174.64 520.38,-179.86"/>
388
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M1023.41,-302.85C1013.05,-298.11 1002.16,-293.28 991.88,-289 919.26,-258.78 834.18,-227.93 777.88,-208.14"/>
389
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="779.09,-205.59 770.61,-205.59 777.23,-210.88 779.09,-205.59"/>
357
390
  </g>
358
391
  <!-- Verify&#45;&gt;Fmis -->
359
- <g id="edge29" class="edge">
392
+ <g id="edge33" class="edge">
360
393
  <title>Verify&#45;&gt;Fmis</title>
361
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M228.4,-271.58C214.05,-237.09 194.95,-173.77 227.77,-136.25 277.22,-79.71 494.66,-122.92 562.77,-91.25 578.15,-84.1 592.39,-71.78 603.33,-60.49"/>
362
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="605.25,-62.54 608.63,-54.77 601.14,-58.74 605.25,-62.54"/>
363
- <text xml:space="preserve" text-anchor="middle" x="268.27" y="-156.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted →</text>
364
- <text xml:space="preserve" text-anchor="middle" x="268.27" y="-145.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">assumption mistake</text>
394
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M1065.83,-302.95C1053.21,-268.6 1025.7,-205.46 982.88,-167.5 944.27,-133.28 915.99,-154.94 875.88,-122.5 855.61,-106.11 839.2,-81.31 828.52,-62.29"/>
395
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="831.03,-61.05 824.77,-55.34 826.1,-63.71 831.03,-61.05"/>
396
+ <text xml:space="preserve" text-anchor="middle" x="1054.66" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted →</text>
397
+ <text xml:space="preserve" text-anchor="middle" x="1054.66" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">assumption mistake</text>
365
398
  </g>
366
399
  <!-- Verify&#45;&gt;Fmem -->
367
- <g id="edge30" class="edge">
400
+ <g id="edge35" class="edge">
368
401
  <title>Verify&#45;&gt;Fmem</title>
369
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M253.87,-271.51C276.3,-235.41 323.73,-168.32 383.52,-136.25 503.59,-71.85 564.09,-150.54 686.77,-91.25 702.06,-83.86 716.09,-71.19 726.74,-59.75"/>
370
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="728.68,-61.78 731.91,-53.94 724.5,-58.05 728.68,-61.78"/>
371
- <text xml:space="preserve" text-anchor="middle" x="413.14" y="-156.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale</text>
372
- <text xml:space="preserve" text-anchor="middle" x="413.14" y="-145.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED]</text>
402
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M1043.41,-303.04C992.12,-263.11 890.1,-185.56 848.88,-167.5 760.65,-128.85 716.94,-176.04 636.88,-122.5 614.54,-107.56 598.17,-81.23 588.23,-61.35"/>
403
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="590.81,-60.24 584.84,-54.23 585.75,-62.66 590.81,-60.24"/>
404
+ <text xml:space="preserve" text-anchor="middle" x="938.92" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mark stale</text>
405
+ <text xml:space="preserve" text-anchor="middle" x="938.92" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED]</text>
373
406
  </g>
374
407
  <!-- Verify&#45;&gt;Fext -->
375
- <g id="edge31" class="edge">
408
+ <g id="edge36" class="edge">
376
409
  <title>Verify&#45;&gt;Fext</title>
377
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M178.28,-280.43C94.18,-256.49 -40.64,-205.67 12.02,-136.25 48.28,-88.45 219.27,-57.06 312.61,-43.18"/>
378
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="312.76,-45.99 320.27,-42.06 311.95,-40.45 312.76,-45.99"/>
379
- <text xml:space="preserve" text-anchor="middle" x="33.39" y="-156.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
380
- <text xml:space="preserve" text-anchor="middle" x="33.39" y="-145.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs</text>
410
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M1114.63,-302.88C1157.03,-274.32 1215.02,-223.51 1197.88,-167.5 1174,-89.51 1075.79,-56.92 1010.08,-43.66"/>
411
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1010.95,-40.98 1002.56,-42.21 1009.89,-46.48 1010.95,-40.98"/>
412
+ <text xml:space="preserve" text-anchor="middle" x="1222.33" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed</text>
413
+ <text xml:space="preserve" text-anchor="middle" x="1222.33" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:intel obs</text>
414
+ </g>
415
+ <!-- RFTune&#45;&gt;Correlate -->
416
+ <g id="edge23" class="edge">
417
+ <title>RFTune&#45;&gt;Correlate</title>
418
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M877.82,-302.92C860.2,-290.44 838.36,-274.94 818.88,-261 795.39,-244.21 768.98,-225.16 748.78,-210.57"/>
419
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="750.53,-208.38 742.41,-205.96 747.25,-212.91 750.53,-208.38"/>
420
+ </g>
421
+ <!-- RFTune&#45;&gt;Fext -->
422
+ <g id="edge32" class="edge">
423
+ <title>RFTune&#45;&gt;Fext</title>
424
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M961.76,-302.86C1029.94,-269.64 1144.46,-212.9 1149.88,-204 1191.37,-135.85 1082.19,-81.89 1008.95,-54.58"/>
425
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1010.09,-52.01 1001.62,-51.89 1008.17,-57.27 1010.09,-52.01"/>
426
+ <text xml:space="preserve" text-anchor="middle" x="1173.62" y="-187.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:rf obs</text>
427
+ <text xml:space="preserve" text-anchor="middle" x="1173.62" y="-177.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">ttl 300s</text>
381
428
  </g>
382
429
  <!-- Correlate&#45;&gt;Prompt -->
383
- <g id="edge37" class="edge">
430
+ <g id="edge42" class="edge">
384
431
  <title>Correlate&#45;&gt;Prompt</title>
385
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M688.58,-166C859.66,-183.09 1168.35,-218.92 1200.77,-257.75 1231.89,-295.02 1231.26,-329.21 1200.77,-367 1161.36,-415.85 700.85,-414.78 638.77,-424 621.19,-426.61 602.23,-430.63 585.23,-434.69"/>
386
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="584.97,-431.87 577.87,-436.49 586.3,-437.31 584.97,-431.87"/>
387
- <text xml:space="preserve" text-anchor="middle" x="1263.25" y="-293.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
432
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M828.62,-203.67C1003.45,-230.16 1320.86,-279.42 1328.88,-289 1368.92,-336.91 1372.57,-384.89 1328.88,-429.5 1321.29,-437.24 949.62,-436.08 938.88,-437.5 900.3,-442.6 892.4,-453.02 853.88,-458.5 547.81,-502.02 461.46,-423.17 158.88,-486.5 153.95,-487.53 148.92,-488.9 143.94,-490.47"/>
433
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="143.38,-487.7 136.71,-492.94 145.19,-493 143.38,-487.7"/>
434
+ <text xml:space="preserve" text-anchor="middle" x="1399.67" y="-324.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
388
435
  </g>
389
436
  <!-- Correlate&#45;&gt;Fmet -->
390
437
  <!-- Fmis&#45;&gt;Prompt -->
391
- <g id="edge34" class="edge">
438
+ <g id="edge39" class="edge">
392
439
  <title>Fmis&#45;&gt;Prompt</title>
393
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M638.51,-52.51C649.9,-65.63 667.34,-82.72 686.77,-91.25 712.15,-102.39 1158.49,-124.87 1183.77,-136.25 1290.91,-184.47 1386.68,-275.67 1312.77,-367 1265.49,-425.42 713.18,-413.46 638.77,-424 621.17,-426.49 602.21,-430.48 585.21,-434.55"/>
394
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="584.95,-431.73 577.85,-436.36 586.28,-437.17 584.95,-431.73"/>
395
- <text xml:space="preserve" text-anchor="middle" x="1351.6" y="-221.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">KNOWN MISTAKES</text>
396
- <text xml:space="preserve" text-anchor="middle" x="1351.6" y="-210.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">+ KNOWN FIXES</text>
440
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M821.76,-52.51C830.84,-73.04 848.88,-106.31 875.88,-122.5 884.94,-127.94 1243.9,-164 1253.88,-167.5 1350.22,-201.35 1399.31,-199.72 1448.88,-289 1479.18,-343.6 1491.79,-384.14 1448.88,-429.5 1443.37,-435.32 1312.87,-437.02 1304.88,-437.5 1160.39,-446.18 1124.44,-451.37 979.88,-458.5 797.55,-467.5 337.67,-449.65 158.88,-486.5 153.95,-487.52 148.91,-488.87 143.93,-490.44"/>
441
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="143.37,-487.67 136.71,-492.9 145.18,-492.97 143.37,-487.67"/>
442
+ <text xml:space="preserve" text-anchor="middle" x="1471.38" y="-252.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">KNOWN MISTAKES</text>
443
+ <text xml:space="preserve" text-anchor="middle" x="1471.38" y="-241.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">+ KNOWN FIXES</text>
397
444
  </g>
398
445
  <!-- Fmem&#45;&gt;Prompt -->
399
- <g id="edge32" class="edge">
446
+ <g id="edge37" class="edge">
400
447
  <title>Fmem&#45;&gt;Prompt</title>
401
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M760.26,-52.44C771.45,-65.53 788.59,-82.61 807.77,-91.25 986.98,-172.02 1058.3,-83.87 1247.77,-136.25 1325.31,-157.69 1415.46,-150.31 1402.77,-229.75 1392.64,-293.14 1400.63,-319.21 1357.77,-367 1336.92,-390.25 1324.14,-388.76 1293.77,-396 1152.05,-429.79 783.11,-404.23 638.77,-424 620.83,-426.46 601.48,-430.53 584.24,-434.68"/>
402
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="583.9,-431.88 576.81,-436.51 585.24,-437.32 583.9,-431.88"/>
403
- <text xml:space="preserve" text-anchor="middle" x="1436.22" y="-215.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
448
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M583.29,-52.35C591.97,-73.04 609.56,-106.82 636.88,-122.5 651.78,-131.06 1236.83,-165.33 1253.88,-167.5 1433.69,-190.41 1680.78,-82.21 1650.88,-261 1637.81,-339.12 1654.91,-380.26 1592.88,-429.5 1589.79,-431.95 1314.8,-458.25 1310.88,-458.5 1055.31,-474.72 409.93,-436.04 158.88,-486.5 153.69,-487.54 148.37,-488.98 143.13,-490.63"/>
449
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="142.35,-487.94 135.69,-493.18 144.17,-493.24 142.35,-487.94"/>
450
+ <text xml:space="preserve" text-anchor="middle" x="1685.37" y="-247.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
404
451
  </g>
405
452
  <!-- Fskl&#45;&gt;Prompt -->
406
- <g id="edge33" class="edge">
453
+ <g id="edge38" class="edge">
407
454
  <title>Fskl&#45;&gt;Prompt</title>
408
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M872.48,-52.69C882.15,-65.73 897.13,-82.63 914.77,-91.25 1088.18,-176.05 1162.52,-78.65 1346.77,-136.25 1415.39,-157.7 1495.16,-159.75 1478.77,-229.75 1457.69,-319.76 1443.23,-372.69 1353.77,-396 1199.89,-436.09 796.35,-402.7 638.77,-424 620.82,-426.43 601.48,-430.49 584.23,-434.64"/>
409
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="583.9,-431.84 576.8,-436.48 585.24,-437.28 583.9,-431.84"/>
410
- <text xml:space="preserve" text-anchor="middle" x="1508.31" y="-215.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
455
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M346.1,-52.39C353.34,-73.12 368.62,-106.93 394.88,-122.5 477.09,-171.24 1158.75,-158.27 1253.88,-167.5 1483.24,-189.77 1802.5,-33.82 1763.88,-261 1750.58,-339.22 1765.56,-378.38 1704.88,-429.5 1645.25,-479.73 1609.5,-451.24 1531.88,-458.5 1228.03,-486.91 458.18,-426.95 158.88,-486.5 153.48,-487.57 147.95,-489.07 142.51,-490.81"/>
456
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="141.99,-488.02 135.34,-493.28 143.82,-493.32 141.99,-488.02"/>
457
+ <text xml:space="preserve" text-anchor="middle" x="1793.81" y="-247.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
411
458
  </g>
412
459
  <!-- Fext&#45;&gt;Prompt -->
413
- <g id="edge35" class="edge">
460
+ <g id="edge40" class="edge">
414
461
  <title>Fext&#45;&gt;Prompt</title>
415
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M390.5,-52.69C404.23,-65.91 424.9,-83.05 446.77,-91.25 600.4,-148.86 1020.44,-120.56 1183.77,-136.25 1430.07,-159.92 1572.59,-22.74 1735.77,-208.75 1800.33,-282.34 1713.42,-367.49 1619.77,-396 1515.45,-427.76 746.91,-409.97 638.77,-424 620.81,-426.33 601.46,-430.37 584.22,-434.53"/>
416
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="583.88,-431.73 576.79,-436.37 585.22,-437.16 583.88,-431.73"/>
417
- <text xml:space="preserve" text-anchor="middle" x="1777.26" y="-215.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
462
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M1000.59,-38.76C1173.55,-52.54 1726.75,-106.52 1830.88,-240 1885.73,-310.32 1832.08,-370.87 1764.88,-429.5 1723.53,-465.57 1699.29,-451.5 1644.88,-458.5 1317.3,-500.65 482.86,-422.3 158.88,-486.5 153.48,-487.57 147.95,-489.07 142.51,-490.8"/>
463
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="141.99,-488.02 135.34,-493.27 143.81,-493.31 141.99,-488.02"/>
464
+ <text xml:space="preserve" text-anchor="middle" x="1871.55" y="-247.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
418
465
  </g>
419
466
  </g>
420
467
  </svg>