pwn 0.5.618 → 0.5.621

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +14 -6
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/Agent-Tool-Registry.md +4 -4
  6. data/documentation/Cron.md +13 -0
  7. data/documentation/Diagrams.md +6 -2
  8. data/documentation/Extrospection.md +96 -11
  9. data/documentation/Home.md +5 -4
  10. data/documentation/How-PWN-Works.md +7 -4
  11. data/documentation/Mistakes.md +97 -0
  12. data/documentation/Persistence.md +4 -1
  13. data/documentation/SDR.md +23 -5
  14. data/documentation/Skills-Memory-Learning.md +16 -5
  15. data/documentation/Transparent-Browser.md +18 -1
  16. data/documentation/diagrams/agent-tool-registry.svg +103 -100
  17. data/documentation/diagrams/ai-integration-tool-calling.svg +24 -24
  18. data/documentation/diagrams/aws-cloud-security.svg +25 -25
  19. data/documentation/diagrams/burp-vs-zap-preference.svg +12 -12
  20. data/documentation/diagrams/code-scanning-sast.svg +25 -25
  21. data/documentation/diagrams/cron-scheduling.svg +23 -23
  22. data/documentation/diagrams/dot/agent-tool-registry.dot +3 -3
  23. data/documentation/diagrams/dot/extrospection-world-awareness.dot +33 -10
  24. data/documentation/diagrams/dot/memory-skills-detailed.dot +16 -5
  25. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  26. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  27. data/documentation/diagrams/dot/persistence-filesystem.dot +4 -2
  28. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +25 -7
  29. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  30. data/documentation/diagrams/driver-framework.svg +13 -13
  31. data/documentation/diagrams/extrospection-world-awareness.svg +241 -93
  32. data/documentation/diagrams/fuzzing-workflow.svg +24 -24
  33. data/documentation/diagrams/hardware-hacking.svg +18 -18
  34. data/documentation/diagrams/history-to-drivers.svg +18 -18
  35. data/documentation/diagrams/memory-skills-detailed.svg +169 -97
  36. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  37. data/documentation/diagrams/network-infra-testing.svg +27 -27
  38. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  39. data/documentation/diagrams/penetration-testing-workflow.svg +30 -30
  40. data/documentation/diagrams/persistence-filesystem.svg +111 -87
  41. data/documentation/diagrams/plugin-ecosystem.svg +35 -35
  42. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +263 -149
  43. data/documentation/diagrams/pwn-repl-prototyping.svg +20 -20
  44. data/documentation/diagrams/reporting-pipeline.svg +18 -18
  45. data/documentation/diagrams/reverse-engineering-flow.svg +21 -21
  46. data/documentation/diagrams/sdr-radio-flow.svg +76 -56
  47. data/documentation/diagrams/sessions-cron-automation.svg +18 -18
  48. data/documentation/diagrams/swarm-multi-agent.svg +39 -39
  49. data/documentation/diagrams/web-application-testing.svg +26 -26
  50. data/documentation/diagrams/zero-day-research-flow.svg +25 -25
  51. data/documentation/pwn-ai-Agent.md +28 -15
  52. data/lib/pwn/ai/agent/extrospection.rb +494 -6
  53. data/lib/pwn/ai/agent/learning.rb +67 -7
  54. data/lib/pwn/ai/agent/loop.rb +72 -6
  55. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  56. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  57. data/lib/pwn/ai/agent/tools/extrospection.rb +88 -3
  58. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  59. data/lib/pwn/ai/agent.rb +1 -0
  60. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  61. data/lib/pwn/sdr/decoder/adsb.rb +82 -0
  62. data/lib/pwn/sdr/decoder/apt.rb +136 -0
  63. data/lib/pwn/sdr/decoder/base.rb +258 -171
  64. data/lib/pwn/sdr/decoder/bluetooth.rb +71 -0
  65. data/lib/pwn/sdr/decoder/dect.rb +70 -0
  66. data/lib/pwn/sdr/decoder/dsp.rb +396 -0
  67. data/lib/pwn/sdr/decoder/flex.rb +177 -210
  68. data/lib/pwn/sdr/decoder/gps.rb +74 -0
  69. data/lib/pwn/sdr/decoder/gsm.rb +31 -62
  70. data/lib/pwn/sdr/decoder/iridium.rb +66 -0
  71. data/lib/pwn/sdr/decoder/lora.rb +80 -0
  72. data/lib/pwn/sdr/decoder/lte.rb +67 -0
  73. data/lib/pwn/sdr/decoder/morse.rb +138 -0
  74. data/lib/pwn/sdr/decoder/p25.rb +74 -0
  75. data/lib/pwn/sdr/decoder/pager.rb +61 -0
  76. data/lib/pwn/sdr/decoder/pocsag.rb +176 -54
  77. data/lib/pwn/sdr/decoder/rfid.rb +79 -0
  78. data/lib/pwn/sdr/decoder/rtl433.rb +86 -0
  79. data/lib/pwn/sdr/decoder/rtty.rb +139 -0
  80. data/lib/pwn/sdr/decoder/wifi.rb +77 -0
  81. data/lib/pwn/sdr/decoder/zigbee.rb +74 -0
  82. data/lib/pwn/sdr/decoder.rb +75 -7
  83. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  84. data/lib/pwn/sdr/gqrx.rb +186 -95
  85. data/lib/pwn/version.rb +1 -1
  86. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  87. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  88. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  89. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  90. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  91. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  92. data/spec/lib/pwn/sdr/decoder/dsp_spec.rb +15 -0
  93. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  94. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  95. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  96. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  97. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  98. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  99. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  100. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  101. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  102. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  103. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  104. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  105. data/third_party/pwn_rdoc.jsonl +115 -5
  106. metadata +46 -6
  107. data/README.md.bak +0 -200
