stargraph 0.2.2__tar.gz → 0.3.1__tar.gz

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 (570) hide show
  1. stargraph-0.3.1/.gitignore +38 -0
  2. {stargraph-0.2.2 → stargraph-0.3.1}/CHANGELOG.md +39 -0
  3. {stargraph-0.2.2 → stargraph-0.3.1}/PKG-INFO +13 -8
  4. {stargraph-0.2.2 → stargraph-0.3.1}/README.md +5 -5
  5. {stargraph-0.2.2 → stargraph-0.3.1}/demos/README.md +34 -28
  6. stargraph-0.3.1/demos/cve-remediation/graph/README.md +166 -0
  7. stargraph-0.3.1/demos/cve-remediation/graph/rules/README.md +83 -0
  8. stargraph-0.3.1/demos/cve-remediation/graph/tests/test_packs.py +170 -0
  9. stargraph-0.3.1/demos/cve-remediation/graph/tests/test_smoke.py +310 -0
  10. stargraph-0.3.1/demos/everything-demo/README.md +154 -0
  11. stargraph-0.3.1/demos/everything-demo/graph/tests/test_smoke.py +252 -0
  12. {stargraph-0.2.2 → stargraph-0.3.1}/pyproject.toml +63 -15
  13. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/__init__.py +26 -5
  14. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/adapters/mcp.py +19 -1
  15. stargraph-0.3.1/src/harbor/bosun/shipwright/__init__.py +2 -0
  16. stargraph-0.3.1/src/harbor/bosun/shipwright/edits/__init__.py +2 -0
  17. stargraph-0.3.1/src/harbor/bosun/shipwright/edits/manifest.yaml +7 -0
  18. stargraph-0.3.1/src/harbor/bosun/shipwright/edits/rules.clp +39 -0
  19. stargraph-0.3.1/src/harbor/bosun/shipwright/gaps/__init__.py +2 -0
  20. stargraph-0.3.1/src/harbor/bosun/shipwright/gaps/manifest.yaml +7 -0
  21. stargraph-0.3.1/src/harbor/bosun/shipwright/gaps/rules.clp +75 -0
  22. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/sqlite.py +45 -1
  23. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_inputs.py +36 -0
  24. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_progress.py +15 -7
  25. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_prompts.py +12 -18
  26. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_summary.py +18 -12
  27. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/inspect.py +21 -4
  28. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/run.py +289 -35
  29. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/serve.py +91 -1
  30. stargraph-0.3.1/src/harbor/config/__init__.py +24 -0
  31. stargraph-0.3.1/src/harbor/config/triggers.py +229 -0
  32. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/errors/_hierarchy.py +3 -3
  33. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/definition.py +64 -1
  34. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/run.py +7 -0
  35. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/__init__.py +4 -0
  36. stargraph-0.3.1/src/harbor/ir/_backfill.py +52 -0
  37. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_models.py +66 -2
  38. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_validate.py +113 -0
  39. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_versioning.py +1 -1
  40. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/artifacts/write_artifact_node.py +76 -47
  41. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/nautilus/schemas.py +2 -2
  42. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/retrieval.py +1 -1
  43. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/hookspecs.py +27 -22
  44. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/loader.py +1 -0
  45. stargraph-0.3.1/src/harbor/plugin/types.py +148 -0
  46. stargraph-0.3.1/src/harbor/replay/cassettes.py +158 -0
  47. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/dispatch.py +65 -3
  48. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/ir-v1-draft7.json +76 -2
  49. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/ir-v1.json +76 -2
  50. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/manifest-v1.json +3 -1
  51. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/tool-v1.json +28 -2
  52. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/api.py +5 -11
  53. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/lifecycle.py +4 -1
  54. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/respond.py +1 -1
  55. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/scheduler.py +168 -38
  56. stargraph-0.3.1/src/harbor/serve/topology.py +245 -0
  57. stargraph-0.3.1/src/harbor/skills/ai_builder/__init__.py +6 -0
  58. stargraph-0.3.1/src/harbor/skills/ai_builder/graph.yaml +169 -0
  59. stargraph-0.3.1/src/harbor/skills/ai_builder/harbor.yaml +32 -0
  60. stargraph-0.3.1/src/harbor/skills/ai_builder/manifest.yaml +8 -0
  61. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/__init__.py +2 -0
  62. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/basic.py +62 -0
  63. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/classify.py +71 -0
  64. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/docs.py +36 -0
  65. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/inspector.py +32 -0
  66. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/join.py +44 -0
  67. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/receive.py +30 -0
  68. stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/shipwright_gate.py +32 -0
  69. stargraph-0.3.1/src/harbor/skills/ai_builder/state.py +48 -0
  70. stargraph-0.3.1/src/harbor/skills/shipwright/_pack.py +66 -0
  71. stargraph-0.3.1/src/harbor/skills/shipwright/graph.yaml +109 -0
  72. stargraph-0.3.1/src/harbor/skills/shipwright/harbor.yaml +45 -0
  73. stargraph-0.3.1/src/harbor/skills/shipwright/manifest.yaml +7 -0
  74. stargraph-0.3.1/src/harbor/skills/shipwright/nodes/fix.py +57 -0
  75. stargraph-0.3.1/src/harbor/skills/shipwright/nodes/interview.py +136 -0
  76. stargraph-0.3.1/src/harbor/skills/shipwright/nodes/parse.py +49 -0
  77. stargraph-0.3.1/src/harbor/skills/shipwright/nodes/synthesize.py +69 -0
  78. stargraph-0.3.1/src/harbor/skills/shipwright/nodes/triage.py +23 -0
  79. stargraph-0.3.1/src/harbor/skills/shipwright/nodes/verify.py +172 -0
  80. stargraph-0.3.1/src/harbor/skills/shipwright/state.py +88 -0
  81. stargraph-0.3.1/src/harbor/skills/shipwright/templates/harbor.yaml.j2 +22 -0
  82. stargraph-0.3.1/src/harbor/skills/shipwright/templates/state.py.j2 +23 -0
  83. stargraph-0.3.1/src/harbor/skills/shipwright/templates/test_smoke.py.j2 +19 -0
  84. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/__init__.py +35 -3
  85. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_common.py +6 -1
  86. stargraph-0.3.1/src/harbor/stores/cypher.py +254 -0
  87. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/graph.py +10 -9
  88. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/kg_promotion.py +2 -2
  89. stargraph-0.3.1/src/harbor/stores/rerankers.py +219 -0
  90. stargraph-0.2.2/src/harbor/stores/kuzu.py → stargraph-0.3.1/src/harbor/stores/ryugraph.py +49 -37
  91. stargraph-0.3.1/src/harbor/tools/cargonet/__init__.py +34 -0
  92. stargraph-0.3.1/src/harbor/tools/cargonet/exec_node.py +155 -0
  93. stargraph-0.3.1/src/harbor/tools/servicenow/__init__.py +60 -0
  94. stargraph-0.3.1/src/harbor/tools/servicenow/_auth.py +62 -0
  95. stargraph-0.3.1/src/harbor/tools/servicenow/cmdb_query_software.py +107 -0
  96. stargraph-0.3.1/src/harbor/tools/servicenow/cmdb_resolve_hosts.py +92 -0
  97. stargraph-0.3.1/src/harbor/tools/servicenow/cmdb_traverse_runs_on.py +107 -0
  98. stargraph-0.3.1/src/harbor/tools/servicenow/create_change_request.py +232 -0
  99. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/manual.py +4 -6
  100. {stargraph-0.2.2 → stargraph-0.3.1}/tests/conftest.py +52 -0
  101. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_hitl.py +52 -20
  102. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_lifecycle.py +3 -9
  103. stargraph-0.3.1/tests/integration/cli/test_run_lm_flags.py +165 -0
  104. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_summary.py +6 -3
  105. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_api_runs_lifecycle.py +26 -14
  106. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_nautilus_upgrade_path.py +4 -4
  107. stargraph-0.3.1/tests/integration/serve/test_post_runs_real_engine.py +108 -0
  108. stargraph-0.3.1/tests/integration/shipwright/conftest.py +57 -0
  109. stargraph-0.3.1/tests/integration/shipwright/test_e2e_new_graph.py +94 -0
  110. stargraph-0.3.1/tests/integration/shipwright/test_e2e_with_ollama.py +102 -0
  111. stargraph-0.3.1/tests/integration/shipwright/test_edits_pack.py +57 -0
  112. stargraph-0.3.1/tests/integration/shipwright/test_fix_loop.py +44 -0
  113. stargraph-0.3.1/tests/integration/shipwright/test_gap_check.py +36 -0
  114. stargraph-0.3.1/tests/integration/shipwright/test_gaps_pack.py +77 -0
  115. stargraph-0.3.1/tests/integration/shipwright/test_graph_yaml.py +92 -0
  116. stargraph-0.3.1/tests/integration/shipwright/test_parse_brief.py +40 -0
  117. stargraph-0.3.1/tests/integration/shipwright/test_propose_questions.py +48 -0
  118. stargraph-0.3.1/tests/integration/shipwright/test_run_yaml_with_ollama.py +108 -0
  119. stargraph-0.3.1/tests/integration/shipwright/test_state.py +79 -0
  120. stargraph-0.3.1/tests/integration/shipwright/test_synthesize_graph.py +57 -0
  121. stargraph-0.3.1/tests/integration/shipwright/test_topology.py +38 -0
  122. stargraph-0.3.1/tests/integration/shipwright/test_triage.py +30 -0
  123. stargraph-0.3.1/tests/integration/shipwright/test_verify_smoke.py +49 -0
  124. stargraph-0.3.1/tests/integration/shipwright/test_verify_static.py +61 -0
  125. stargraph-0.3.1/tests/integration/shipwright/test_verify_tests.py +64 -0
  126. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_custom_store_provider.py +2 -2
  127. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cypher_subset.py +5 -5
  128. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cypher_write_keyword_scan.py +2 -2
  129. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_dspy_loud_fallback.py +30 -0
  130. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_health_warns_on_nfs.py +3 -3
  131. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_kg_fact_promotion_rule.py +4 -4
  132. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_kg_promotion_counterfactual.py +3 -3
  133. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_knowledge_phase3_ve.py +2 -2
  134. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_knowledge_phase5_final.py +4 -4
  135. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_knowledge_poc_e2e.py +3 -3
  136. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mcp_stdio_adapter.py +37 -0
  137. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_promotion_one_way.py +4 -4
  138. stargraph-0.2.2/tests/integration/test_kuzu_bulk_copy_extension_api.py → stargraph-0.3.1/tests/integration/test_ryugraph_bulk_copy_extension_api.py +15 -15
  139. stargraph-0.2.2/tests/integration/test_kuzu_provider.py → stargraph-0.3.1/tests/integration/test_ryugraph_provider.py +13 -13
  140. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_single_writer_serialization.py +4 -4
  141. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_walk_vs_trail_documented.py +12 -12
  142. {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_knowledge_perf.py +3 -3
  143. stargraph-0.3.1/tests/unit/cli/test_run_live_broker.py +126 -0
  144. stargraph-0.3.1/tests/unit/cli/test_subgraph_builder.py +112 -0
  145. stargraph-0.3.1/tests/unit/config/test_triggers.py +228 -0
  146. stargraph-0.3.1/tests/unit/replay/__init__.py +0 -0
  147. stargraph-0.3.1/tests/unit/serve/__init__.py +0 -0
  148. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_scheduler.py +9 -7
  149. stargraph-0.3.1/tests/unit/serve/test_topology.py +357 -0
  150. stargraph-0.3.1/tests/unit/test_cross_encoder_reranker.py +176 -0
  151. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_cypher_linter_allowlist.py +15 -3
  152. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_graphstore_expand_bounds.py +5 -5
  153. stargraph-0.3.1/tests/unit/test_ir_backfill.py +145 -0
  154. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_validate.py +141 -0
  155. stargraph-0.3.1/tests/unit/test_node_cassette.py +283 -0
  156. stargraph-0.3.1/tests/unit/test_node_kind_resolution.py +86 -0
  157. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_plugin_loader.py +2 -1
  158. stargraph-0.3.1/tests/unit/test_pyproject_ryugraph_pin.py +57 -0
  159. stargraph-0.3.1/tests/unit/test_registry_compatible_with.py +91 -0
  160. stargraph-0.2.2/tests/unit/test_kuzu_singleton_per_path.py → stargraph-0.3.1/tests/unit/test_ryugraph_singleton_per_path.py +7 -7
  161. stargraph-0.3.1/tests/unit/test_state_class.py +104 -0
  162. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_store_protocols_isinstance.py +3 -3
  163. stargraph-0.3.1/tests/unit/tools/__init__.py +0 -0
  164. stargraph-0.3.1/tests/unit/tools/test_servicenow_create_change_request.py +232 -0
  165. stargraph-0.3.1/tests/unit/triggers/__init__.py +0 -0
  166. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/triggers/test_manual.py +17 -4
  167. stargraph-0.2.2/.gitignore +0 -26
  168. stargraph-0.2.2/src/harbor/replay/cassettes.py +0 -84
  169. stargraph-0.2.2/src/harbor/stores/cypher.py +0 -112
  170. stargraph-0.2.2/src/harbor/stores/rerankers.py +0 -86
  171. stargraph-0.2.2/tests/unit/test_pyproject_kuzu_pin.py +0 -49
  172. stargraph-0.2.2/tests/unit/test_registry_compatible_with.py +0 -44
  173. {stargraph-0.2.2 → stargraph-0.3.1}/.shipwright-out/tests/test_smoke.py +0 -0
  174. {stargraph-0.2.2 → stargraph-0.3.1}/LICENSE +0 -0
  175. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/adapters/__init__.py +0 -0
  176. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/adapters/dspy.py +0 -0
  177. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/artifacts/__init__.py +0 -0
  178. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/artifacts/base.py +0 -0
  179. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/artifacts/fs.py +0 -0
  180. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/audit/__init__.py +0 -0
  181. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/audit/jsonl.py +0 -0
  182. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/__init__.py +0 -0
  183. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/__init__.py +0 -0
  184. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/dev-bosun-6c367049.pub.pem +0 -0
  185. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/manifest.jwt +0 -0
  186. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/manifest.yaml +0 -0
  187. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/rules.clp +0 -0
  188. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/__init__.py +0 -0
  189. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/dev-bosun-6c367049.pub.pem +0 -0
  190. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/manifest.jwt +0 -0
  191. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/manifest.yaml +0 -0
  192. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/rules.clp +0 -0
  193. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/__init__.py +0 -0
  194. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/dev-bosun-6c367049.pub.pem +0 -0
  195. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/manifest.jwt +0 -0
  196. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/manifest.yaml +0 -0
  197. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/rules.clp +0 -0
  198. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/__init__.py +0 -0
  199. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/dev-bosun-6c367049.pub.pem +0 -0
  200. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/manifest.jwt +0 -0
  201. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/manifest.yaml +0 -0
  202. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/rules.clp +0 -0
  203. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/signing.py +0 -0
  204. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/__init__.py +0 -0
  205. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/_clips.py +0 -0
  206. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/_codec.py +0 -0
  207. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/__init__.py +0 -0
  208. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/_m001_initial.py +0 -0
  209. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/_m002_run_history.py +0 -0
  210. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/_network_fs.py +0 -0
  211. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/postgres.py +0 -0
  212. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/protocol.py +0 -0
  213. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/__init__.py +0 -0
  214. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/counterfactual.py +0 -0
  215. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/replay.py +0 -0
  216. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/respond.py +0 -0
  217. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/simulate.py +0 -0
  218. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/errors/__init__.py +0 -0
  219. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/__init__.py +0 -0
  220. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_action.py +0 -0
  221. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_adapter.py +0 -0
  222. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_provenance.py +0 -0
  223. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_template.py +0 -0
  224. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/__init__.py +0 -0
  225. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/hash.py +0 -0
  226. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/loop.py +0 -0
  227. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_dumps.py +0 -0
  228. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_ids.py +0 -0
  229. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_migrate.py +0 -0
  230. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_mirror.py +0 -0
  231. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/logging/__init__.py +0 -0
  232. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/logging/_config.py +0 -0
  233. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/logging/_context.py +0 -0
  234. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ml/__init__.py +0 -0
  235. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ml/loaders.py +0 -0
  236. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ml/registry.py +0 -0
  237. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/__init__.py +0 -0
  238. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/artifacts/__init__.py +0 -0
  239. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/base.py +0 -0
  240. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/dspy.py +0 -0
  241. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/interrupt/__init__.py +0 -0
  242. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/interrupt/interrupt_node.py +0 -0
  243. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/memory.py +0 -0
  244. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/ml.py +0 -0
  245. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/nautilus/__init__.py +0 -0
  246. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/nautilus/broker_node.py +0 -0
  247. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/subgraph.py +0 -0
  248. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/__init__.py +0 -0
  249. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/_config.py +0 -0
  250. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/_manifest.py +0 -0
  251. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/_markers.py +0 -0
  252. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/triggers_dispatcher.py +0 -0
  253. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/registry/__init__.py +0 -0
  254. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/registry/stores.py +0 -0
  255. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/registry/tools.py +0 -0
  256. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/__init__.py +0 -0
  257. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/compare.py +0 -0
  258. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/counterfactual.py +0 -0
  259. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/determinism.py +0 -0
  260. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/history.py +0 -0
  261. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/react_cassette.py +0 -0
  262. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/__init__.py +0 -0
  263. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/action.py +0 -0
  264. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/bus.py +0 -0
  265. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/events.py +0 -0
  266. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/merge.py +0 -0
  267. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/mirror_lifecycle.py +0 -0
  268. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/parallel.py +0 -0
  269. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/tool_exec.py +0 -0
  270. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/__init__.py +0 -0
  271. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/security/__init__.py +0 -0
  272. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/security/capabilities.py +0 -0
  273. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/__init__.py +0 -0
  274. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/auth.py +0 -0
  275. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/broadcast.py +0 -0
  276. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/contextvars.py +0 -0
  277. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/history.py +0 -0
  278. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/inspect.py +0 -0
  279. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/openapi.py +0 -0
  280. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/profiles.py +0 -0
  281. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/ratelimit.py +0 -0
  282. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/__init__.py +0 -0
  283. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/base.py +0 -0
  284. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/react.py +0 -0
  285. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/__init__.py +0 -0
  286. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/autoresearch.py +0 -0
  287. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/rag.py +0 -0
  288. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/wiki.py +0 -0
  289. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/salience.py +0 -0
  290. {stargraph-0.2.2/tests/integration/cli → stargraph-0.3.1/src/harbor/skills/shipwright}/__init__.py +0 -0
  291. {stargraph-0.2.2/tests/integration/serve → stargraph-0.3.1/src/harbor/skills/shipwright/nodes}/__init__.py +0 -0
  292. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_delta.py +0 -0
  293. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_rerank_loader.py +0 -0
  294. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_sqlite_base.py +0 -0
  295. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/doc.py +0 -0
  296. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/embeddings.py +0 -0
  297. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/fact.py +0 -0
  298. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/lancedb.py +0 -0
  299. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/memory.py +0 -0
  300. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/sqlite_doc.py +0 -0
  301. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/sqlite_fact.py +0 -0
  302. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/sqlite_memory.py +0 -0
  303. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/vector.py +0 -0
  304. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/__init__.py +0 -0
  305. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/decorator.py +0 -0
  306. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/nautilus/__init__.py +0 -0
  307. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/nautilus/broker_request.py +0 -0
  308. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/spec.py +0 -0
  309. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/__init__.py +0 -0
  310. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/cron.py +0 -0
  311. {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/webhook.py +0 -0
  312. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/100-node-ir.yaml +0 -0
  313. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cassettes/react_test_run/llm/.gitkeep +0 -0
  314. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cli/hitl-graph.yaml +0 -0
  315. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_cf_diffs/broker_mutation_diff.txt +0 -0
  316. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_cf_diffs/respond_rejection_diff.txt +0 -0
  317. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_feeds/README.md +0 -0
  318. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_feeds/kev_sample.csv +0 -0
  319. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_feeds/nvd_sample.json +0 -0
  320. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage.yaml +0 -0
  321. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage_no_nautilus.yaml +0 -0
  322. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage_real_nautilus.yaml +0 -0
  323. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage_stub_broker.yaml +0 -0
  324. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/dspy-cassette.yaml +0 -0
  325. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/fathom/rules/poc_5rules.yaml +0 -0
  326. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/ir/canonical/full.json +0 -0
  327. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/ir/canonical/minimal.json +0 -0
  328. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/mutation.yaml +0 -0
  329. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/nautilus/policy.yaml +0 -0
  330. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/nautilus_stub.py +0 -0
  331. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/onnx_minimal.onnx +0 -0
  332. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/pii_corpus.txt +0 -0
  333. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/__init__.py +0 -0
  334. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_alpha/__init__.py +0 -0
  335. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_alpha/manifest.py +0 -0
  336. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_alpha/tools.py +0 -0
  337. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_beta/__init__.py +0 -0
  338. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_beta/manifest.py +0 -0
  339. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_beta/skills.py +0 -0
  340. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_knowledge/__init__.py +0 -0
  341. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_knowledge/manifest.py +0 -0
  342. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph-phase3.yaml +0 -0
  343. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph-phase4.yaml +0 -0
  344. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph-phase5.yaml +0 -0
  345. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph.yaml +0 -0
  346. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample_state.py +0 -0
  347. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/skills/autoresearch/example.yaml +0 -0
  348. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/skills/rag/example.yaml +0 -0
  349. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/skills/wiki/example.yaml +0 -0
  350. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sklearn_minimal.joblib +0 -0
  351. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/stub_mcp_server.py +0 -0
  352. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/training-subgraph.yaml +0 -0
  353. {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/xgboost_minimal.ubj +0 -0
  354. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/__init__.py +0 -0
  355. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/_helpers.py +0 -0
  356. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_audit_pack.py +0 -0
  357. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_budgets_pack.py +0 -0
  358. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_retries_pack.py +0 -0
  359. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_safety_pii_pack.py +0 -0
  360. {stargraph-0.2.2/tests/migration → stargraph-0.3.1/tests/integration/cli}/__init__.py +0 -0
  361. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/conftest.py +0 -0
  362. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_hitl_fixture.py +0 -0
  363. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_inputs.py +0 -0
  364. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_progress.py +0 -0
  365. {stargraph-0.2.2/tests/unit/artifacts → stargraph-0.3.1/tests/integration/serve}/__init__.py +0 -0
  366. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_air_gap_install.py +0 -0
  367. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_artifacts_endpoints.py +0 -0
  368. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_cancel_pause.py +0 -0
  369. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_capability_deny.py +0 -0
  370. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_counterfactual_broker_mutation.py +0 -0
  371. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_counterfactual_respond_rejection.py +0 -0
  372. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_cron_soak.py +0 -0
  373. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_cve_triage_e2e.py +0 -0
  374. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_hitl_respond.py +0 -0
  375. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_nautilus_composition.py +0 -0
  376. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_nfs_refusal.py +0 -0
  377. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_pack_signing_eddsa_strict.py +0 -0
  378. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_pack_signing_perf.py +0 -0
  379. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_poc_cancel_pause.py +0 -0
  380. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_poc_milestone_six_events.py +0 -0
  381. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_poc_three_node_graph.py +0 -0
  382. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_profile_default_deny.py +0 -0
  383. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_profiles_matrix.py +0 -0
  384. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_replay_isolation.py +0 -0
  385. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_safety_pii_patterns.py +0 -0
  386. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_streaming_backpressure_serve.py +0 -0
  387. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_tampered_manifest.py +0 -0
  388. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_trigger_isolation.py +0 -0
  389. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_websocket_disconnect_overflow.py +0 -0
  390. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_websocket_stream.py +0 -0
  391. {stargraph-0.2.2/tests/unit/bosun → stargraph-0.3.1/tests/integration/shipwright}/__init__.py +0 -0
  392. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_autoresearch_provenance_end_to_end.py +0 -0
  393. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_autoresearch_reference_skill.py +0 -0
  394. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_branch_lifecycle_facts.py +0 -0
  395. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_capability_default_deny.py +0 -0
  396. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cli_counterfactual.py +0 -0
  397. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cli_inspect.py +0 -0
  398. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cli_run.py +0 -0
  399. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_clips_facts_roundtrip.py +0 -0
  400. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_cadence_batch.py +0 -0
  401. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_cadence_streaming.py +0 -0
  402. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_provenance_lineage.py +0 -0
  403. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_salience_gating.py +0 -0
  404. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_typed_delta.py +0 -0
  405. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_counterfactual_diff.py +0 -0
  406. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_counterfactual_e2e.py +0 -0
  407. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_counterfactual_invariant.py +0 -0
  408. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_determinism_shim.py +0 -0
  409. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_dspy_adapter_basic.py +0 -0
  410. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_dspy_bind.py +0 -0
  411. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_embed_hash_drift_gate.py +0 -0
  412. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_episodic_widening_read.py +0 -0
  413. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_factstore_fathom_provenance.py +0 -0
  414. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_hybrid_search_rrf.py +0 -0
  415. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_interrupt_timeout.py +0 -0
  416. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_jsonl_audit_log.py +0 -0
  417. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_lancedb_provider.py +0 -0
  418. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_lancedb_versioning_checkpoint.py +0 -0
  419. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_memory_write_node.py +0 -0
  420. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_migrate_add_column.py +0 -0
  421. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_minilm_offline_load.py +0 -0
  422. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_ml_pickle_safety.py +0 -0
  423. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mlnode_onnx_session_reuse.py +0 -0
  424. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mlnode_sklearn.py +0 -0
  425. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mlnode_xgboost.py +0 -0
  426. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_nautilus_yaml_fit.py +0 -0
  427. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_parallel_cancellation.py +0 -0
  428. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_parallel_taskgroup.py +0 -0
  429. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_poc_smoke.py +0 -0
  430. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_postgres_checkpointer.py +0 -0
  431. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_rag_reference_skill.py +0 -0
  432. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_react_replay_input_checked.py +0 -0
  433. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_react_skill_tool_loop.py +0 -0
  434. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_react_termination_rules.py +0 -0
  435. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_replay_determinism_sweep.py +0 -0
  436. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_replay_safety_enforcement.py +0 -0
  437. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_resume_from_step.py +0 -0
  438. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_resume_hash_mismatch.py +0 -0
  439. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_resume_latest.py +0 -0
  440. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_retrieval_node_emits_transition_facts.py +0 -0
  441. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_retrieval_node_parallel_fanout.py +0 -0
  442. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_retrieval_node_rrf_fusion.py +0 -0
  443. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_runtime_loop.py +0 -0
  444. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_salience_protocol_swap.py +0 -0
  445. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_skill_event_bubbling.py +0 -0
  446. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_skill_subgraph_replay.py +0 -0
  447. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_skill_topology_change_refuses_replay.py +0 -0
  448. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_checkpointer.py +0 -0
  449. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_docstore.py +0 -0
  450. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_factstore.py +0 -0
  451. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_memorystore.py +0 -0
  452. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_streaming_backpressure.py +0 -0
  453. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_subgraph_node.py +0 -0
  454. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_tool_execution_path.py +0 -0
  455. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_training_subgraph_example.py +0 -0
  456. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_value_bearing_fact_taxonomy.py +0 -0
  457. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_vcr_cassettes.py +0 -0
  458. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_wiki_consumes_autoresearch.py +0 -0
  459. {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_wiki_reference_skill.py +0 -0
  460. {stargraph-0.2.2/tests/unit/cli → stargraph-0.3.1/tests/migration}/__init__.py +0 -0
  461. {stargraph-0.2.2 → stargraph-0.3.1}/tests/migration/test_foundation_v0_1_to_engine_v0_2.py +0 -0
  462. {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_nautilus_workload.py +0 -0
  463. {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_per_node_overhead.py +0 -0
  464. {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_sqlite_checkpoint.py +0 -0
  465. {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_structural_hash_perf.py +0 -0
  466. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/__init__.py +0 -0
  467. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_cypher_linter_idempotent.py +0 -0
  468. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_ir_roundtrip.py +0 -0
  469. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_jcs_canonical.py +0 -0
  470. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_merge_strategy_associativity.py +0 -0
  471. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_provenance_roundtrip.py +0 -0
  472. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_rrf_fusion_idempotent.py +0 -0
  473. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_salience_formula_bounds.py +0 -0
  474. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_salience_recency_monotone.py +0 -0
  475. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_slot_regex_evasion.py +0 -0
  476. {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_structural_hash_jcs_stable.py +0 -0
  477. {stargraph-0.2.2 → stargraph-0.3.1}/tests/regression/__init__.py +0 -0
  478. {stargraph-0.2.2 → stargraph-0.3.1}/tests/regression/pydantic_issues.py +0 -0
  479. {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/__init__.py +0 -0
  480. {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_determinism_sweep.py +0 -0
  481. {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_must_stub_policy.py +0 -0
  482. {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_react_must_stub_llm.py +0 -0
  483. {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_replay_determinism.py +0 -0
  484. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/__init__.py +0 -0
  485. {stargraph-0.2.2/tests/unit/nodes → stargraph-0.3.1/tests/unit/artifacts}/__init__.py +0 -0
  486. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/artifacts/test_fs.py +0 -0
  487. {stargraph-0.2.2/tests/unit/replay → stargraph-0.3.1/tests/unit/bosun}/__init__.py +0 -0
  488. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_pack_scaffold.py +0 -0
  489. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_signing.py +0 -0
  490. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_signing_roundtrip.py +0 -0
  491. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_tofu.py +0 -0
  492. {stargraph-0.2.2/tests/unit/serve → stargraph-0.3.1/tests/unit/cli}/__init__.py +0 -0
  493. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_inspect.py +0 -0
  494. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_replay.py +0 -0
  495. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_respond.py +0 -0
  496. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_serve_profile_gate.py +0 -0
  497. {stargraph-0.2.2/tests/unit/tools → stargraph-0.3.1/tests/unit/config}/__init__.py +0 -0
  498. {stargraph-0.2.2/tests/unit/triggers → stargraph-0.3.1/tests/unit/nodes}/__init__.py +0 -0
  499. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/nodes/test_broker_node.py +0 -0
  500. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/replay/test_respond_payloads.py +0 -0
  501. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/replay/test_waiting_for_input_replay.py +0 -0
  502. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_auth.py +0 -0
  503. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_broker_singleton.py +0 -0
  504. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_profiles.py +0 -0
  505. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_action_vocabulary.py +0 -0
  506. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_capabilities.py +0 -0
  507. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_capability_string_binding.py +0 -0
  508. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_check_pack_compat.py +0 -0
  509. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_checkpoint_protocol.py +0 -0
  510. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_confidence_decay_formula.py +0 -0
  511. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_counterfactual_mutation.py +0 -0
  512. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_cypher_linter_banlist.py +0 -0
  513. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_cypher_linter_unbounded_varlength_rejected.py +0 -0
  514. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_derived_graph_hash.py +0 -0
  515. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_embed_hash_payload.py +0 -0
  516. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_env_interpolation.py +0 -0
  517. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_errors.py +0 -0
  518. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_errors_walker.py +0 -0
  519. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_event_vocabulary.py +0 -0
  520. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_fathom_adapter.py +0 -0
  521. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_fathom_provenance.py +0 -0
  522. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_foundation_extensions.py +0 -0
  523. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_graph_definition.py +0 -0
  524. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_graph_run.py +0 -0
  525. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_dumps.py +0 -0
  526. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_dumps_walker.py +0 -0
  527. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_ids.py +0 -0
  528. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_mirror.py +0 -0
  529. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_models.py +0 -0
  530. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_portable_subset_annotated_unions.py +0 -0
  531. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_portable_subset_jschema_extra.py +0 -0
  532. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_portable_subset_pep695_float.py +0 -0
  533. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_logging.py +0 -0
  534. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_memorydelta_validation.py +0 -0
  535. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_memorystore_trailing_separator.py +0 -0
  536. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_merge_strategy_registry.py +0 -0
  537. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_migrate_rejects_narrows.py +0 -0
  538. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_minilm_sha256_pin.py +0 -0
  539. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_minilm_token_clip_256.py +0 -0
  540. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_mirror_lifecycle.py +0 -0
  541. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_model_registry.py +0 -0
  542. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_no_fastembed_import.py +0 -0
  543. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_pack_requires.py +0 -0
  544. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_pack_requires_hash.py +0 -0
  545. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_plugin_import_tracing.py +0 -0
  546. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_plugin_manifest.py +0 -0
  547. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_provenance_ast_walker.py +0 -0
  548. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_provenance_enforcer.py +0 -0
  549. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_race_side_effect_check.py +0 -0
  550. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_register_skills_hook.py +0 -0
  551. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_register_stores_hook.py +0 -0
  552. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_registry.py +0 -0
  553. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_reranker_entrypoint.py +0 -0
  554. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_retrieval_node_no_cross_store_reembed.py +0 -0
  555. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_rule_based_salience.py +0 -0
  556. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_salience_protocol.py +0 -0
  557. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_serve_websocket_resume.py +0 -0
  558. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_simulate.py +0 -0
  559. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skill_base_class.py +0 -0
  560. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skill_compile_rejects_undeclared_output.py +0 -0
  561. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skill_site_id_deterministic.py +0 -0
  562. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skills_entrypoint.py +0 -0
  563. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skills_in_tree_packaging.py +0 -0
  564. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_state_schema_load.py +0 -0
  565. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_store_config_schema.py +0 -0
  566. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_store_protocols.py +0 -0
  567. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_tool_decorator.py +0 -0
  568. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/tools/test_broker_request_tool.py +0 -0
  569. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/triggers/test_cron.py +0 -0
  570. {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/triggers/test_webhook.py +0 -0
@@ -0,0 +1,38 @@
1
+ # Python
2
+ __pycache__/
3
+ *.pyc
4
+ .venv/
5
+ dist/
6
+ build/
7
+ *.egg-info/
8
+ .coverage
9
+ coverage.xml
10
+ htmlcov/
11
+
12
+ # IDE
13
+ .vscode/
14
+ .idea/
15
+
16
+ # Tooling
17
+ .ruff_cache/
18
+ .pytest_cache/
19
+ .mypy_cache/
20
+ site/
21
+ specs/
22
+
23
+ # Local Claude Code state (user-specific)
24
+ .claude/
25
+ .remember/
26
+ graphify-out/
27
+
28
+ # cve_remediation demo — secrets + generated artifacts
29
+ demos/cve_remediation/.env
30
+ demos/cve_remediation/dev-keys/*.priv.pem
31
+ demos/cve_remediation/dev-keys/*
32
+ .harbor/
33
+
34
+ # Pack signing artifacts (regenerated by bootstrap.py)
35
+ demos/cve_remediation/graph/rules/*/manifest.jwt
36
+ demos/cve_remediation/graph/rules/*/krakntrust-cve-rem-*.pub.pem
37
+ audit.jsonl
38
+ demos/cve_remediation/dev-keys/krakntrust-cve-rem.pub.pem
@@ -5,6 +5,45 @@
5
5
  The harbor-knowledge surface — Stores, Skills, retrieval, memory, and
6
6
  consolidation built on top of harbor-engine.
7
7
 
8
+ ### Changed (graph-store backend)
9
+ - Replaced `kuzu==0.11.3` with `ryugraph>=25.9.2,<26` in the `stores`
10
+ optional-dependency group. RyuGraph is the community fork of Kuzu
11
+ (predictable-labs/ryugraph) after Kuzu's GitHub repo was archived
12
+ 2025-10-10 following Apple's acquisition of Kuzu Inc. The Python API
13
+ surface (`Database` / `AsyncConnection` / `QueryResult`) is unchanged
14
+ across the fork, so the swap was a one-module rename behind the
15
+ `GraphStore` Protocol — `harbor.stores.kuzu.KuzuGraphStore` is now
16
+ `harbor.stores.ryugraph.RyuGraphStore`. Provenance source URIs
17
+ emitted by `PromoteTriplesToFacts` change from `kuzu:<path>` to
18
+ `ryugraph:<path>` (FR-11, AC-12.1).
19
+
20
+ ### Added (Plan 1.5 — Shipwright runnable via `harbor run`)
21
+ - IR `state_class: str | None` field — declare a Pydantic `BaseModel`
22
+ subclass via `module.path:ClassName` instead of the primitive
23
+ `state_schema: dict[str, str]` placeholder. Mutually exclusive with a
24
+ non-empty `state_schema`.
25
+ - `module.path:ClassName` resolution for `NodeSpec.kind` — short kinds
26
+ (`echo`/`halt`/`dspy`) still match the static factory table; any kind
27
+ containing `:` is imported via `importlib` and validated as a
28
+ `NodeBase` subclass.
29
+ - `harbor run --lm-url/--lm-model/--lm-key/--lm-timeout` flags —
30
+ `harbor run` calls `dspy.configure(lm=dspy.LM(...))` before driving
31
+ the graph when `--lm-url` and `--lm-model` are both set.
32
+ - `--inputs key=value` honors `state_class` by walking the resolved
33
+ BaseModel's `model_fields`.
34
+
35
+ ### Changed
36
+ - Bumped `nautilus-rkm` pin 0.1.3 → 0.1.4 (0.1.3 shipped Py2 except
37
+ syntax that crashed import on Python 3.13). Mirrors three dropped
38
+ `BrokerResponse` fields (`cap_breached`, `fact_set_hash`,
39
+ `source_session_signatures`) and the dropped `fact_set_hash` kwarg
40
+ on `Broker.arequest`. Removes the local sibling-path override now
41
+ that nautilus is on PyPI.
42
+ - `SpecSlot.confidence`: `float = 1.0` → `int = 100` (percent). FR-4
43
+ forbids floats anywhere in the structural-hash payload, including
44
+ `model_json_schema` defaults; the field's old default tripped the
45
+ hash the moment `State` landed under `state_class`.
46
+
8
47
  ### Added
9
48
  - Five Store Protocols (`harbor.stores`): `VectorStore`, `GraphStore`,
10
49
  `DocStore`, `MemoryStore`, `FactStore` — each with `bootstrap`, `health`,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stargraph
3
- Version: 0.2.2
3
+ Version: 0.3.1
4
4
  Summary: Stateful agent-graph framework with deterministic governance via Fathom
5
5
  Project-URL: Homepage, https://harbor.krakn.ai
6
6
  Project-URL: Repository, https://github.com/KrakenNet/harbor
@@ -29,17 +29,21 @@ Requires-Dist: cryptography>=47.0.0
29
29
  Requires-Dist: dspy<3.4,>=3.0.4
30
30
  Requires-Dist: fastapi>=0.115
31
31
  Requires-Dist: fathom-rules>=0.3.1
32
+ Requires-Dist: graphglot>=0.11.0
32
33
  Requires-Dist: httpx>=0.27
34
+ Requires-Dist: jinja2>=3.1.6
33
35
  Requires-Dist: jsonpatch>=1.33
34
36
  Requires-Dist: jsonschema>=4.21
35
37
  Requires-Dist: mcp>=1.0
36
- Requires-Dist: nautilus-rkm>=0.1.2
38
+ Requires-Dist: nautilus-rkm>=0.1.5
37
39
  Requires-Dist: orjson>=3.10
38
40
  Requires-Dist: pluggy>=1.5
39
41
  Requires-Dist: prompt-toolkit>=3.0.50
40
42
  Requires-Dist: pydantic>=2.9
41
43
  Requires-Dist: pyjwt[crypto]>=2.8
44
+ Requires-Dist: python-docx>=1.2.0
42
45
  Requires-Dist: pyyaml>=6.0
46
+ Requires-Dist: redis>=7.4.0
43
47
  Requires-Dist: rfc8785<0.2,>=0.1.4
44
48
  Requires-Dist: structlog>=24.1
45
49
  Requires-Dist: typer>=0.12
@@ -54,13 +58,14 @@ Requires-Dist: xgboost>=2.1; extra == 'ml'
54
58
  Provides-Extra: skills-rag
55
59
  Requires-Dist: huggingface-hub>=0.25; extra == 'skills-rag'
56
60
  Requires-Dist: sentence-transformers<6,>=5.0; extra == 'skills-rag'
61
+ Requires-Dist: torch>=2.1; extra == 'skills-rag'
57
62
  Provides-Extra: stores
58
- Requires-Dist: kuzu==0.11.3; extra == 'stores'
59
63
  Requires-Dist: lancedb<0.40,>=0.30.2; extra == 'stores'
60
64
  Requires-Dist: pyarrow>=15; extra == 'stores'
65
+ Requires-Dist: ryugraph<26,>=25.9.2; extra == 'stores'
61
66
  Description-Content-Type: text/markdown
62
67
 
63
- # Harbor
68
+ # StarGraph - Core (harbor)
64
69
 
65
70
  **Stateful agent-graph framework with deterministic governance.**
66
71
 
@@ -69,7 +74,7 @@ auditable, replayable graphs. Transitions between nodes are decided by
69
74
  [Fathom](https://github.com/KrakenNet/fathom) (a CLIPS rules engine) over
70
75
  provenance-typed facts — not by an LLM playing router.
71
76
 
72
- > **Status:** v0.2.2 — Alpha. Public API is unstable until v1.0.
77
+ > **Status:** v0.3.0 — Alpha. Public API is unstable until v1.0.
73
78
  > Built for environments where auditability, determinism, and provenance matter
74
79
  > more than ecosystem size (DoD, regulated, air-gapped, cleared workloads).
75
80
 
@@ -101,7 +106,7 @@ inspectable, versioned, replayable, and free of stochastic drift.
101
106
  makes deterministic replay free. Re-execute from any step with mutated rule,
102
107
  node output, or fact, and diff against the original run.
103
108
  - **Pluggable stores behind Protocols.** `VectorStore` (LanceDB),
104
- `GraphStore` (Kuzu), `DocStore`/`MemoryStore`/`FactStore` (SQLite). Embedded
109
+ `GraphStore` (RyuGraph), `DocStore`/`MemoryStore`/`FactStore` (SQLite). Embedded
105
110
  by default, swappable for hosted providers.
106
111
  - **Boundary-clean state.** Mutate Pydantic state freely inside a node. On
107
112
  exit, annotated fields mirror into CLIPS, rules fire, checkpoint persists.
@@ -132,7 +137,7 @@ Nodes: DSPy │ ML models │ tools │ retrieval │ memory ops
132
137
  ```bash
133
138
  uv add harbor # core
134
139
  uv add 'harbor[ml]' # + sklearn / xgboost / onnxruntime
135
- uv add 'harbor[stores]' # + lancedb / kuzu / pyarrow
140
+ uv add 'harbor[stores]' # + lancedb / ryugraph / pyarrow
136
141
  uv add 'harbor[skills-rag]' # + sentence-transformers
137
142
  ```
138
143
 
@@ -197,7 +202,7 @@ _state vs facts_, lives in
197
202
 
198
203
  - **Not a prompt-optimization framework** — that's DSPy, which Harbor uses.
199
204
  - **Not an inference engine** — that's Fathom/CLIPS, which Harbor uses.
200
- - **Not a vector or graph DB** — Stores wrap real ones (LanceDB, Kuzu, …).
205
+ - **Not a vector or graph DB** — Stores wrap real ones (LanceDB, RyuGraph, …).
201
206
  - **Not a workflow UI** — `harbor serve` is headless. UI is a future product.
202
207
  - **Not chasing LangGraph or n8n on mindshare.** It competes on correctness,
203
208
  inspectability, and ability to run where those tools can't.
@@ -1,4 +1,4 @@
1
- # Harbor
1
+ # StarGraph - Core (harbor)
2
2
 
3
3
  **Stateful agent-graph framework with deterministic governance.**
4
4
 
@@ -7,7 +7,7 @@ auditable, replayable graphs. Transitions between nodes are decided by
7
7
  [Fathom](https://github.com/KrakenNet/fathom) (a CLIPS rules engine) over
8
8
  provenance-typed facts — not by an LLM playing router.
9
9
 
10
- > **Status:** v0.2.2 — Alpha. Public API is unstable until v1.0.
10
+ > **Status:** v0.3.0 — Alpha. Public API is unstable until v1.0.
11
11
  > Built for environments where auditability, determinism, and provenance matter
12
12
  > more than ecosystem size (DoD, regulated, air-gapped, cleared workloads).
13
13
 
@@ -39,7 +39,7 @@ inspectable, versioned, replayable, and free of stochastic drift.
39
39
  makes deterministic replay free. Re-execute from any step with mutated rule,
40
40
  node output, or fact, and diff against the original run.
41
41
  - **Pluggable stores behind Protocols.** `VectorStore` (LanceDB),
42
- `GraphStore` (Kuzu), `DocStore`/`MemoryStore`/`FactStore` (SQLite). Embedded
42
+ `GraphStore` (RyuGraph), `DocStore`/`MemoryStore`/`FactStore` (SQLite). Embedded
43
43
  by default, swappable for hosted providers.
44
44
  - **Boundary-clean state.** Mutate Pydantic state freely inside a node. On
45
45
  exit, annotated fields mirror into CLIPS, rules fire, checkpoint persists.
@@ -70,7 +70,7 @@ Nodes: DSPy │ ML models │ tools │ retrieval │ memory ops
70
70
  ```bash
71
71
  uv add harbor # core
72
72
  uv add 'harbor[ml]' # + sklearn / xgboost / onnxruntime
73
- uv add 'harbor[stores]' # + lancedb / kuzu / pyarrow
73
+ uv add 'harbor[stores]' # + lancedb / ryugraph / pyarrow
74
74
  uv add 'harbor[skills-rag]' # + sentence-transformers
75
75
  ```
76
76
 
@@ -135,7 +135,7 @@ _state vs facts_, lives in
135
135
 
136
136
  - **Not a prompt-optimization framework** — that's DSPy, which Harbor uses.
137
137
  - **Not an inference engine** — that's Fathom/CLIPS, which Harbor uses.
138
- - **Not a vector or graph DB** — Stores wrap real ones (LanceDB, Kuzu, …).
138
+ - **Not a vector or graph DB** — Stores wrap real ones (LanceDB, RyuGraph, …).
139
139
  - **Not a workflow UI** — `harbor serve` is headless. UI is a future product.
140
140
  - **Not chasing LangGraph or n8n on mindshare.** It competes on correctness,
141
141
  inspectability, and ability to run where those tools can't.
@@ -16,6 +16,7 @@ single store + skill all the way up to the full stack.
16
16
  | 6 | [`regwatch/`](regwatch/regwatch.md) | medium | Cron trigger + air-gap deployment variant |
17
17
  | 7 | [`support-veto/`](support-veto/support-veto.md) | medium → hard | Fathom interrupt mid-run + signed-pack hot-swap |
18
18
  | 8 | [`pv-case-manager/`](pv-case-manager/pv-case-manager.md) | hard | Master-of-all (19 capabilities, regulated industry) |
19
+ | 9 | [`cve_remediation/`](cve_remediation/README.md) | hard | Production showcase — every node kind, action, store, trigger; 10 IRs, 174 tests |
19
20
 
20
21
  ## How to read a demo doc
21
22
 
@@ -45,31 +46,36 @@ from design to running code.
45
46
 
46
47
  ## Feature coverage matrix
47
48
 
48
- | Capability | docs-qa | code-graph | pr-review | soc-triage | regwatch | support-veto | pv-cm |
49
- |---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
50
- | DocStore | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
51
- | VectorStore | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ |
52
- | GraphStore | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
53
- | FactStore | | | | ✓ | ✓ | ✓ | ✓ |
54
- | MemoryStore | | | | ✓ | | ✓ | ✓ |
55
- | RAG / autoresearch | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ |
56
- | RetrievalNode (RRF) | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ |
57
- | MLNode + sha256 weights | | | | ✓ | | | ✓ |
58
- | DSPy adapter | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
59
- | MCP adapter | | | | | | | ✓ |
60
- | Fathom + harbor_action | | | ✓ | ✓ | ✓ | ✓ | ✓ |
61
- | Bosun signed packs | | | ✓ | ✓ | ✓ | ✓ | ✓ |
62
- | InterruptAction (HITL) | | | | ✓ | | ✓ | ✓ |
63
- | Cron trigger | | | | | ✓ | | ✓ |
64
- | Webhook trigger | | | ✓ | ✓ | | | ✓ |
65
- | Provenance bundle | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
66
- | BLAKE3 artifacts | ✓ | | | ✓ | ✓ | ✓ | ✓ |
67
- | Ed25519 audit | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
68
- | Checkpoint (sqlite/pg) | | ✓ | | ✓ | | ✓ | ✓ |
69
- | Counterfactual replay | | ✓ | ✓ | ✓ | | ✓ | ✓ |
70
- | Air-gap variant | | | | | ✓ | | ✓ |
71
- | harbor.serve API | | | | ✓ | | ✓ | ✓ |
72
- | mTLS + capabilities | | | | ✓ | | ✓ | ✓ |
73
- | KG promotion (memory) | | | | | | | ✓ |
74
- | Cypher subset linter | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
75
- | Lineage audit CI | ✓ | | | ✓ | ✓ | | ✓ |
49
+ | Capability | docs-qa | code-graph | pr-review | soc-triage | regwatch | support-veto | pv-cm | cve-rem |
50
+ |---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
51
+ | DocStore | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
52
+ | VectorStore | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
53
+ | GraphStore | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
54
+ | FactStore | | | | ✓ | ✓ | ✓ | ✓ | ✓ |
55
+ | MemoryStore | | | | ✓ | | ✓ | ✓ | ✓ |
56
+ | RAG / autoresearch | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
57
+ | RetrievalNode (RRF) | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
58
+ | MLNode + sha256 weights | | | | ✓ | | | ✓ | ✓ |
59
+ | DSPy adapter | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
60
+ | MCP adapter | | | | | | | ✓ | ✓ |
61
+ | Fathom + harbor_action | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
62
+ | Bosun signed packs | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
63
+ | InterruptAction (HITL) | | | | ✓ | | ✓ | ✓ | ✓ |
64
+ | Cron trigger | | | | | ✓ | | ✓ | ✓ |
65
+ | Webhook trigger | | | ✓ | ✓ | | | ✓ | ✓ |
66
+ | Provenance bundle | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
67
+ | BLAKE3 artifacts | ✓ | | | ✓ | ✓ | ✓ | ✓ | ✓ |
68
+ | Ed25519 audit | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
69
+ | Checkpoint (sqlite/pg) | | ✓ | | ✓ | | ✓ | ✓ | ✓ |
70
+ | Counterfactual replay | | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
71
+ | Air-gap variant | | | | | ✓ | | ✓ | ✓ |
72
+ | harbor.serve API | | | | ✓ | | ✓ | ✓ | ✓ |
73
+ | mTLS + capabilities | | | | ✓ | | ✓ | ✓ | ✓ |
74
+ | KG promotion (memory) | | | | | | | ✓ | ✓ |
75
+ | Cypher subset linter | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
76
+ | Lineage audit CI | ✓ | | | ✓ | ✓ | | ✓ | ✓ |
77
+ | Multi-runtime sandbox | | | | | | | | ✓ |
78
+ | Progressive rollout (canary→fleet) | | | | | | | | ✓ |
79
+ | Triggered safety graphs (5×) | | | | | | | | ✓ |
80
+ | Audit-chain anchor (JWS) | | | | | | | | ✓ |
81
+ | GEPA + Shamir ship ceremony | | | | | | | | ✓ |
@@ -0,0 +1,166 @@
1
+ # cve-remediation graph scaffold
2
+
3
+ Harbor IR scaffold for the CVE remediation pipeline (v6, P0+P1+P2+P3 applied).
4
+
5
+ Design:
6
+ - Spec: [`../cve-rem-graph.md`](../cve-rem-graph.md) (v6, definitive).
7
+ - Source notes: [`../cve-rem-pipeline.md`](../cve-rem-pipeline.md).
8
+ - Earlier draft: [`../pipeline-graph.md`](../pipeline-graph.md) (v5).
9
+
10
+ ## Layout
11
+
12
+ ```
13
+ graph/
14
+ harbor.yaml parent IR — Phase 1..5 (steps 1-18)
15
+ state.py CveRemState pydantic schema
16
+ nodes/ production-wiring slot
17
+ rules/README.md custom rule packs referenced by IRs
18
+ subgraphs/
19
+ sandbox_dispatch.yaml step 11 — branched sandbox runtime
20
+ progressive_execute.yaml step 13 — canary -> stage -> fleet
21
+ triggered/ spawned independently by triggers
22
+ drift_watch.yaml step 15 — 24-72h passive watch
23
+ tier_re_eval.yaml hourly cron; re-fires SSVC on TRACK/DEFER
24
+ audit_anchor.yaml daily 03:00 UTC; chain head -> Nautilus JWS
25
+ lab_leak_reaper.yaml hourly cron; sweeps expired CargoNet labs
26
+ rolling_restart.yaml webhook (post-Shamir) + weekly cron
27
+ phase0/
28
+ doctrine_ingest.yaml one-shot doctrine load + manifest sign (idempotent)
29
+ phase6/
30
+ offline_learning.yaml network-isolated GEPA + Shamir + ship
31
+ tests/
32
+ test_smoke.py IR load / routing / structural checks
33
+ ```
34
+
35
+ ## Why split
36
+
37
+ | boundary | rationale |
38
+ | ----------------------------- | ------------------------------------------------------------ |
39
+ | main vs phase 0 | bootstrap cadence; runs once per corpus version-pin bump |
40
+ | main vs phase 6 | network isolation boundary (firewall-enforced) |
41
+ | main vs sub-graph | tightly-bound child workflows (probe, rollout) |
42
+ | main vs triggered | independent cadences (drift watch, cron sweeps, signals) |
43
+
44
+ ## Sandbox runtime selection
45
+
46
+ Deterministic — not LLM-driven. `sandbox_dispatch` reads `vuln_class` from
47
+ extractor output and sets `sandbox_runtime`:
48
+
49
+ | `vuln_class` | runtime | branch |
50
+ | ----------------------------------------------------------------- | -------------------- | ------ |
51
+ | `network-protocol / routing / switching / firewall / ipsec / bgp`| `cargonet_lab` | 11a |
52
+ | `application / library / web-framework / container / host-os-pkg`| `docker_compose` | 11b |
53
+ | `config-only / cipher-suite / tls-policy / acl-rule` | `static_detection` | 11c |
54
+ | `logic-flaw / business-rule / no-probe` | `skip` (forces HITL) | 11d |
55
+
56
+ ## HITL gates
57
+
58
+ 4 durable-wait gates. All set `timeout: null` (Temporal `wait_condition`
59
+ semantics — durable, zero CPU during wait, never auto-deny). Each gate is
60
+ followed by a `branch_resp_<gate>` passthrough that pattern-matches
61
+ `(response (decision approve|reject|approve_replan))` and routes:
62
+
63
+ | gate | approve | reject | approve_replan |
64
+ | ----------------------------- | ---------------------------------- | --------------------------------------- | ----------------------- |
65
+ | `hitl_ingest_review` | `correlate_assets` | halt (quarantine artifact retained) | — |
66
+ | `hitl_plan_review` | `validate_dispatch` | halt (pipeline aborted) | `mcp_retrieval_dispatch` |
67
+ | `hitl_change_approval` | `progressive_execute` | halt (nothing applied to prod) | — |
68
+ | `hitl_retrospective_review` | `action_done` (cmdb_match=true) | `action_done` (cmdb_match=false; GEPA) | — |
69
+
70
+ Sandbox-fail (`r-sandbox-fail-replan`) routes to `hitl_plan_review` —
71
+ re-plan only via human approval.
72
+
73
+ ## Parallel fan-outs
74
+
75
+ | rule | targets | join |
76
+ | --------------------- | ------------------------------------------------------------------ | --------------------- |
77
+ | `r-mcp-fanout` | 5 retrieval tools (vec_search_retros, graph_priors, blast, framework, cargonet_telemetry) | `planner` |
78
+ | `r-validate-fanout` | `judge_safety`, `judge_lint` | `validate_plan_join` |
79
+ | `r-retro-fanout` | `publish_docplus`, `cargonet_writeback`, `plan_kg_writeback` | `retro_join` |
80
+
81
+ ## Artifacts emitted
82
+
83
+ Main pipeline writes 6 ArtifactRefs across the run:
84
+
85
+ | node | artifact |
86
+ | ----------------------------- | ----------------------------------------------------------------- |
87
+ | `emit_quarantine_artifact` | raw untrusted text + canonicalized pair |
88
+ | `emit_remediation_bundle` | apply / rollback / verify / metadata 4-tuple per runtime |
89
+ | `emit_sandbox_evidence` | probe traces, Batfish diffs, container logs |
90
+ | `emit_evidence_bundle` | plan + bundles + sandbox + JWS chain + Reflexion + recon_anomaly |
91
+ | `emit_retro_payload` | retro record bytes |
92
+ | `emit_docx_archive` | DOCX summary (also serves as Doc+ staging) |
93
+
94
+ Phase 0 emits `emit_manifest_artifact`. Phase 6 emits `emit_redacted_corpus`
95
+ + `emit_compiled_artifact`. Triggered graphs emit summary artifacts
96
+ (`emit_re_eval_summary`, `emit_anchor_receipt`, `emit_reaper_summary`,
97
+ `emit_restart_summary`, `emit_rollback_record`).
98
+
99
+ ## Node kinds
100
+
101
+ | kind | usage in main |
102
+ | ---------------- | -------------------------------------------------------------------------- |
103
+ | `passthrough` | branching/dispatch helpers, sub-state mutators |
104
+ | `broker` | external calls via Nautilus (Nautobot, CMDB, ServiceNow, Doc+, CargoNet, Harbor `/v1/runs` for drift_watch_spawn) |
105
+ | `dspy` | extractor, classifier, critique, planner, code_writer, critic, render_docx |
106
+ | `tool` | Fathom checks, runtime lints (ansible/k8s/tf/sbom/vendor), gNMI, Batfish, redis Reflexion buffer, Ed25519, sha256, TEI |
107
+ | `ml` | (used in triggered drift_watch.yaml + phase6 score_on_holdout) |
108
+ | `write_artifact` | 6 artifact emissions above |
109
+ | `interrupt` | 4 HITL gates |
110
+ | `subgraph` | sandbox_dispatch + progressive_execute |
111
+
112
+ ## Triggers (declared outside IR)
113
+
114
+ | graph | trigger spec |
115
+ | -------------------- | ----------------------------------------------------- |
116
+ | `harbor.yaml` | webhook (Nautilus CVE feed event) + manual |
117
+ | `phase0/...` | manual + cron (corpus-pin-bump check) |
118
+ | `phase6/...` | cron (weekly Phase-2 / nightly Phase-3+; isolated host) |
119
+ | `triggered/drift_watch` | webhook (parent emits) + cron (orphan-sweep) |
120
+ | `triggered/tier_re_eval` | cron (hourly default) |
121
+ | `triggered/audit_anchor` | cron (daily 03:00 UTC) |
122
+ | `triggered/lab_leak_reaper` | cron (hourly) |
123
+ | `triggered/rolling_restart` | webhook (artifact_ready) + cron (Sun 04:00 UTC) + manual |
124
+
125
+ ## Rule packs (custom, contents stubs)
126
+
127
+ | pack | mounted by |
128
+ | ----------------------------- | ----------------------------------- |
129
+ | `cve_rem.routing` | main |
130
+ | `cve_rem.kill_switches` | main |
131
+ | `cve_rem.doctrine_trust` | phase0 |
132
+ | `cve_rem.offline_isolation` | phase6 |
133
+ | `cve_rem.gepa_score_policy` | phase6 |
134
+
135
+ ## Stores
136
+
137
+ | protocol | provider | use |
138
+ | ------------- | ------------ | -------------------------------------------------------------------- |
139
+ | `VectorStore` | `lancedb` | TEI embeddings: CVE text, doctrine corpus, retros similarity |
140
+ | `GraphStore` | `ryugraph` | Asset-KG + Plan-KG + Doctrine-KG + Retrospective-KG |
141
+ | `DocStore` | `sqlite` | canonicalized records, doctrine docs, DOCX staging |
142
+ | `MemoryStore` | `redis` | Reflexion episodic buffer (per CWE-class, cross-class similarity) |
143
+ | `FactStore` | `sqlite` | CLIPS-mirrored facts at node-exit; provenance-typed |
144
+
145
+ ## Run smoke tests
146
+
147
+ ```bash
148
+ uv run python -m pytest demos/cve-remediation/graph/tests/test_smoke.py -v
149
+ ```
150
+
151
+ 41 tests, all structural — should pass on a clean checkout with no
152
+ external services.
153
+
154
+ ## What this scaffold does NOT yet include
155
+
156
+ - Real node implementations. Many nodes carry the right `kind` label but
157
+ the runtime substitutes contextvar-bound stubs at run time per the
158
+ `tests/fixtures/cve_triage.yaml` validation-gate POC pattern.
159
+ Production wiring lands per-phase as nodes harden.
160
+ - Custom Fathom rule pack contents. Pack ids are referenced; `pack.yaml`
161
+ files are the next deliverable.
162
+ - End-to-end execution. Smoke tests cover IR-load + structural-hash
163
+ stability + routing-target resolution + phase coverage + multi-kind
164
+ invariant + parallel-action + artifact-emission + branch_resp +
165
+ durable-wait + sandbox-fail-replan + idempotency + triggered-graph
166
+ presence.
@@ -0,0 +1,83 @@
1
+ # Rule packs for cve-remediation
2
+
3
+ 5 custom packs supplement the 4 mandatory Bosun packs (`budgets`,
4
+ `audit`, `safety_pii`, `retries`) mounted on the IRs.
5
+
6
+ | pack | flavor | mounted by | files |
7
+ | ----------------------------- | ------------ | ------------------------- | ------------------------------------------ |
8
+ | `cve_rem.routing` | routing | main `harbor.yaml` | `pack.yaml` |
9
+ | `cve_rem.kill_switches` | governance | main `harbor.yaml` | `manifest.yaml`, `rules.clp`, `__init__.py` |
10
+ | `cve_rem.doctrine_trust` | governance | `phase0/doctrine_ingest.yaml` | `manifest.yaml`, `rules.clp`, `__init__.py` |
11
+ | `cve_rem.offline_isolation` | governance | `phase6/offline_learning.yaml` | `manifest.yaml`, `rules.clp`, `__init__.py` |
12
+ | `cve_rem.gepa_score_policy` | governance | `phase6/offline_learning.yaml` | `manifest.yaml`, `rules.clp`, `__init__.py` |
13
+
14
+ ## Routing vs governance
15
+
16
+ - **Routing packs** (YAML inline rules) supplement IR routing. They emit
17
+ `goto` / `assert` actions to add context-sensitive behavior without
18
+ changing the inline topology. Loaded as flavor `routing`.
19
+ - **Governance packs** (CLIPS) enforce invariants. They consume facts
20
+ asserted by graph rules / external probes / RBAC-gated CLI and emit
21
+ `bosun.violation` (severity `halt`) when policy is breached. The
22
+ runtime auto-fires the appropriate Temporal kill-switch on
23
+ halt-severity violations.
24
+
25
+ ## What each pack does
26
+
27
+ ### `cve_rem.routing`
28
+ - Tier escalation overlays — auto-escalate TRACK/DEFER on EPSS spike
29
+ or KEV listing flip.
30
+ - Template-lookup ranking — weighted success × recency for multi-hit.
31
+ - Code-runtime preference — deterministic pick when extractor returns
32
+ multiple candidates.
33
+ - Defer-window computation — EPSS-inverse mapping to days.
34
+ - Reflexion cross-CWE fallback — sibling-class buffer entries.
35
+ - Sandbox-runtime override for air-gapped environments.
36
+
37
+ ### `cve_rem.kill_switches`
38
+ - Error-budget rules: rollback-rate >5%/24h, sandbox-mismatch >3%/24h,
39
+ cross-bucket plan reuse, stuck-state >14d (informational page).
40
+ - Signal RBAC for `halt-new` and `halt-pause-in-flight` (single-signer
41
+ roles: pipeline-owner OR security-eng).
42
+ - 2-of-3 quorum collection for `halt-rollback-in-flight` (3 rules,
43
+ one per role pair: PO+SE, PO+NO, SE+NO).
44
+
45
+ ### `cve_rem.doctrine_trust`
46
+ - Source-class policy — only trusted-doctrine sources may bypass
47
+ injection classifier on Phase 0.
48
+ - Manifest-hash allowlist enforcement — active doctrine manifest hash
49
+ must be in boot-gate allowlist.
50
+ - Pin sha256 immutability — same `corpus_version_pin` with divergent
51
+ sha256 across two source facts is a supply-chain compromise signal.
52
+ - Deactivated-manifest refusal.
53
+
54
+ ### `cve_rem.offline_isolation`
55
+ - No inbound from production zone (Phase 6 host).
56
+ - Egress only to `approved-drop` zone (signed prompts.tar drop).
57
+ - Replica load requires non-empty `redaction_pack_hash`.
58
+ - Replica `redaction_pack_hash` must match the currently-active signed
59
+ redaction pack.
60
+
61
+ ### `cve_rem.gepa_score_policy`
62
+ - Score-component range check (`[0,1]`); halt on out-of-range.
63
+ - Weighted score computation: `0.35*validation + 0.25*sandbox +
64
+ 0.15*cr_approved + 0.15*no_drift_7d + 0.10*no_rollback_30d`.
65
+ - Strictly-better epsilon-margin gate; emits `gepa_decision` accept/reject.
66
+ - Refuses Shamir ceremony on a rejected artifact.
67
+
68
+ ## JWT signing
69
+
70
+ `manifest.jwt` files are NOT included in the scaffold. The deploy-time
71
+ `krakntrust` signing pipeline produces them from `manifest.yaml` +
72
+ `rules.clp` and the production signer key. For development, the
73
+ runtime accepts unsigned packs from a configured dev-allowlist; for
74
+ production all 5 packs are loaded only after their JWTs verify against
75
+ the boot-gate trust root.
76
+
77
+ ## Tests
78
+
79
+ ```bash
80
+ uv run python -m pytest demos/cve-remediation/graph/tests -v
81
+ ```
82
+
83
+ 74 tests total: 41 IR/graph structural + 33 pack structural.