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,271 +4,288 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_MemorySkills Pages: 1 -->
7
- <svg width="1022pt" height="600pt"
8
- viewBox="0.00 0.00 1022.00 600.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 556.45)">
7
+ <svg width="1147pt" height="612pt"
8
+ viewBox="0.00 0.00 1147.00 612.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 568.45)">
10
10
  <title>PWN_MemorySkills</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-556.45 979.06,-556.45 979.06,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="125.18" y="-491.25" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Persistent Knowledge — Memory · Skills · Learning · Mistakes · Sessions</text>
13
- <text xml:space="preserve" text-anchor="start" x="342.68" y="-479.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#94a3b8">everything under ~/.pwn/ that shapes future prompts</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-568.45 1104.26,-568.45 1104.26,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="187.78" y="-503.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Persistent Knowledge — Memory · Skills · Learning · Mistakes · Sessions</text>
13
+ <text xml:space="preserve" text-anchor="start" x="405.28" y="-491.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">everything under ~/.pwn/ that shapes future prompts</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_write</title>
16
- <path fill="#022c22" stroke="#047857" d="M20,-383C20,-383 691,-383 691,-383 697,-383 703,-389 703,-395 703,-395 703,-454.25 703,-454.25 703,-460.25 697,-466.25 691,-466.25 691,-466.25 20,-466.25 20,-466.25 14,-466.25 8,-460.25 8,-454.25 8,-454.25 8,-395 8,-395 8,-389 14,-383 20,-383"/>
17
- <text xml:space="preserve" text-anchor="middle" x="355.5" y="-443.25" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#a7f3d0">Write&#45;Side Tools</text>
16
+ <path fill="#022c22" stroke="#047857" d="M20,-395C20,-395 692,-395 692,-395 698,-395 704,-401 704,-407 704,-407 704,-466.25 704,-466.25 704,-472.25 698,-478.25 692,-478.25 692,-478.25 20,-478.25 20,-478.25 14,-478.25 8,-472.25 8,-466.25 8,-466.25 8,-407 8,-407 8,-401 14,-395 20,-395"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="356" y="-455.25" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Write&#45;Side Tools</text>
18
18
  </g>
19
19
  <g id="clust3" class="cluster">
20
20
  <title>cluster_files</title>
21
- <path fill="#422006" stroke="#a16207" d="M45,-232.75C45,-232.75 728,-232.75 728,-232.75 734,-232.75 740,-238.75 740,-244.75 740,-244.75 740,-312 740,-312 740,-318 734,-324 728,-324 728,-324 45,-324 45,-324 39,-324 33,-318 33,-312 33,-312 33,-244.75 33,-244.75 33,-238.75 39,-232.75 45,-232.75"/>
22
- <text xml:space="preserve" text-anchor="middle" x="386.5" y="-301" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
21
+ <path fill="#422006" stroke="#a16207" d="M44,-244.75C44,-244.75 890,-244.75 890,-244.75 896,-244.75 902,-250.75 902,-256.75 902,-256.75 902,-324 902,-324 902,-330 896,-336 890,-336 890,-336 44,-336 44,-336 38,-336 32,-330 32,-324 32,-324 32,-256.75 32,-256.75 32,-250.75 38,-244.75 44,-244.75"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="467" y="-313" font-family="sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
23
23
  </g>
24
24
  <g id="clust5" class="cluster">
25
25
  <title>cluster_read</title>
26
- <path fill="#2e1065" stroke="#6d28d9" d="M51,-114.5C51,-114.5 631,-114.5 631,-114.5 637,-114.5 643,-120.5 643,-126.5 643,-126.5 643,-185.75 643,-185.75 643,-191.75 637,-197.75 631,-197.75 631,-197.75 51,-197.75 51,-197.75 45,-197.75 39,-191.75 39,-185.75 39,-185.75 39,-126.5 39,-126.5 39,-120.5 45,-114.5 51,-114.5"/>
27
- <text xml:space="preserve" text-anchor="middle" x="341" y="-174.75" font-family="Helvetica,sans-Serif" font-size="20.00" fill="#ddd6fe">Read&#45;Side / Injection</text>
26
+ <path fill="#2e1065" stroke="#6d28d9" d="M68,-126.5C68,-126.5 648,-126.5 648,-126.5 654,-126.5 660,-132.5 660,-138.5 660,-138.5 660,-197.75 660,-197.75 660,-203.75 654,-209.75 648,-209.75 648,-209.75 68,-209.75 68,-209.75 62,-209.75 56,-203.75 56,-197.75 56,-197.75 56,-138.5 56,-138.5 56,-132.5 62,-126.5 68,-126.5"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="358" y="-186.75" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Read&#45;Side / Injection</text>
28
28
  </g>
29
29
  <!-- Rem -->
30
30
  <g id="node1" class="node">
31
31
  <title>Rem</title>
32
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M683.25,-427C683.25,-427 596.75,-427 596.75,-427 590.75,-427 584.75,-421 584.75,-415 584.75,-415 584.75,-403 584.75,-403 584.75,-397 590.75,-391 596.75,-391 596.75,-391 683.25,-391 683.25,-391 689.25,-391 695.25,-397 695.25,-403 695.25,-403 695.25,-415 695.25,-415 695.25,-421 689.25,-427 683.25,-427"/>
33
- <text xml:space="preserve" text-anchor="middle" x="640" y="-411.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">memory_remember</text>
34
- <text xml:space="preserve" text-anchor="middle" x="640" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">key · value · category</text>
32
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M551.25,-439C551.25,-439 464.75,-439 464.75,-439 458.75,-439 452.75,-433 452.75,-427 452.75,-427 452.75,-415 452.75,-415 452.75,-409 458.75,-403 464.75,-403 464.75,-403 551.25,-403 551.25,-403 557.25,-403 563.25,-409 563.25,-415 563.25,-415 563.25,-427 563.25,-427 563.25,-433 557.25,-439 551.25,-439"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="508" y="-423.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_remember</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="508" y="-411.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">key · value · category</text>
35
35
  </g>