@@ -4,303 +4,417 @@
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="1195pt" height="689pt"
8
- viewBox="0.00 0.00 1195.00 689.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 645.45)">
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)">
10
10
  <title>PWN_AI_Feedback_Learning_Loop</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-645.45 1152.12,-645.45 1152.12,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="360.96" y="-580.25" 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="445.34" y="-568.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Introspection (self) &#160;⟷ &#160;Extrospection (world)</text>
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>
14
14
  <g id="clust2" class="cluster">
15
15
  <title>cluster_core</title>
16
- <path fill="#2e1065" stroke="#6d28d9" stroke-width="2" d="M120,-389.5C120,-389.5 500,-389.5 500,-389.5 506,-389.5 512,-395.5 512,-401.5 512,-401.5 512,-460.75 512,-460.75 512,-466.75 506,-472.75 500,-472.75 500,-472.75 120,-472.75 120,-472.75 114,-472.75 108,-466.75 108,-460.75 108,-460.75 108,-401.5 108,-401.5 108,-395.5 114,-389.5 120,-389.5"/>
17
- <text xml:space="preserve" text-anchor="middle" x="310" y="-449.75" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">PWN::AI::Agent::Loop</text>
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>
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="M357,-247.25C357,-247.25 656,-247.25 656,-247.25 662,-247.25 668,-253.25 668,-259.25 668,-259.25 668,-331 668,-331 668,-337 662,-343 656,-343 656,-343 357,-343 357,-343 351,-343 345,-337 345,-331 345,-331 345,-259.25 345,-259.25 345,-253.25 351,-247.25 357,-247.25"/>
22
- <text xml:space="preserve" text-anchor="middle" x="506.5" y="-320" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">INTROSPECTION &#160;(self)</text>
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>
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="M20,-253.5C20,-253.5 304,-253.5 304,-253.5 310,-253.5 316,-259.5 316,-265.5 316,-265.5 316,-324.75 316,-324.75 316,-330.75 310,-336.75 304,-336.75 304,-336.75 20,-336.75 20,-336.75 14,-336.75 8,-330.75 8,-324.75 8,-324.75 8,-265.5 8,-265.5 8,-259.5 14,-253.5 20,-253.5"/>
27
- <text xml:space="preserve" text-anchor="middle" x="162" y="-313.75" font-family="sans-Serif" font-size="20.00" fill="#fde68a">EXTROSPECTION &#160;(world)</text>
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>
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="M199,-8C199,-8 759,-8 759,-8 765,-8 771,-14 771,-20 771,-20 771,-79.25 771,-79.25 771,-85.25 765,-91.25 759,-91.25 759,-91.25 199,-91.25 199,-91.25 193,-91.25 187,-85.25 187,-79.25 187,-79.25 187,-20 187,-20 187,-14 193,-8 199,-8"/>
32
- <text xml:space="preserve" text-anchor="middle" x="479" y="-68.25" font-family="sans-Serif" font-size="20.00" fill="#94a3b8">~/.pwn/</text>
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>
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="M192.88,-563.25C192.88,-563.25 125.12,-563.25 125.12,-563.25 119.12,-563.25 113.12,-557.25 113.12,-551.25 113.12,-551.25 113.12,-539.25 113.12,-539.25 113.12,-533.25 119.12,-527.25 125.12,-527.25 125.12,-527.25 192.88,-527.25 192.88,-527.25 198.88,-527.25 204.88,-533.25 204.88,-539.25 204.88,-539.25 204.88,-551.25 204.88,-551.25 204.88,-557.25 198.88,-563.25 192.88,-563.25"/>
38
- <text xml:space="preserve" text-anchor="middle" x="159" y="-541.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">👤 &#160;Researcher</text>
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>
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="M189.5,-433.5C189.5,-433.5 128.5,-433.5 128.5,-433.5 122.5,-433.5 116.5,-427.5 116.5,-421.5 116.5,-421.5 116.5,-409.5 116.5,-409.5 116.5,-403.5 122.5,-397.5 128.5,-397.5 128.5,-397.5 189.5,-397.5 189.5,-397.5 195.5,-397.5 201.5,-403.5 201.5,-409.5 201.5,-409.5 201.5,-421.5 201.5,-421.5 201.5,-427.5 195.5,-433.5 189.5,-433.5"/>
44
- <text xml:space="preserve" text-anchor="middle" x="159" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">PromptBuilder</text>
45
- <text xml:space="preserve" text-anchor="middle" x="159" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">inject context</text>
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>
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="M159,-526.75C159,-505.75 159,-470.24 159,-445.2"/>
51
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="161.8,-445.22 159,-437.22 156.2,-445.22 161.8,-445.22"/>
52
- <text xml:space="preserve" text-anchor="middle" x="167.25" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">task</text>
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>
53
+ </g>
54
+ <!-- Mistakes -->
55
+ <g id="node9" class="node">
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>
62
+ </g>
63
+ <!-- User&#45;&gt;Mistakes -->
64
+ <g id="edge9" class="edge">
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>
53
70
  </g>
