pwn 0.5.668 → 0.5.670

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +15 -0
  3. data/Gemfile +1 -1
  4. data/README.md +8 -6
  5. data/documentation/AI-Integration.md +5 -3
  6. data/documentation/Agent-Tool-Registry.md +18 -14
  7. data/documentation/Configuration.md +6 -0
  8. data/documentation/Contributing.md +13 -0
  9. data/documentation/Diagrams.md +1 -1
  10. data/documentation/Home.md +4 -4
  11. data/documentation/How-PWN-Works.md +6 -6
  12. data/documentation/Persistence.md +17 -0
  13. data/documentation/Reinforcement-Learning.md +39 -39
  14. data/documentation/SDR.md +1 -1
  15. data/documentation/Sessions.md +1 -0
  16. data/documentation/Skills-Memory-Learning.md +2 -0
  17. data/documentation/What-is-PWN.md +3 -3
  18. data/documentation/diagrams/agent-tool-registry.svg +43 -43
  19. data/documentation/diagrams/ai-integration-tool-calling.svg +112 -85
  20. data/documentation/diagrams/dot/agent-tool-registry.dot +4 -4
  21. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +7 -3
  22. data/documentation/diagrams/dot/memory-skills-detailed.dot +2 -2
  23. data/documentation/diagrams/dot/overall-pwn-architecture.dot +6 -4
  24. data/documentation/diagrams/dot/persistence-filesystem.dot +1 -1
  25. data/documentation/diagrams/dot/sdr-radio-flow.dot +1 -1
  26. data/documentation/diagrams/dot/task-summarizer.dot +24 -12
  27. data/documentation/diagrams/memory-skills-detailed.svg +182 -182
  28. data/documentation/diagrams/overall-pwn-architecture.svg +154 -146
  29. data/documentation/diagrams/persistence-filesystem.svg +6 -6
  30. data/documentation/diagrams/sdr-radio-flow.svg +1 -1
  31. data/documentation/diagrams/task-summarizer.svg +178 -126
  32. data/documentation/pwn-ai-Agent.md +53 -15
  33. data/lib/pwn/ai/agent/loop.rb +773 -6
  34. data/lib/pwn/ai/agent/prompt_builder.rb +81 -7
  35. data/lib/pwn/ai/agent/task_summarizer.rb +426 -28
  36. data/lib/pwn/ai/agent/tools/shell.rb +32 -0
  37. data/lib/pwn/config.rb +7 -2
  38. data/lib/pwn/memory.rb +188 -0
  39. data/lib/pwn/memory_index.rb +17 -2
  40. data/lib/pwn/plugins/repl.rb +36 -7
  41. data/lib/pwn/sessions.rb +9 -4
  42. data/lib/pwn/version.rb +1 -1
  43. data/spec/lib/pwn/ai/agent/loop_spec.rb +246 -2
  44. data/spec/lib/pwn/ai/agent/prompt_builder_spec.rb +51 -0
  45. data/spec/lib/pwn/ai/agent/task_summarizer_spec.rb +115 -0
  46. data/spec/lib/pwn/ai/agent/tools/shell_spec.rb +21 -0
  47. data/spec/lib/pwn/memory_spec.rb +62 -0
  48. data/spec/lib/pwn/plugins/repl_pwn_vault_spec.rb +134 -0
  49. data/third_party/pwn_rdoc.jsonl +30 -2
  50. metadata +4 -3
@@ -4,65 +4,65 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_MemorySkills Pages: 1 -->
7
- <svg width="1755pt" height="752pt"
8
- viewBox="0.00 0.00 1755.00 752.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7
+ <svg width="1763pt" height="752pt"
8
+ viewBox="0.00 0.00 1763.00 752.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
9
  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 709.2)">
10
10
  <title>PWN_MemorySkills</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-709.2 1711.83,-709.2 1711.83,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="498.31" y="-644" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Persistent Knowledge &#45; Memory · Skills · Learning · Mistakes · Sessions</text>
13
- <text xml:space="preserve" text-anchor="start" x="709.06" y="-632.55" font-family="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,-709.2 1719.83,-709.2 1719.83,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="502.31" y="-644" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Persistent Knowledge &#45; Memory · Skills · Learning · Mistakes · Sessions</text>
13
+ <text xml:space="preserve" text-anchor="start" x="713.06" y="-632.55" 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,-504.5C20,-504.5 1026,-504.5 1026,-504.5 1032,-504.5 1038,-510.5 1038,-516.5 1038,-516.5 1038,-607 1038,-607 1038,-613 1032,-619 1026,-619 1026,-619 20,-619 20,-619 14,-619 8,-613 8,-607 8,-607 8,-516.5 8,-516.5 8,-510.5 14,-504.5 20,-504.5"/>
17
- <text xml:space="preserve" text-anchor="middle" x="523" y="-596" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Write&#45;Side Tools</text>
16
+ <path fill="#022c22" stroke="#047857" d="M20,-504.5C20,-504.5 1042,-504.5 1042,-504.5 1048,-504.5 1054,-510.5 1054,-516.5 1054,-516.5 1054,-607 1054,-607 1054,-613 1048,-619 1042,-619 1042,-619 20,-619 20,-619 14,-619 8,-613 8,-607 8,-607 8,-516.5 8,-516.5 8,-510.5 14,-504.5 20,-504.5"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="531" y="-596" 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="M23,-306.5C23,-306.5 1362,-306.5 1362,-306.5 1368,-306.5 1374,-312.5 1374,-318.5 1374,-318.5 1374,-433.5 1374,-433.5 1374,-439.5 1368,-445.5 1362,-445.5 1362,-445.5 23,-445.5 23,-445.5 17,-445.5 11,-439.5 11,-433.5 11,-433.5 11,-318.5 11,-318.5 11,-312.5 17,-306.5 23,-306.5"/>
22
- <text xml:space="preserve" text-anchor="middle" x="692.5" y="-422.5" font-family="sans-Serif" font-size="20.00" fill="#fde68a">~/.pwn/</text>
21
+ <path fill="#422006" stroke="#a16207" d="M49,-306.5C49,-306.5 1401,-306.5 1401,-306.5 1407,-306.5 1413,-312.5 1413,-318.5 1413,-318.5 1413,-433.5 1413,-433.5 1413,-439.5 1407,-445.5 1401,-445.5 1401,-445.5 49,-445.5 49,-445.5 43,-445.5 37,-439.5 37,-433.5 37,-433.5 37,-318.5 37,-318.5 37,-312.5 43,-306.5 49,-306.5"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="725" y="-422.5" 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="M40,-149C40,-149 902,-149 902,-149 908,-149 914,-155 914,-161 914,-161 914,-259.5 914,-259.5 914,-265.5 908,-271.5 902,-271.5 902,-271.5 40,-271.5 40,-271.5 34,-271.5 28,-265.5 28,-259.5 28,-259.5 28,-161 28,-161 28,-155 34,-149 40,-149"/>
27
- <text xml:space="preserve" text-anchor="middle" x="471" y="-248.5" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Read&#45;Side / Injection</text>
26
+ <path fill="#2e1065" stroke="#6d28d9" d="M68,-149C68,-149 930,-149 930,-149 936,-149 942,-155 942,-161 942,-161 942,-259.5 942,-259.5 942,-265.5 936,-271.5 930,-271.5 930,-271.5 68,-271.5 68,-271.5 62,-271.5 56,-265.5 56,-259.5 56,-259.5 56,-161 56,-161 56,-155 62,-149 68,-149"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="499" y="-248.5" 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="M714.25,-548.5C714.25,-548.5 627.75,-548.5 627.75,-548.5 621.75,-548.5 615.75,-542.5 615.75,-536.5 615.75,-536.5 615.75,-524.5 615.75,-524.5 615.75,-518.5 621.75,-512.5 627.75,-512.5 627.75,-512.5 714.25,-512.5 714.25,-512.5 720.25,-512.5 726.25,-518.5 726.25,-524.5 726.25,-524.5 726.25,-536.5 726.25,-536.5 726.25,-542.5 720.25,-548.5 714.25,-548.5"/>
33
- <text xml:space="preserve" text-anchor="middle" x="671" y="-533" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_remember</text>
34
- <text xml:space="preserve" text-anchor="middle" x="671" y="-521" font-family="sans-Serif" font-size="10.00" fill="#0f172a">key · value · category</text>
32
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M730.5,-548.5C730.5,-548.5 627.5,-548.5 627.5,-548.5 621.5,-548.5 615.5,-542.5 615.5,-536.5 615.5,-536.5 615.5,-524.5 615.5,-524.5 615.5,-518.5 621.5,-512.5 627.5,-512.5 627.5,-512.5 730.5,-512.5 730.5,-512.5 736.5,-512.5 742.5,-518.5 742.5,-524.5 742.5,-524.5 742.5,-536.5 742.5,-536.5 742.5,-542.5 736.5,-548.5 730.5,-548.5"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="679" y="-533" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_remember · lean</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="679" y="-521" font-family="sans-Serif" font-size="10.00" fill="#0f172a">key · value · category</text>
35
35
  </g>
36
36
  <!-- Fmem -->
37
37
  <g id="node8" class="node">
38
38
  <title>Fmem</title>
