pwn 0.5.784 → 0.5.787

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 (254) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile +6 -6
  4. data/README.md +37 -0
  5. data/bin/pwn +2 -1
  6. data/bin/pwn_web_cache_deception +35 -7
  7. data/build_gem.sh +1 -1
  8. data/documentation/AI-Integration.md +7 -5
  9. data/documentation/Agent-Tool-Registry.md +2 -2
  10. data/documentation/Backup-Retention.md +69 -15
  11. data/documentation/Configuration.md +10 -6
  12. data/documentation/Contributing.md +1 -1
  13. data/documentation/Cron.md +2 -2
  14. data/documentation/Diagrams.md +2 -2
  15. data/documentation/General-PWN-Usage.md +4 -3
  16. data/documentation/Harness-Evaluation.md +1 -1
  17. data/documentation/Home.md +6 -5
  18. data/documentation/How-PWN-Works.md +6 -5
  19. data/documentation/Installation.md +12 -9
  20. data/documentation/Mission-Cancellation.md +134 -0
  21. data/documentation/Operability.md +18 -0
  22. data/documentation/Persistence.md +7 -5
  23. data/documentation/Plugin-Degradation.md +14 -0
  24. data/documentation/Plugins.md +3 -2
  25. data/documentation/Policy-Benchmark.md +32 -33
  26. data/documentation/Runtime-Source-Protection.md +162 -0
  27. data/documentation/Transparent-Browser.md +11 -0
  28. data/documentation/Troubleshooting.md +3 -2
  29. data/documentation/What-is-PWN.md +2 -2
  30. data/documentation/YubiKey-Vaults.md +185 -0
  31. data/documentation/YubiKey.md +218 -0
  32. data/documentation/diagrams/cron-scheduling.svg +130 -130
  33. data/documentation/diagrams/dot/cron-scheduling.dot +3 -3
  34. data/documentation/diagrams/dot/persistence-filesystem.dot +5 -3
  35. data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
  36. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +1 -1
  37. data/documentation/diagrams/dot/reinforcement-learning.dot +2 -2
  38. data/documentation/diagrams/persistence-filesystem.svg +172 -142
  39. data/documentation/diagrams/plugin-ecosystem.svg +64 -64
  40. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +1 -1
  41. data/documentation/diagrams/reinforcement-learning.svg +89 -89
  42. data/documentation/pwn-ai-Agent.md +10 -4
  43. data/etc/default_cron/session_cleanup.rb +43 -27
  44. data/etc/default_skills/pwn/ai/agent/mission_namespace/SKILL.md +21 -0
  45. data/etc/default_skills/pwn/ai/agent/tools/browser_act/SKILL.md +45 -0
  46. data/etc/default_skills/pwn/ai/agent/tools/loot_query/SKILL.md +27 -26
  47. data/etc/default_skills/pwn/ai/agent/tools/recon_run/SKILL.md +25 -15
  48. data/etc/default_skills/pwn/ai/agent/tools/workspace_tool/SKILL.md +24 -0
  49. data/etc/default_skills/pwn/ai/server_tools/SKILL.md +25 -0
  50. data/etc/default_skills/pwn/backups/SKILL.md +54 -0
  51. data/etc/default_skills/pwn/plugins/recon/SKILL.md +12 -1
  52. data/etc/default_skills/pwn/plugins/yubikey/SKILL.md +157 -0
  53. data/etc/default_skills/pwn/plugins/yubikey/fido/SKILL.md +189 -0
  54. data/etc/default_skills/pwn/plugins/yubikey/hsmauth/SKILL.md +83 -0
  55. data/etc/default_skills/pwn/plugins/yubikey/management/SKILL.md +80 -0
  56. data/etc/default_skills/pwn/plugins/yubikey/oath/SKILL.md +115 -0
  57. data/etc/default_skills/pwn/plugins/yubikey/openpgp/SKILL.md +144 -0
  58. data/etc/default_skills/pwn/plugins/yubikey/otp/SKILL.md +97 -0
  59. data/etc/default_skills/pwn/plugins/yubikey/piv/SKILL.md +110 -0
  60. data/etc/default_skills/pwn/plugins/yubikey/protocol/SKILL.md +21 -0
  61. data/etc/default_skills/pwn/plugins/yubikey/security_domain/SKILL.md +75 -0
  62. data/etc/default_skills/pwn/plugins/yubikey/security_domain/scp/SKILL.md +46 -0
  63. data/etc/default_skills/pwn/plugins/yubikey/transport/SKILL.md +98 -0
  64. data/etc/default_skills/pwn/redaction/SKILL.md +13 -1
  65. data/lib/pwn/ai/agent/dispatch.rb +26 -15
  66. data/lib/pwn/ai/agent/learning.rb +14 -18
  67. data/lib/pwn/ai/agent/loop.rb +17 -1
  68. data/lib/pwn/ai/agent/mission_namespace.rb +331 -0
  69. data/lib/pwn/ai/agent/policy_evaluation.rb +334 -36
  70. data/lib/pwn/ai/agent/prompt_builder.rb +13 -2
  71. data/lib/pwn/ai/agent/request_runtime.rb +122 -18
  72. data/lib/pwn/ai/agent/reward.rb +5 -3
  73. data/lib/pwn/ai/agent/skill_consolidation.rb +3 -2
  74. data/lib/pwn/ai/agent/skill_review.rb +9 -5
  75. data/lib/pwn/ai/agent/swarm.rb +4 -0
  76. data/lib/pwn/ai/agent/tools/browser_act.rb +32 -0
  77. data/lib/pwn/ai/agent/tools/loot_query.rb +11 -1
  78. data/lib/pwn/ai/agent/tools/recon_run.rb +11 -1
  79. data/lib/pwn/ai/agent/tools/workspace_tool.rb +29 -0
  80. data/lib/pwn/ai/agent/turn_finalizer.rb +6 -2
  81. data/lib/pwn/ai/agent.rb +1 -0
  82. data/lib/pwn/ai/anthropic.rb +8 -33
  83. data/lib/pwn/ai/cli.rb +34 -5
  84. data/lib/pwn/ai/gemini.rb +1 -0
  85. data/lib/pwn/ai/grok.rb +39 -28
  86. data/lib/pwn/ai/ollama.rb +4 -2
  87. data/lib/pwn/ai/open_ai.rb +11 -32
  88. data/lib/pwn/ai/open_web_ui.rb +62 -4
  89. data/lib/pwn/ai/router.rb +8 -1
  90. data/lib/pwn/ai/server_tools.rb +231 -0
  91. data/lib/pwn/ai.rb +1 -0
  92. data/lib/pwn/backups.rb +349 -0
  93. data/lib/pwn/config.rb +70 -39
  94. data/lib/pwn/migrate.rb +85 -280
  95. data/lib/pwn/module_skills.rb +7 -0
  96. data/lib/pwn/plugins/ai_sandbox.rb +538 -1
  97. data/lib/pwn/plugins/authentication_helper.rb +74 -4
  98. data/lib/pwn/plugins/basic_auth.rb +2 -1
  99. data/lib/pwn/plugins/google_workspace.rb +4 -21
  100. data/lib/pwn/plugins/jobs.rb +1 -1
  101. data/lib/pwn/plugins/log.rb +3 -1
  102. data/lib/pwn/plugins/preflight_checker.rb +34 -9
  103. data/lib/pwn/plugins/recon.rb +4 -1
  104. data/lib/pwn/plugins/repl/ai.rb +293 -26
  105. data/lib/pwn/plugins/repl/ai_console.rb +268 -88
  106. data/lib/pwn/plugins/repl/ai_swarm.rb +177 -58
  107. data/lib/pwn/plugins/repl/mesh.rb +14 -19
  108. data/lib/pwn/plugins/repl/vault.rb +4 -15
  109. data/lib/pwn/plugins/repl.rb +9 -216
  110. data/lib/pwn/plugins/sandbox/driver.rb +4 -0
  111. data/lib/pwn/plugins/transparent_browser.rb +215 -0
  112. data/lib/pwn/plugins/vault.rb +412 -135
  113. data/lib/pwn/plugins/yubikey/fido.rb +1288 -0
  114. data/lib/pwn/plugins/yubikey/hsmauth.rb +439 -0
  115. data/lib/pwn/plugins/yubikey/management.rb +686 -0
  116. data/lib/pwn/plugins/yubikey/oath.rb +766 -0
  117. data/lib/pwn/plugins/yubikey/openpgp.rb +1063 -0
  118. data/lib/pwn/plugins/yubikey/otp.rb +897 -0
  119. data/lib/pwn/plugins/yubikey/piv.rb +1315 -0
  120. data/lib/pwn/plugins/yubikey/protocol.rb +341 -0
  121. data/lib/pwn/plugins/yubikey/security_domain/scp.rb +482 -0
  122. data/lib/pwn/plugins/yubikey/security_domain.rb +464 -0
  123. data/lib/pwn/plugins/yubikey/transport.rb +1017 -0
  124. data/lib/pwn/plugins/yubikey.rb +844 -0
  125. data/lib/pwn/plugins.rb +1 -0
  126. data/lib/pwn/redaction.rb +69 -12
  127. data/lib/pwn/session_trace.rb +4 -0
  128. data/lib/pwn/setup.rb +114 -24
  129. data/lib/pwn/version.rb +1 -1
  130. data/lib/pwn/www/app_cobalt_io.rb +16 -5
  131. data/lib/pwn/www/bug_crowd.rb +16 -5
  132. data/lib/pwn/www/coinbase_pro.rb +16 -5
  133. data/lib/pwn/www/github.rb +30 -14
  134. data/lib/pwn/www/paypal.rb +15 -4
  135. data/lib/pwn/www/synack.rb +16 -5
  136. data/lib/pwn/www/twitter.rb +17 -6
  137. data/lib/pwn.rb +1 -0
  138. data/spec/documentation/installation_md_spec.rb +1 -1
  139. data/spec/fixtures/yubikey/apdu_frames.json +162 -0
  140. data/spec/integration/authentication_helper_oath_spec.rb +117 -0
  141. data/spec/integration/controller_spill_spec.rb +48 -0
  142. data/spec/integration/harness_process_spec.rb +97 -0
  143. data/spec/integration/mission_cancel_spec.rb +79 -0
  144. data/spec/integration/mission_curses_pty_spec.rb +44 -0
  145. data/spec/integration/readme_security_spec.rb +47 -0
  146. data/spec/integration/web_cache_deception_yubikey_spec.rb +159 -0
  147. data/spec/lib/pwn/ai/agent/dispatch_spec.rb +6 -3
  148. data/spec/lib/pwn/ai/agent/dispatch_vault_safety_spec.rb +86 -0
  149. data/spec/lib/pwn/ai/agent/injection_guard_spec.rb +2 -0
  150. data/spec/lib/pwn/ai/agent/learning_spec.rb +4 -4
  151. data/spec/lib/pwn/ai/agent/loop_artifacts_spec.rb +5 -0
  152. data/spec/lib/pwn/ai/agent/loop_spec.rb +104 -29
  153. data/spec/lib/pwn/ai/agent/mission_namespace_spec.rb +138 -0
  154. data/spec/lib/pwn/ai/agent/policy_evaluation_spec.rb +10 -23
  155. data/spec/lib/pwn/ai/agent/request_runtime_spec.rb +48 -0
  156. data/spec/lib/pwn/ai/agent/shell_search_effect_spec.rb +44 -0
  157. data/spec/lib/pwn/ai/agent/solve_spec.rb +6 -4
  158. data/spec/lib/pwn/ai/agent/tools/browser_act_spec.rb +44 -0
  159. data/spec/lib/pwn/ai/agent/tools/loot_query_yubikey_spec.rb +55 -0
  160. data/spec/lib/pwn/ai/agent/tools/recon_run_yubikey_spec.rb +43 -0
  161. data/spec/lib/pwn/ai/agent/tools/workspace_tool_spec.rb +20 -0
  162. data/spec/lib/pwn/ai/agent/turn_finalizer_spec.rb +7 -0
  163. data/spec/lib/pwn/ai/anthropic_vault_enrollment_spec.rb +37 -0
  164. data/spec/lib/pwn/ai/cli_spec.rb +8 -16
  165. data/spec/lib/pwn/ai/oauth_vault_persistence_spec.rb +195 -0
  166. data/spec/lib/pwn/ai/open_ai_spec.rb +2 -2
  167. data/spec/lib/pwn/ai/open_web_ui_workspace_spec.rb +36 -0
  168. data/spec/lib/pwn/ai/router_spec.rb +1 -1
  169. data/spec/lib/pwn/ai/server_tools_spec.rb +39 -0
  170. data/spec/lib/pwn/backups_spec.rb +129 -0
  171. data/spec/lib/pwn/config_redaction_yubikey_spec.rb +28 -0
  172. data/spec/lib/pwn/config_yubikey_spec.rb +92 -0
  173. data/spec/lib/pwn/migrate_spec.rb +29 -81
  174. data/spec/lib/pwn/migrate_yubikey_spec.rb +128 -0
  175. data/spec/lib/pwn/module_skills_spec.rb +8 -0
  176. data/spec/lib/pwn/plugins/ai_sandbox_spec.rb +230 -0
  177. data/spec/lib/pwn/plugins/authentication_helper_native_yubikey_spec.rb +40 -0
  178. data/spec/lib/pwn/plugins/authentication_helper_yubikey_spec.rb +90 -0
  179. data/spec/lib/pwn/plugins/capability_broker/daemon_spec.rb +1 -1
  180. data/spec/lib/pwn/plugins/google_workspace_spec.rb +17 -35
  181. data/spec/lib/pwn/plugins/log_yubikey_spec.rb +47 -0
  182. data/spec/lib/pwn/plugins/preflight_checker_native_yubikey_spec.rb +19 -0
  183. data/spec/lib/pwn/plugins/preflight_checker_yubikey_spec.rb +55 -0
  184. data/spec/lib/pwn/plugins/recon_yubikey_spec.rb +43 -0
  185. data/spec/lib/pwn/plugins/repl/ai_console_spec.rb +110 -75
  186. data/spec/lib/pwn/plugins/repl/ai_legacy_containment_spec.rb +200 -0
  187. data/spec/lib/pwn/plugins/repl/ai_swarm_spec.rb +19 -16
  188. data/spec/lib/pwn/plugins/repl/ai_vault_edit_yubikey_spec.rb +103 -0
  189. data/spec/lib/pwn/plugins/repl/ai_yubikey_spec.rb +48 -0
  190. data/spec/lib/pwn/plugins/repl/mesh_vault_persistence_spec.rb +149 -0
  191. data/spec/lib/pwn/plugins/repl/vault_yaml_serialization_spec.rb +11 -0
  192. data/spec/lib/pwn/plugins/repl/vault_yubikey_spec.rb +39 -0
  193. data/spec/lib/pwn/plugins/repl_mesh_layout_spec.rb +2 -0
  194. data/spec/lib/pwn/plugins/repl_spec.rb +56 -5
  195. data/spec/lib/pwn/plugins/transparent_browser_jev_spec.rb +46 -0
  196. data/spec/lib/pwn/plugins/vault_native_yubikey_spec.rb +29 -0
  197. data/spec/lib/pwn/plugins/vault_publication_safety_spec.rb +258 -0
  198. data/spec/lib/pwn/plugins/vault_store_safety_spec.rb +241 -0
  199. data/spec/lib/pwn/plugins/vault_yubikey_safety_spec.rb +168 -0
  200. data/spec/lib/pwn/plugins/vault_yubikey_spec.rb +128 -0
  201. data/spec/lib/pwn/plugins/vault_yubikey_vector_spec.rb +45 -0
  202. data/spec/lib/pwn/plugins/yubikey/fido_spec.rb +854 -0
  203. data/spec/lib/pwn/plugins/yubikey/hsmauth_spec.rb +235 -0
  204. data/spec/lib/pwn/plugins/yubikey/management_spec.rb +277 -0
  205. data/spec/lib/pwn/plugins/yubikey/oath_spec.rb +349 -0
  206. data/spec/lib/pwn/plugins/yubikey/openpgp_spec.rb +810 -0
  207. data/spec/lib/pwn/plugins/yubikey/otp_spec.rb +337 -0
  208. data/spec/lib/pwn/plugins/yubikey/piv_spec.rb +646 -0
  209. data/spec/lib/pwn/plugins/yubikey/protocol_secure_spec.rb +28 -0
  210. data/spec/lib/pwn/plugins/yubikey/protocol_spec.rb +149 -0
  211. data/spec/lib/pwn/plugins/yubikey/protocol_vectors_spec.rb +18 -0
  212. data/spec/lib/pwn/plugins/yubikey/security_domain/scp_spec.rb +256 -0
  213. data/spec/lib/pwn/plugins/yubikey/security_domain/support.rb +153 -0
  214. data/spec/lib/pwn/plugins/yubikey/security_domain_spec.rb +296 -0
  215. data/spec/lib/pwn/plugins/yubikey/transport_spec.rb +760 -0
  216. data/spec/lib/pwn/plugins/yubikey_security_spec.rb +260 -0
  217. data/spec/lib/pwn/plugins/yubikey_spec.rb +209 -0
  218. data/spec/lib/pwn/plugins/yubikey_terminal_spec.rb +147 -0
  219. data/spec/lib/pwn/redaction_yubikey_spec.rb +61 -0
  220. data/spec/lib/pwn/session_cleanup_default_spec.rb +7 -5
  221. data/spec/lib/pwn/session_cleanup_payload_spec.rb +11 -11
  222. data/spec/lib/pwn/session_cleanup_recovery_spec.rb +34 -20
  223. data/spec/lib/pwn/setup_native_yubikey_spec.rb +66 -0
  224. data/spec/lib/pwn/setup_vault_yubikey_spec.rb +61 -0
  225. data/spec/lib/pwn/setup_yubikey_spec.rb +40 -0
  226. data/spec/lib/pwn/www/login_yubikey_spec.rb +273 -0
  227. data/spec/spec_helper.rb +15 -0
  228. data/spec/support/harness/cli_faults.rb +13 -9
  229. data/spec/support/harness/controller_spill.rb +26 -0
  230. data/spec/support/harness/controller_state.rb +54 -0
  231. data/spec/support/harness/evaluate.rb +12 -1
  232. data/spec/support/harness/experiments.rb +1 -1
  233. data/spec/support/harness/fake_provider.rb +22 -6
  234. data/spec/support/harness/fault_preload.rb +3 -1
  235. data/spec/support/harness/mission_console.rb +54 -0
  236. data/spec/support/harness/mission_curses_pty.rb +41 -0
  237. data/spec/support/harness/mission_dispatch.rb +30 -0
  238. data/spec/support/harness/mission_fixture_preload.rb +24 -0
  239. data/spec/support/harness/mission_job_lifetime.rb +25 -0
  240. data/spec/support/harness/mission_legacy.rb +25 -0
  241. data/spec/support/harness/mission_normal_exit.rb +34 -0
  242. data/spec/support/harness/mission_swarm.rb +23 -0
  243. data/spec/support/harness/mission_unsupported.rb +29 -0
  244. data/spec/support/harness/package_acceptance.rb +33 -5
  245. data/spec/support/harness/session_acceptance.rb +4 -4
  246. data/spec/support/harness/swarm_acceptance.rb +1 -1
  247. data/spec/support/harness/swarm_control.rb +44 -0
  248. data/spec/support/mission_namespace.rb +14 -0
  249. data/spec/support/mission_pipe_queue.rb +33 -0
  250. data/third_party/pwn_rdoc.jsonl +605 -19
  251. metadata +129 -16
  252. data/scripts/benchmark_policy.rb +0 -376
  253. data/scripts/build_gate.rb +0 -58
  254. data/spec/integration/build_gate_spec.rb +0 -73