54
71
  <!-- LLM -->
55
72
  <g id="node2" class="node">
56
73
  <title>LLM</title>
57
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M593,-563.25C593,-563.25 517,-563.25 517,-563.25 511,-563.25 505,-557.25 505,-551.25 505,-551.25 505,-539.25 505,-539.25 505,-533.25 511,-527.25 517,-527.25 517,-527.25 593,-527.25 593,-527.25 599,-527.25 605,-533.25 605,-539.25 605,-539.25 605,-551.25 605,-551.25 605,-557.25 599,-563.25 593,-563.25"/>
58
- <text xml:space="preserve" text-anchor="middle" x="555" y="-541.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🤖 &#160;LLM Provider</text>
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>
59
76
  </g>
60
77
  <!-- Dispatch -->
61
78
  <g id="node5" class="node">
62
79
  <title>Dispatch</title>
63
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M333,-433.5C333,-433.5 299,-433.5 299,-433.5 293,-433.5 287,-427.5 287,-421.5 287,-421.5 287,-409.5 287,-409.5 287,-403.5 293,-397.5 299,-397.5 299,-397.5 333,-397.5 333,-397.5 339,-397.5 345,-403.5 345,-409.5 345,-409.5 345,-421.5 345,-421.5 345,-427.5 339,-433.5 333,-433.5"/>
64
- <text xml:space="preserve" text-anchor="middle" x="316" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Dispatch</text>
65
- <text xml:space="preserve" text-anchor="middle" x="316" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">tool calls</text>
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>
66
83
  </g>
67
84
  <!-- LLM&#45;&gt;Dispatch -->
68
85
  <g id="edge2" class="edge">
69
86
  <title>LLM&#45;&gt;Dispatch</title>
70
- <path fill="none" stroke="#a78bfa" stroke-width="2" d="M506.92,-522.02C478.18,-508.41 441.13,-490.29 409,-472.75 390.13,-462.45 369.65,-450.18 352.71,-439.73"/>
71
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="505.55,-524.47 513.98,-525.35 507.94,-519.41 505.55,-524.47"/>
72
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="2" points="354.55,-437.58 346.28,-435.74 351.6,-442.34 354.55,-437.58"/>
73
- <text xml:space="preserve" text-anchor="middle" x="460" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">tool_calls</text>
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>
74
91
  </g>
75
92
  <!-- World -->
76
93
  <g id="node3" class="node">
77
94
  <title>World</title>
78
- <path fill="#fda4af" stroke="#334155" stroke-width="1.4" d="M434.75,-563.25C434.75,-563.25 339.25,-563.25 339.25,-563.25 333.25,-563.25 327.25,-557.25 327.25,-551.25 327.25,-551.25 327.25,-539.25 327.25,-539.25 327.25,-533.25 333.25,-527.25 339.25,-527.25 339.25,-527.25 434.75,-527.25 434.75,-527.25 440.75,-527.25 446.75,-533.25 446.75,-539.25 446.75,-539.25 446.75,-551.25 446.75,-551.25 446.75,-557.25 440.75,-563.25 434.75,-563.25"/>
79
- <text xml:space="preserve" text-anchor="middle" x="387" y="-548.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">🌍 &#160;Host · Net · Repo</text>
80
- <text xml:space="preserve" text-anchor="middle" x="387" y="-534.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Toolchain · Intel feeds</text>
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>
81
98
  </g>
82
99
  <!-- Result -->
83
100
  <g id="node6" class="node">
84
101
  <title>Result</title>
85
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.4" d="M491.88,-433.5C491.88,-433.5 442.12,-433.5 442.12,-433.5 436.12,-433.5 430.12,-427.5 430.12,-421.5 430.12,-421.5 430.12,-409.5 430.12,-409.5 430.12,-403.5 436.12,-397.5 442.12,-397.5 442.12,-397.5 491.88,-397.5 491.88,-397.5 497.88,-397.5 503.88,-403.5 503.88,-409.5 503.88,-409.5 503.88,-421.5 503.88,-421.5 503.88,-427.5 497.88,-433.5 491.88,-433.5"/>
86
- <text xml:space="preserve" text-anchor="middle" x="467" y="-418.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Result</text>
87
- <text xml:space="preserve" text-anchor="middle" x="467" y="-405.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">final answer</text>
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>
88
105
  </g>