39
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1204.12,-362.75C1204.12,-364.96 1177.18,-366.75 1144,-366.75 1110.82,-366.75 1083.88,-364.96 1083.88,-362.75 1083.88,-362.75 1083.88,-326.75 1083.88,-326.75 1083.88,-324.54 1110.82,-322.75 1144,-322.75 1177.18,-322.75 1204.12,-324.54 1204.12,-326.75 1204.12,-326.75 1204.12,-362.75 1204.12,-362.75"/>
40
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M1204.12,-362.75C1204.12,-360.54 1177.18,-358.75 1144,-358.75 1110.82,-358.75 1083.88,-360.54 1083.88,-362.75"/>
41
- <text xml:space="preserve" text-anchor="middle" x="1144" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
42
- <text xml:space="preserve" text-anchor="middle" x="1144" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">fact · pref · lesson · env</text>
39
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1243.12,-362.75C1243.12,-364.96 1216.18,-366.75 1183,-366.75 1149.82,-366.75 1122.88,-364.96 1122.88,-362.75 1122.88,-362.75 1122.88,-326.75 1122.88,-326.75 1122.88,-324.54 1149.82,-322.75 1183,-322.75 1216.18,-322.75 1243.12,-324.54 1243.12,-326.75 1243.12,-326.75 1243.12,-362.75 1243.12,-362.75"/>
40
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M1243.12,-362.75C1243.12,-360.54 1216.18,-358.75 1183,-358.75 1149.82,-358.75 1122.88,-360.54 1122.88,-362.75"/>
41
+ <text xml:space="preserve" text-anchor="middle" x="1183" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="1183" y="-335.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="M671.3,-512.03C672.64,-494.1 677.8,-466.97 696,-453.5 712.39,-441.36 1044.68,-454.47 1063,-445.5 1092.85,-430.89 1115.39,-399.5 1129.01,-375.82"/>
48
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1131.43,-377.24 1132.85,-368.89 1126.52,-374.53 1131.43,-377.24"/>
47
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M679.29,-512.03C680.64,-494.09 685.79,-466.96 704,-453.5 721.78,-440.35 1082.13,-455.21 1102,-445.5 1131.86,-430.91 1154.4,-399.53 1168.02,-375.83"/>
48
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1170.43,-377.25 1171.85,-368.9 1165.53,-374.55 1170.43,-377.25"/>
49
49
  </g>
50
50
  <!-- Fidx -->
51
51
  <g id="node9" class="node">
52
52
  <title>Fidx</title>
53
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M674.75,-369.5C674.75,-372.53 654.69,-375 630,-375 605.31,-375 585.25,-372.53 585.25,-369.5 585.25,-369.5 585.25,-320 585.25,-320 585.25,-316.97 605.31,-314.5 630,-314.5 654.69,-314.5 674.75,-316.97 674.75,-320 674.75,-320 674.75,-369.5 674.75,-369.5"/>
54
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M674.75,-369.5C674.75,-366.47 654.69,-364 630,-364 605.31,-364 585.25,-366.47 585.25,-369.5"/>
55
- <text xml:space="preserve" text-anchor="middle" x="630" y="-353.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.idx</text>
56
- <text xml:space="preserve" text-anchor="middle" x="630" y="-341.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">embedding index</text>
57
- <text xml:space="preserve" text-anchor="middle" x="630" y="-329.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(sha → vec)</text>
53
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M713.75,-369.5C713.75,-372.53 693.69,-375 669,-375 644.31,-375 624.25,-372.53 624.25,-369.5 624.25,-369.5 624.25,-320 624.25,-320 624.25,-316.97 644.31,-314.5 669,-314.5 693.69,-314.5 713.75,-316.97 713.75,-320 713.75,-320 713.75,-369.5 713.75,-369.5"/>
54
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M713.75,-369.5C713.75,-366.47 693.69,-364 669,-364 644.31,-364 624.25,-366.47 624.25,-369.5"/>
55
+ <text xml:space="preserve" text-anchor="middle" x="669" y="-353.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.idx</text>
56
+ <text xml:space="preserve" text-anchor="middle" x="669" y="-341.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">embedding index</text>
57
+ <text xml:space="preserve" text-anchor="middle" x="669" y="-329.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(sha → vec)</text>
58
58
  </g>
59
59
  <!-- Rem&#45;&gt;Fidx -->
60
60
  <g id="edge18" class="edge">
61
61
  <title>Rem&#45;&gt;Fidx</title>
62
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M631.11,-511.89C616.01,-503.01 600.43,-490.65 592,-474.5 577.07,-445.92 589.38,-410.62 603.84,-384.22"/>
63
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="606.24,-385.66 607.81,-377.33 601.39,-382.87 606.24,-385.66"/>
64
- <text xml:space="preserve" text-anchor="middle" x="616" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">incremental</text>
65
- <text xml:space="preserve" text-anchor="middle" x="616" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">re&#45;embed</text>
62
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M639.11,-511.89C624.01,-503.01 608.43,-490.65 600,-474.5 595.68,-466.23 597.38,-462.46 600,-453.5 601.17,-449.49 624.77,-413.02 644.05,-383.6"/>
63
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="646.22,-385.4 648.27,-377.17 641.54,-382.32 646.22,-385.4"/>
64
+ <text xml:space="preserve" text-anchor="middle" x="624" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">incremental</text>
65
+ <text xml:space="preserve" text-anchor="middle" x="624" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">re&#45;embed</text>
66
66
  </g>
67
67
  <!-- Skc -->
68
68
  <g id="node2" class="node">
@@ -74,16 +74,16 @@
74
74
  <!-- Fskl -->
75
75
  <g id="node10" class="node">
76
76
  <title>Fskl</title>
77
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M132.75,-362.75C132.75,-364.96 107.31,-366.75 76,-366.75 44.69,-366.75 19.25,-364.96 19.25,-362.75 19.25,-362.75 19.25,-326.75 19.25,-326.75 19.25,-324.54 44.69,-322.75 76,-322.75 107.31,-322.75 132.75,-324.54 132.75,-326.75 132.75,-326.75 132.75,-362.75 132.75,-362.75"/>
78
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M132.75,-362.75C132.75,-360.54 107.31,-358.75 76,-358.75 44.69,-358.75 19.25,-360.54 19.25,-362.75"/>
79
- <text xml:space="preserve" text-anchor="middle" x="76" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/&lt;n&gt;/SKILL.md</text>
80
- <text xml:space="preserve" text-anchor="middle" x="76" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">YAML front&#45;matter refs</text>
77
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M158.75,-362.75C158.75,-364.96 133.31,-366.75 102,-366.75 70.69,-366.75 45.25,-364.96 45.25,-362.75 45.25,-362.75 45.25,-326.75 45.25,-326.75 45.25,-324.54 70.69,-322.75 102,-322.75 133.31,-322.75 158.75,-324.54 158.75,-326.75 158.75,-326.75 158.75,-362.75 158.75,-362.75"/>
78
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M158.75,-362.75C158.75,-360.54 133.31,-358.75 102,-358.75 70.69,-358.75 45.25,-360.54 45.25,-362.75"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="102" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/&lt;n&gt;/SKILL.md</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="102" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">YAML front&#45;matter refs</text>
81
81
  </g>
82
82
  <!-- Skc&#45;&gt;Fskl -->
83
83
  <g id="edge2" class="edge">
84
84
  <title>Skc&#45;&gt;Fskl</title>
85
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M66.96,-511.88C68.65,-480.79 72.19,-415.83 74.3,-376.99"/>
86
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="77.08,-377.35 74.72,-369.21 71.49,-377.05 77.08,-377.35"/>
85
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M69.45,-511.88C75.54,-480.79 88.27,-415.83 95.88,-376.99"/>
86
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="98.62,-377.57 97.41,-369.18 93.12,-376.49 98.62,-377.57"/>
87
87
  </g>
88
88
  <!-- Note -->
89
89
  <g id="node3" class="node">
@@ -95,16 +95,16 @@
95
95
  <!-- Flrn -->
96
96
  <g id="node11" class="node">
97
97
  <title>Flrn</title>
98
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M370.5,-362.75C370.5,-364.96 354.14,-366.75 334,-366.75 313.86,-366.75 297.5,-364.96 297.5,-362.75 297.5,-362.75 297.5,-326.75 297.5,-326.75 297.5,-324.54 313.86,-322.75 334,-322.75 354.14,-322.75 370.5,-324.54 370.5,-326.75 370.5,-326.75 370.5,-362.75 370.5,-362.75"/>
99
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M370.5,-362.75C370.5,-360.54 354.14,-358.75 334,-358.75 313.86,-358.75 297.5,-360.54 297.5,-362.75"/>
100
- <text xml:space="preserve" text-anchor="middle" x="334" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
101
- <text xml:space="preserve" text-anchor="middle" x="334" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">outcome log</text>
98
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M409.5,-362.75C409.5,-364.96 393.14,-366.75 373,-366.75 352.86,-366.75 336.5,-364.96 336.5,-362.75 336.5,-362.75 336.5,-326.75 336.5,-326.75 336.5,-324.54 352.86,-322.75 373,-322.75 393.14,-322.75 409.5,-324.54 409.5,-326.75 409.5,-326.75 409.5,-362.75 409.5,-362.75"/>
99
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M409.5,-362.75C409.5,-360.54 393.14,-358.75 373,-358.75 352.86,-358.75 336.5,-360.54 336.5,-362.75"/>
100
+ <text xml:space="preserve" text-anchor="middle" x="373" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
101
+ <text xml:space="preserve" text-anchor="middle" x="373" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">outcome log</text>
102
102
  </g>
103
103
  <!-- Note&#45;&gt;Flrn -->
104
104
  <g id="edge3" class="edge">
105
105
  <title>Note&#45;&gt;Flrn</title>