@@ -4,311 +4,341 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_Persistence Pages: 1 -->
7
- <svg width="486pt" height="1656pt"
8
- viewBox="0.00 0.00 486.00 1656.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 1612.45)">
7
+ <svg width="486pt" height="1821pt"
8
+ viewBox="0.00 0.00 486.00 1821.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 1777.45)">
10
10
  <title>PWN_Persistence</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1612.45 442.45,-1612.45 442.45,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="48.12" y="-1547.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">~/.pwn/ &#45; Default User&#45;State Map</text>
13
- <text xml:space="preserve" text-anchor="start" x="8" y="-1535.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">registered state checked / repaired by PWN::Migrate &#160;· &#160;pwn setup &#45;&#45;migrate &#45;&#45;fix</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-1777.45 442.45,-1777.45 442.45,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="48.12" y="-1712.25" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">~/.pwn/ &#45; Default User&#45;State Map</text>
13
+ <text xml:space="preserve" text-anchor="start" x="8" y="-1700.8" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">registered state checked / repaired by PWN::Migrate &#160;· &#160;pwn setup &#45;&#45;migrate &#45;&#45;fix</text>
14
14
  <!-- Root -->
15
15
  <g id="node1" class="node">
16
16
  <title>Root</title>
17
- <polygon fill="#7dd3fc" stroke="#334155" stroke-width="1.3" points="82,-750 79,-754 58,-754 55,-750 22.5,-750 22.5,-714 82,-714 82,-750"/>
18
- <text xml:space="preserve" text-anchor="middle" x="52.25" y="-727.15" font-family="sans-Serif" font-size="13.00" fill="#0f172a">~/.pwn/</text>
17
+ <polygon fill="#7dd3fc" stroke="#334155" stroke-width="1.3" points="82,-832 79,-836 58,-836 55,-832 22.5,-832 22.5,-796 82,-796 82,-832"/>
18
+ <text xml:space="preserve" text-anchor="middle" x="52.25" y="-809.15" font-family="sans-Serif" font-size="13.00" fill="#0f172a">~/.pwn/</text>
19
19
  </g>