89
106
  <!-- World&#45;&gt;Result -->
90
107
  <!-- Snapshot -->
91
- <g id="node9" class="node">
108
+ <g id="node10" class="node">
92
109
  <title>Snapshot</title>
93
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M296.38,-297.5C296.38,-297.5 195.62,-297.5 195.62,-297.5 189.62,-297.5 183.62,-291.5 183.62,-285.5 183.62,-285.5 183.62,-273.5 183.62,-273.5 183.62,-267.5 189.62,-261.5 195.62,-261.5 195.62,-261.5 296.38,-261.5 296.38,-261.5 302.38,-261.5 308.38,-267.5 308.38,-273.5 308.38,-273.5 308.38,-285.5 308.38,-285.5 308.38,-291.5 302.38,-297.5 296.38,-297.5"/>
94
- <text xml:space="preserve" text-anchor="middle" x="246" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">snapshot · drift</text>
95
- <text xml:space="preserve" text-anchor="middle" x="246" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">host/net/toolchain/repo</text>
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>
96
114
  </g>
97
115
  <!-- World&#45;&gt;Snapshot -->
98
- <g id="edge10" class="edge">
116
+ <g id="edge12" class="edge">
99
117
  <title>World&#45;&gt;Snapshot</title>
100
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M402.07,-526.82C416.01,-511.95 438.14,-491.34 462,-480.75 486.59,-469.84 499.66,-487.73 522,-472.75 572.77,-438.71 628.53,-394.91 586,-351 576.29,-340.98 348.23,-347.42 335,-343 311.08,-335.02 287.9,-318.36 271.19,-304.24"/>
101
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="273.35,-302.41 265.48,-299.27 269.67,-306.63 273.35,-302.41"/>
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"/>
102
120
  </g>
103
121
  <!-- Observe -->
104
- <g id="node10" class="node">
122
+ <g id="node11" class="node">
105
123
  <title>Observe</title>
106
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M128.38,-297.5C128.38,-297.5 27.62,-297.5 27.62,-297.5 21.62,-297.5 15.63,-291.5 15.63,-285.5 15.63,-285.5 15.63,-273.5 15.63,-273.5 15.63,-267.5 21.63,-261.5 27.63,-261.5 27.63,-261.5 128.38,-261.5 128.38,-261.5 134.38,-261.5 140.38,-267.5 140.38,-273.5 140.38,-273.5 140.38,-285.5 140.38,-285.5 140.38,-291.5 134.38,-297.5 128.38,-297.5"/>
107
- <text xml:space="preserve" text-anchor="middle" x="78" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">observe · intel</text>
108
- <text xml:space="preserve" text-anchor="middle" x="78" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">recon facts · CVE feed</text>
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>
109
127
  </g>
110
128
  <!-- World&#45;&gt;Observe -->
111
- <g id="edge11" class="edge">
129
+ <g id="edge13" class="edge">
112
130
  <title>World&#45;&gt;Observe</title>
113
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M422.73,-526.62C460,-508.02 514.11,-480.37 522,-472.75 565.98,-430.29 628.82,-394.63 586,-351 569.5,-334.18 184.29,-350.62 162,-343 139.24,-335.22 117.56,-318.78 101.93,-304.72"/>
114
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="103.97,-302.79 96.2,-299.39 100.15,-306.89 103.97,-302.79"/>
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"/>
133
+ </g>
134
+ <!-- Verify -->
135
+ <g id="node12" class="node">
136
+ <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>
141
+ </g>
142
+ <!-- World&#45;&gt;Verify -->
143
+ <g id="edge14" class="edge">
144
+ <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>
115
149
  </g>
116
150
  <!-- Prompt&#45;&gt;Dispatch -->
117
151
  <g id="edge4" class="edge">
118
152
  <title>Prompt&#45;&gt;Dispatch</title>
119
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M201.93,-415.5C226.84,-415.5 251.76,-415.5 276.67,-415.5"/>
120
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="276.62,-418.3 284.62,-415.5 276.62,-412.7 276.62,-418.3"/>
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"/>
121
155
  </g>
122
156
  <!-- Dispatch&#45;&gt;Result -->
123
157
  <g id="edge5" class="edge">
124
158
  <title>Dispatch&#45;&gt;Result</title>
125
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M345.49,-415.5C370.21,-415.5 394.94,-415.5 419.66,-415.5"/>
126
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="419.54,-418.3 427.54,-415.5 419.54,-412.7 419.54,-418.3"/>
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"/>
127
161
  </g>
128
162
  <!-- Metrics -->
129
163
  <g id="node7" class="node">
130
164
  <title>Metrics</title>