106
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M348.1,-511.89C344.79,-501.2 340.95,-487.22 339,-474.5 333.93,-441.51 333.07,-403.25 333.24,-377.06"/>
107
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="336.03,-377.31 333.33,-369.27 330.43,-377.24 336.03,-377.31"/>
106
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M349.65,-512.29C347.15,-501.51 344.27,-487.29 343,-474.5 339.63,-440.48 350.34,-402.45 359.89,-376.61"/>
107
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="362.49,-377.64 362.75,-369.17 357.26,-375.63 362.49,-377.64"/>
108
108
  </g>
109
109
  <!-- Dist -->
110
110
  <g id="node4" class="node">
@@ -116,66 +116,66 @@
116
116
  <!-- Dist&#45;&gt;Fskl -->
117
117
  <g id="edge4" class="edge">
118
118
  <title>Dist&#45;&gt;Fskl</title>
119
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M193.54,-511.88C171.17,-480.27 124.01,-413.61 96.71,-375.03"/>
120
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="99.25,-373.77 92.34,-368.85 94.68,-377 99.25,-373.77"/>
119
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M196.03,-511.88C178.21,-480.4 140.72,-414.17 118.85,-375.52"/>
120
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="121.51,-374.54 115.14,-368.96 116.64,-377.3 121.51,-374.54"/>
121
121
  </g>
122
122
  <!-- Fses -->
123
123
  <g id="node12" class="node">
124
124
  <title>Fses</title>
125
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M257.5,-362.75C257.5,-364.96 238.45,-366.75 215,-366.75 191.55,-366.75 172.5,-364.96 172.5,-362.75 172.5,-362.75 172.5,-326.75 172.5,-326.75 172.5,-324.54 191.55,-322.75 215,-322.75 238.45,-322.75 257.5,-324.54 257.5,-326.75 257.5,-326.75 257.5,-362.75 257.5,-362.75"/>
126
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M257.5,-362.75C257.5,-360.54 238.45,-358.75 215,-358.75 191.55,-358.75 172.5,-360.54 172.5,-362.75"/>
127
- <text xml:space="preserve" text-anchor="middle" x="215" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
128
- <text xml:space="preserve" text-anchor="middle" x="215" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts</text>
125
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M296.88,-362.75C296.88,-364.96 274.97,-366.75 248,-366.75 221.03,-366.75 199.12,-364.96 199.12,-362.75 199.12,-362.75 199.12,-326.75 199.12,-326.75 199.12,-324.54 221.03,-322.75 248,-322.75 274.97,-322.75 296.88,-324.54 296.88,-326.75 296.88,-326.75 296.88,-362.75 296.88,-362.75"/>
126
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M296.88,-362.75C296.88,-360.54 274.97,-358.75 248,-358.75 221.03,-358.75 199.12,-360.54 199.12,-362.75"/>
127
+ <text xml:space="preserve" text-anchor="middle" x="248" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
128
+ <text xml:space="preserve" text-anchor="middle" x="248" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts (+ lean)</text>
129
129
  </g>
130
130
  <!-- Dist&#45;&gt;Fses -->
131
131
  <g id="edge5" class="edge">
132
132
  <title>Dist&#45;&gt;Fses</title>
133
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M207.33,-502.31C209.13,-465.56 212.3,-400.8 213.95,-367.25"/>
134
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="204.55,-501.79 206.96,-509.92 210.15,-502.06 204.55,-501.79"/>
135
- <text xml:space="preserve" text-anchor="middle" x="219.82" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
133
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M212.22,-502.31C220.61,-465.56 235.42,-400.8 243.09,-367.25"/>
134
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="209.52,-501.54 210.47,-509.96 214.98,-502.79 209.52,-501.54"/>
135
+ <text xml:space="preserve" text-anchor="middle" x="233.36" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
136
136
  </g>
137
137
  <!-- Mrec -->
138
138
  <g id="node5" class="node">
139
139
  <title>Mrec</title>
140
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M847.25,-548.5C847.25,-548.5 778.75,-548.5 778.75,-548.5 772.75,-548.5 766.75,-542.5 766.75,-536.5 766.75,-536.5 766.75,-524.5 766.75,-524.5 766.75,-518.5 772.75,-512.5 778.75,-512.5 778.75,-512.5 847.25,-512.5 847.25,-512.5 853.25,-512.5 859.25,-518.5 859.25,-524.5 859.25,-524.5 859.25,-536.5 859.25,-536.5 859.25,-542.5 853.25,-548.5 847.25,-548.5"/>
141
- <text xml:space="preserve" text-anchor="middle" x="813" y="-533" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_record</text>
142
- <text xml:space="preserve" text-anchor="middle" x="813" y="-521" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_resolve</text>
140
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M863.25,-548.5C863.25,-548.5 794.75,-548.5 794.75,-548.5 788.75,-548.5 782.75,-542.5 782.75,-536.5 782.75,-536.5 782.75,-524.5 782.75,-524.5 782.75,-518.5 788.75,-512.5 794.75,-512.5 794.75,-512.5 863.25,-512.5 863.25,-512.5 869.25,-512.5 875.25,-518.5 875.25,-524.5 875.25,-524.5 875.25,-536.5 875.25,-536.5 875.25,-542.5 869.25,-548.5 863.25,-548.5"/>
141
+ <text xml:space="preserve" text-anchor="middle" x="829" y="-533" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_record</text>
142
+ <text xml:space="preserve" text-anchor="middle" x="829" y="-521" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_resolve</text>
143
143
  </g>
144
144
  <!-- Mrec&#45;&gt;Fmem -->
145
145
  <g id="edge7" class="edge">
146
146
  <title>Mrec&#45;&gt;Fmem</title>
147
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M859.83,-511.93C866.59,-509.42 873.47,-506.88 880,-504.5 943.39,-481.37 957.97,-471.5 1023,-453.5 1040.47,-448.66 1047.48,-454.87 1063,-445.5 1090.94,-428.63 1113.4,-398.46 1127.52,-375.71"/>
148
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1129.78,-377.38 1131.5,-369.08 1124.98,-374.49 1129.78,-377.38"/>
149
- <text xml:space="preserve" text-anchor="middle" x="1056" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
147
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M875.85,-511.98C882.61,-509.47 889.48,-506.91 896,-504.5 957.72,-481.66 971.01,-468.84 1035,-453.5 1064.16,-446.51 1075.74,-459.98 1102,-445.5 1130.93,-429.55 1153.49,-398.68 1167.38,-375.48"/>
148
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="1169.71,-377.05 1171.28,-368.72 1164.86,-374.25 1169.71,-377.05"/>
149
+ <text xml:space="preserve" text-anchor="middle" x="1068" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve→lesson</text>
150
150
  </g>
151
151
  <!-- Fmis -->
152
152
  <g id="node13" class="node">
153
153
  <title>Fmis</title>
154
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M854.88,-362.75C854.88,-364.96 823.56,-366.75 785,-366.75 746.44,-366.75 715.12,-364.96 715.12,-362.75 715.12,-362.75 715.12,-326.75 715.12,-326.75 715.12,-324.54 746.44,-322.75 785,-322.75 823.56,-322.75 854.88,-324.54 854.88,-326.75 854.88,-326.75 854.88,-362.75 854.88,-362.75"/>
155
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M854.88,-362.75C854.88,-360.54 823.56,-358.75 785,-358.75 746.44,-358.75 715.12,-360.54 715.12,-362.75"/>
156
- <text xml:space="preserve" text-anchor="middle" x="785" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
157
- <text xml:space="preserve" text-anchor="middle" x="785" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sig → count · fix · regressed</text>
154
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M893.88,-362.75C893.88,-364.96 862.56,-366.75 824,-366.75 785.44,-366.75 754.12,-364.96 754.12,-362.75 754.12,-362.75 754.12,-326.75 754.12,-326.75 754.12,-324.54 785.44,-322.75 824,-322.75 862.56,-322.75 893.88,-324.54 893.88,-326.75 893.88,-326.75 893.88,-362.75 893.88,-362.75"/>
155
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M893.88,-362.75C893.88,-360.54 862.56,-358.75 824,-358.75 785.44,-358.75 754.12,-360.54 754.12,-362.75"/>
156
+ <text xml:space="preserve" text-anchor="middle" x="824" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
157
+ <text xml:space="preserve" text-anchor="middle" x="824" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sig → count · fix · regressed</text>
158
158
  </g>
159
159
  <!-- Mrec&#45;&gt;Fmis -->
160
160
  <g id="edge6" class="edge">
161
161
  <title>Mrec&#45;&gt;Fmis</title>
162
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M805.63,-512C801.48,-501.35 796.62,-487.37 794,-474.5 787.32,-441.74 785.37,-403.44 784.9,-377.18"/>
163
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="787.71,-377.33 784.81,-369.36 782.11,-377.4 787.71,-377.33"/>
162
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M817.81,-511.95C811.83,-501.51 805.08,-487.76 802,-474.5 794.31,-441.4 803.16,-402.93 811.83,-376.73"/>
163
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="814.47,-377.65 814.45,-369.18 809.18,-375.81 814.47,-377.65"/>
164
164
  </g>
165
165
  <!-- Fprf -->
166
166
  <g id="node16" class="node">
167
167
  <title>Fprf</title>