20
20
  <!-- cfg -->
21
21
  <g id="node2" class="node">
22
22
  <title>cfg</title>
23
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M354.62,-1524.75C354.62,-1527.78 321.12,-1530.25 279.88,-1530.25 238.63,-1530.25 205.12,-1527.78 205.12,-1524.75 205.12,-1524.75 205.12,-1475.25 205.12,-1475.25 205.12,-1472.22 238.63,-1469.75 279.88,-1469.75 321.12,-1469.75 354.62,-1472.22 354.62,-1475.25 354.62,-1475.25 354.62,-1524.75 354.62,-1524.75"/>
24
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M354.62,-1524.75C354.62,-1521.72 321.12,-1519.25 279.88,-1519.25 238.63,-1519.25 205.12,-1521.72 205.12,-1524.75"/>
25
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1508.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn.yaml (+ .decryptor)</text>
26
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1496.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">engines · vault&#45;encrypted keys</text>
27
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1484.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agent opts</text>
23
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M354.62,-1689.75C354.62,-1692.78 321.12,-1695.25 279.88,-1695.25 238.63,-1695.25 205.12,-1692.78 205.12,-1689.75 205.12,-1689.75 205.12,-1640.25 205.12,-1640.25 205.12,-1637.22 238.63,-1634.75 279.88,-1634.75 321.12,-1634.75 354.62,-1637.22 354.62,-1640.25 354.62,-1640.25 354.62,-1689.75 354.62,-1689.75"/>
24
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M354.62,-1689.75C354.62,-1686.72 321.12,-1684.25 279.88,-1684.25 238.63,-1684.25 205.12,-1686.72 205.12,-1689.75"/>
25
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1673.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn.yaml (+ .decryptor)</text>
26
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1661.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">engines · vault&#45;encrypted keys</text>
27
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1649.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agent opts</text>
28
28
  </g>
29
29
  <!-- Root&#45;&gt;cfg -->
30
30
  <g id="edge1" class="edge">
31
31
  <title>Root&#45;&gt;cfg</title>
32
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.23,-750.35C59.97,-851.7 92.16,-1342.72 183,-1458 187.28,-1463.44 192.42,-1468.19 198.05,-1472.33"/>
33
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="196.32,-1474.12 203.49,-1476 199.05,-1470.05 196.32,-1474.12"/>
32
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M53.87,-832.62C57.83,-941.31 82.68,-1493.34 183,-1623 187.24,-1628.48 192.33,-1633.25 197.94,-1637.41"/>
33
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="196.2,-1639.19 203.37,-1641.09 198.95,-1635.13 196.2,-1639.19"/>
34
34
  </g>
35
35
  <!-- schm -->
36
36
  <g id="node3" class="node">
37
37
  <title>schm</title>
38
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M350.12,-1441.75C350.12,-1444.78 318.64,-1447.25 279.88,-1447.25 241.11,-1447.25 209.62,-1444.78 209.62,-1441.75 209.62,-1441.75 209.62,-1392.25 209.62,-1392.25 209.62,-1389.22 241.11,-1386.75 279.88,-1386.75 318.64,-1386.75 350.12,-1389.22 350.12,-1392.25 350.12,-1392.25 350.12,-1441.75 350.12,-1441.75"/>
39
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M350.12,-1441.75C350.12,-1438.72 318.64,-1436.25 279.88,-1436.25 241.11,-1436.25 209.62,-1438.72 209.62,-1441.75"/>
40
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1425.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">.schema</text>
41
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1413.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">{schema:, pwn_version:, at:}</text>
42
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1401.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">drives launch drift warning</text>
38
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M350.12,-1606.75C350.12,-1609.78 318.64,-1612.25 279.88,-1612.25 241.11,-1612.25 209.62,-1609.78 209.62,-1606.75 209.62,-1606.75 209.62,-1557.25 209.62,-1557.25 209.62,-1554.22 241.11,-1551.75 279.88,-1551.75 318.64,-1551.75 350.12,-1554.22 350.12,-1557.25 350.12,-1557.25 350.12,-1606.75 350.12,-1606.75"/>
39
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M350.12,-1606.75C350.12,-1603.72 318.64,-1601.25 279.88,-1601.25 241.11,-1601.25 209.62,-1603.72 209.62,-1606.75"/>
40
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1590.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">.schema</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1578.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">{schema:, pwn_version:, at:}</text>
42
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1566.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">drives launch drift warning</text>
43
43
  </g>
44
44
  <!-- Root&#45;&gt;schm -->
45
45
  <g id="edge2" class="edge">
46
46
  <title>Root&#45;&gt;schm</title>
47
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.67,-750.43C62.31,-845 101.15,-1275.35 183,-1376 188.31,-1382.53 194.86,-1388.04 202.01,-1392.69"/>
48
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="200.65,-1394.73 207.92,-1396.2 203.15,-1390.52 200.65,-1394.73"/>
47
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.21,-832.39C59.84,-933.95 91.55,-1425.96 183,-1541 188.24,-1547.59 194.74,-1553.14 201.87,-1557.81"/>
48
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="200.49,-1559.84 207.75,-1561.33 203,-1555.63 200.49,-1559.84"/>
49
49
  </g>