131
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M478.75,-297.5C478.75,-297.5 365.25,-297.5 365.25,-297.5 359.25,-297.5 353.25,-291.5 353.25,-285.5 353.25,-285.5 353.25,-273.5 353.25,-273.5 353.25,-267.5 359.25,-261.5 365.25,-261.5 365.25,-261.5 478.75,-261.5 478.75,-261.5 484.75,-261.5 490.75,-267.5 490.75,-273.5 490.75,-273.5 490.75,-285.5 490.75,-285.5 490.75,-291.5 484.75,-297.5 478.75,-297.5"/>
132
- <text xml:space="preserve" text-anchor="middle" x="422" y="-282.55" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Metrics</text>
133
- <text xml:space="preserve" text-anchor="middle" x="422" y="-269.05" font-family="sans-Serif" font-size="11.00" fill="#0f172a">per&#45;tool success · avg ms</text>
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>
134
168
  </g>
135
169
  <!-- Dispatch&#45;&gt;Metrics -->
136
170
  <g id="edge6" class="edge">
137
171
  <title>Dispatch&#45;&gt;Metrics</title>
138
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M341.32,-396.81C353.7,-387.32 368.22,-374.84 379,-361.5 392.43,-344.89 403.59,-323.44 411.17,-306.79"/>
139
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="413.55,-308.34 414.22,-299.89 408.43,-306.08 413.55,-308.34"/>
140
- <text xml:space="preserve" text-anchor="middle" x="402.55" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">record()</text>
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>
141
175
  </g>
142
- <!-- Dispatch&#45;&gt;Snapshot -->
176
+ <!-- Dispatch&#45;&gt;Mistakes -->
143
177
  <g id="edge8" class="edge">
178
+ <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>
183
+ </g>
184
+ <!-- Dispatch&#45;&gt;Snapshot -->
185
+ <g id="edge10" class="edge">
144
186
  <title>Dispatch&#45;&gt;Snapshot</title>
145
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M286.41,-403.45C268.31,-394.97 246.64,-381.31 236,-361.5 227.09,-344.91 230.13,-323.71 235.11,-307.16"/>
146
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="237.66,-308.37 237.56,-299.89 232.35,-306.58 237.66,-308.37"/>
147
- <text xml:space="preserve" text-anchor="middle" x="248" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">probe</text>
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>
148
190
  </g>
149
191
  <!-- Result&#45;&gt;User -->
150
- <g id="edge26" class="edge">
192
+ <g id="edge38" class="edge">
151
193
  <title>Result&#45;&gt;User</title>
152
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M438.83,-434.16C419.18,-446.03 392.08,-461.5 367,-472.75 317.22,-495.09 258.21,-514.76 215.78,-527.79"/>
153
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="215.1,-525.07 208.26,-530.08 216.73,-530.43 215.1,-525.07"/>
154
- <text xml:space="preserve" text-anchor="middle" x="360.1" y="-482.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">answer</text>
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>
155
197
  </g>
156
198
  <!-- Learning -->
157
199
  <g id="node8" class="node">
158
200
  <title>Learning</title>
159
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.4" d="M647.75,-303.75C647.75,-303.75 546.25,-303.75 546.25,-303.75 540.25,-303.75 534.25,-297.75 534.25,-291.75 534.25,-291.75 534.25,-267.25 534.25,-267.25 534.25,-261.25 540.25,-255.25 546.25,-255.25 546.25,-255.25 647.75,-255.25 647.75,-255.25 653.75,-255.25 659.75,-261.25 659.75,-267.25 659.75,-267.25 659.75,-291.75 659.75,-291.75 659.75,-297.75 653.75,-303.75 647.75,-303.75"/>
160
- <text xml:space="preserve" text-anchor="middle" x="597" y="-289.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">Learning</text>
161
- <text xml:space="preserve" text-anchor="middle" x="597" y="-275.8" font-family="sans-Serif" font-size="11.00" fill="#0f172a">note_outcome · reflect</text>
162
- <text xml:space="preserve" text-anchor="middle" x="597" y="-262.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">consolidate · distill_skill</text>
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>
163
205
  </g>
164
206
  <!-- Result&#45;&gt;Learning -->
165
207
  <g id="edge7" class="edge">
166
208
  <title>Result&#45;&gt;Learning</title>
167
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M484,-396.98C505.1,-375.23 541.45,-337.76 567.22,-311.2"/>
168
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="568.93,-313.46 572.49,-305.77 564.91,-309.56 568.93,-313.46"/>
169
- <text xml:space="preserve" text-anchor="middle" x="552.1" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_reflect</text>
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>
170
212
  </g>
171
213
  <!-- Result&#45;&gt;Observe -->
172
- <g id="edge9" class="edge">
214
+ <g id="edge11" class="edge">
173
215
  <title>Result&#45;&gt;Observe</title>
174
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M429.54,-402.15C376,-384.59 282.26,-354.15 266,-351 220.49,-342.18 205.42,-359.25 162,-343 139.62,-334.62 118.07,-318.36 102.4,-304.53"/>
175
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="104.46,-302.61 96.66,-299.3 100.69,-306.76 104.46,-302.61"/>
176
- <text xml:space="preserve" text-anchor="middle" x="332.76" y="-352.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto_extrospect</text>
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>
177
219
  </g>