168
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1043.38,-362.75C1043.38,-364.96 1010.04,-366.75 969,-366.75 927.96,-366.75 894.62,-364.96 894.62,-362.75 894.62,-362.75 894.62,-326.75 894.62,-326.75 894.62,-324.54 927.96,-322.75 969,-322.75 1010.04,-322.75 1043.38,-324.54 1043.38,-326.75 1043.38,-326.75 1043.38,-362.75 1043.38,-362.75"/>
169
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M1043.38,-362.75C1043.38,-360.54 1010.04,-358.75 969,-358.75 927.96,-358.75 894.62,-360.54 894.62,-362.75"/>
170
- <text xml:space="preserve" text-anchor="middle" x="969" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preferences.jsonl</text>
171
- <text xml:space="preserve" text-anchor="middle" x="969" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DPO (prompt,rejected,chosen)</text>
168
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1082.38,-362.75C1082.38,-364.96 1049.04,-366.75 1008,-366.75 966.96,-366.75 933.62,-364.96 933.62,-362.75 933.62,-362.75 933.62,-326.75 933.62,-326.75 933.62,-324.54 966.96,-322.75 1008,-322.75 1049.04,-322.75 1082.38,-324.54 1082.38,-326.75 1082.38,-326.75 1082.38,-362.75 1082.38,-362.75"/>
169
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M1082.38,-362.75C1082.38,-360.54 1049.04,-358.75 1008,-358.75 966.96,-358.75 933.62,-360.54 933.62,-362.75"/>
170
+ <text xml:space="preserve" text-anchor="middle" x="1008" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preferences.jsonl</text>
171
+ <text xml:space="preserve" text-anchor="middle" x="1008" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DPO (prompt,rejected,chosen)</text>
172
172
  </g>
173
173
  <!-- Mrec&#45;&gt;Fprf -->
174
174
  <g id="edge34" class="edge">
175
175
  <title>Mrec&#45;&gt;Fprf</title>
176
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M811.72,-512.09C811.47,-494.73 814.05,-468.56 829.75,-453.5 844.49,-439.36 857.03,-455.2 875,-445.5 905.96,-428.79 932.51,-398.11 949.42,-375.17"/>
177
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="951.67,-376.84 954.06,-368.71 947.12,-373.58 951.67,-376.84"/>
178
- <text xml:space="preserve" text-anchor="middle" x="859.38" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve → pair</text>
176
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M825.44,-512.08C823.01,-494.73 822.55,-468.54 837.75,-453.5 849.86,-441.51 898.73,-453.06 914,-445.5 945.86,-429.73 972.54,-398.39 989.24,-375.03"/>
177
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="991.34,-376.92 993.61,-368.76 986.74,-373.73 991.34,-376.92"/>
178
+ <text xml:space="preserve" text-anchor="middle" x="867.38" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">resolve → pair</text>
179
179
  </g>
180
180
  <!-- Xft -->
181
181
  <g id="node6" class="node">
@@ -187,271 +187,271 @@
187
187
  <!-- Xft&#45;&gt;Flrn -->
188
188
  <g id="edge21" class="edge">
189
189
  <title>Xft&#45;&gt;Flrn</title>
190
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M479.66,-506.6C444.54,-483.1 394.61,-449.41 391,-445.5 369.22,-421.9 352.29,-388.53 342.72,-367.02"/>
191
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="477.95,-508.82 486.15,-510.94 481.06,-504.17 477.95,-508.82"/>
192
- <text xml:space="preserve" text-anchor="middle" x="455.33" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success:true</text>
190
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M486.31,-505.57C475.88,-496.18 464.11,-485.13 454,-474.5 422.52,-441.39 396.6,-394.23 383.1,-367.13"/>
191
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="484.32,-507.54 492.15,-510.77 488.04,-503.36 484.32,-507.54"/>
192
+ <text xml:space="preserve" text-anchor="middle" x="479.5" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">success:true</text>
193
193
  </g>
194
194
  <!-- Xft&#45;&gt;Fses -->
195
195
  <g id="edge20" class="edge">
196
196
  <title>Xft&#45;&gt;Fses</title>
197
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M449.22,-508.86C384.25,-487.77 291.88,-456.6 278,-445.5 251.77,-424.52 233.29,-389.48 223.4,-367.01"/>
198
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="448.25,-511.49 456.72,-511.29 449.97,-506.16 448.25,-511.49"/>
199
- <text xml:space="preserve" text-anchor="middle" x="354.81" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
197
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M455.13,-508.54C405.49,-490.13 339.1,-463.53 317,-445.5 290.41,-423.8 269.7,-389.3 258.17,-367.09"/>
198
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="453.87,-511.06 462.34,-511.2 455.81,-505.81 453.87,-511.06"/>
199
+ <text xml:space="preserve" text-anchor="middle" x="375.9" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">mine</text>
200
200
  </g>
201
201
  <!-- Fftn -->
202
202
  <g id="node15" class="node">
203
203
  <title>Fftn</title>
204
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M545.25,-362.75C545.25,-364.96 515.11,-366.75 478,-366.75 440.89,-366.75 410.75,-364.96 410.75,-362.75 410.75,-362.75 410.75,-326.75 410.75,-326.75 410.75,-324.54 440.89,-322.75 478,-322.75 515.11,-322.75 545.25,-324.54 545.25,-326.75 545.25,-326.75 545.25,-362.75 545.25,-362.75"/>
205
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M545.25,-362.75C545.25,-360.54 515.11,-358.75 478,-358.75 440.89,-358.75 410.75,-360.54 410.75,-362.75"/>
206
- <text xml:space="preserve" text-anchor="middle" x="478" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">finetune/*.jsonl</text>
207
- <text xml:space="preserve" text-anchor="middle" x="478" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ShareGPT / OpenAI / DPO</text>
204
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M584.25,-362.75C584.25,-364.96 554.11,-366.75 517,-366.75 479.89,-366.75 449.75,-364.96 449.75,-362.75 449.75,-362.75 449.75,-326.75 449.75,-326.75 449.75,-324.54 479.89,-322.75 517,-322.75 554.11,-322.75 584.25,-324.54 584.25,-326.75 584.25,-326.75 584.25,-362.75 584.25,-362.75"/>
205
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M584.25,-362.75C584.25,-360.54 554.11,-358.75 517,-358.75 479.89,-358.75 449.75,-360.54 449.75,-362.75"/>
206
+ <text xml:space="preserve" text-anchor="middle" x="517" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">finetune/*.jsonl</text>
207
+ <text xml:space="preserve" text-anchor="middle" x="517" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ShareGPT / OpenAI / DPO</text>
208
208
  </g>
209
209
  <!-- Xft&#45;&gt;Fftn -->
210
210
  <g id="edge19" class="edge">
211
211
  <title>Xft&#45;&gt;Fftn</title>
212
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M510.55,-511.88C504.46,-480.79 491.73,-415.83 484.12,-376.99"/>
213
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="486.88,-376.49 482.59,-369.18 481.38,-377.57 486.88,-376.49"/>
212
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M514.29,-511.88C514.8,-480.79 515.86,-415.83 516.49,-376.99"/>
213
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="519.29,-377.26 516.62,-369.21 513.69,-377.17 519.29,-377.26"/>
214
214
  </g>
215
215
  <!-- Rdpo -->
216
216
  <g id="node7" class="node">
217
217
  <title>Rdpo</title>
218
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M1018.38,-548.5C1018.38,-548.5 911.62,-548.5 911.62,-548.5 905.62,-548.5 899.62,-542.5 899.62,-536.5 899.62,-536.5 899.62,-524.5 899.62,-524.5 899.62,-518.5 905.62,-512.5 911.62,-512.5 911.62,-512.5 1018.38,-512.5 1018.38,-512.5 1024.38,-512.5 1030.38,-518.5 1030.38,-524.5 1030.38,-524.5 1030.38,-536.5 1030.38,-536.5 1030.38,-542.5 1024.38,-548.5 1018.38,-548.5"/>
219
- <text xml:space="preserve" text-anchor="middle" x="965" y="-533" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reward.record_preference</text>
220
- <text xml:space="preserve" text-anchor="middle" x="965" y="-521" font-family="sans-Serif" font-size="10.00" fill="#0f172a">export_dpo</text>
218
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M1034.38,-548.5C1034.38,-548.5 927.62,-548.5 927.62,-548.5 921.62,-548.5 915.62,-542.5 915.62,-536.5 915.62,-536.5 915.62,-524.5 915.62,-524.5 915.62,-518.5 921.62,-512.5 927.62,-512.5 927.62,-512.5 1034.38,-512.5 1034.38,-512.5 1040.38,-512.5 1046.38,-518.5 1046.38,-524.5 1046.38,-524.5 1046.38,-536.5 1046.38,-536.5 1046.38,-542.5 1040.38,-548.5 1034.38,-548.5"/>
219
+ <text xml:space="preserve" text-anchor="middle" x="981" y="-533" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reward.record_preference</text>
220
+ <text xml:space="preserve" text-anchor="middle" x="981" y="-521" font-family="sans-Serif" font-size="10.00" fill="#0f172a">export_dpo</text>
221
221
  </g>
222
222
  <!-- Rdpo&#45;&gt;Fprf -->
223
223
  <g id="edge33" class="edge">
224
224
  <title>Rdpo&#45;&gt;Fprf</title>
225
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M982.75,-511.89C991.59,-501.86 1001.35,-488.52 1006,-474.5 1017.12,-440.98 1002.03,-401.93 987.91,-375.7"/>
226
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="990.53,-374.64 984.17,-369.04 985.65,-377.39 990.53,-374.64"/>
225
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M994.65,-512.3C1001.95,-501.99 1010.2,-488.24 1014,-474.5 1023,-441.99 1019.32,-403.13 1014.78,-376.66"/>
226
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1017.58,-376.46 1013.37,-369.1 1012.08,-377.48 1017.58,-376.46"/>
227
227
  </g>
228
228
  <!-- Rec -->
229
229
  <g id="node17" class="node">
