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.
- stargraph-0.3.1/.gitignore +38 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/CHANGELOG.md +39 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/PKG-INFO +13 -8
- {stargraph-0.2.2 → stargraph-0.3.1}/README.md +5 -5
- {stargraph-0.2.2 → stargraph-0.3.1}/demos/README.md +34 -28
- stargraph-0.3.1/demos/cve-remediation/graph/README.md +166 -0
- stargraph-0.3.1/demos/cve-remediation/graph/rules/README.md +83 -0
- stargraph-0.3.1/demos/cve-remediation/graph/tests/test_packs.py +170 -0
- stargraph-0.3.1/demos/cve-remediation/graph/tests/test_smoke.py +310 -0
- stargraph-0.3.1/demos/everything-demo/README.md +154 -0
- stargraph-0.3.1/demos/everything-demo/graph/tests/test_smoke.py +252 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/pyproject.toml +63 -15
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/__init__.py +26 -5
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/adapters/mcp.py +19 -1
- stargraph-0.3.1/src/harbor/bosun/shipwright/__init__.py +2 -0
- stargraph-0.3.1/src/harbor/bosun/shipwright/edits/__init__.py +2 -0
- stargraph-0.3.1/src/harbor/bosun/shipwright/edits/manifest.yaml +7 -0
- stargraph-0.3.1/src/harbor/bosun/shipwright/edits/rules.clp +39 -0
- stargraph-0.3.1/src/harbor/bosun/shipwright/gaps/__init__.py +2 -0
- stargraph-0.3.1/src/harbor/bosun/shipwright/gaps/manifest.yaml +7 -0
- stargraph-0.3.1/src/harbor/bosun/shipwright/gaps/rules.clp +75 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/sqlite.py +45 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_inputs.py +36 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_progress.py +15 -7
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_prompts.py +12 -18
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/_summary.py +18 -12
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/inspect.py +21 -4
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/run.py +289 -35
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/serve.py +91 -1
- stargraph-0.3.1/src/harbor/config/__init__.py +24 -0
- stargraph-0.3.1/src/harbor/config/triggers.py +229 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/errors/_hierarchy.py +3 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/definition.py +64 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/run.py +7 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/__init__.py +4 -0
- stargraph-0.3.1/src/harbor/ir/_backfill.py +52 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_models.py +66 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_validate.py +113 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_versioning.py +1 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/artifacts/write_artifact_node.py +76 -47
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/nautilus/schemas.py +2 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/retrieval.py +1 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/hookspecs.py +27 -22
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/loader.py +1 -0
- stargraph-0.3.1/src/harbor/plugin/types.py +148 -0
- stargraph-0.3.1/src/harbor/replay/cassettes.py +158 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/dispatch.py +65 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/ir-v1-draft7.json +76 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/ir-v1.json +76 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/manifest-v1.json +3 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/tool-v1.json +28 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/api.py +5 -11
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/lifecycle.py +4 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/respond.py +1 -1
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/scheduler.py +168 -38
- stargraph-0.3.1/src/harbor/serve/topology.py +245 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/__init__.py +6 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/graph.yaml +169 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/harbor.yaml +32 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/manifest.yaml +8 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/__init__.py +2 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/basic.py +62 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/classify.py +71 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/docs.py +36 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/inspector.py +32 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/join.py +44 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/receive.py +30 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/nodes/shipwright_gate.py +32 -0
- stargraph-0.3.1/src/harbor/skills/ai_builder/state.py +48 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/_pack.py +66 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/graph.yaml +109 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/harbor.yaml +45 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/manifest.yaml +7 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/nodes/fix.py +57 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/nodes/interview.py +136 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/nodes/parse.py +49 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/nodes/synthesize.py +69 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/nodes/triage.py +23 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/nodes/verify.py +172 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/state.py +88 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/templates/harbor.yaml.j2 +22 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/templates/state.py.j2 +23 -0
- stargraph-0.3.1/src/harbor/skills/shipwright/templates/test_smoke.py.j2 +19 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/__init__.py +35 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_common.py +6 -1
- stargraph-0.3.1/src/harbor/stores/cypher.py +254 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/graph.py +10 -9
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/kg_promotion.py +2 -2
- stargraph-0.3.1/src/harbor/stores/rerankers.py +219 -0
- stargraph-0.2.2/src/harbor/stores/kuzu.py → stargraph-0.3.1/src/harbor/stores/ryugraph.py +49 -37
- stargraph-0.3.1/src/harbor/tools/cargonet/__init__.py +34 -0
- stargraph-0.3.1/src/harbor/tools/cargonet/exec_node.py +155 -0
- stargraph-0.3.1/src/harbor/tools/servicenow/__init__.py +60 -0
- stargraph-0.3.1/src/harbor/tools/servicenow/_auth.py +62 -0
- stargraph-0.3.1/src/harbor/tools/servicenow/cmdb_query_software.py +107 -0
- stargraph-0.3.1/src/harbor/tools/servicenow/cmdb_resolve_hosts.py +92 -0
- stargraph-0.3.1/src/harbor/tools/servicenow/cmdb_traverse_runs_on.py +107 -0
- stargraph-0.3.1/src/harbor/tools/servicenow/create_change_request.py +232 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/manual.py +4 -6
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/conftest.py +52 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_hitl.py +52 -20
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_lifecycle.py +3 -9
- stargraph-0.3.1/tests/integration/cli/test_run_lm_flags.py +165 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_summary.py +6 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_api_runs_lifecycle.py +26 -14
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_nautilus_upgrade_path.py +4 -4
- stargraph-0.3.1/tests/integration/serve/test_post_runs_real_engine.py +108 -0
- stargraph-0.3.1/tests/integration/shipwright/conftest.py +57 -0
- stargraph-0.3.1/tests/integration/shipwright/test_e2e_new_graph.py +94 -0
- stargraph-0.3.1/tests/integration/shipwright/test_e2e_with_ollama.py +102 -0
- stargraph-0.3.1/tests/integration/shipwright/test_edits_pack.py +57 -0
- stargraph-0.3.1/tests/integration/shipwright/test_fix_loop.py +44 -0
- stargraph-0.3.1/tests/integration/shipwright/test_gap_check.py +36 -0
- stargraph-0.3.1/tests/integration/shipwright/test_gaps_pack.py +77 -0
- stargraph-0.3.1/tests/integration/shipwright/test_graph_yaml.py +92 -0
- stargraph-0.3.1/tests/integration/shipwright/test_parse_brief.py +40 -0
- stargraph-0.3.1/tests/integration/shipwright/test_propose_questions.py +48 -0
- stargraph-0.3.1/tests/integration/shipwright/test_run_yaml_with_ollama.py +108 -0
- stargraph-0.3.1/tests/integration/shipwright/test_state.py +79 -0
- stargraph-0.3.1/tests/integration/shipwright/test_synthesize_graph.py +57 -0
- stargraph-0.3.1/tests/integration/shipwright/test_topology.py +38 -0
- stargraph-0.3.1/tests/integration/shipwright/test_triage.py +30 -0
- stargraph-0.3.1/tests/integration/shipwright/test_verify_smoke.py +49 -0
- stargraph-0.3.1/tests/integration/shipwright/test_verify_static.py +61 -0
- stargraph-0.3.1/tests/integration/shipwright/test_verify_tests.py +64 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_custom_store_provider.py +2 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cypher_subset.py +5 -5
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cypher_write_keyword_scan.py +2 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_dspy_loud_fallback.py +30 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_health_warns_on_nfs.py +3 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_kg_fact_promotion_rule.py +4 -4
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_kg_promotion_counterfactual.py +3 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_knowledge_phase3_ve.py +2 -2
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_knowledge_phase5_final.py +4 -4
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_knowledge_poc_e2e.py +3 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mcp_stdio_adapter.py +37 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_promotion_one_way.py +4 -4
- 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
- stargraph-0.2.2/tests/integration/test_kuzu_provider.py → stargraph-0.3.1/tests/integration/test_ryugraph_provider.py +13 -13
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_single_writer_serialization.py +4 -4
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_walk_vs_trail_documented.py +12 -12
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_knowledge_perf.py +3 -3
- stargraph-0.3.1/tests/unit/cli/test_run_live_broker.py +126 -0
- stargraph-0.3.1/tests/unit/cli/test_subgraph_builder.py +112 -0
- stargraph-0.3.1/tests/unit/config/test_triggers.py +228 -0
- stargraph-0.3.1/tests/unit/replay/__init__.py +0 -0
- stargraph-0.3.1/tests/unit/serve/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_scheduler.py +9 -7
- stargraph-0.3.1/tests/unit/serve/test_topology.py +357 -0
- stargraph-0.3.1/tests/unit/test_cross_encoder_reranker.py +176 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_cypher_linter_allowlist.py +15 -3
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_graphstore_expand_bounds.py +5 -5
- stargraph-0.3.1/tests/unit/test_ir_backfill.py +145 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_validate.py +141 -0
- stargraph-0.3.1/tests/unit/test_node_cassette.py +283 -0
- stargraph-0.3.1/tests/unit/test_node_kind_resolution.py +86 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_plugin_loader.py +2 -1
- stargraph-0.3.1/tests/unit/test_pyproject_ryugraph_pin.py +57 -0
- stargraph-0.3.1/tests/unit/test_registry_compatible_with.py +91 -0
- 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
- stargraph-0.3.1/tests/unit/test_state_class.py +104 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_store_protocols_isinstance.py +3 -3
- stargraph-0.3.1/tests/unit/tools/__init__.py +0 -0
- stargraph-0.3.1/tests/unit/tools/test_servicenow_create_change_request.py +232 -0
- stargraph-0.3.1/tests/unit/triggers/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/triggers/test_manual.py +17 -4
- stargraph-0.2.2/.gitignore +0 -26
- stargraph-0.2.2/src/harbor/replay/cassettes.py +0 -84
- stargraph-0.2.2/src/harbor/stores/cypher.py +0 -112
- stargraph-0.2.2/src/harbor/stores/rerankers.py +0 -86
- stargraph-0.2.2/tests/unit/test_pyproject_kuzu_pin.py +0 -49
- stargraph-0.2.2/tests/unit/test_registry_compatible_with.py +0 -44
- {stargraph-0.2.2 → stargraph-0.3.1}/.shipwright-out/tests/test_smoke.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/LICENSE +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/adapters/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/adapters/dspy.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/artifacts/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/artifacts/base.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/artifacts/fs.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/audit/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/audit/jsonl.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/dev-bosun-6c367049.pub.pem +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/manifest.jwt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/manifest.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/audit/rules.clp +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/dev-bosun-6c367049.pub.pem +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/manifest.jwt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/manifest.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/budgets/rules.clp +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/dev-bosun-6c367049.pub.pem +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/manifest.jwt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/manifest.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/retries/rules.clp +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/dev-bosun-6c367049.pub.pem +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/manifest.jwt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/manifest.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/safety_pii/rules.clp +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/bosun/signing.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/_clips.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/_codec.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/_m001_initial.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/_m002_run_history.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/migrations/_network_fs.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/postgres.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/checkpoint/protocol.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/counterfactual.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/replay.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/respond.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/cli/simulate.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/errors/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_action.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_adapter.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_provenance.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/fathom/_template.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/hash.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/graph/loop.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_dumps.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_ids.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_migrate.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ir/_mirror.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/logging/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/logging/_config.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/logging/_context.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ml/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ml/loaders.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/ml/registry.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/artifacts/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/base.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/dspy.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/interrupt/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/interrupt/interrupt_node.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/memory.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/ml.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/nautilus/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/nautilus/broker_node.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/nodes/subgraph.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/_config.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/_manifest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/_markers.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/plugin/triggers_dispatcher.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/registry/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/registry/stores.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/registry/tools.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/compare.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/counterfactual.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/determinism.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/history.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/replay/react_cassette.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/action.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/bus.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/events.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/merge.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/mirror_lifecycle.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/parallel.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/runtime/tool_exec.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/schemas/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/security/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/security/capabilities.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/auth.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/broadcast.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/contextvars.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/history.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/inspect.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/openapi.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/profiles.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/serve/ratelimit.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/base.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/react.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/autoresearch.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/rag.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/refs/wiki.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/skills/salience.py +0 -0
- {stargraph-0.2.2/tests/integration/cli → stargraph-0.3.1/src/harbor/skills/shipwright}/__init__.py +0 -0
- {stargraph-0.2.2/tests/integration/serve → stargraph-0.3.1/src/harbor/skills/shipwright/nodes}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_delta.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_rerank_loader.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/_sqlite_base.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/doc.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/embeddings.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/fact.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/lancedb.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/memory.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/sqlite_doc.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/sqlite_fact.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/sqlite_memory.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/stores/vector.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/decorator.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/nautilus/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/nautilus/broker_request.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/tools/spec.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/cron.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/src/harbor/triggers/webhook.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/100-node-ir.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cassettes/react_test_run/llm/.gitkeep +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cli/hitl-graph.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_cf_diffs/broker_mutation_diff.txt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_cf_diffs/respond_rejection_diff.txt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_feeds/README.md +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_feeds/kev_sample.csv +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_feeds/nvd_sample.json +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage_no_nautilus.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage_real_nautilus.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/cve_triage_stub_broker.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/dspy-cassette.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/fathom/rules/poc_5rules.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/ir/canonical/full.json +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/ir/canonical/minimal.json +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/mutation.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/nautilus/policy.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/nautilus_stub.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/onnx_minimal.onnx +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/pii_corpus.txt +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_alpha/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_alpha/manifest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_alpha/tools.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_beta/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_beta/manifest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_beta/skills.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_knowledge/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/plugins/plugin_knowledge/manifest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph-phase3.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph-phase4.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph-phase5.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample-graph.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sample_state.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/skills/autoresearch/example.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/skills/rag/example.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/skills/wiki/example.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/sklearn_minimal.joblib +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/stub_mcp_server.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/training-subgraph.yaml +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/fixtures/xgboost_minimal.ubj +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/_helpers.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_audit_pack.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_budgets_pack.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_retries_pack.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/bosun/test_safety_pii_pack.py +0 -0
- {stargraph-0.2.2/tests/migration → stargraph-0.3.1/tests/integration/cli}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/conftest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_hitl_fixture.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_inputs.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/cli/test_run_progress.py +0 -0
- {stargraph-0.2.2/tests/unit/artifacts → stargraph-0.3.1/tests/integration/serve}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_air_gap_install.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_artifacts_endpoints.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_cancel_pause.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_capability_deny.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_counterfactual_broker_mutation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_counterfactual_respond_rejection.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_cron_soak.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_cve_triage_e2e.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_hitl_respond.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_nautilus_composition.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_nfs_refusal.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_pack_signing_eddsa_strict.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_pack_signing_perf.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_poc_cancel_pause.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_poc_milestone_six_events.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_poc_three_node_graph.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_profile_default_deny.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_profiles_matrix.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_replay_isolation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_safety_pii_patterns.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_streaming_backpressure_serve.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_tampered_manifest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_trigger_isolation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_websocket_disconnect_overflow.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/serve/test_websocket_stream.py +0 -0
- {stargraph-0.2.2/tests/unit/bosun → stargraph-0.3.1/tests/integration/shipwright}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_autoresearch_provenance_end_to_end.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_autoresearch_reference_skill.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_branch_lifecycle_facts.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_capability_default_deny.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cli_counterfactual.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cli_inspect.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_cli_run.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_clips_facts_roundtrip.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_cadence_batch.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_cadence_streaming.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_provenance_lineage.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_salience_gating.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_consolidation_typed_delta.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_counterfactual_diff.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_counterfactual_e2e.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_counterfactual_invariant.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_determinism_shim.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_dspy_adapter_basic.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_dspy_bind.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_embed_hash_drift_gate.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_episodic_widening_read.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_factstore_fathom_provenance.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_hybrid_search_rrf.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_interrupt_timeout.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_jsonl_audit_log.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_lancedb_provider.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_lancedb_versioning_checkpoint.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_memory_write_node.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_migrate_add_column.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_minilm_offline_load.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_ml_pickle_safety.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mlnode_onnx_session_reuse.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mlnode_sklearn.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_mlnode_xgboost.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_nautilus_yaml_fit.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_parallel_cancellation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_parallel_taskgroup.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_poc_smoke.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_postgres_checkpointer.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_rag_reference_skill.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_react_replay_input_checked.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_react_skill_tool_loop.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_react_termination_rules.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_replay_determinism_sweep.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_replay_safety_enforcement.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_resume_from_step.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_resume_hash_mismatch.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_resume_latest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_retrieval_node_emits_transition_facts.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_retrieval_node_parallel_fanout.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_retrieval_node_rrf_fusion.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_runtime_loop.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_salience_protocol_swap.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_skill_event_bubbling.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_skill_subgraph_replay.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_skill_topology_change_refuses_replay.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_checkpointer.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_docstore.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_factstore.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_sqlite_memorystore.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_streaming_backpressure.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_subgraph_node.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_tool_execution_path.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_training_subgraph_example.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_value_bearing_fact_taxonomy.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_vcr_cassettes.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_wiki_consumes_autoresearch.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/integration/test_wiki_reference_skill.py +0 -0
- {stargraph-0.2.2/tests/unit/cli → stargraph-0.3.1/tests/migration}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/migration/test_foundation_v0_1_to_engine_v0_2.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_nautilus_workload.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_per_node_overhead.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_sqlite_checkpoint.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/perf/test_structural_hash_perf.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_cypher_linter_idempotent.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_ir_roundtrip.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_jcs_canonical.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_merge_strategy_associativity.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_provenance_roundtrip.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_rrf_fusion_idempotent.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_salience_formula_bounds.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_salience_recency_monotone.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_slot_regex_evasion.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/property/test_structural_hash_jcs_stable.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/regression/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/regression/pydantic_issues.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_determinism_sweep.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_must_stub_policy.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_react_must_stub_llm.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/replay/test_replay_determinism.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/__init__.py +0 -0
- {stargraph-0.2.2/tests/unit/nodes → stargraph-0.3.1/tests/unit/artifacts}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/artifacts/test_fs.py +0 -0
- {stargraph-0.2.2/tests/unit/replay → stargraph-0.3.1/tests/unit/bosun}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_pack_scaffold.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_signing.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_signing_roundtrip.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/bosun/test_tofu.py +0 -0
- {stargraph-0.2.2/tests/unit/serve → stargraph-0.3.1/tests/unit/cli}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_inspect.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_replay.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_respond.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/cli/test_serve_profile_gate.py +0 -0
- {stargraph-0.2.2/tests/unit/tools → stargraph-0.3.1/tests/unit/config}/__init__.py +0 -0
- {stargraph-0.2.2/tests/unit/triggers → stargraph-0.3.1/tests/unit/nodes}/__init__.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/nodes/test_broker_node.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/replay/test_respond_payloads.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/replay/test_waiting_for_input_replay.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_auth.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_broker_singleton.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/serve/test_profiles.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_action_vocabulary.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_capabilities.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_capability_string_binding.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_check_pack_compat.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_checkpoint_protocol.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_confidence_decay_formula.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_counterfactual_mutation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_cypher_linter_banlist.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_cypher_linter_unbounded_varlength_rejected.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_derived_graph_hash.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_embed_hash_payload.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_env_interpolation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_errors.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_errors_walker.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_event_vocabulary.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_fathom_adapter.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_fathom_provenance.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_foundation_extensions.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_graph_definition.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_graph_run.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_dumps.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_dumps_walker.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_ids.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_mirror.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_models.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_portable_subset_annotated_unions.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_portable_subset_jschema_extra.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_ir_portable_subset_pep695_float.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_logging.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_memorydelta_validation.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_memorystore_trailing_separator.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_merge_strategy_registry.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_migrate_rejects_narrows.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_minilm_sha256_pin.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_minilm_token_clip_256.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_mirror_lifecycle.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_model_registry.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_no_fastembed_import.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_pack_requires.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_pack_requires_hash.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_plugin_import_tracing.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_plugin_manifest.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_provenance_ast_walker.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_provenance_enforcer.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_race_side_effect_check.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_register_skills_hook.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_register_stores_hook.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_registry.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_reranker_entrypoint.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_retrieval_node_no_cross_store_reembed.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_rule_based_salience.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_salience_protocol.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_serve_websocket_resume.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_simulate.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skill_base_class.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skill_compile_rejects_undeclared_output.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skill_site_id_deterministic.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skills_entrypoint.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_skills_in_tree_packaging.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_state_schema_load.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_store_config_schema.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_store_protocols.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/test_tool_decorator.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/tools/test_broker_request_tool.py +0 -0
- {stargraph-0.2.2 → stargraph-0.3.1}/tests/unit/triggers/test_cron.py +0 -0
- {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.
|
|
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.
|
|
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
|
-
#
|
|
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.
|
|
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` (
|
|
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 /
|
|
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,
|
|
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
|
-
#
|
|
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.
|
|
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` (
|
|
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 /
|
|
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,
|
|
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.
|