178
220
  <!-- Correlate -->
179
- <g id="node11" class="node">
221
+ <g id="node13" class="node">
180
222
  <title>Correlate</title>
181
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M345.88,-172.75C345.88,-172.75 146.12,-172.75 146.12,-172.75 140.12,-172.75 134.12,-166.75 134.12,-160.75 134.12,-160.75 134.12,-148.25 134.12,-148.25 134.12,-142.25 140.12,-136.25 146.12,-136.25 146.12,-136.25 345.88,-136.25 345.88,-136.25 351.88,-136.25 357.88,-142.25 357.88,-148.25 357.88,-148.25 357.88,-160.75 357.88,-160.75 357.88,-166.75 351.88,-172.75 345.88,-172.75"/>
182
- <text xml:space="preserve" text-anchor="middle" x="246" y="-157.35" font-family="sans-Serif" font-size="12.00" fill="#0f172a">extro_correlate()</text>
183
- <text xml:space="preserve" text-anchor="middle" x="246" y="-143.1" 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>
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>
184
226
  </g>
185
227
  <!-- Metrics&#45;&gt;Correlate -->
186
- <g id="edge12" class="edge">
228
+ <g id="edge15" class="edge">
187
229
  <title>Metrics&#45;&gt;Correlate</title>
188
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M396,-261.03C378.65,-249.31 355.37,-233.48 335,-219.25 316.25,-206.16 295.47,-191.29 278.7,-179.21"/>
189
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="280.55,-177.08 272.42,-174.67 277.27,-181.62 280.55,-177.08"/>
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"/>
190
232
  </g>
191
233
  <!-- Fmet -->
192
- <g id="node12" class="node">
234
+ <g id="node14" class="node">
193
235
  <title>Fmet</title>
194
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M413.5,-48.73C413.5,-50.53 397.14,-52 377,-52 356.86,-52 340.5,-50.53 340.5,-48.73 340.5,-48.73 340.5,-19.27 340.5,-19.27 340.5,-17.47 356.86,-16 377,-16 397.14,-16 413.5,-17.47 413.5,-19.27 413.5,-19.27 413.5,-48.73 413.5,-48.73"/>
195
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M413.5,-48.73C413.5,-46.92 397.14,-45.45 377,-45.45 356.86,-45.45 340.5,-46.92 340.5,-48.73"/>
196
- <text xml:space="preserve" text-anchor="middle" x="377" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">metrics.json</text>
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>
197
239
  </g>
198
240
  <!-- Metrics&#45;&gt;Fmet -->
199
- <g id="edge17" class="edge">
241
+ <g id="edge22" class="edge">
200
242
  <title>Metrics&#45;&gt;Fmet</title>
201
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M418.76,-260.99C411.01,-219.06 391.35,-112.65 382.04,-62.26"/>
202
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="384.83,-61.97 380.63,-54.62 379.33,-62.99 384.83,-61.97"/>
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"/>
203
245
  </g>
204
246
  <!-- Learning&#45;&gt;Correlate -->
205
- <g id="edge13" class="edge">
247
+ <g id="edge16" class="edge">
206
248
  <title>Learning&#45;&gt;Correlate</title>
207
- <path fill="none" stroke="#34d399" stroke-width="1.3" d="M533.92,-255.15C526.54,-252.46 519.11,-249.78 512,-247.25 442.72,-222.57 362.94,-195.19 308.96,-176.82"/>
208
- <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="310.2,-174.28 301.72,-174.36 308.4,-179.58 310.2,-174.28"/>
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"/>
209
251
  </g>
210
252
  <!-- Flrn -->
211
- <g id="node13" class="node">
253
+ <g id="node15" class="node">
212
254
  <title>Flrn</title>
213
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M535.5,-48.73C535.5,-50.53 517.8,-52 496,-52 474.2,-52 456.5,-50.53 456.5,-48.73 456.5,-48.73 456.5,-19.27 456.5,-19.27 456.5,-17.47 474.2,-16 496,-16 517.8,-16 535.5,-17.47 535.5,-19.27 535.5,-19.27 535.5,-48.73 535.5,-48.73"/>
214
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M535.5,-48.73C535.5,-46.92 517.8,-45.45 496,-45.45 474.2,-45.45 456.5,-46.92 456.5,-48.73"/>
215
- <text xml:space="preserve" text-anchor="middle" x="496" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">learning.jsonl</text>
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>
216
258
  </g>
217
259
  <!-- Learning&#45;&gt;Flrn -->
218
- <g id="edge18" class="edge">
260
+ <g id="edge23" class="edge">
219
261
  <title>Learning&#45;&gt;Flrn</title>
220
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M587.13,-254.71C568.19,-209.03 526.84,-109.35 507.02,-61.57"/>
221
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="509.65,-60.6 504,-54.29 504.48,-62.75 509.65,-60.6"/>
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"/>
222
264
  </g>
223
265
  <!-- Fmem -->