230
230
  <title>Rec</title>
231
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M893.88,-197C893.88,-197 838.12,-197 838.12,-197 832.12,-197 826.12,-191 826.12,-185 826.12,-185 826.12,-173 826.12,-173 826.12,-167 832.12,-161 838.12,-161 838.12,-161 893.88,-161 893.88,-161 899.88,-161 905.88,-167 905.88,-173 905.88,-173 905.88,-185 905.88,-185 905.88,-191 899.88,-197 893.88,-197"/>
232
- <text xml:space="preserve" text-anchor="middle" x="866" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_recall</text>
231
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M921.88,-197C921.88,-197 866.12,-197 866.12,-197 860.12,-197 854.12,-191 854.12,-185 854.12,-185 854.12,-173 854.12,-173 854.12,-167 860.12,-161 866.12,-161 866.12,-161 921.88,-161 921.88,-161 927.88,-161 933.88,-167 933.88,-173 933.88,-173 933.88,-185 933.88,-185 933.88,-191 927.88,-197 921.88,-197"/>
232
+ <text xml:space="preserve" text-anchor="middle" x="894" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory_recall</text>
233
233
  </g>
234
234
  <!-- Fmem&#45;&gt;Rec -->
235
235
  <g id="edge8" class="edge">
236
236
  <title>Fmem&#45;&gt;Rec</title>
237
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1107.66,-322.34C1054.96,-291.3 957.78,-234.06 904.11,-202.45"/>
238
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="905.57,-200.06 897.26,-198.41 902.73,-204.88 905.57,-200.06"/>
237
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M1145.51,-322.51C1090.72,-291.46 989.2,-233.94 933.36,-202.3"/>
238
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="934.86,-199.93 926.51,-198.42 932.09,-204.8 934.86,-199.93"/>
239
239
  </g>
240
240
  <!-- Midx -->
241
241
  <g id="node18" class="node">
242
242
  <title>Midx</title>
243
- <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M774.12,-201C774.12,-201 713.88,-201 713.88,-201 707.88,-201 701.88,-195 701.88,-189 701.88,-189 701.88,-169 701.88,-169 701.88,-163 707.88,-157 713.88,-157 713.88,-157 774.12,-157 774.12,-157 780.12,-157 786.12,-163 786.12,-169 786.12,-169 786.12,-189 786.12,-189 786.12,-195 780.12,-201 774.12,-201"/>
244
- <text xml:space="preserve" text-anchor="middle" x="744" y="-187.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MemoryIndex</text>
245
- <text xml:space="preserve" text-anchor="middle" x="744" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">recall_semantic</text>
246
- <text xml:space="preserve" text-anchor="middle" x="744" y="-163.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(cosine top&#45;K)</text>
243
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="2" d="M802.12,-201C802.12,-201 741.88,-201 741.88,-201 735.88,-201 729.88,-195 729.88,-189 729.88,-189 729.88,-169 729.88,-169 729.88,-163 735.88,-157 741.88,-157 741.88,-157 802.12,-157 802.12,-157 808.12,-157 814.12,-163 814.12,-169 814.12,-169 814.12,-189 814.12,-189 814.12,-195 808.12,-201 802.12,-201"/>
244
+ <text xml:space="preserve" text-anchor="middle" x="772" y="-187.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MemoryIndex</text>
245
+ <text xml:space="preserve" text-anchor="middle" x="772" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">recall_semantic</text>
246
+ <text xml:space="preserve" text-anchor="middle" x="772" y="-163.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(cosine top&#45;K)</text>
247
247
  </g>
248
248
  <!-- Fmem&#45;&gt;Midx -->
249
249
  <g id="edge23" class="edge">
250
250
  <title>Fmem&#45;&gt;Midx</title>
251
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M1104.11,-322.57C1091.29,-316.54 1076.82,-310.52 1063,-306.5 952.32,-274.29 903.95,-332.27 806,-271.5 783.13,-257.31 766.71,-231.21 756.54,-210.5"/>
252
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="759.19,-209.56 753.27,-203.5 754.12,-211.94 759.19,-209.56"/>
251
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M1143.54,-322.72C1130.62,-316.62 1115.98,-310.53 1102,-306.5 986.57,-273.25 936.25,-334.55 834,-271.5 811.09,-257.37 794.68,-231.26 784.51,-210.54"/>
252
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="787.17,-209.6 781.25,-203.53 782.09,-211.97 787.17,-209.6"/>
253
253
  </g>
254
254
  <!-- ReVal -->
255
255
  <g id="node25" class="node">
256
256
  <title>ReVal</title>
257
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1356.12,-552.5C1356.12,-552.5 1253.88,-552.5 1253.88,-552.5 1247.88,-552.5 1241.88,-546.5 1241.88,-540.5 1241.88,-540.5 1241.88,-520.5 1241.88,-520.5 1241.88,-514.5 1247.88,-508.5 1253.88,-508.5 1253.88,-508.5 1356.12,-508.5 1356.12,-508.5 1362.12,-508.5 1368.12,-514.5 1368.12,-520.5 1368.12,-520.5 1368.12,-540.5 1368.12,-540.5 1368.12,-546.5 1362.12,-552.5 1356.12,-552.5"/>
258
- <text xml:space="preserve" text-anchor="middle" x="1305" y="-539" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Extrospection.verify</text>
259
- <text xml:space="preserve" text-anchor="middle" x="1305" y="-527" font-family="sans-Serif" font-size="10.00" fill="#0f172a">revalidate_memory (cron)</text>
260
- <text xml:space="preserve" text-anchor="middle" x="1305" y="-515" font-family="sans-Serif" font-size="10.00" fill="#0f172a">browser&#45;backed GC</text>
257
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1364.12,-552.5C1364.12,-552.5 1261.88,-552.5 1261.88,-552.5 1255.88,-552.5 1249.88,-546.5 1249.88,-540.5 1249.88,-540.5 1249.88,-520.5 1249.88,-520.5 1249.88,-514.5 1255.88,-508.5 1261.88,-508.5 1261.88,-508.5 1364.12,-508.5 1364.12,-508.5 1370.12,-508.5 1376.12,-514.5 1376.12,-520.5 1376.12,-520.5 1376.12,-540.5 1376.12,-540.5 1376.12,-546.5 1370.12,-552.5 1364.12,-552.5"/>
258
+ <text xml:space="preserve" text-anchor="middle" x="1313" y="-539" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Extrospection.verify</text>
259
+ <text xml:space="preserve" text-anchor="middle" x="1313" y="-527" font-family="sans-Serif" font-size="10.00" fill="#0f172a">revalidate_memory (cron)</text>
260
+ <text xml:space="preserve" text-anchor="middle" x="1313" y="-515" font-family="sans-Serif" font-size="10.00" fill="#0f172a">browser&#45;backed GC</text>
261
261
  </g>
262
262
  <!-- Fmem&#45;&gt;ReVal -->
263
263
  <g id="edge30" class="edge">
264
264
  <title>Fmem&#45;&gt;ReVal</title>
265
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M1127.57,-367C1108.55,-394.39 1082.78,-442.3 1107.25,-474.5 1122.59,-494.68 1181.95,-509.42 1231.67,-518.53"/>
266
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1231.16,-521.28 1239.53,-519.93 1232.14,-515.77 1231.16,-521.28"/>
267
- <text xml:space="preserve" text-anchor="middle" x="1149.62" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:fact w/ CVE|ver|URL</text>
265
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M1158.56,-367.18C1131.05,-393.92 1093.39,-440.27 1119.25,-474.5 1134.12,-494.18 1191.45,-508.87 1239.93,-518.1"/>
266
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1239.18,-520.81 1247.55,-519.51 1240.2,-515.3 1239.18,-520.81"/>
267
+ <text xml:space="preserve" text-anchor="middle" x="1161.62" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:fact w/ CVE|ver|URL</text>
268
268
  </g>
269
269
  <!-- Fidx&#45;&gt;Midx -->
270
270
  <g id="edge22" class="edge">
271
271
  <title>Fidx&#45;&gt;Midx</title>
272
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M651.7,-314.01C661.1,-301.01 672.18,-285.56 682,-271.5 696.29,-251.04 712.07,-227.75 724.13,-209.78"/>
273
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="726.17,-211.77 728.29,-203.57 721.51,-208.65 726.17,-211.77"/>
272
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M687.65,-314.1C706.23,-284.57 734.58,-239.49 753.2,-209.88"/>
273
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="755.48,-211.53 757.37,-203.26 750.74,-208.54 755.48,-211.53"/>
274
274
  </g>
275
275
  <!-- Skv -->
276
276
  <g id="node19" class="node">
277
277
  <title>Skv</title>
278
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M104.25,-197C104.25,-197 47.75,-197 47.75,-197 41.75,-197 35.75,-191 35.75,-185 35.75,-185 35.75,-173 35.75,-173 35.75,-167 41.75,-161 47.75,-161 47.75,-161 104.25,-161 104.25,-161 110.25,-161 116.25,-167 116.25,-173 116.25,-173 116.25,-185 116.25,-185 116.25,-191 110.25,-197 104.25,-197"/>
279
- <text xml:space="preserve" text-anchor="middle" x="76" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_list · view</text>
278
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M132.25,-197C132.25,-197 75.75,-197 75.75,-197 69.75,-197 63.75,-191 63.75,-185 63.75,-185 63.75,-173 63.75,-173 63.75,-167 69.75,-161 75.75,-161 75.75,-161 132.25,-161 132.25,-161 138.25,-161 144.25,-167 144.25,-173 144.25,-173 144.25,-185 144.25,-185 144.25,-191 138.25,-197 132.25,-197"/>
279
+ <text xml:space="preserve" text-anchor="middle" x="104" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skill_list · view</text>
280
280
  </g>