50
50
  <!-- mem -->
51
51
  <g id="node4" class="node">
52
52
  <title>mem</title>
53
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M347.88,-1361C347.88,-1363.21 317.4,-1365 279.88,-1365 242.35,-1365 211.88,-1363.21 211.88,-1361 211.88,-1361 211.88,-1325 211.88,-1325 211.88,-1322.79 242.35,-1321 279.88,-1321 317.4,-1321 347.88,-1322.79 347.88,-1325 347.88,-1325 347.88,-1361 347.88,-1361"/>
54
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M347.88,-1361C347.88,-1358.79 317.4,-1357 279.88,-1357 242.35,-1357 211.88,-1358.79 211.88,-1361"/>
55
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1345.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
56
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1333.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">facts · prefs · lessons · env</text>
53
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M347.88,-1526C347.88,-1528.21 317.4,-1530 279.88,-1530 242.35,-1530 211.88,-1528.21 211.88,-1526 211.88,-1526 211.88,-1490 211.88,-1490 211.88,-1487.79 242.35,-1486 279.88,-1486 317.4,-1486 347.88,-1487.79 347.88,-1490 347.88,-1490 347.88,-1526 347.88,-1526"/>
54
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M347.88,-1526C347.88,-1523.79 317.4,-1522 279.88,-1522 242.35,-1522 211.88,-1523.79 211.88,-1526"/>
55
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1510.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.json</text>
56
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1498.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">facts · prefs · lessons · env</text>
57
57
  </g>
58
58
  <!-- Root&#45;&gt;mem -->
59
59
  <g id="edge3" class="edge">
60
60
  <title>Root&#45;&gt;mem</title>
61
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.98,-750.38C63.71,-839.24 105.5,-1223.4 183,-1310 188.93,-1316.63 196.26,-1321.93 204.2,-1326.16"/>
62
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="202.77,-1328.19 210.14,-1329.03 204.9,-1323.78 202.77,-1328.19"/>
61
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.42,-832.38C60.93,-928.69 95.44,-1374.47 183,-1475 188.84,-1481.71 196.11,-1487.05 204.02,-1491.31"/>
62
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="202.58,-1493.33 209.95,-1494.2 204.73,-1488.93 202.58,-1493.33"/>
63
63
  </g>
64
64
  <!-- midx -->
65
65
  <g id="node5" class="node">
66
66
  <title>midx</title>