224
- <g id="node14" class="node">
266
+ <g id="node17" class="node">
225
267
  <title>Fmem</title>
226
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M655.75,-48.73C655.75,-50.53 638.38,-52 617,-52 595.62,-52 578.25,-50.53 578.25,-48.73 578.25,-48.73 578.25,-19.27 578.25,-19.27 578.25,-17.47 595.62,-16 617,-16 638.38,-16 655.75,-17.47 655.75,-19.27 655.75,-19.27 655.75,-48.73 655.75,-48.73"/>
227
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M655.75,-48.73C655.75,-46.92 638.38,-45.45 617,-45.45 595.62,-45.45 578.25,-46.92 578.25,-48.73"/>
228
- <text xml:space="preserve" text-anchor="middle" x="617" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">memory.json</text>
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>
229
271
  </g>
230
272
  <!-- Learning&#45;&gt;Fmem -->
231
- <g id="edge19" class="edge">
273
+ <g id="edge26" class="edge">
232
274
  <title>Learning&#45;&gt;Fmem</title>
233
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M598.95,-254.71C602.69,-209.22 610.83,-110.18 614.77,-62.17"/>
234
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="617.54,-62.63 615.4,-54.43 611.96,-62.17 617.54,-62.63"/>
235
- <text xml:space="preserve" text-anchor="middle" x="622.16" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">lesson</text>
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>
236
278
  </g>
237
279
  <!-- Fskl -->
238
- <g id="node15" class="node">
280
+ <g id="node18" class="node">
239
281
  <title>Fskl</title>
240
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M763,-48.73C763,-50.53 748.66,-52 731,-52 713.34,-52 699,-50.53 699,-48.73 699,-48.73 699,-19.27 699,-19.27 699,-17.47 713.34,-16 731,-16 748.66,-16 763,-17.47 763,-19.27 763,-19.27 763,-48.73 763,-48.73"/>
241
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M763,-48.73C763,-46.92 748.66,-45.45 731,-45.45 713.34,-45.45 699,-46.92 699,-48.73"/>
242
- <text xml:space="preserve" text-anchor="middle" x="731" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">skills/*.md</text>
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>
243
285
  </g>
244
286
  <!-- Learning&#45;&gt;Fskl -->
245
- <g id="edge20" class="edge">
287
+ <g id="edge27" class="edge">
246
288
  <title>Learning&#45;&gt;Fskl</title>
247
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M612.35,-254.81C619.17,-244.07 627.17,-231.13 634,-219.25 665.74,-164 699.75,-97.49 717.86,-61.42"/>
248
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="720.37,-62.67 721.45,-54.26 715.36,-60.16 720.37,-62.67"/>
249
- <text xml:space="preserve" text-anchor="middle" x="686.07" y="-151.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">skill</text>
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>
292
+ </g>
293
+ <!-- Mistakes&#45;&gt;Dispatch -->
294
+ <g id="edge36" class="edge">
295
+ <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>
300
+ </g>
301
+ <!-- Mistakes&#45;&gt;Correlate -->
302
+ <g id="edge17" class="edge">
303
+ <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"/>
306
+ </g>
307
+ <!-- Fmis -->
308
+ <g id="node16" class="node">
309
+ <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>
313
+ </g>
314
+ <!-- Mistakes&#45;&gt;Fmis -->
315
+ <g id="edge24" class="edge">
316
+ <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"/>
319
+ </g>
320
+ <!-- Mistakes&#45;&gt;Fmem -->
321
+ <g id="edge25" class="edge">
322
+ <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>
250
326
  </g>
251
327
  <!-- Snapshot&#45;&gt;Correlate -->
252
- <g id="edge14" class="edge">
328
+ <g id="edge18" class="edge">
253
329
  <title>Snapshot&#45;&gt;Correlate</title>
254
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M246,-260.88C246,-240.62 246,-207.13 246,-183.34"/>
255
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="248.8,-183.46 246,-175.46 243.2,-183.46 248.8,-183.46"/>
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"/>
256
332
  </g>
257
333
  <!-- Observe&#45;&gt;Correlate -->
258
- <g id="edge15" class="edge">
334
+ <g id="edge19" class="edge">
259
335
  <title>Observe&#45;&gt;Correlate</title>
260
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M102.07,-260.88C131.26,-239.51 180.6,-203.38 213.24,-179.49"/>
261
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="214.76,-181.84 219.57,-174.85 211.46,-177.32 214.76,-181.84"/>
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"/>
262
338
  </g>
263
339
  <!-- Fext -->
264
- <g id="node16" class="node">
340
+ <g id="node19" class="node">
265
341
  <title>Fext</title>