281
281
  <!-- Fskl&#45;&gt;Skv -->
282
282
  <g id="edge9" class="edge">
283
283
  <title>Fskl&#45;&gt;Skv</title>
284
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M76,-322.34C76,-292.77 76,-239.43 76,-207.11"/>
285
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="78.8,-207.38 76,-199.38 73.2,-207.38 78.8,-207.38"/>
284
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M102.26,-322.34C102.62,-292.77 103.27,-239.43 103.67,-207.11"/>
285
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="106.47,-207.41 103.76,-199.38 100.87,-207.35 106.47,-207.41"/>
286
286
  </g>
287
287
  <!-- Out -->
288
288
  <g id="node20" class="node">
289
289
  <title>Out</title>
290
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M529.88,-197C529.88,-197 456.12,-197 456.12,-197 450.12,-197 444.12,-191 444.12,-185 444.12,-185 444.12,-173 444.12,-173 444.12,-167 450.12,-161 456.12,-161 456.12,-161 529.88,-161 529.88,-161 535.88,-161 541.88,-167 541.88,-173 541.88,-173 541.88,-185 541.88,-185 541.88,-191 535.88,-197 529.88,-197"/>
291
- <text xml:space="preserve" text-anchor="middle" x="493" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_outcomes</text>
292
- <text xml:space="preserve" text-anchor="middle" x="493" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_stats</text>
290
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M557.88,-197C557.88,-197 484.12,-197 484.12,-197 478.12,-197 472.12,-191 472.12,-185 472.12,-185 472.12,-173 472.12,-173 472.12,-167 478.12,-161 484.12,-161 484.12,-161 557.88,-161 557.88,-161 563.88,-161 569.88,-167 569.88,-173 569.88,-173 569.88,-185 569.88,-185 569.88,-191 563.88,-197 557.88,-197"/>
291
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_outcomes</text>
292
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_stats</text>
293
293
  </g>
294
294
  <!-- Flrn&#45;&gt;Out -->
295
295
  <g id="edge10" class="edge">
296
296
  <title>Flrn&#45;&gt;Out</title>
297
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M363.1,-323.29C381.52,-309.66 405.3,-290.77 424,-271.5 443.82,-251.07 463.04,-224.89 476.14,-205.77"/>
298
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="478.45,-207.36 480.61,-199.16 473.81,-204.23 478.45,-207.36"/>
297
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M398.31,-322.72C414.38,-308.86 435.24,-289.92 452,-271.5 471.04,-250.57 490.22,-224.65 503.51,-205.75"/>
298
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="505.78,-207.39 508.05,-199.22 501.19,-204.19 505.78,-207.39"/>
299
299
  </g>
300
300
  <!-- Exem -->
301
301
  <g id="node23" class="node">
302
302
  <title>Exem</title>
