generated from coulomb/repo-seed
Add profile-driven runtime adapter resolution
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from phase_memory.models import LifecycleState, MemoryNode
|
||||
from phase_memory.service import (
|
||||
HEALTH_REPORT_SCHEMA,
|
||||
@@ -15,9 +18,17 @@ from phase_memory.service import (
|
||||
default_conformance_adapters,
|
||||
health_report,
|
||||
kontextual_delegation_envelope,
|
||||
resolve_runtime_adapters,
|
||||
runtime_from_config,
|
||||
service_contracts,
|
||||
)
|
||||
|
||||
FIXTURES = Path(__file__).parent / "fixtures"
|
||||
|
||||
|
||||
def _load(name: str):
|
||||
return json.loads((FIXTURES / name).read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def test_service_contracts_list_runtime_operations() -> None:
|
||||
contracts = service_contracts()
|
||||
@@ -47,6 +58,61 @@ def test_service_runner_handles_health() -> None:
|
||||
assert response["ok"] is True
|
||||
|
||||
|
||||
def test_profile_driven_runtime_config_resolves_file_backed_adapters(tmp_path) -> None:
|
||||
config = RuntimeConfig.from_profile(
|
||||
{
|
||||
"schema_version": "markitect.memory.profile.v1",
|
||||
"id": "profile.config",
|
||||
"stores": {
|
||||
"graph_store": "file",
|
||||
"event_log": "jsonl",
|
||||
},
|
||||
"activation": {"semantic_index": "memory"},
|
||||
"policy": {"mode": "allow-all", "trust_zones": ["local", "team"]},
|
||||
"observability": {"audit_sink": "jsonl", "runtime_registry": "memory"},
|
||||
"metadata": {"runtime": {"local_store_path": str(tmp_path / "memory-store")}},
|
||||
}
|
||||
)
|
||||
|
||||
bundle = resolve_runtime_adapters(config)
|
||||
runtime = runtime_from_config(config)
|
||||
runtime.graph_store.save_node(MemoryNode("node.config", "decision", "Config-driven node"))
|
||||
|
||||
assert config.adapter_mode("graph_store") == "file"
|
||||
assert config.adapter_mode("event_log") == "jsonl"
|
||||
assert config.trust_zone_labels == ("local", "team")
|
||||
assert bundle.to_dict()["graph_store"] == "FileBackedMemoryGraphStore"
|
||||
assert bundle.to_dict()["event_log"] == "JsonlMemoryEventLog"
|
||||
assert bundle.to_dict()["semantic_index"] == "InMemorySemanticIndex"
|
||||
assert (tmp_path / "memory-store" / "nodes" / "node.config.json").exists()
|
||||
|
||||
|
||||
def test_runtime_config_from_fixture_profile_understands_local_aliases() -> None:
|
||||
config = RuntimeConfig.from_profile(_load("memory-profile.json"), local_store_path=".phase-memory-test")
|
||||
|
||||
assert config.adapter_mode("graph_store") == "file"
|
||||
assert config.adapter_mode("event_log") == "jsonl"
|
||||
assert config.adapter_mode("package_compiler") == "noop"
|
||||
assert config.trust_zone_labels == ("project-local",)
|
||||
|
||||
|
||||
def test_missing_external_adapter_blocks_runtime_resolution() -> None:
|
||||
registry = RuntimeConfig.local_default().adapter_registry.copy()
|
||||
registry["policy_gateway"] = "external"
|
||||
config = RuntimeConfig(adapter_registry=registry, policy_mode="external")
|
||||
|
||||
bundle = resolve_runtime_adapters(config)
|
||||
|
||||
assert "external_adapter_declared" in [diagnostic.code for diagnostic in bundle.diagnostics]
|
||||
assert "missing_external_adapter" in [diagnostic.code for diagnostic in bundle.diagnostics]
|
||||
try:
|
||||
runtime_from_config(config)
|
||||
except ValueError as exc:
|
||||
assert "missing_external_adapter" in str(exc)
|
||||
else:
|
||||
raise AssertionError("runtime_from_config should require supplied external adapters")
|
||||
|
||||
|
||||
def test_default_adapter_conformance_helpers() -> None:
|
||||
adapters = default_conformance_adapters()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user