266
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.4" d="M297.12,-48.73C297.12,-50.53 274.21,-52 246,-52 217.79,-52 194.88,-50.53 194.88,-48.73 194.88,-48.73 194.88,-19.27 194.88,-19.27 194.88,-17.47 217.79,-16 246,-16 274.21,-16 297.12,-17.47 297.12,-19.27 297.12,-19.27 297.12,-48.73 297.12,-48.73"/>
267
- <path fill="none" stroke="#334155" stroke-width="1.4" d="M297.12,-48.73C297.12,-46.92 274.21,-45.45 246,-45.45 217.79,-45.45 194.88,-46.92 194.88,-48.73"/>
268
- <text xml:space="preserve" text-anchor="middle" x="246" y="-30.3" font-family="sans-Serif" font-size="11.00" fill="#0f172a">extrospection.json</text>
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>
269
345
  </g>
270
346
  <!-- Observe&#45;&gt;Fext -->
271
- <g id="edge21" class="edge">
347
+ <g id="edge28" class="edge">
272
348
  <title>Observe&#45;&gt;Fext</title>
273
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" d="M78.63,-260.82C80.4,-232.36 87.19,-175.59 113,-136.25 135.46,-102.02 173.55,-74.77 203.23,-57.2"/>
274
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="204.52,-59.69 210.05,-53.27 201.72,-54.84 204.52,-59.69"/>
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"/>
351
+ </g>
352
+ <!-- Verify&#45;&gt;Correlate -->
353
+ <g id="edge20" class="edge">
354
+ <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"/>
357
+ </g>
358
+ <!-- Verify&#45;&gt;Fmis -->
359
+ <g id="edge29" class="edge">
360
+ <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>
365
+ </g>
366
+ <!-- Verify&#45;&gt;Fmem -->
367
+ <g id="edge30" class="edge">
368
+ <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>
373
+ </g>
374
+ <!-- Verify&#45;&gt;Fext -->
375
+ <g id="edge31" class="edge">
376
+ <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>
275
381
  </g>
276
382
  <!-- Correlate&#45;&gt;Prompt -->
277
- <g id="edge25" class="edge">
383
+ <g id="edge37" class="edge">
278
384
  <title>Correlate&#45;&gt;Prompt</title>
279
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M358.73,-163.68C473.02,-174.59 638.52,-198.5 678,-247.25 704.78,-280.32 704.96,-310.08 678,-343 619.62,-414.28 356.98,-374.97 266,-389.5 248.45,-392.3 229.5,-396.38 212.5,-400.43"/>
280
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="212.25,-397.61 205.13,-402.22 213.57,-403.05 212.25,-397.61"/>
281
- <text xml:space="preserve" text-anchor="middle" x="737.53" y="-276.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">findings → next run</text>
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>
282
388
  </g>
283
389
  <!-- Correlate&#45;&gt;Fmet -->
390
+ <!-- Fmis&#45;&gt;Prompt -->
391
+ <g id="edge34" class="edge">
392
+ <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>
397
+ </g>
284
398
  <!-- Fmem&#45;&gt;Prompt -->
285
- <g id="edge22" class="edge">
399
+ <g id="edge32" class="edge">
286
400
  <title>Fmem&#45;&gt;Prompt</title>
287
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M633.9,-52.68C673.84,-94.96 771.88,-201.78 787,-247.25 800.43,-287.63 814,-310.1 787,-343 750.13,-387.93 323.49,-380.96 266,-389.5 248.09,-392.16 228.75,-396.28 211.5,-400.42"/>
288
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.17,-397.62 204.07,-402.24 212.51,-403.06 211.17,-397.62"/>
289
- <text xml:space="preserve" text-anchor="middle" x="804.5" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
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>
290
404
  </g>
291
405
  <!-- Fskl&#45;&gt;Prompt -->
292
- <g id="edge23" class="edge">
406
+ <g id="edge33" class="edge">
293
407
  <title>Fskl&#45;&gt;Prompt</title>
294
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M747.89,-52.39C775.06,-81.72 827.43,-144.19 847,-208.75 864.5,-266.48 862.72,-294.39 827,-343 816.11,-357.82 807.77,-356.8 790,-361.5 564.53,-421.12 496.89,-356.62 266,-389.5 248.07,-392.05 228.73,-396.15 211.48,-400.29"/>
295
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.15,-397.49 204.05,-402.12 212.49,-402.93 211.15,-397.49"/>
296
- <text xml:space="preserve" text-anchor="middle" x="877.38" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">SKILLS block</text>
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>
297
411
  </g>
298
412
  <!-- Fext&#45;&gt;Prompt -->
299
- <g id="edge24" class="edge">
413
+ <g id="edge35" class="edge">
300
414
  <title>Fext&#45;&gt;Prompt</title>
301
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M263.15,-52.62C276.95,-65.62 297.51,-82.51 319,-91.25 622.57,-214.77 840.6,45.84 1047,-208.75 1084.61,-255.14 1077.51,-295.73 1041,-343 988.27,-411.27 351.49,-377.95 266,-389.5 248.06,-391.92 228.71,-395.99 211.46,-400.14"/>
302
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="211.13,-397.34 204.03,-401.98 212.47,-402.78 211.13,-397.34"/>
303
- <text xml:space="preserve" text-anchor="middle" x="1081.55" y="-210.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">EXTRO block</text>
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>
304
418
  </g>
305
419
  </g>
306
420
  </svg>