303
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M391.62,-197C391.62,-197 298.38,-197 298.38,-197 292.38,-197 286.38,-191 286.38,-185 286.38,-185 286.38,-173 286.38,-173 286.38,-167 292.38,-161 298.38,-161 298.38,-161 391.62,-161 391.62,-161 397.62,-161 403.62,-167 403.62,-173 403.62,-173 403.62,-185 403.62,-185 403.62,-191 397.62,-197 391.62,-197"/>
304
- <text xml:space="preserve" text-anchor="middle" x="345" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Learning.exemplars_for</text>
305
- <text xml:space="preserve" text-anchor="middle" x="345" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(few&#45;shot trace)</text>
303
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M419.62,-197C419.62,-197 326.38,-197 326.38,-197 320.38,-197 314.38,-191 314.38,-185 314.38,-185 314.38,-173 314.38,-173 314.38,-167 320.38,-161 326.38,-161 326.38,-161 419.62,-161 419.62,-161 425.62,-161 431.62,-167 431.62,-173 431.62,-173 431.62,-185 431.62,-185 431.62,-191 425.62,-197 419.62,-197"/>
304
+ <text xml:space="preserve" text-anchor="middle" x="373" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Learning.exemplars_for</text>
305
+ <text xml:space="preserve" text-anchor="middle" x="373" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(few&#45;shot trace)</text>
306
306
  </g>
307
307
  <!-- Flrn&#45;&gt;Exem -->
308
308
  <g id="edge24" class="edge">
309
309
  <title>Flrn&#45;&gt;Exem</title>
310
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M335.44,-322.34C337.42,-292.77 341.01,-239.43 343.18,-207.11"/>
311
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="345.96,-207.55 343.7,-199.38 340.37,-207.17 345.96,-207.55"/>
310
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M373,-322.34C373,-292.77 373,-239.43 373,-207.11"/>
311
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="375.8,-207.38 373,-199.38 370.2,-207.38 375.8,-207.38"/>
312
312
  </g>
313
313
  <!-- Sesv -->
314
314
  <g id="node21" class="node">
315
315
  <title>Sesv</title>
316
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M234.12,-197C234.12,-197 167.88,-197 167.88,-197 161.88,-197 155.88,-191 155.88,-185 155.88,-185 155.88,-173 155.88,-173 155.88,-167 161.88,-161 167.88,-161 167.88,-161 234.12,-161 234.12,-161 240.12,-161 246.12,-167 246.12,-173 246.12,-173 246.12,-185 246.12,-185 246.12,-191 240.12,-197 234.12,-197"/>
317
- <text xml:space="preserve" text-anchor="middle" x="201" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_view</text>
318
- <text xml:space="preserve" text-anchor="middle" x="201" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_current</text>
316
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M262.12,-197C262.12,-197 195.88,-197 195.88,-197 189.88,-197 183.88,-191 183.88,-185 183.88,-185 183.88,-173 183.88,-173 183.88,-167 189.88,-161 195.88,-161 195.88,-161 262.12,-161 262.12,-161 268.12,-161 274.12,-167 274.12,-173 274.12,-173 274.12,-185 274.12,-185 274.12,-191 268.12,-197 262.12,-197"/>
317
+ <text xml:space="preserve" text-anchor="middle" x="229" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_view</text>
318
+ <text xml:space="preserve" text-anchor="middle" x="229" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions_current</text>
319
319
  </g>
320
320
  <!-- Fses&#45;&gt;Sesv -->
321
321
  <g id="edge11" class="edge">
322
322
  <title>Fses&#45;&gt;Sesv</title>
323
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M213.17,-322.34C210.64,-292.77 206.08,-239.43 203.32,-207.11"/>
324
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="206.13,-207.11 202.66,-199.37 200.55,-207.58 206.13,-207.11"/>
323
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M245.52,-322.34C242.09,-292.77 235.9,-239.43 232.15,-207.11"/>
324
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="234.95,-206.99 231.25,-199.37 229.39,-207.64 234.95,-206.99"/>
325
325
  </g>
326
326
  <!-- Fses&#45;&gt;Exem -->
327
327
  <g id="edge25" class="edge">
328
328
  <title>Fses&#45;&gt;Exem</title>
329
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M232,-322.34C255.98,-292.13 299.66,-237.11 325.12,-205.04"/>
330
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="327.17,-206.96 329.95,-198.95 322.79,-203.48 327.17,-206.96"/>
329
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" stroke-dasharray="5,2" d="M264.34,-322.34C287.4,-292.13 329.41,-237.11 353.88,-205.04"/>
330
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="355.89,-207.03 358.51,-198.98 351.43,-203.64 355.89,-207.03"/>
331
331
  </g>
332
332
  <!-- Teach -->
333
333
  <g id="node26" class="node">
334
334
  <title>Teach</title>
335
- <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M1656.62,-552.5C1656.62,-552.5 1563.38,-552.5 1563.38,-552.5 1557.38,-552.5 1551.38,-546.5 1551.38,-540.5 1551.38,-540.5 1551.38,-520.5 1551.38,-520.5 1551.38,-514.5 1557.38,-508.5 1563.38,-508.5 1563.38,-508.5 1656.62,-508.5 1656.62,-508.5 1662.62,-508.5 1668.62,-514.5 1668.62,-520.5 1668.62,-520.5 1668.62,-540.5 1668.62,-540.5 1668.62,-546.5 1662.62,-552.5 1656.62,-552.5"/>
336
- <text xml:space="preserve" text-anchor="middle" x="1610" y="-539" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reflect.on</text>
337
- <text xml:space="preserve" text-anchor="middle" x="1610" y="-527" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(engine: reflect_engine)</text>
338
- <text xml:space="preserve" text-anchor="middle" x="1610" y="-515" font-family="sans-Serif" font-size="10.00" fill="#0f172a">teacher&#45;student</text>
335
+ <path fill="#fda4af" stroke="#334155" stroke-width="2" d="M1664.62,-552.5C1664.62,-552.5 1571.38,-552.5 1571.38,-552.5 1565.38,-552.5 1559.38,-546.5 1559.38,-540.5 1559.38,-540.5 1559.38,-520.5 1559.38,-520.5 1559.38,-514.5 1565.38,-508.5 1571.38,-508.5 1571.38,-508.5 1664.62,-508.5 1664.62,-508.5 1670.62,-508.5 1676.62,-514.5 1676.62,-520.5 1676.62,-520.5 1676.62,-540.5 1676.62,-540.5 1676.62,-546.5 1670.62,-552.5 1664.62,-552.5"/>
336
+ <text xml:space="preserve" text-anchor="middle" x="1618" y="-539" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reflect.on</text>
337
+ <text xml:space="preserve" text-anchor="middle" x="1618" y="-527" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(engine: reflect_engine)</text>
338
+ <text xml:space="preserve" text-anchor="middle" x="1618" y="-515" font-family="sans-Serif" font-size="10.00" fill="#0f172a">teacher&#45;student</text>
339
339
  </g>
340
340
  <!-- Fses&#45;&gt;Teach -->
341
341
  <g id="edge31" class="edge">
342
342
  <title>Fses&#45;&gt;Teach</title>
343
- <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M221.55,-367.08C230.19,-391.05 247.92,-428.79 278,-445.5 306.48,-461.33 1419.25,-446.19 1451,-453.5 1492.7,-463.1 1536.29,-484.89 1567.26,-502.69"/>
344
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1565.63,-504.98 1573.95,-506.6 1568.45,-500.15 1565.63,-504.98"/>
345
- <text xml:space="preserve" text-anchor="middle" x="1529.01" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">transcript</text>
343
+ <path fill="none" stroke="#94a3b8" stroke-width="1.3" stroke-dasharray="5,2" d="M255.77,-367.15C265.78,-391.17 285.73,-428.97 317,-445.5 345.07,-460.34 1429.07,-446.33 1460,-453.5 1501.47,-463.11 1544.78,-484.9 1575.55,-502.7"/>
344
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.3" points="1573.87,-504.96 1582.19,-506.6 1576.71,-500.13 1573.87,-504.96"/>
345
+ <text xml:space="preserve" text-anchor="middle" x="1537.66" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">transcript</text>
346
346
  </g>
347
347
  <!-- Mlst -->
348
348
  <g id="node22" class="node">
349
349
  <title>Mlst</title>
350
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M649.88,-197C649.88,-197 594.12,-197 594.12,-197 588.12,-197 582.12,-191 582.12,-185 582.12,-185 582.12,-173 582.12,-173 582.12,-167 588.12,-161 594.12,-161 594.12,-161 649.88,-161 649.88,-161 655.88,-161 661.88,-167 661.88,-173 661.88,-173 661.88,-185 661.88,-185 661.88,-191 655.88,-197 649.88,-197"/>
351
- <text xml:space="preserve" text-anchor="middle" x="622" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_list</text>
352
- <text xml:space="preserve" text-anchor="middle" x="622" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">correction_hint</text>
350
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M677.88,-197C677.88,-197 622.12,-197 622.12,-197 616.12,-197 610.12,-191 610.12,-185 610.12,-185 610.12,-173 610.12,-173 610.12,-167 616.12,-161 622.12,-161 622.12,-161 677.88,-161 677.88,-161 683.88,-161 689.88,-167 689.88,-173 689.88,-173 689.88,-185 689.88,-185 689.88,-191 683.88,-197 677.88,-197"/>
351
+ <text xml:space="preserve" text-anchor="middle" x="650" y="-181.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes_list</text>
352
+ <text xml:space="preserve" text-anchor="middle" x="650" y="-169.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">correction_hint</text>
353
353
  </g>
354
354
  <!-- Fmis&#45;&gt;Mlst -->
355
355
  <g id="edge12" class="edge">
356
356
  <title>Fmis&#45;&gt;Mlst</title>
357
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M747.6,-322.38C726.81,-309.36 701.31,-291.42 682,-271.5 663.05,-251.95 646.52,-225.62 635.63,-206.22"/>
358
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="638.14,-204.97 631.84,-199.3 633.23,-207.67 638.14,-204.97"/>
357
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M781.39,-322.5C758.54,-309.76 730.87,-292.05 710,-271.5 690.49,-252.29 673.92,-225.69 663.17,-206.13"/>
358
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="665.69,-204.89 659.44,-199.15 660.75,-207.53 665.69,-204.89"/>
359
359
  </g>
360
360
  <!-- Fext -->
361
361
  <g id="node14" class="node">
362
362
  <title>Fext</title>
363
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1366.25,-362.75C1366.25,-364.96 1338.8,-366.75 1305,-366.75 1271.2,-366.75 1243.75,-364.96 1243.75,-362.75 1243.75,-362.75 1243.75,-326.75 1243.75,-326.75 1243.75,-324.54 1271.2,-322.75 1305,-322.75 1338.8,-322.75 1366.25,-324.54 1366.25,-326.75 1366.25,-326.75 1366.25,-362.75 1366.25,-362.75"/>
364
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M1366.25,-362.75C1366.25,-360.54 1338.8,-358.75 1305,-358.75 1271.2,-358.75 1243.75,-360.54 1243.75,-362.75"/>
365
- <text xml:space="preserve" text-anchor="middle" x="1305" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
366
- <text xml:space="preserve" text-anchor="middle" x="1305" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">snapshot · rf · web · obs</text>
363
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M1405.25,-362.75C1405.25,-364.96 1377.8,-366.75 1344,-366.75 1310.2,-366.75 1282.75,-364.96 1282.75,-362.75 1282.75,-362.75 1282.75,-326.75 1282.75,-326.75 1282.75,-324.54 1310.2,-322.75 1344,-322.75 1377.8,-322.75 1405.25,-324.54 1405.25,-326.75 1405.25,-326.75 1405.25,-362.75 1405.25,-362.75"/>
364
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M1405.25,-362.75C1405.25,-360.54 1377.8,-358.75 1344,-358.75 1310.2,-358.75 1282.75,-360.54 1282.75,-362.75"/>
365
+ <text xml:space="preserve" text-anchor="middle" x="1344" y="-347.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
366
+ <text xml:space="preserve" text-anchor="middle" x="1344" y="-335.25" font-family="sans-Serif" font-size="10.00" fill="#0f172a">snapshot · rf · web · obs</text>
367
367
  </g>
368
368
  <!-- Fprf&#45;&gt;Fftn -->
369
369
  <g id="edge35" class="edge">
370
370
  <title>Fprf&#45;&gt;Fftn</title>
371
- <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M954.57,-367.3C938.38,-390.28 909.79,-424.53 875,-438.96 811.37,-465.36 628.11,-466.58 565,-438.96 535.52,-426.06 511.6,-397.69 496.35,-375.44"/>
372
- <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="498.77,-374.02 492.03,-368.9 494.1,-377.11 498.77,-374.02"/>
373
- <text xml:space="preserve" text-anchor="middle" x="720" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_dpo</text>
371
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M993.57,-367.3C977.38,-390.28 948.79,-424.53 914,-438.96 850.37,-465.36 667.11,-466.58 604,-438.96 574.52,-426.06 550.6,-397.69 535.35,-375.44"/>
372
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="537.77,-374.02 531.03,-368.9 533.1,-377.11 537.77,-374.02"/>
373
+ <text xml:space="preserve" text-anchor="middle" x="728" y="-460.7" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">export_dpo</text>
374
374
  </g>
375
375
  <!-- Prompt -->
376
376
  <g id="node24" class="node">
377
377
  <title>Prompt</title>
378
- <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M587.62,-68C587.62,-68 398.38,-68 398.38,-68 392.38,-68 386.38,-62 386.38,-56 386.38,-56 386.38,-12 386.38,-12 386.38,-6 392.38,0 398.38,0 398.38,0 587.62,0 587.62,0 593.62,0 599.62,-6 599.62,-12 599.62,-12 599.62,-56 599.62,-56 599.62,-62 593.62,-68 587.62,-68"/>
379
- <text xml:space="preserve" text-anchor="middle" x="493" y="-54.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PromptBuilder.build(request:)</text>
380
- <text xml:space="preserve" text-anchor="middle" x="493" y="-42.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">engine&#45;aware .budget</text>
381
- <text xml:space="preserve" text-anchor="middle" x="493" y="-30.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MEMORY (relevance&#45;ranked) + SKILLS</text>
382
- <text xml:space="preserve" text-anchor="middle" x="493" y="-18.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ LEARNING + KNOWN MISTAKES/FIXES</text>
383
- <text xml:space="preserve" text-anchor="middle" x="493" y="-6.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ METRICS (per&#45;engine) + EXTRO</text>
378
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="2" d="M615.62,-68C615.62,-68 426.38,-68 426.38,-68 420.38,-68 414.38,-62 414.38,-56 414.38,-56 414.38,-12 414.38,-12 414.38,-6 420.38,0 426.38,0 426.38,0 615.62,0 615.62,0 621.62,0 627.62,-6 627.62,-12 627.62,-12 627.62,-56 627.62,-56 627.62,-62 621.62,-68 615.62,-68"/>
379
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-54.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PromptBuilder.build(request:)</text>
380
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-42.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">engine&#45;aware .budget</text>
381
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-30.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">MEMORY (relevance&#45;ranked) + SKILLS</text>
382
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-18.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ LEARNING + KNOWN MISTAKES/FIXES</text>
383
+ <text xml:space="preserve" text-anchor="middle" x="521" y="-6.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">+ METRICS (per&#45;engine) + EXTRO</text>
384
384
  </g>
385
385
  <!-- Rec&#45;&gt;Prompt -->
386
386
  <g id="edge13" class="edge">
387
387
  <title>Rec&#45;&gt;Prompt</title>
388
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M843.72,-160.58C820.86,-143.47 783.69,-117.7 748,-102 704.48,-82.85 654.29,-68.21 610.01,-57.57"/>
389
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="610.71,-54.86 602.28,-55.74 609.42,-60.31 610.71,-54.86"/>
388
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M871.72,-160.58C848.86,-143.47 811.69,-117.7 776,-102 732.48,-82.85 682.29,-68.21 638.01,-57.57"/>
389
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="638.71,-54.86 630.28,-55.74 637.42,-60.31 638.71,-54.86"/>
390
390
  </g>
391
391
  <!-- Midx&#45;&gt;Prompt -->
392
392
  <g id="edge26" class="edge">
393
393
  <title>Midx&#45;&gt;Prompt</title>
394
- <path fill="none" stroke="#38bdf8" stroke-width="2" d="M716.93,-156.13C696.3,-140.04 666.79,-118.22 639,-102 621.75,-91.93 602.72,-82.25 584.26,-73.53"/>
395
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="585.56,-71.04 577.12,-70.2 583.19,-76.12 585.56,-71.04"/>
396
- <text xml:space="preserve" text-anchor="middle" x="703.52" y="-114.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
397
- <text xml:space="preserve" text-anchor="middle" x="703.52" y="-103.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(top&#45;K by cosine)</text>
394
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M744.93,-156.13C724.3,-140.04 694.79,-118.22 667,-102 649.75,-91.93 630.72,-82.25 612.26,-73.53"/>
395
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="613.56,-71.04 605.12,-70.2 611.19,-76.12 613.56,-71.04"/>
396
+ <text xml:space="preserve" text-anchor="middle" x="731.52" y="-114.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">MEMORY block</text>
397
+ <text xml:space="preserve" text-anchor="middle" x="731.52" y="-103.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(top&#45;K by cosine)</text>
398
398
  </g>
399
399
  <!-- Skv&#45;&gt;Prompt -->
400
400
  <g id="edge14" class="edge">
401
401
  <title>Skv&#45;&gt;Prompt</title>
402
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M110.21,-160.44C118.55,-156.45 127.51,-152.39 136,-149 214.65,-117.62 305.61,-88.68 376.03,-67.81"/>
403
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="376.62,-70.55 383.5,-65.6 375.03,-65.18 376.62,-70.55"/>
402
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M138.21,-160.44C146.55,-156.45 155.51,-152.39 164,-149 242.65,-117.62 333.61,-88.68 404.03,-67.81"/>
403
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="404.62,-70.55 411.5,-65.6 403.03,-65.18 404.62,-70.55"/>
404
404
  </g>
405
405
  <!-- Out&#45;&gt;Prompt -->
406
406
  <g id="edge15" class="edge">
407
407
  <title>Out&#45;&gt;Prompt</title>
408
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M493,-160.47C493,-140.21 493,-106.13 493,-78.6"/>
409
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="495.8,-78.75 493,-70.75 490.2,-78.75 495.8,-78.75"/>
408
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M521,-160.47C521,-140.21 521,-106.13 521,-78.6"/>
409
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="523.8,-78.75 521,-70.75 518.2,-78.75 523.8,-78.75"/>
410
410
  </g>
411
411
  <!-- Sesv&#45;&gt;Prompt -->
412
412
  <g id="edge16" class="edge">
413
413
  <title>Sesv&#45;&gt;Prompt</title>
414
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M236.8,-160.47C280.91,-138.86 357.1,-101.55 414.96,-73.22"/>
415
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="416,-75.83 421.95,-69.79 413.54,-70.8 416,-75.83"/>
414
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M264.8,-160.47C308.91,-138.86 385.1,-101.55 442.96,-73.22"/>
415
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="444,-75.83 449.95,-69.79 441.54,-70.8 444,-75.83"/>
416
416
  </g>
417
417
  <!-- Mlst&#45;&gt;Prompt -->
418
418
  <g id="edge17" class="edge">
419
419
  <title>Mlst&#45;&gt;Prompt</title>
420
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M606.18,-160.47C587.51,-139.76 555.81,-104.63 530.7,-76.79"/>
421
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="532.94,-75.1 525.51,-71.03 528.79,-78.85 532.94,-75.1"/>
422
- <text xml:space="preserve" text-anchor="middle" x="599.05" y="-109.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">do NOT repeat</text>
420
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M634.18,-160.47C615.51,-139.76 583.81,-104.63 558.7,-76.79"/>
421
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="560.94,-75.1 553.51,-71.03 556.79,-78.85 560.94,-75.1"/>
422
+ <text xml:space="preserve" text-anchor="middle" x="627.05" y="-109.2" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">do NOT repeat</text>
423
423
  </g>
424
424
  <!-- Exem&#45;&gt;Prompt -->
425
425
  <g id="edge27" class="edge">
426
426
  <title>Exem&#45;&gt;Prompt</title>
427
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M363.15,-160.47C384.94,-139.41 422.19,-103.42 451.22,-75.37"/>
428
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="452.81,-77.73 456.62,-70.15 448.92,-73.7 452.81,-77.73"/>
429
- <text xml:space="preserve" text-anchor="middle" x="452.69" y="-114.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">few&#45;shot msgs</text>
430
- <text xml:space="preserve" text-anchor="middle" x="452.69" y="-103.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(local only)</text>
427
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M391.15,-160.47C412.94,-139.41 450.19,-103.42 479.22,-75.37"/>
428
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="480.81,-77.73 484.62,-70.15 476.92,-73.7 480.81,-77.73"/>
429
+ <text xml:space="preserve" text-anchor="middle" x="480.69" y="-114.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">few&#45;shot msgs</text>
430
+ <text xml:space="preserve" text-anchor="middle" x="480.69" y="-103.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">(local only)</text>
431
431
  </g>
432
432
  <!-- ReVal&#45;&gt;Fmem -->
433
433
  <g id="edge28" class="edge">
434
434
  <title>ReVal&#45;&gt;Fmem</title>
435
- <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1262.12,-508.02C1246.99,-499.06 1230.61,-487.66 1218,-474.5 1190.47,-445.79 1169.25,-404.92 1156.72,-376.97"/>
436
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1159.33,-375.94 1153.57,-369.72 1154.19,-378.18 1159.33,-375.94"/>
437
- <text xml:space="preserve" text-anchor="middle" x="1273.5" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED yyyy&#45;mm&#45;dd]</text>
438
- <text xml:space="preserve" text-anchor="middle" x="1273.5" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">prefix stale :fact</text>
435
+ <path fill="none" stroke="#fb7185" stroke-width="2" stroke-dasharray="5,2" d="M1266.38,-507.99C1251.77,-499.34 1236.69,-488.14 1226,-474.5 1203.77,-446.13 1192.75,-405.71 1187.49,-377.76"/>
436
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1190.26,-377.37 1186.14,-369.97 1184.74,-378.33 1190.26,-377.37"/>
437
+ <text xml:space="preserve" text-anchor="middle" x="1281.5" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">[UNVERIFIED yyyy&#45;mm&#45;dd]</text>
438
+ <text xml:space="preserve" text-anchor="middle" x="1281.5" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">prefix stale :fact</text>
439
439
  </g>
440
440
  <!-- ReVal&#45;&gt;Fext -->
441
441
  <g id="edge29" class="edge">
442
442
  <title>ReVal&#45;&gt;Fext</title>
443
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1322.09,-508.09C1328.75,-498.42 1335.59,-486.49 1339,-474.5 1348.55,-440.88 1334.97,-402.07 1322.24,-375.92"/>
444
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1324.83,-374.84 1318.7,-368.98 1319.84,-377.38 1324.83,-374.84"/>
445
- <text xml:space="preserve" text-anchor="middle" x="1391.66" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed → :intel obs</text>
446
- <text xml:space="preserve" text-anchor="middle" x="1391.66" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted → observe stale</text>
443
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" stroke-dasharray="5,2" d="M1330.09,-508.09C1336.75,-498.42 1343.59,-486.49 1347,-474.5 1356.21,-442.08 1353.53,-403.2 1349.78,-376.71"/>
444
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="1352.6,-376.62 1348.61,-369.14 1347.06,-377.48 1352.6,-376.62"/>
445
+ <text xml:space="preserve" text-anchor="middle" x="1400.74" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:confirmed → :intel obs</text>
446
+ <text xml:space="preserve" text-anchor="middle" x="1400.74" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:refuted → observe stale</text>
447
447
  </g>
448
448
  <!-- Teach&#45;&gt;Fmem -->
449
449
  <g id="edge32" class="edge">
450
450
  <title>Teach&#45;&gt;Fmem</title>
451
- <path fill="none" stroke="#fb7185" stroke-width="2" d="M1603.86,-507.55C1597.56,-489.56 1585.81,-465.23 1566,-453.5 1533.29,-434.13 1258.07,-462.34 1224,-445.5 1194.75,-431.04 1172.71,-400.3 1159.25,-376.74"/>
452
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1161.75,-375.48 1155.46,-369.8 1156.84,-378.17 1161.75,-375.48"/>
453
- <text xml:space="preserve" text-anchor="middle" x="1620.48" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier&#45;authored</text>
454
- <text xml:space="preserve" text-anchor="middle" x="1620.48" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:lesson</text>
451
+ <path fill="none" stroke="#fb7185" stroke-width="2" d="M1611.86,-507.56C1605.55,-489.58 1593.79,-465.25 1574,-453.5 1544.28,-435.85 1293.97,-460.85 1263,-445.5 1233.76,-431 1211.72,-400.27 1198.26,-376.72"/>
452
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="2" points="1200.76,-375.46 1194.47,-369.79 1195.85,-378.15 1200.76,-375.46"/>
453
+ <text xml:space="preserve" text-anchor="middle" x="1628.47" y="-465.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">frontier&#45;authored</text>
454
+ <text xml:space="preserve" text-anchor="middle" x="1628.47" y="-455.45" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">:lesson</text>
455
455
  </g>
456
456
  </g>
457
457
  </svg>