36
36
  <!-- Fmem -->
37
37
  <g id="node6" class="node">
38
38
  <title>Fmem</title>
39
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M732.12,-280.75C732.12,-282.96 705.18,-284.75 672,-284.75 638.82,-284.75 611.88,-282.96 611.88,-280.75 611.88,-280.75 611.88,-244.75 611.88,-244.75 611.88,-242.54 638.82,-240.75 672,-240.75 705.18,-240.75 732.12,-242.54 732.12,-244.75 732.12,-244.75 732.12,-280.75 732.12,-280.75"/>
40
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M732.12,-280.75C732.12,-278.54 705.18,-276.75 672,-276.75 638.82,-276.75 611.88,-278.54 611.88,-280.75"/>
41
- <text xml:space="preserve" text-anchor="middle" x="672" y="-265.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
42
- <text xml:space="preserve" text-anchor="middle" x="672" y="-253.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">fact · pref · lesson · env</text>
39
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M552.12,-292.75C552.12,-294.96 525.18,-296.75 492,-296.75 458.82,-296.75 431.88,-294.96 431.88,-292.75 431.88,-292.75 431.88,-256.75 431.88,-256.75 431.88,-254.54 458.82,-252.75 492,-252.75 525.18,-252.75 552.12,-254.54 552.12,-256.75 552.12,-256.75 552.12,-292.75 552.12,-292.75"/>
40
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M552.12,-292.75C552.12,-290.54 525.18,-288.75 492,-288.75 458.82,-288.75 431.88,-290.54 431.88,-292.75"/>
41
+ <text xml:space="preserve" text-anchor="middle" x="492" y="-277.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="492" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">fact · pref · lesson · env</text>
43
43
  </g>
44
44
  <!-- Rem&#45;&gt;Fmem -->
45
45
  <g id="edge1" class="edge">
46
46
  <title>Rem&#45;&gt;Fmem</title>
47
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M643.86,-390.6C649.15,-366.77 658.72,-323.6 665.22,-294.31"/>
48
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="667.87,-295.29 666.87,-286.88 662.4,-294.08 667.87,-295.29"/>
47
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M506.07,-402.6C503.44,-378.87 498.68,-335.97 495.43,-306.69"/>
48
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="498.23,-306.55 494.57,-298.91 492.67,-307.17 498.23,-306.55"/>
49
49
  </g>
50
50
  <!-- Skc -->
51
51
  <g id="node2" class="node">
52
52
  <title>Skc</title>
53
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M260,-427C260,-427 184,-427 184,-427 178,-427 172,-421 172,-415 172,-415 172,-403 172,-403 172,-397 178,-391 184,-391 184,-391 260,-391 260,-391 266,-391 272,-397 272,-403 272,-403 272,-415 272,-415 272,-421 266,-427 260,-427"/>
54
- <text xml:space="preserve" text-anchor="middle" x="222" y="-411.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">skill_create</text>
55
- <text xml:space="preserve" text-anchor="middle" x="222" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">skill_add_reference</text>
53
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M104,-439C104,-439 28,-439 28,-439 22,-439 16,-433 16,-427 16,-427 16,-415 16,-415 16,-409 22,-403 28,-403 28,-403 104,-403 104,-403 110,-403 116,-409 116,-415 116,-415 116,-427 116,-427 116,-433 110,-439 104,-439"/>
54
+ <text xml:space="preserve" text-anchor="middle" x="66" y="-423.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_create</text>
55
+ <text xml:space="preserve" text-anchor="middle" x="66" y="-411.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_add_reference</text>
56
56
  </g>
57
57
  <!-- Fskl -->
58
58
  <g id="node7" class="node">
59
59
  <title>Fskl</title>