67
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M352,-1293.75C352,-1296.78 319.67,-1299.25 279.88,-1299.25 240.08,-1299.25 207.75,-1296.78 207.75,-1293.75 207.75,-1293.75 207.75,-1244.25 207.75,-1244.25 207.75,-1241.22 240.08,-1238.75 279.88,-1238.75 319.67,-1238.75 352,-1241.22 352,-1244.25 352,-1244.25 352,-1293.75 352,-1293.75"/>
68
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M352,-1293.75C352,-1290.72 319.67,-1288.25 279.88,-1288.25 240.08,-1288.25 207.75,-1290.72 207.75,-1293.75"/>
69
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1277.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.idx</text>
70
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1265.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">local embedding index</text>
71
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1253.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(relevance&#45;ranked MEMORY)</text>
67
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M352,-1458.75C352,-1461.78 319.67,-1464.25 279.88,-1464.25 240.08,-1464.25 207.75,-1461.78 207.75,-1458.75 207.75,-1458.75 207.75,-1409.25 207.75,-1409.25 207.75,-1406.22 240.08,-1403.75 279.88,-1403.75 319.67,-1403.75 352,-1406.22 352,-1409.25 352,-1409.25 352,-1458.75 352,-1458.75"/>
68
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M352,-1458.75C352,-1455.72 319.67,-1453.25 279.88,-1453.25 240.08,-1453.25 207.75,-1455.72 207.75,-1458.75"/>
69
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1442.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">memory.idx</text>
70
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1430.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">local embedding index</text>
71
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1418.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">(relevance&#45;ranked MEMORY)</text>
72
72
  </g>
73
73
  <!-- Root&#45;&gt;midx -->
74
74
  <g id="edge4" class="edge">
75
75
  <title>Root&#45;&gt;midx</title>
76
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M52.68,-750.28C51.49,-820.82 56.31,-1078.75 183,-1227 187.94,-1232.78 193.83,-1237.8 200.23,-1242.14"/>
77
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="198.7,-1244.07 205.93,-1245.71 201.3,-1239.92 198.7,-1244.07"/>
76
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M55.16,-832.55C64.65,-921.36 109.16,-1302.42 183,-1392 187.92,-1397.97 193.86,-1403.12 200.34,-1407.55"/>
77
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="198.92,-1409.55 206.15,-1411.2 201.53,-1405.4 198.92,-1409.55"/>
78
78
  </g>
79
79
  <!-- skl -->
80
80
  <g id="node6" class="node">
81
81
  <title>skl</title>
82
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M365.88,-1210.75C365.88,-1213.78 327.33,-1216.25 279.88,-1216.25 232.42,-1216.25 193.88,-1213.78 193.88,-1210.75 193.88,-1210.75 193.88,-1161.25 193.88,-1161.25 193.88,-1158.22 232.42,-1155.75 279.88,-1155.75 327.33,-1155.75 365.88,-1158.22 365.88,-1161.25 365.88,-1161.25 365.88,-1210.75 365.88,-1210.75"/>
83
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M365.88,-1210.75C365.88,-1207.72 327.33,-1205.25 279.88,-1205.25 232.42,-1205.25 193.88,-1207.72 193.88,-1210.75"/>
84
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1194.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/&lt;name&gt;/SKILL.md</text>
85
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1182.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agentskills.io + default_skills seed</text>
86
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1170.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">name+description frontmatter + refs</text>
82
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M365.88,-1375.75C365.88,-1378.78 327.33,-1381.25 279.88,-1381.25 232.42,-1381.25 193.88,-1378.78 193.88,-1375.75 193.88,-1375.75 193.88,-1326.25 193.88,-1326.25 193.88,-1323.22 232.42,-1320.75 279.88,-1320.75 327.33,-1320.75 365.88,-1323.22 365.88,-1326.25 365.88,-1326.25 365.88,-1375.75 365.88,-1375.75"/>
83
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M365.88,-1375.75C365.88,-1372.72 327.33,-1370.25 279.88,-1370.25 232.42,-1370.25 193.88,-1372.72 193.88,-1375.75"/>
84
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1359.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">skills/&lt;name&gt;/SKILL.md</text>
85
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1347.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agentskills.io + default_skills seed</text>
86
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1335.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">name+description frontmatter + refs</text>
87
87
  </g>
88
88
  <!-- Root&#45;&gt;skl -->
89
89
  <g id="edge5" class="edge">
90
90
  <title>Root&#45;&gt;skl</title>
91
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M53.79,-750.28C56.59,-813.36 74.07,-1024.63 183,-1145 185.39,-1147.64 187.98,-1150.12 190.73,-1152.45"/>
92
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="189.04,-1154.24 196.07,-1156.58 192.03,-1150.36 189.04,-1154.24"/>
91
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M52.63,-832.35C51.24,-903.15 55.46,-1162 183,-1310 185.26,-1312.62 187.72,-1315.08 190.33,-1317.39"/>
92
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="188.4,-1318.98 195.39,-1321.45 191.47,-1315.16 188.4,-1318.98"/>
93
93
  </g>
94
94
  <!-- lrn -->
95
95
  <g id="node7" class="node">
96
96
  <title>lrn</title>
97
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M320.12,-1130C320.12,-1132.21 302.08,-1134 279.88,-1134 257.67,-1134 239.62,-1132.21 239.62,-1130 239.62,-1130 239.62,-1094 239.62,-1094 239.62,-1091.79 257.67,-1090 279.88,-1090 302.08,-1090 320.12,-1091.79 320.12,-1094 320.12,-1094 320.12,-1130 320.12,-1130"/>
98
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M320.12,-1130C320.12,-1127.79 302.08,-1126 279.88,-1126 257.67,-1126 239.62,-1127.79 239.62,-1130"/>
99
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1114.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
100
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">task outcomes</text>
97
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M320.12,-1295C320.12,-1297.21 302.08,-1299 279.88,-1299 257.67,-1299 239.62,-1297.21 239.62,-1295 239.62,-1295 239.62,-1259 239.62,-1259 239.62,-1256.79 257.67,-1255 279.88,-1255 302.08,-1255 320.12,-1256.79 320.12,-1259 320.12,-1259 320.12,-1295 320.12,-1295"/>
98
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M320.12,-1295C320.12,-1292.79 302.08,-1291 279.88,-1291 257.67,-1291 239.62,-1292.79 239.62,-1295"/>
99
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1279.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning.jsonl</text>
100
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1267.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">task outcomes</text>
101
101
  </g>
102
102
  <!-- Root&#45;&gt;lrn -->
103
103
  <g id="edge6" class="edge">
104
104
  <title>Root&#45;&gt;lrn</title>
105
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.74,-750.39C60.33,-807.5 85.09,-983.64 183,-1079 196,-1091.67 214.09,-1099.48 231.05,-1104.3"/>
106
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="230.26,-1106.63 237.65,-1106.02 231.49,-1101.88 230.26,-1106.63"/>
105
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M53.2,-832.41C54.02,-897.89 65.67,-1122.07 183,-1244 195.69,-1257.19 213.89,-1265.11 231.03,-1269.86"/>
106
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="230.33,-1272.21 237.72,-1271.55 231.53,-1267.46 230.33,-1272.21"/>
107
107
  </g>
108
108
  <!-- prf -->
109
109
  <g id="node8" class="node">
110
110
  <title>prf</title>
111
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M376.75,-1062.75C376.75,-1065.78 333.33,-1068.25 279.88,-1068.25 226.42,-1068.25 183,-1065.78 183,-1062.75 183,-1062.75 183,-1013.25 183,-1013.25 183,-1010.22 226.42,-1007.75 279.88,-1007.75 333.33,-1007.75 376.75,-1010.22 376.75,-1013.25 376.75,-1013.25 376.75,-1062.75 376.75,-1062.75"/>
112
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M376.75,-1062.75C376.75,-1059.72 333.33,-1057.25 279.88,-1057.25 226.42,-1057.25 183,-1059.72 183,-1062.75"/>
113
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1046.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preferences.jsonl</text>
114
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1034.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DPO/KTO/ORPO pairs</text>
115
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1022.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">user_correction · resolve · counterfactual</text>
111
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M376.75,-1227.75C376.75,-1230.78 333.33,-1233.25 279.88,-1233.25 226.42,-1233.25 183,-1230.78 183,-1227.75 183,-1227.75 183,-1178.25 183,-1178.25 183,-1175.22 226.42,-1172.75 279.88,-1172.75 333.33,-1172.75 376.75,-1175.22 376.75,-1178.25 376.75,-1178.25 376.75,-1227.75 376.75,-1227.75"/>
112
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M376.75,-1227.75C376.75,-1224.72 333.33,-1222.25 279.88,-1222.25 226.42,-1222.25 183,-1224.72 183,-1227.75"/>
113
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1211.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">preferences.jsonl</text>
114
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1199.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DPO/KTO/ORPO pairs</text>
115
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1187.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">user_correction · resolve · counterfactual</text>
116
116
  </g>
117
117
  <!-- Root&#45;&gt;prf -->
118
118
  <g id="edge7" class="edge">
119
119
  <title>Root&#45;&gt;prf</title>
120
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M57.64,-750.64C69.66,-797.87 107.36,-923.61 183,-996 185.96,-998.83 189.15,-1001.5 192.49,-1003.99"/>
121
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="191.04,-1005.97 198.19,-1007.94 193.83,-1001.94 191.04,-1005.97"/>
120
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M55.13,-832.45C61.8,-888.99 89.28,-1061.97 183,-1161 185.67,-1163.82 188.56,-1166.46 191.62,-1168.94"/>
121
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="189.71,-1170.57 196.78,-1172.79 192.64,-1166.64 189.71,-1170.57"/>
122
122
  </g>
123
123
  <!-- mis -->
124
124
  <g id="node9" class="node">
125
125
  <title>mis</title>
126
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M359.12,-979.75C359.12,-982.78 323.6,-985.25 279.88,-985.25 236.15,-985.25 200.62,-982.78 200.62,-979.75 200.62,-979.75 200.62,-930.25 200.62,-930.25 200.62,-927.22 236.15,-924.75 279.88,-924.75 323.6,-924.75 359.12,-927.22 359.12,-930.25 359.12,-930.25 359.12,-979.75 359.12,-979.75"/>
127
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M359.12,-979.75C359.12,-976.72 323.6,-974.25 279.88,-974.25 236.15,-974.25 200.62,-976.72 200.62,-979.75"/>
128
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-963.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
129
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-951.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">failure fingerprints · fixes</text>
130
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-939.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
126
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M359.12,-1144.75C359.12,-1147.78 323.6,-1150.25 279.88,-1150.25 236.15,-1150.25 200.62,-1147.78 200.62,-1144.75 200.62,-1144.75 200.62,-1095.25 200.62,-1095.25 200.62,-1092.22 236.15,-1089.75 279.88,-1089.75 323.6,-1089.75 359.12,-1092.22 359.12,-1095.25 359.12,-1095.25 359.12,-1144.75 359.12,-1144.75"/>
127
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M359.12,-1144.75C359.12,-1141.72 323.6,-1139.25 279.88,-1139.25 236.15,-1139.25 200.62,-1141.72 200.62,-1144.75"/>
128
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1128.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mistakes.json</text>
129
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1116.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">failure fingerprints · fixes</text>
130
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">[REPEATING] · [REGRESSED]</text>
131
131
  </g>
132
132
  <!-- Root&#45;&gt;mis -->
133
133
  <g id="edge8" class="edge">
134
134
  <title>Root&#45;&gt;mis</title>
135
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M62.14,-750.4C80.26,-786.19 124.72,-865.79 183,-913 187.08,-916.3 191.45,-919.4 196.01,-922.28"/>
136
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="194.61,-924.3 201.88,-925.8 197.13,-920.1 194.61,-924.3"/>
135
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M57.64,-832.64C69.66,-879.87 107.36,-1005.61 183,-1078 186.36,-1081.22 190.02,-1084.22 193.86,-1087"/>
136
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="192.42,-1088.98 199.6,-1090.86 195.16,-1084.92 192.42,-1088.98"/>
137
137
  </g>
138
138
  <!-- met -->
139
139
  <g id="node10" class="node">
140
140
  <title>met</title>
141
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M352.75,-896.75C352.75,-899.78 320.09,-902.25 279.88,-902.25 239.66,-902.25 207,-899.78 207,-896.75 207,-896.75 207,-847.25 207,-847.25 207,-844.22 239.66,-841.75 279.88,-841.75 320.09,-841.75 352.75,-844.22 352.75,-847.25 352.75,-847.25 352.75,-896.75 352.75,-896.75"/>
142
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M352.75,-896.75C352.75,-893.72 320.09,-891.25 279.88,-891.25 239.66,-891.25 207,-893.72 207,-896.75"/>
143
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-880.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics.json</text>
144
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-868.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">per&#45;tool · per&#45;engine telemetry</text>
145
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-856.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">calibration</text>
141
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M352.75,-1061.75C352.75,-1064.78 320.09,-1067.25 279.88,-1067.25 239.66,-1067.25 207,-1064.78 207,-1061.75 207,-1061.75 207,-1012.25 207,-1012.25 207,-1009.22 239.66,-1006.75 279.88,-1006.75 320.09,-1006.75 352.75,-1009.22 352.75,-1012.25 352.75,-1012.25 352.75,-1061.75 352.75,-1061.75"/>
142
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M352.75,-1061.75C352.75,-1058.72 320.09,-1056.25 279.88,-1056.25 239.66,-1056.25 207,-1058.72 207,-1061.75"/>
143
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1045.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">metrics.json</text>
144
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1033.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">per&#45;tool · per&#45;engine telemetry</text>
145
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-1021.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">calibration</text>
146
146
  </g>
147
147
  <!-- Root&#45;&gt;met -->
148
148
  <g id="edge9" class="edge">
149
149
  <title>Root&#45;&gt;met</title>
150
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M74.13,-750.55C98.85,-771.88 141.88,-807.02 183,-831 188.21,-834.04 193.7,-836.99 199.29,-839.81"/>
151
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="198.11,-841.96 205.47,-842.84 200.27,-837.56 198.11,-841.96"/>
150
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M62.08,-832.55C80.08,-868.62 124.36,-948.79 183,-996 188.06,-1000.07 193.58,-1003.81 199.33,-1007.22"/>
151
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="197.98,-1009.27 205.28,-1010.56 200.38,-1004.99 197.98,-1009.27"/>
152
152
  </g>
153
153
  <!-- pol -->
154
154
  <g id="node11" class="node">
155
155
  <title>pol</title>
156
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M358.75,-816C358.75,-818.21 323.4,-820 279.88,-820 236.35,-820 201,-818.21 201,-816 201,-816 201,-780 201,-780 201,-777.79 236.35,-776 279.88,-776 323.4,-776 358.75,-777.79 358.75,-780 358.75,-780 358.75,-816 358.75,-816"/>
157
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M358.75,-816C358.75,-813.79 323.4,-812 279.88,-812 236.35,-812 201,-813.79 201,-816"/>
158
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-800.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy.json + policy_traj.jsonl</text>
159
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-788.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">live Q / REINFORCE · MDP log</text>
156
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M358.75,-981C358.75,-983.21 323.4,-985 279.88,-985 236.35,-985 201,-983.21 201,-981 201,-981 201,-945 201,-945 201,-942.79 236.35,-941 279.88,-941 323.4,-941 358.75,-942.79 358.75,-945 358.75,-945 358.75,-981 358.75,-981"/>
157
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M358.75,-981C358.75,-978.79 323.4,-977 279.88,-977 236.35,-977 201,-978.79 201,-981"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-965.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">policy.json + policy_traj.jsonl</text>
159
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-953.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">live Q / REINFORCE · MDP log</text>
160
160
  </g>
161
161
  <!-- Root&#45;&gt;pol -->
162
162
  <g id="edge10" class="edge">
163
163
  <title>Root&#45;&gt;pol</title>
164
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M82.28,-740.49C111.57,-749.06 158.11,-762.67 198.56,-774.5"/>
165
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="197.82,-776.84 205.22,-776.46 199.19,-772.14 197.82,-776.84"/>
164
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M69.51,-832.59C92.5,-857.85 136.87,-902.94 183,-930 188.22,-933.06 193.77,-935.9 199.46,-938.51"/>
165
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="198.37,-940.71 205.77,-941.27 200.33,-936.22 198.37,-940.71"/>
166
166
  </g>
167
167
  <!-- rws -->
168
168
  <g id="node12" class="node">
169
169
  <title>rws</title>
170
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M358.75,-750C358.75,-752.21 323.4,-754 279.88,-754 236.35,-754 201,-752.21 201,-750 201,-750 201,-714 201,-714 201,-711.79 236.35,-710 279.88,-710 323.4,-710 358.75,-711.79 358.75,-714 358.75,-714 358.75,-750 358.75,-750"/>
171
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M358.75,-750C358.75,-747.79 323.4,-746 279.88,-746 236.35,-746 201,-747.79 201,-750"/>
172
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-734.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward_sentinel.json</text>
173
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-722.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">proxy vs judge vs correction gap</text>
170
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M358.75,-915C358.75,-917.21 323.4,-919 279.88,-919 236.35,-919 201,-917.21 201,-915 201,-915 201,-879 201,-879 201,-876.79 236.35,-875 279.88,-875 323.4,-875 358.75,-876.79 358.75,-879 358.75,-879 358.75,-915 358.75,-915"/>
171
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M358.75,-915C358.75,-912.79 323.4,-911 279.88,-911 236.35,-911 201,-912.79 201,-915"/>
172
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-899.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">reward_sentinel.json</text>
173
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-887.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">proxy vs judge vs correction gap</text>
174
174
  </g>
175
175
  <!-- Root&#45;&gt;rws -->
176
176
  <g id="edge11" class="edge">
177
177
  <title>Root&#45;&gt;rws</title>
178
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M82.28,-732C110.06,-732 153.37,-732 192.27,-732"/>
179
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="191.83,-734.45 198.83,-732 191.83,-729.55 191.83,-734.45"/>
178
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M82.51,-825.62C108.73,-835.96 148.3,-851.35 183,-864 190.81,-866.85 199.01,-869.77 207.18,-872.64"/>
179
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="206.34,-874.94 213.76,-874.94 207.96,-870.32 206.34,-874.94"/>
180
180
  </g>
181
181
  <!-- ext -->
182
182
  <g id="node13" class="node">
183
183
  <title>ext</title>
184
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M363.62,-680.5C363.62,-684.36 326.09,-687.5 279.88,-687.5 233.66,-687.5 196.12,-684.36 196.12,-680.5 196.12,-680.5 196.12,-617.5 196.12,-617.5 196.12,-613.64 233.66,-610.5 279.88,-610.5 326.09,-610.5 363.62,-613.64 363.62,-617.5 363.62,-617.5 363.62,-680.5 363.62,-680.5"/>
185
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M363.62,-680.5C363.62,-676.64 326.09,-673.5 279.88,-673.5 233.66,-673.5 196.12,-676.64 196.12,-680.5"/>
186
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-663.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
187
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-651.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">snapshot (host/net/tc/repo/env/</text>
188
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-639.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rf/web/osint/serial/telecomm/</text>
189
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-627.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">packet/vision/voice) + prev + obs[]</text>
184
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M363.62,-845.5C363.62,-849.36 326.09,-852.5 279.88,-852.5 233.66,-852.5 196.12,-849.36 196.12,-845.5 196.12,-845.5 196.12,-782.5 196.12,-782.5 196.12,-778.64 233.66,-775.5 279.88,-775.5 326.09,-775.5 363.62,-778.64 363.62,-782.5 363.62,-782.5 363.62,-845.5 363.62,-845.5"/>
185
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M363.62,-845.5C363.62,-841.64 326.09,-838.5 279.88,-838.5 233.66,-838.5 196.12,-841.64 196.12,-845.5"/>
186
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-828.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection.json</text>
187
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-816.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">snapshot (host/net/tc/repo/env/</text>
188
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-804.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rf/web/osint/serial/telecomm/</text>
189
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-792.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">packet/vision/voice) + prev + obs[]</text>
190
190
  </g>
191
191
  <!-- Root&#45;&gt;ext -->
192
192
  <g id="edge12" class="edge">
193
193
  <title>Root&#45;&gt;ext</title>
194
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M82.28,-721.32C108.95,-711.51 149.93,-696.44 187.58,-682.58"/>
195
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="188.28,-684.94 194,-680.22 186.58,-680.34 188.28,-684.94"/>
194
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M82.28,-814C108.84,-814 149.59,-814 187.11,-814"/>
195
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="186.9,-816.45 193.9,-814 186.9,-811.55 186.9,-816.45"/>
196
196
  </g>
197
197
  <!-- eart -->
198
198
  <g id="node14" class="node">
199
199
  <title>eart</title>
200
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M363.25,-584C363.25,-586.21 325.88,-588 279.88,-588 233.87,-588 196.5,-586.21 196.5,-584 196.5,-584 196.5,-548 196.5,-548 196.5,-545.79 233.87,-544 279.88,-544 325.88,-544 363.25,-545.79 363.25,-548 363.25,-548 363.25,-584 363.25,-584"/>
201
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M363.25,-584C363.25,-581.79 325.88,-580 279.88,-580 233.87,-580 196.5,-581.79 196.5,-584"/>
202
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-568.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection/{web,packet,voice}/*</text>
203
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-556.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">screenshots · pcaps · wav/txt</text>
200
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M363.25,-749C363.25,-751.21 325.88,-753 279.88,-753 233.87,-753 196.5,-751.21 196.5,-749 196.5,-749 196.5,-713 196.5,-713 196.5,-710.79 233.87,-709 279.88,-709 325.88,-709 363.25,-710.79 363.25,-713 363.25,-713 363.25,-749 363.25,-749"/>
201
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M363.25,-749C363.25,-746.79 325.88,-745 279.88,-745 233.87,-745 196.5,-746.79 196.5,-749"/>
202
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-733.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">extrospection/{web,packet,voice}/*</text>
203
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-721.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">screenshots · pcaps · wav/txt</text>
204
204
  </g>
205
205
  <!-- Root&#45;&gt;eart -->
206
206
  <g id="edge13" class="edge">
207
207
  <title>Root&#45;&gt;eart</title>
208
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M66.79,-713.63C88.42,-685.48 133.41,-631.6 183,-600 188.17,-596.7 193.7,-593.68 199.4,-590.91"/>
209
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="200.42,-593.14 205.75,-587.98 198.37,-588.69 200.42,-593.14"/>
208
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M82.56,-802.74C108.82,-792.69 148.4,-777.67 183,-765 191.38,-761.93 200.19,-758.75 208.93,-755.62"/>
209
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="209.58,-757.99 215.35,-753.32 207.94,-753.37 209.58,-757.99"/>
210
210
  </g>
211
211
  <!-- ses -->
212
212
  <g id="node15" class="node">
213
213
  <title>ses</title>
214
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M346.38,-518C346.38,-520.21 316.57,-522 279.88,-522 243.18,-522 213.38,-520.21 213.38,-518 213.38,-518 213.38,-482 213.38,-482 213.38,-479.79 243.18,-478 279.88,-478 316.57,-478 346.38,-479.79 346.38,-482 346.38,-482 346.38,-518 346.38,-518"/>
215
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M346.38,-518C346.38,-515.79 316.57,-514 279.88,-514 243.18,-514 213.38,-515.79 213.38,-518"/>
216
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-502.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
217
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-490.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts (+ step_reward)</text>
214
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M346.38,-683C346.38,-685.21 316.57,-687 279.88,-687 243.18,-687 213.38,-685.21 213.38,-683 213.38,-683 213.38,-647 213.38,-647 213.38,-644.79 243.18,-643 279.88,-643 316.57,-643 346.38,-644.79 346.38,-647 346.38,-647 346.38,-683 346.38,-683"/>
215
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M346.38,-683C346.38,-680.79 316.57,-679 279.88,-679 243.18,-679 213.38,-680.79 213.38,-683"/>
216
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-667.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sessions/*.jsonl</text>
217
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-655.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">transcripts (+ step_reward)</text>
218
218
  </g>
219
219
  <!-- Root&#45;&gt;ses -->
220
220
  <g id="edge14" class="edge">
221
221
  <title>Root&#45;&gt;ses</title>
222
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M60.42,-713.42C76.42,-674.33 118.76,-583.09 183,-533 189.8,-527.7 197.51,-523.21 205.54,-519.43"/>
223
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="206.03,-521.89 211.45,-516.83 204.06,-517.41 206.03,-521.89"/>
222
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M69.51,-795.41C92.5,-770.15 136.87,-725.06 183,-698 189.95,-693.93 197.47,-690.25 205.15,-686.97"/>
223
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="205.77,-689.36 211.32,-684.45 203.91,-684.83 205.77,-689.36"/>
224
224
  </g>
225
225
  <!-- crn -->
226
226
  <g id="node16" class="node">
227
227
  <title>crn</title>
228
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M364.38,-450.75C364.38,-453.78 326.5,-456.25 279.88,-456.25 233.25,-456.25 195.38,-453.78 195.38,-450.75 195.38,-450.75 195.38,-401.25 195.38,-401.25 195.38,-398.22 233.25,-395.75 279.88,-395.75 326.5,-395.75 364.38,-398.22 364.38,-401.25 364.38,-401.25 364.38,-450.75 364.38,-450.75"/>
229
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M364.38,-450.75C364.38,-447.72 326.5,-445.25 279.88,-445.25 233.25,-445.25 195.38,-447.72 195.38,-450.75"/>
230
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-434.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron/jobs.yml + log/</text>
231
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-422.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">hygiene ON: consolidate + lean</text>
232
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-410.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum practice/judge/train OFF</text>
228
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M360.62,-615.75C360.62,-618.78 324.43,-621.25 279.88,-621.25 235.32,-621.25 199.12,-618.78 199.12,-615.75 199.12,-615.75 199.12,-566.25 199.12,-566.25 199.12,-563.22 235.32,-560.75 279.88,-560.75 324.43,-560.75 360.62,-563.22 360.62,-566.25 360.62,-566.25 360.62,-615.75 360.62,-615.75"/>
229
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M360.62,-615.75C360.62,-612.72 324.43,-610.25 279.88,-610.25 235.32,-610.25 199.12,-612.72 199.12,-615.75"/>
230
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-599.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron/jobs.yml + log/</text>
231
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-587.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">fresh seed: session_cleanup only</text>
232
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-575.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum not seeded</text>
233
233
  </g>
234
234
  <!-- Root&#45;&gt;crn -->
235
235
  <g id="edge15" class="edge">
236
236
  <title>Root&#45;&gt;crn</title>
237
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M57.5,-713.6C69.28,-666.37 106.68,-539.51 183,-467 185.81,-464.33 188.81,-461.83 191.97,-459.47"/>
238
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="193.35,-461.49 197.72,-455.5 190.57,-457.46 193.35,-461.49"/>
237
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M62.08,-795.45C80.08,-759.38 124.36,-679.21 183,-632 186.61,-629.09 190.46,-626.35 194.47,-623.78"/>
238
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="195.68,-625.91 200.4,-620.2 193.14,-621.72 195.68,-625.91"/>
239
239
  </g>
240
240
  <!-- agt -->
241
241
  <g id="node17" class="node">
242
242
  <title>agt</title>
243
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M322.75,-370C322.75,-372.21 303.53,-374 279.88,-374 256.22,-374 237,-372.21 237,-370 237,-370 237,-334 237,-334 237,-331.79 256.22,-330 279.88,-330 303.53,-330 322.75,-331.79 322.75,-334 322.75,-334 322.75,-370 322.75,-370"/>
244
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M322.75,-370C322.75,-367.79 303.53,-366 279.88,-366 256.22,-366 237,-367.79 237,-370"/>
245
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-354.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agents.yml</text>
246
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-342.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">persona registry</text>
243
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M322.75,-535C322.75,-537.21 303.53,-539 279.88,-539 256.22,-539 237,-537.21 237,-535 237,-535 237,-499 237,-499 237,-496.79 256.22,-495 279.88,-495 303.53,-495 322.75,-496.79 322.75,-499 322.75,-499 322.75,-535 322.75,-535"/>
244
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M322.75,-535C322.75,-532.79 303.53,-531 279.88,-531 256.22,-531 237,-532.79 237,-535"/>
245
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-519.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">agents.yml</text>
246
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-507.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">persona registry</text>
247
247
  </g>
248
248
  <!-- Root&#45;&gt;agt -->
249
249
  <g id="edge16" class="edge">
250
250
  <title>Root&#45;&gt;agt</title>
251
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.74,-713.61C60.33,-656.5 85.09,-480.36 183,-385 195.24,-373.08 211.99,-365.45 228.06,-360.58"/>
252
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="228.68,-362.95 234.77,-358.72 227.37,-358.23 228.68,-362.95"/>
251
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M57.14,-795.69C68.16,-748.13 104.1,-619.59 183,-550 195.7,-538.8 212.4,-531.35 228.3,-526.42"/>
252
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="228.86,-528.81 234.91,-524.53 227.51,-524.1 228.86,-528.81"/>
253
253
  </g>
254
254
  <!-- swm -->
255
255
  <g id="node18" class="node">
256
256
  <title>swm</title>
257
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M334.75,-304C334.75,-306.21 310.15,-308 279.88,-308 249.6,-308 225,-306.21 225,-304 225,-304 225,-268 225,-268 225,-265.79 249.6,-264 279.88,-264 310.15,-264 334.75,-265.79 334.75,-268 334.75,-268 334.75,-304 334.75,-304"/>
258
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M334.75,-304C334.75,-301.79 310.15,-300 279.88,-300 249.6,-300 225,-301.79 225,-304"/>
259
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-288.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm/&lt;id&gt;/bus.jsonl</text>
260
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-276.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">multi&#45;agent chat</text>
257
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M334.75,-469C334.75,-471.21 310.15,-473 279.88,-473 249.6,-473 225,-471.21 225,-469 225,-469 225,-433 225,-433 225,-430.79 249.6,-429 279.88,-429 310.15,-429 334.75,-430.79 334.75,-433 334.75,-433 334.75,-469 334.75,-469"/>
258
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M334.75,-469C334.75,-466.79 310.15,-465 279.88,-465 249.6,-465 225,-466.79 225,-469"/>
259
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-453.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">swarm/&lt;id&gt;/bus.jsonl</text>
260
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-441.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">multi&#45;agent chat</text>
261
261
  </g>
262
262
  <!-- Root&#45;&gt;swm -->
263
263
  <g id="edge17" class="edge">
264
264
  <title>Root&#45;&gt;swm</title>
265
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M53.47,-713.42C55.25,-649.38 69.78,-435.34 183,-319 192.17,-309.58 204.14,-302.85 216.5,-298.04"/>
266
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="217.31,-300.35 223.09,-295.71 215.67,-295.74 217.31,-300.35"/>
265
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M55.12,-795.72C61.75,-740.55 88.97,-574.06 183,-484 192.39,-475.01 204.33,-468.46 216.58,-463.69"/>
266
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="217.32,-466.03 223.08,-461.37 215.67,-461.42 217.32,-466.03"/>
267
267
  </g>
268
268
  <!-- cur -->
269
269
  <g id="node19" class="node">
270
270
  <title>cur</title>
271
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M361,-238C361,-240.21 324.64,-242 279.88,-242 235.11,-242 198.75,-240.21 198.75,-238 198.75,-238 198.75,-202 198.75,-202 198.75,-199.79 235.11,-198 279.88,-198 324.64,-198 361,-199.79 361,-202 361,-202 361,-238 361,-238"/>
272
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M361,-238C361,-235.79 324.64,-234 279.88,-234 235.11,-234 198.75,-235.79 198.75,-238"/>
273
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-222.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum/ + curriculum_kpi.jsonl</text>
274
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-210.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">self&#45;play · A/B eval · KPI trend</text>
271
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M361,-403C361,-405.21 324.64,-407 279.88,-407 235.11,-407 198.75,-405.21 198.75,-403 198.75,-403 198.75,-367 198.75,-367 198.75,-364.79 235.11,-363 279.88,-363 324.64,-363 361,-364.79 361,-367 361,-367 361,-403 361,-403"/>
272
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M361,-403C361,-400.79 324.64,-399 279.88,-399 235.11,-399 198.75,-400.79 198.75,-403"/>
273
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-387.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">curriculum/ + curriculum_kpi.jsonl</text>
274
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-375.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">self&#45;play · A/B eval · KPI trend</text>
275
275
  </g>
276
276
  <!-- Root&#45;&gt;cur -->
277
277
  <g id="edge18" class="edge">
278
278
  <title>Root&#45;&gt;cur</title>
279
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M52.52,-713.51C50.79,-643.38 54.12,-390.81 183,-253 185.5,-250.32 188.23,-247.87 191.13,-245.61"/>
280
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="192.49,-247.65 196.83,-241.64 189.69,-243.63 192.49,-247.65"/>
279
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M53.75,-795.74C56.44,-733.75 73.58,-529.06 183,-418 185.71,-415.25 188.67,-412.72 191.8,-410.41"/>
280
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="193.07,-412.51 197.54,-406.59 190.35,-408.43 193.07,-412.51"/>
281
281
  </g>
282
282
  <!-- ftn -->
283
283
  <g id="node20" class="node">
284
284
  <title>ftn</title>
285
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M359.5,-172C359.5,-174.21 323.81,-176 279.88,-176 235.94,-176 200.25,-174.21 200.25,-172 200.25,-172 200.25,-136 200.25,-136 200.25,-133.79 235.94,-132 279.88,-132 323.81,-132 359.5,-133.79 359.5,-136 359.5,-136 359.5,-172 359.5,-172"/>
286
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M359.5,-172C359.5,-169.79 323.81,-168 279.88,-168 235.94,-168 200.25,-169.79 200.25,-172"/>
287
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-156.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">finetune/*.jsonl</text>
288
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-144.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ShareGPT / OpenAI SFT + DPO</text>
285
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M359.5,-337C359.5,-339.21 323.81,-341 279.88,-341 235.94,-341 200.25,-339.21 200.25,-337 200.25,-337 200.25,-301 200.25,-301 200.25,-298.79 235.94,-297 279.88,-297 323.81,-297 359.5,-298.79 359.5,-301 359.5,-301 359.5,-337 359.5,-337"/>
286
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M359.5,-337C359.5,-334.79 323.81,-333 279.88,-333 235.94,-333 200.25,-334.79 200.25,-337"/>
287
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-321.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">finetune/*.jsonl</text>
288
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-309.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ShareGPT / OpenAI SFT + DPO</text>
289
289
  </g>
290
290
  <!-- Root&#45;&gt;ftn -->
291
291
  <g id="edge19" class="edge">
292
292
  <title>Root&#45;&gt;ftn</title>
293
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M55.26,-713.53C64.97,-627.63 109.5,-268.06 183,-187 185.95,-183.74 189.25,-180.81 192.78,-178.16"/>
294
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="194.02,-180.28 198.47,-174.35 191.29,-176.21 194.02,-180.28"/>
293
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M52.74,-795.69C51.87,-727.34 58.05,-484.38 183,-352 185.87,-348.96 189.03,-346.2 192.41,-343.69"/>
294
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="193.76,-345.74 198.23,-339.82 191.04,-341.66 193.76,-345.74"/>
295
295
  </g>
296
296
  <!-- bkp -->
297
297
  <g id="node21" class="node">
298
298
  <title>bkp</title>
299
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M345.25,-106C345.25,-108.21 315.95,-110 279.88,-110 243.8,-110 214.5,-108.21 214.5,-106 214.5,-106 214.5,-70 214.5,-70 214.5,-67.79 243.8,-66 279.88,-66 315.95,-66 345.25,-67.79 345.25,-70 345.25,-70 345.25,-106 345.25,-106"/>
300
- <path fill="none" stroke="#334155" stroke-width="1.3" d="M345.25,-106C345.25,-103.79 315.95,-102 279.88,-102 243.8,-102 214.5,-103.79 214.5,-106"/>
301
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-90.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">backup/&lt;ts&gt;/ · quarantine/</text>
302
- <text xml:space="preserve" text-anchor="middle" x="279.88" y="-78.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Migrate autofix snapshots</text>
299
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M340,-271C340,-273.21 313.05,-275 279.88,-275 246.7,-275 219.75,-273.21 219.75,-271 219.75,-271 219.75,-235 219.75,-235 219.75,-232.79 246.7,-231 279.88,-231 313.05,-231 340,-232.79 340,-235 340,-235 340,-271 340,-271"/>
300
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M340,-271C340,-268.79 313.05,-267 279.88,-267 246.7,-267 219.75,-268.79 219.75,-271"/>
301
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-255.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">backup/&lt;generation&gt;/</text>
302
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-243.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Backups · 7 total</text>
303
303
  </g>
304
304
  <!-- Root&#45;&gt;bkp -->
305
305
  <g id="edge20" class="edge">
306
306
  <title>Root&#45;&gt;bkp</title>
307
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.75,-713.5C62.59,-621.4 101.54,-213.08 183,-121 189.41,-113.76 197.47,-108.11 206.2,-103.69"/>
308
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="207.14,-105.96 212.49,-100.82 205.11,-101.5 207.14,-105.96"/>
307
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M55.41,-795.54C65.63,-711.31 111.54,-364.24 183,-286 190.74,-277.53 200.75,-271.23 211.38,-266.55"/>
308
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="212.07,-268.91 217.66,-264.04 210.25,-264.36 212.07,-268.91"/>
309
309
  </g>
310
- <!-- hist -->
310
+ <!-- qtn -->
311
311
  <g id="node22" class="node">
312
+ <title>qtn</title>
313
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M340,-203.75C340,-206.78 313.05,-209.25 279.88,-209.25 246.7,-209.25 219.75,-206.78 219.75,-203.75 219.75,-203.75 219.75,-154.25 219.75,-154.25 219.75,-151.22 246.7,-148.75 279.88,-148.75 313.05,-148.75 340,-151.22 340,-154.25 340,-154.25 340,-203.75 340,-203.75"/>
314
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M340,-203.75C340,-200.72 313.05,-198.25 279.88,-198.25 246.7,-198.25 219.75,-200.72 219.75,-203.75"/>
315
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-187.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">quarantine/</text>
316
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-175.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">corrupt originals</text>
317
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-163.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">not a backup generation</text>
318
+ </g>
319
+ <!-- Root&#45;&gt;qtn -->
320
+ <g id="edge21" class="edge">
321
+ <title>Root&#45;&gt;qtn</title>
322
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M55.02,-795.53C63.97,-705.35 106.91,-312.03 183,-220 190.69,-210.7 200.86,-203.47 211.72,-197.85"/>
323
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="212.56,-200.17 217.82,-194.94 210.44,-195.75 212.56,-200.17"/>
324
+ </g>
325
+ <!-- rt -->
326
+ <g id="node23" class="node">
327
+ <title>rt</title>
328
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M348.62,-120.75C348.62,-123.78 317.81,-126.25 279.88,-126.25 241.94,-126.25 211.12,-123.78 211.12,-120.75 211.12,-120.75 211.12,-71.25 211.12,-71.25 211.12,-68.22 241.94,-65.75 279.88,-65.75 317.81,-65.75 348.62,-68.22 348.62,-71.25 348.62,-71.25 348.62,-120.75 348.62,-120.75"/>
329
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M348.62,-120.75C348.62,-117.72 317.81,-115.25 279.88,-115.25 241.94,-115.25 211.12,-117.72 211.12,-120.75"/>
330
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-104.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">workspaces/runtime/</text>
331
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-92.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn&#45;ai writes · TMPDIR</text>
332
+ <text xml:space="preserve" text-anchor="middle" x="279.88" y="-80.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">registered disposable inputs</text>
333
+ </g>
334
+ <!-- Root&#45;&gt;rt -->
335
+ <g id="edge23" class="edge">
336
+ <title>Root&#45;&gt;rt</title>
337
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.49,-795.65C61.41,-698.49 97.91,-244.58 183,-138 188.64,-130.93 195.71,-125.03 203.45,-120.1"/>
338
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="204.48,-122.33 209.28,-116.68 202,-118.11 204.48,-122.33"/>
339
+ </g>
340
+ <!-- hist -->
341
+ <g id="node24" class="node">
312
342
  <title>hist</title>
313
343
  <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M330.62,-40C330.62,-42.21 307.88,-44 279.88,-44 251.87,-44 229.12,-42.21 229.12,-40 229.12,-40 229.12,-4 229.12,-4 229.12,-1.79 251.87,0 279.88,0 307.88,0 330.62,-1.79 330.62,-4 330.62,-4 330.62,-40 330.62,-40"/>
314
344
  <path fill="none" stroke="#334155" stroke-width="1.3" d="M330.62,-40C330.62,-37.79 307.88,-36 279.88,-36 251.87,-36 229.12,-37.79 229.12,-40"/>
@@ -316,10 +346,10 @@
316
346
  <text xml:space="preserve" text-anchor="middle" x="279.88" y="-12.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">REPL history</text>
317
347
  </g>
318
348
  <!-- Root&#45;&gt;hist -->
319
- <g id="edge21" class="edge">
349
+ <g id="edge22" class="edge">
320
350
  <title>Root&#45;&gt;hist</title>
321
- <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M54.34,-713.5C60.46,-615.55 93.53,-158.19 183,-55 192.83,-43.67 206.74,-36.22 220.92,-31.33"/>
322
- <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="221.26,-33.79 227.22,-29.37 219.8,-29.11 221.26,-33.79"/>
351
+ <path fill="none" stroke="#94a3b8" stroke-width="1.1" d="M53.93,-795.39C58.1,-690.33 83.56,-172.03 183,-55 192.71,-43.57 206.58,-36.09 220.77,-31.2"/>
352
+ <polygon fill="#94a3b8" stroke="#94a3b8" stroke-width="1.1" points="221.11,-33.66 227.07,-29.24 219.65,-28.98 221.11,-33.66"/>
323
353
  </g>
324
354
  </g>
325
355
  </svg>