60
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M267.75,-280.75C267.75,-282.96 242.31,-284.75 211,-284.75 179.69,-284.75 154.25,-282.96 154.25,-280.75 154.25,-280.75 154.25,-244.75 154.25,-244.75 154.25,-242.54 179.69,-240.75 211,-240.75 242.31,-240.75 267.75,-242.54 267.75,-244.75 267.75,-244.75 267.75,-280.75 267.75,-280.75"/>
61
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M267.75,-280.75C267.75,-278.54 242.31,-276.75 211,-276.75 179.69,-276.75 154.25,-278.54 154.25,-280.75"/>
62
- <text xml:space="preserve" text-anchor="middle" x="211" y="-265.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">skills/*.md</text>
63
- <text xml:space="preserve" text-anchor="middle" x="211" y="-253.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">YAML front&#45;matter refs</text>
60
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M153.75,-292.75C153.75,-294.96 128.31,-296.75 97,-296.75 65.69,-296.75 40.25,-294.96 40.25,-292.75 40.25,-292.75 40.25,-256.75 40.25,-256.75 40.25,-254.54 65.69,-252.75 97,-252.75 128.31,-252.75 153.75,-254.54 153.75,-256.75 153.75,-256.75 153.75,-292.75 153.75,-292.75"/>
61
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M153.75,-292.75C153.75,-290.54 128.31,-288.75 97,-288.75 65.69,-288.75 40.25,-290.54 40.25,-292.75"/>
62
+ <text xml:space="preserve" text-anchor="middle" x="97" y="-277.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/*.md</text>
63
+ <text xml:space="preserve" text-anchor="middle" x="97" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">YAML front&#45;matter refs</text>
64
64
  </g>
65
65
  <!-- Skc&#45;&gt;Fskl -->
66
66
  <g id="edge2" class="edge">
67
67
  <title>Skc&#45;&gt;Fskl</title>
68
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M220.67,-390.6C218.86,-366.87 215.59,-323.97 213.36,-294.69"/>
69
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="216.17,-294.68 212.77,-286.92 210.58,-295.11 216.17,-294.68"/>
68
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M69.74,-402.6C74.84,-378.87 84.06,-335.97 90.35,-306.69"/>
69
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="93.09,-307.29 92.03,-298.88 87.61,-306.11 93.09,-307.29"/>
70
70
  </g>
71
71
  <!-- Note -->
72
72
  <g id="node3" class="node">
73
73
  <title>Note</title>
74
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M120.25,-427C120.25,-427 27.75,-427 27.75,-427 21.75,-427 15.75,-421 15.75,-415 15.75,-415 15.75,-403 15.75,-403 15.75,-397 21.75,-391 27.75,-391 27.75,-391 120.25,-391 120.25,-391 126.25,-391 132.25,-397 132.25,-403 132.25,-403 132.25,-415 132.25,-415 132.25,-421 126.25,-427 120.25,-427"/>
75
- <text xml:space="preserve" text-anchor="middle" x="74" y="-411.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning_note_outcome</text>
76
- <text xml:space="preserve" text-anchor="middle" x="74" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning_reflect</text>
74
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M400.25,-439C400.25,-439 307.75,-439 307.75,-439 301.75,-439 295.75,-433 295.75,-427 295.75,-427 295.75,-415 295.75,-415 295.75,-409 301.75,-403 307.75,-403 307.75,-403 400.25,-403 400.25,-403 406.25,-403 412.25,-409 412.25,-415 412.25,-415 412.25,-427 412.25,-427 412.25,-433 406.25,-439 400.25,-439"/>
75
+ <text xml:space="preserve" text-anchor="middle" x="354" y="-423.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_note_outcome</text>
76
+ <text xml:space="preserve" text-anchor="middle" x="354" y="-411.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_reflect</text>
77
77
  </g>
78
78
  <!-- Flrn -->
79
79
  <g id="node8" class="node">
80
80
  <title>Flrn</title>
81
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M114.5,-280.75C114.5,-282.96 98.14,-284.75 78,-284.75 57.86,-284.75 41.5,-282.96 41.5,-280.75 41.5,-280.75 41.5,-244.75 41.5,-244.75 41.5,-242.54 57.86,-240.75 78,-240.75 98.14,-240.75 114.5,-242.54 114.5,-244.75 114.5,-244.75 114.5,-280.75 114.5,-280.75"/>
82
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M114.5,-280.75C114.5,-278.54 98.14,-276.75 78,-276.75 57.86,-276.75 41.5,-278.54 41.5,-280.75"/>
83
- <text xml:space="preserve" text-anchor="middle" x="78" y="-265.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
84
- <text xml:space="preserve" text-anchor="middle" x="78" y="-253.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">outcome log</text>
81
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M391.5,-292.75C391.5,-294.96 375.14,-296.75 355,-296.75 334.86,-296.75 318.5,-294.96 318.5,-292.75 318.5,-292.75 318.5,-256.75 318.5,-256.75 318.5,-254.54 334.86,-252.75 355,-252.75 375.14,-252.75 391.5,-254.54 391.5,-256.75 391.5,-256.75 391.5,-292.75 391.5,-292.75"/>
82
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M391.5,-292.75C391.5,-290.54 375.14,-288.75 355,-288.75 334.86,-288.75 318.5,-290.54 318.5,-292.75"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="355" y="-277.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="355" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">outcome log</text>
85
85
  </g>
86
86
  <!-- Note&#45;&gt;Flrn -->
87
87
  <g id="edge3" class="edge">
88
88
  <title>Note&#45;&gt;Flrn</title>
89
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M74.48,-390.6C75.14,-366.87 76.33,-323.97 77.14,-294.69"/>
90
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="79.93,-295 77.36,-286.92 74.34,-294.84 79.93,-295"/>
89
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M354.12,-402.6C354.29,-378.87 354.58,-335.97 354.79,-306.69"/>
90
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="357.58,-306.94 354.84,-298.92 351.98,-306.9 357.58,-306.94"/>
91
91
  </g>
92
92
  <!-- Dist -->
93
93
  <g id="node4" class="node">
94
94
  <title>Dist</title>
95
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M400,-427C400,-427 324,-427 324,-427 318,-427 312,-421 312,-415 312,-415 312,-403 312,-403 312,-397 318,-391 324,-391 324,-391 400,-391 400,-391 406,-391 412,-397 412,-403 412,-403 412,-415 412,-415 412,-421 406,-427 400,-427"/>
96
- <text xml:space="preserve" text-anchor="middle" x="362" y="-411.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning_distill_skill</text>
97
- <text xml:space="preserve" text-anchor="middle" x="362" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">(session → skill)</text>
95
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M244,-439C244,-439 168,-439 168,-439 162,-439 156,-433 156,-427 156,-427 156,-415 156,-415 156,-409 162,-403 168,-403 168,-403 244,-403 244,-403 250,-403 256,-409 256,-415 256,-415 256,-427 256,-427 256,-433 250,-439 244,-439"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="206" y="-423.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_distill_skill</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="206" y="-411.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(session → skill)</text>
98
98
  </g>
99
99
  <!-- Dist&#45;&gt;Fskl -->
100
100
  <g id="edge4" class="edge">
101
101
  <title>Dist&#45;&gt;Fskl</title>
102
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M343.79,-390.6C318.15,-366.11 271.14,-321.2 240.49,-291.92"/>
103
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="242.59,-290.06 234.88,-286.56 238.73,-294.11 242.59,-290.06"/>
102
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M192.85,-402.6C174.53,-378.35 141.08,-334.09 118.95,-304.79"/>
103
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="121.27,-303.22 114.21,-298.53 116.8,-306.6 121.27,-303.22"/>
104
104
  </g>
105
105
  <!-- Fses -->
106
106
  <g id="node9" class="node">
107
107
  <title>Fses</title>
108
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M392.5,-280.75C392.5,-282.96 373.45,-284.75 350,-284.75 326.55,-284.75 307.5,-282.96 307.5,-280.75 307.5,-280.75 307.5,-244.75 307.5,-244.75 307.5,-242.54 326.55,-240.75 350,-240.75 373.45,-240.75 392.5,-242.54 392.5,-244.75 392.5,-244.75 392.5,-280.75 392.5,-280.75"/>
109
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M392.5,-280.75C392.5,-278.54 373.45,-276.75 350,-276.75 326.55,-276.75 307.5,-278.54 307.5,-280.75"/>
110
- <text xml:space="preserve" text-anchor="middle" x="350" y="-265.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
111
- <text xml:space="preserve" text-anchor="middle" x="350" y="-253.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
108
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M278.5,-292.75C278.5,-294.96 259.45,-296.75 236,-296.75 212.55,-296.75 193.5,-294.96 193.5,-292.75 193.5,-292.75 193.5,-256.75 193.5,-256.75 193.5,-254.54 212.55,-252.75 236,-252.75 259.45,-252.75 278.5,-254.54 278.5,-256.75 278.5,-256.75 278.5,-292.75 278.5,-292.75"/>
109
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M278.5,-292.75C278.5,-290.54 259.45,-288.75 236,-288.75 212.55,-288.75 193.5,-290.54 193.5,-292.75"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="236" y="-277.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
111
+ <text xml:space="preserve" text-anchor="middle" x="236" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
112
112
  </g>
113
113
  <!-- Dist&#45;&gt;Fses -->
114
114
  <g id="edge5" class="edge">
115
115
  <title>Dist&#45;&gt;Fses</title>
116
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M359.73,-380.73C357.42,-352.92 353.88,-310.34 351.76,-284.96"/>
117
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="356.94,-380.9 360.39,-388.64 362.52,-380.43 356.94,-380.9"/>
118
- <text xml:space="preserve" text-anchor="middle" x="367.2" y="-339.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
116
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M211.6,-393.1C217.38,-365.29 226.29,-322.46 231.59,-296.96"/>
117
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="208.91,-392.27 210.02,-400.67 214.39,-393.41 208.91,-392.27"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="231.12" y="-351.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
119
119
  </g>
120
120
  <!-- Mrec -->
121
121
  <g id="node5" class="node">
122
122
  <title>Mrec</title>
123
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M532.25,-427C532.25,-427 463.75,-427 463.75,-427 457.75,-427 451.75,-421 451.75,-415 451.75,-415 451.75,-403 451.75,-403 451.75,-397 457.75,-391 463.75,-391 463.75,-391 532.25,-391 532.25,-391 538.25,-391 544.25,-397 544.25,-403 544.25,-403 544.25,-415 544.25,-415 544.25,-421 538.25,-427 532.25,-427"/>
124
- <text xml:space="preserve" text-anchor="middle" x="498" y="-411.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">mistakes_record</text>
125
- <text xml:space="preserve" text-anchor="middle" x="498" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">mistakes_resolve</text>
123
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M684.25,-439C684.25,-439 615.75,-439 615.75,-439 609.75,-439 603.75,-433 603.75,-427 603.75,-427 603.75,-415 603.75,-415 603.75,-409 609.75,-403 615.75,-403 615.75,-403 684.25,-403 684.25,-403 690.25,-403 696.25,-409 696.25,-415 696.25,-415 696.25,-427 696.25,-427 696.25,-433 690.25,-439 684.25,-439"/>
124
+ <text xml:space="preserve" text-anchor="middle" x="650" y="-423.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_record</text>
125
+ <text xml:space="preserve" text-anchor="middle" x="650" y="-411.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_resolve</text>
126
126
  </g>
127
127
  <!-- Mrec&#45;&gt;Fmem -->
128
128
  <g id="edge7" class="edge">
129
129
  <title>Mrec&#45;&gt;Fmem</title>
130
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M513.46,-390.57C528.59,-374.16 552.82,-349.56 577,-332 583.11,-327.56 585.63,-328.06 592,-324 607.56,-314.07 623.98,-302.02 637.86,-291.31"/>
131
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="639.57,-293.52 644.16,-286.39 636.13,-289.1 639.57,-293.52"/>
132
- <text xml:space="preserve" text-anchor="middle" x="610" y="-339.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
130
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M625.67,-402.47C611.64,-392.04 593.89,-378.29 579,-365 557.34,-345.67 534.48,-322.08 517.63,-304.01"/>
131
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="520.09,-302.54 512.6,-298.57 515.98,-306.34 520.09,-302.54"/>
132
+ <text xml:space="preserve" text-anchor="middle" x="612" y="-351.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
133
133
  </g>
134
134
  <!-- Fmis -->
135
135
  <g id="node10" class="node">
136
136
  <title>Fmis</title>
137
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M571.88,-280.75C571.88,-282.96 540.56,-284.75 502,-284.75 463.44,-284.75 432.12,-282.96 432.12,-280.75 432.12,-280.75 432.12,-244.75 432.12,-244.75 432.12,-242.54 463.44,-240.75 502,-240.75 540.56,-240.75 571.88,-242.54 571.88,-244.75 571.88,-244.75 571.88,-280.75 571.88,-280.75"/>
138
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M571.88,-280.75C571.88,-278.54 540.56,-276.75 502,-276.75 463.44,-276.75 432.12,-278.54 432.12,-280.75"/>
139
- <text xml:space="preserve" text-anchor="middle" x="502" y="-265.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
140
- <text xml:space="preserve" text-anchor="middle" x="502" y="-253.25" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">sig → count · fix · regressed</text>
137
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M731.88,-292.75C731.88,-294.96 700.56,-296.75 662,-296.75 623.44,-296.75 592.12,-294.96 592.12,-292.75 592.12,-292.75 592.12,-256.75 592.12,-256.75 592.12,-254.54 623.44,-252.75 662,-252.75 700.56,-252.75 731.88,-254.54 731.88,-256.75 731.88,-256.75 731.88,-292.75 731.88,-292.75"/>
138
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M731.88,-292.75C731.88,-290.54 700.56,-288.75 662,-288.75 623.44,-288.75 592.12,-290.54 592.12,-292.75"/>
139
+ <text xml:space="preserve" text-anchor="middle" x="662" y="-277.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
140
+ <text xml:space="preserve" text-anchor="middle" x="662" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sig → count · fix · regressed</text>
141
141
  </g>
142
142
  <!-- Mrec&#45;&gt;Fmis -->
143
143
  <g id="edge6" class="edge">
144
144
  <title>Mrec&#45;&gt;Fmis</title>
145
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M498.48,-390.6C499.14,-366.87 500.33,-323.97 501.14,-294.69"/>
146
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="503.93,-295 501.36,-286.92 498.34,-294.84 503.93,-295"/>
145
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M651.45,-402.6C653.42,-378.87 656.99,-335.97 659.43,-306.69"/>
146
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="662.2,-307.12 660.07,-298.92 656.62,-306.66 662.2,-307.12"/>
147
147
  </g>
148
148
  <!-- Rec -->
149
- <g id="node11" class="node">
149
+ <g id="node12" class="node">
150
150
  <title>Rec</title>
151
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M622.88,-158.5C622.88,-158.5 567.12,-158.5 567.12,-158.5 561.12,-158.5 555.12,-152.5 555.12,-146.5 555.12,-146.5 555.12,-134.5 555.12,-134.5 555.12,-128.5 561.12,-122.5 567.12,-122.5 567.12,-122.5 622.88,-122.5 622.88,-122.5 628.88,-122.5 634.88,-128.5 634.88,-134.5 634.88,-134.5 634.88,-146.5 634.88,-146.5 634.88,-152.5 628.88,-158.5 622.88,-158.5"/>
152
- <text xml:space="preserve" text-anchor="middle" x="595" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">memory_recall</text>
151
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M519.88,-170.5C519.88,-170.5 464.12,-170.5 464.12,-170.5 458.12,-170.5 452.12,-164.5 452.12,-158.5 452.12,-158.5 452.12,-146.5 452.12,-146.5 452.12,-140.5 458.12,-134.5 464.12,-134.5 464.12,-134.5 519.88,-134.5 519.88,-134.5 525.88,-134.5 531.88,-140.5 531.88,-146.5 531.88,-146.5 531.88,-158.5 531.88,-158.5 531.88,-164.5 525.88,-170.5 519.88,-170.5"/>
152
+ <text xml:space="preserve" text-anchor="middle" x="492" y="-149" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_recall</text>
153
153
  </g>
154
154
  <!-- Fmem&#45;&gt;Rec -->
155
155
  <g id="edge8" class="edge">
156
156
  <title>Fmem&#45;&gt;Rec</title>
157
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M658.23,-240.25C645.1,-219.74 625.3,-188.82 611.36,-167.05"/>
158
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="613.88,-165.8 607.21,-160.57 609.17,-168.82 613.88,-165.8"/>
157
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M492,-252.25C492,-232.28 492,-202.45 492,-180.8"/>
158
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="494.8,-180.88 492,-172.88 489.2,-180.88 494.8,-180.88"/>
159
159
  </g>
160
160
  <!-- ReVal -->
161
- <g id="node17" class="node">
161
+ <g id="node18" class="node">
162
162
  <title>ReVal</title>
163
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M903.12,-431C903.12,-431 800.88,-431 800.88,-431 794.88,-431 788.88,-425 788.88,-419 788.88,-419 788.88,-399 788.88,-399 788.88,-393 794.88,-387 800.88,-387 800.88,-387 903.12,-387 903.12,-387 909.12,-387 915.12,-393 915.12,-399 915.12,-399 915.12,-419 915.12,-419 915.12,-425 909.12,-431 903.12,-431"/>
164
- <text xml:space="preserve" text-anchor="middle" x="852" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">Extrospection.verify</text>
165
- <text xml:space="preserve" text-anchor="middle" x="852" y="-405.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">revalidate_memory (cron)</text>
166
- <text xml:space="preserve" text-anchor="middle" x="852" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">browser&#45;backed GC</text>
163
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M975.12,-443C975.12,-443 872.88,-443 872.88,-443 866.88,-443 860.88,-437 860.88,-431 860.88,-431 860.88,-411 860.88,-411 860.88,-405 866.88,-399 872.88,-399 872.88,-399 975.12,-399 975.12,-399 981.12,-399 987.12,-405 987.12,-411 987.12,-411 987.12,-431 987.12,-431 987.12,-437 981.12,-443 975.12,-443"/>
164
+ <text xml:space="preserve" text-anchor="middle" x="924" y="-429.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Extrospection.verify</text>
165
+ <text xml:space="preserve" text-anchor="middle" x="924" y="-417.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">revalidate_memory (cron)</text>
166
+ <text xml:space="preserve" text-anchor="middle" x="924" y="-405.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">browser&#45;backed GC</text>
167
167
  </g>
168
168
  <!-- Fmem&#45;&gt;ReVal -->
169
- <g id="edge19" class="edge">
169
+ <g id="edge20" class="edge">
170
170
  <title>Fmem&#45;&gt;ReVal</title>
171
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M677,-285.21C682.68,-305.19 693.78,-334.58 713.25,-353 731.53,-370.29 755.91,-382.38 779.12,-390.72"/>
172
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="777.95,-393.28 786.43,-393.21 779.76,-387.98 777.95,-393.28"/>
173
- <text xml:space="preserve" text-anchor="middle" x="755.62" y="-339.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">:fact w/ CVE|ver|URL</text>
171
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M513.4,-297.11C528.45,-310.72 549.8,-327.37 572,-336 606.54,-349.43 618.99,-335.22 655,-344 679.32,-349.93 683.46,-357.24 707.25,-365 754.33,-380.36 808.31,-394.07 850.62,-403.96"/>
172
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="849.95,-406.67 858.37,-405.75 851.21,-401.22 849.95,-406.67"/>
173
+ <text xml:space="preserve" text-anchor="middle" x="749.62" y="-351.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:fact w/ CVE|ver|URL</text>
174
174
  </g>
175
175
  <!-- Skv -->
176
- <g id="node12" class="node">
176
+ <g id="node13" class="node">
177
177
  <title>Skv</title>
178
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M253.25,-158.5C253.25,-158.5 196.75,-158.5 196.75,-158.5 190.75,-158.5 184.75,-152.5 184.75,-146.5 184.75,-146.5 184.75,-134.5 184.75,-134.5 184.75,-128.5 190.75,-122.5 196.75,-122.5 196.75,-122.5 253.25,-122.5 253.25,-122.5 259.25,-122.5 265.25,-128.5 265.25,-134.5 265.25,-134.5 265.25,-146.5 265.25,-146.5 265.25,-152.5 259.25,-158.5 253.25,-158.5"/>
179
- <text xml:space="preserve" text-anchor="middle" x="225" y="-137" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">skill_list · view</text>
178
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M132.25,-170.5C132.25,-170.5 75.75,-170.5 75.75,-170.5 69.75,-170.5 63.75,-164.5 63.75,-158.5 63.75,-158.5 63.75,-146.5 63.75,-146.5 63.75,-140.5 69.75,-134.5 75.75,-134.5 75.75,-134.5 132.25,-134.5 132.25,-134.5 138.25,-134.5 144.25,-140.5 144.25,-146.5 144.25,-146.5 144.25,-158.5 144.25,-158.5 144.25,-164.5 138.25,-170.5 132.25,-170.5"/>
179
+ <text xml:space="preserve" text-anchor="middle" x="104" y="-149" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_list · view</text>
180
180
  </g>
181
181
  <!-- Fskl&#45;&gt;Skv -->
182
182
  <g id="edge9" class="edge">
183
183
  <title>Fskl&#45;&gt;Skv</title>
184
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M213.5,-240.25C215.83,-220.28 219.3,-190.45 221.82,-168.8"/>
185
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="224.6,-169.14 222.75,-160.87 219.04,-168.49 224.6,-169.14"/>
184
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M98.25,-252.25C99.41,-232.28 101.15,-202.45 102.41,-180.8"/>
185
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="105.2,-181.03 102.87,-172.88 99.61,-180.7 105.2,-181.03"/>
186
186
  </g>
187
187
  <!-- Out -->
188
- <g id="node13" class="node">
188
+ <g id="node14" class="node">
189
189
  <title>Out</title>
190
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M132.88,-158.5C132.88,-158.5 59.12,-158.5 59.12,-158.5 53.12,-158.5 47.12,-152.5 47.12,-146.5 47.12,-146.5 47.12,-134.5 47.12,-134.5 47.12,-128.5 53.12,-122.5 59.12,-122.5 59.12,-122.5 132.88,-122.5 132.88,-122.5 138.88,-122.5 144.88,-128.5 144.88,-134.5 144.88,-134.5 144.88,-146.5 144.88,-146.5 144.88,-152.5 138.88,-158.5 132.88,-158.5"/>
191
- <text xml:space="preserve" text-anchor="middle" x="96" y="-143" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning_outcomes</text>
192
- <text xml:space="preserve" text-anchor="middle" x="96" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">learning_stats</text>
190
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M399.88,-170.5C399.88,-170.5 326.12,-170.5 326.12,-170.5 320.12,-170.5 314.12,-164.5 314.12,-158.5 314.12,-158.5 314.12,-146.5 314.12,-146.5 314.12,-140.5 320.12,-134.5 326.12,-134.5 326.12,-134.5 399.88,-134.5 399.88,-134.5 405.88,-134.5 411.88,-140.5 411.88,-146.5 411.88,-146.5 411.88,-158.5 411.88,-158.5 411.88,-164.5 405.88,-170.5 399.88,-170.5"/>
191
+ <text xml:space="preserve" text-anchor="middle" x="363" y="-155" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_outcomes</text>
192
+ <text xml:space="preserve" text-anchor="middle" x="363" y="-143" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_stats</text>
193
193
  </g>
194
194
  <!-- Flrn&#45;&gt;Out -->
195
195
  <g id="edge10" class="edge">
196
196
  <title>Flrn&#45;&gt;Out</title>
197
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M81.22,-240.25C84.22,-220.19 88.71,-190.18 91.96,-168.51"/>
198
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="94.69,-169.19 93.1,-160.86 89.15,-168.36 94.69,-169.19"/>
197
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M356.43,-252.25C357.76,-232.28 359.74,-202.45 361.18,-180.8"/>
198
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="363.97,-181.04 361.71,-172.88 358.39,-180.67 363.97,-181.04"/>
199
199
  </g>
200
200
  <!-- Sesv -->
201
- <g id="node14" class="node">
201
+ <g id="node15" class="node">
202
202
  <title>Sesv</title>
203
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M383.12,-158.5C383.12,-158.5 316.88,-158.5 316.88,-158.5 310.88,-158.5 304.88,-152.5 304.88,-146.5 304.88,-146.5 304.88,-134.5 304.88,-134.5 304.88,-128.5 310.88,-122.5 316.88,-122.5 316.88,-122.5 383.12,-122.5 383.12,-122.5 389.12,-122.5 395.12,-128.5 395.12,-134.5 395.12,-134.5 395.12,-146.5 395.12,-146.5 395.12,-152.5 389.12,-158.5 383.12,-158.5"/>
204
- <text xml:space="preserve" text-anchor="middle" x="350" y="-143" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">sessions_view</text>
205
- <text xml:space="preserve" text-anchor="middle" x="350" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">sessions_current</text>
203
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M262.12,-170.5C262.12,-170.5 195.88,-170.5 195.88,-170.5 189.88,-170.5 183.88,-164.5 183.88,-158.5 183.88,-158.5 183.88,-146.5 183.88,-146.5 183.88,-140.5 189.88,-134.5 195.88,-134.5 195.88,-134.5 262.12,-134.5 262.12,-134.5 268.12,-134.5 274.12,-140.5 274.12,-146.5 274.12,-146.5 274.12,-158.5 274.12,-158.5 274.12,-164.5 268.12,-170.5 262.12,-170.5"/>
204
+ <text xml:space="preserve" text-anchor="middle" x="229" y="-155" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_view</text>
205
+ <text xml:space="preserve" text-anchor="middle" x="229" y="-143" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_current</text>
206
206
  </g>
207
207
  <!-- Fses&#45;&gt;Sesv -->
208
208
  <g id="edge11" class="edge">
209
209
  <title>Fses&#45;&gt;Sesv</title>
210
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M350,-240.25C350,-220.28 350,-190.45 350,-168.8"/>
211
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="352.8,-168.88 350,-160.88 347.2,-168.88 352.8,-168.88"/>
210
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M234.75,-252.25C233.59,-232.28 231.85,-202.45 230.59,-180.8"/>
211
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="233.39,-180.7 230.13,-172.88 227.8,-181.03 233.39,-180.7"/>
212
212
  </g>
213
213
  <!-- Mlst -->
214
- <g id="node15" class="node">
214
+ <g id="node16" class="node">
215
215
  <title>Mlst</title>
216
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M502.88,-158.5C502.88,-158.5 447.12,-158.5 447.12,-158.5 441.12,-158.5 435.12,-152.5 435.12,-146.5 435.12,-146.5 435.12,-134.5 435.12,-134.5 435.12,-128.5 441.12,-122.5 447.12,-122.5 447.12,-122.5 502.88,-122.5 502.88,-122.5 508.88,-122.5 514.88,-128.5 514.88,-134.5 514.88,-134.5 514.88,-146.5 514.88,-146.5 514.88,-152.5 508.88,-158.5 502.88,-158.5"/>
217
- <text xml:space="preserve" text-anchor="middle" x="475" y="-143" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">mistakes_list</text>
218
- <text xml:space="preserve" text-anchor="middle" x="475" y="-131" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">correction_hint</text>
216
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M639.88,-170.5C639.88,-170.5 584.12,-170.5 584.12,-170.5 578.12,-170.5 572.12,-164.5 572.12,-158.5 572.12,-158.5 572.12,-146.5 572.12,-146.5 572.12,-140.5 578.12,-134.5 584.12,-134.5 584.12,-134.5 639.88,-134.5 639.88,-134.5 645.88,-134.5 651.88,-140.5 651.88,-146.5 651.88,-146.5 651.88,-158.5 651.88,-158.5 651.88,-164.5 645.88,-170.5 639.88,-170.5"/>
217
+ <text xml:space="preserve" text-anchor="middle" x="612" y="-155" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_list</text>
218
+ <text xml:space="preserve" text-anchor="middle" x="612" y="-143" font-family="sans-Serif" font-size="10.00" fill="#0f172a">correction_hint</text>
219
219
  </g>
220
220
  <!-- Fmis&#45;&gt;Mlst -->
221
221
  <g id="edge12" class="edge">
222
222
  <title>Fmis&#45;&gt;Mlst</title>
223
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M497.17,-240.25C492.67,-220.19 485.93,-190.18 481.06,-168.51"/>
224
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="483.83,-168.03 479.34,-160.83 478.36,-169.25 483.83,-168.03"/>
223
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M653.06,-252.25C644.64,-232.01 632.01,-201.63 622.99,-179.92"/>
224
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="625.65,-179.04 620,-172.73 620.48,-181.19 625.65,-179.04"/>
225
+ </g>
226
+ <!-- Fext -->
227
+ <g id="node11" class="node">
228
+ <title>Fext</title>
229
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M894.25,-292.75C894.25,-294.96 866.8,-296.75 833,-296.75 799.2,-296.75 771.75,-294.96 771.75,-292.75 771.75,-292.75 771.75,-256.75 771.75,-256.75 771.75,-254.54 799.2,-252.75 833,-252.75 866.8,-252.75 894.25,-254.54 894.25,-256.75 894.25,-256.75 894.25,-292.75 894.25,-292.75"/>
230
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M894.25,-292.75C894.25,-290.54 866.8,-288.75 833,-288.75 799.2,-288.75 771.75,-290.54 771.75,-292.75"/>
231
+ <text xml:space="preserve" text-anchor="middle" x="833" y="-277.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
232
+ <text xml:space="preserve" text-anchor="middle" x="833" y="-265.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">snapshot · rf · web · obs</text>
225
233
  </g>
226
234
  <!-- Prompt -->
227
- <g id="node16" class="node">
235
+ <g id="node17" class="node">
228
236
  <title>Prompt</title>
229
- <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M436.75,-44C436.75,-44 263.25,-44 263.25,-44 257.25,-44 251.25,-38 251.25,-32 251.25,-32 251.25,-12 251.25,-12 251.25,-6 257.25,0 263.25,0 263.25,0 436.75,0 436.75,0 442.75,0 448.75,-6 448.75,-12 448.75,-12 448.75,-32 448.75,-32 448.75,-38 442.75,-44 436.75,-44"/>
230
- <text xml:space="preserve" text-anchor="middle" x="350" y="-30.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">PromptBuilder</text>
231
- <text xml:space="preserve" text-anchor="middle" x="350" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">MEMORY + SKILLS + LEARNING</text>
232
- <text xml:space="preserve" text-anchor="middle" x="350" y="-6.5" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#0f172a">+ KNOWN MISTAKES / KNOWN FIXES</text>
237
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M436.25,-56C436.25,-56 289.75,-56 289.75,-56 283.75,-56 277.75,-50 277.75,-44 277.75,-44 277.75,-12 277.75,-12 277.75,-6 283.75,0 289.75,0 289.75,0 436.25,0 436.25,0 442.25,0 448.25,-6 448.25,-12 448.25,-12 448.25,-44 448.25,-44 448.25,-50 442.25,-56 436.25,-56"/>
238
+ <text xml:space="preserve" text-anchor="middle" x="363" y="-42.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PromptBuilder</text>
239
+ <text xml:space="preserve" text-anchor="middle" x="363" y="-30.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MEMORY + SKILLS + LEARNING</text>
240
+ <text xml:space="preserve" text-anchor="middle" x="363" y="-18.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ KNOWN MISTAKES / FIXES</text>
241
+ <text xml:space="preserve" text-anchor="middle" x="363" y="-6.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ METRICS + EXTROSPECTION</text>
233
242
  </g>
234
243
  <!-- Rec&#45;&gt;Prompt -->
235
244
  <g id="edge13" class="edge">
236
245
  <title>Rec&#45;&gt;Prompt</title>
237
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M568.01,-122.12C547.17,-109.09 517.37,-91.29 490,-78 468.01,-67.32 443.39,-57.1 420.99,-48.43"/>
238
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="422.18,-45.89 413.71,-45.64 420.18,-51.11 422.18,-45.89"/>
246
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M473.52,-133.95C454.24,-115.64 423.52,-86.47 399.36,-63.53"/>
247
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="401.57,-61.76 393.84,-58.29 397.71,-65.83 401.57,-61.76"/>
239
248
  </g>
240
249
  <!-- Skv&#45;&gt;Prompt -->
241
250
  <g id="edge14" class="edge">
242
251
  <title>Skv&#45;&gt;Prompt</title>
243
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M243.71,-122.06C263.71,-103.42 295.73,-73.58 319.4,-51.52"/>
244
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="321.08,-53.78 325.02,-46.28 317.26,-49.69 321.08,-53.78"/>
252
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M141.11,-133.95C181.14,-115.02 245.75,-84.46 294.95,-61.19"/>
253
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="296.13,-63.72 302.17,-57.77 293.74,-58.66 296.13,-63.72"/>
245
254
  </g>
246
255
  <!-- Out&#45;&gt;Prompt -->
247
256
  <g id="edge15" class="edge">
248
257
  <title>Out&#45;&gt;Prompt</title>
249
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M134.3,-121.93C176.57,-102.54 245.03,-71.15 293.47,-48.93"/>
250
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="294.38,-51.59 300.49,-45.71 292.05,-46.5 294.38,-51.59"/>
258
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M363,-133.95C363,-116.51 363,-89.2 363,-66.82"/>
259
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="365.8,-66.9 363,-58.9 360.2,-66.9 365.8,-66.9"/>
251
260
  </g>
252
261
  <!-- Sesv&#45;&gt;Prompt -->
253
262
  <g id="edge16" class="edge">
254
263
  <title>Sesv&#45;&gt;Prompt</title>
255
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M350,-122.06C350,-104.3 350,-76.39 350,-54.71"/>
256
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="352.8,-54.91 350,-46.91 347.2,-54.91 352.8,-54.91"/>
264
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M248.2,-133.95C268.22,-115.64 300.13,-86.47 325.23,-63.53"/>
265
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="326.98,-65.72 330.99,-58.26 323.2,-61.59 326.98,-65.72"/>
257
266
  </g>
258
267
  <!-- Mlst&#45;&gt;Prompt -->
259
268
  <g id="edge17" class="edge">
260
269
  <title>Mlst&#45;&gt;Prompt</title>
261
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M456.29,-122.06C436.55,-103.66 405.1,-74.35 381.52,-52.38"/>
262
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="383.52,-50.41 375.76,-47 379.7,-54.51 383.52,-50.41"/>
263
- <text xml:space="preserve" text-anchor="middle" x="449.98" y="-79.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">do NOT repeat</text>
270
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M576.32,-133.95C538.16,-115.17 476.76,-84.96 429.61,-61.77"/>
271
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="430.91,-59.29 422.49,-58.27 428.43,-64.31 430.91,-59.29"/>
272
+ <text xml:space="preserve" text-anchor="middle" x="532.41" y="-91.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">do NOT repeat</text>
264
273
  </g>
265
274
  <!-- ReVal&#45;&gt;Fmem -->
266
275
  <g id="edge18" class="edge">
267
276
  <title>ReVal&#45;&gt;Fmem</title>
268
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M843.58,-386.42C836.24,-369.84 824.2,-347.26 808,-332 788.4,-313.53 762.84,-298.95 739.18,-288.09"/>
269
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="740.4,-285.57 731.95,-284.89 738.13,-290.69 740.4,-285.57"/>
270
- <text xml:space="preserve" text-anchor="middle" x="880.36" y="-344.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED yyyy&#45;mm&#45;dd]</text>
271
- <text xml:space="preserve" text-anchor="middle" x="880.36" y="-333.95" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#cbd5e1">prefix stale :fact</text>
277
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M889.97,-398.5C854.73,-376.3 804.47,-344.75 802,-344 753.08,-329.08 620.21,-353.06 572,-336 553.09,-329.31 534.98,-316.41 520.79,-304.26"/>
278
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="523,-302.49 515.17,-299.26 519.28,-306.67 523,-302.49"/>
279
+ <text xml:space="preserve" text-anchor="middle" x="891.92" y="-356.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED yyyy&#45;mm&#45;dd]</text>
280
+ <text xml:space="preserve" text-anchor="middle" x="891.92" y="-345.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">prefix stale :fact</text>
281
+ </g>
282
+ <!-- ReVal&#45;&gt;Fext -->
283
+ <g id="edge19" class="edge">
284
+ <title>ReVal&#45;&gt;Fext</title>
285
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M944.72,-398.38C957.03,-382.8 968.4,-361.53 958,-344 945.75,-323.35 924.8,-308.54 903.52,-298.12"/>
286
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="904.95,-295.7 896.51,-294.88 902.6,-300.78 904.95,-295.7"/>
287
+ <text xml:space="preserve" text-anchor="middle" x="1011.56" y="-356.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed → :intel obs</text>
288
+ <text xml:space="preserve" text-anchor="middle" x="1011.56" y="-345.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted → observe stale</text>
272
289
  </g>
273
290
  </g>
274
291
  </svg>