generated from coulomb/repo-seed
Implement PMEM-WP-0016 ops-warden cross-runtime memory contracts.
Add ops-warden coordination profile, session event schemas, activation helpers, adapter pack, evaluation scenarios, and contract documentation for shared memory across worker, agent session, and operator CLI surfaces.
This commit is contained in:
46
tests/fixtures/ops-warden-coordination-profile.json
vendored
Normal file
46
tests/fixtures/ops-warden-coordination-profile.json
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"schema_version": "markitect.memory.profile.v1",
|
||||
"id": "ops-warden-coordination",
|
||||
"title": "Ops-Warden Coordination Memory",
|
||||
"intent": "Retain routing, coordination, escalation, and pilot-feedback episodes across worker, agent session, and operator CLI runtimes.",
|
||||
"memory_kinds": ["reasoning", "conversation", "knowledge", "package"],
|
||||
"stores": {
|
||||
"reasoning": "local-graph-store",
|
||||
"conversation": "local-event-log",
|
||||
"knowledge": "local-graph-store",
|
||||
"package": "markitect-context-package"
|
||||
},
|
||||
"limits": {
|
||||
"reasoning": {"max_nodes": 200},
|
||||
"conversation": {"max_nodes": 100},
|
||||
"package": {"max_items": 8}
|
||||
},
|
||||
"retention": {
|
||||
"conversation": {"stale_after_days": 14, "delete_after_days": 90}
|
||||
},
|
||||
"refresh": {
|
||||
"trigger": "routing-catalog-or-playbook-change"
|
||||
},
|
||||
"compaction": {
|
||||
"strategy": "summarize-coordination-thread-after-review"
|
||||
},
|
||||
"activation": {
|
||||
"max_items": 8,
|
||||
"max_tokens": 2000
|
||||
},
|
||||
"policy": {
|
||||
"required_labels": ["coordination-local"],
|
||||
"durable_writes": "review-gated",
|
||||
"secrets_allowed": false
|
||||
},
|
||||
"observability": {
|
||||
"emit_events": true
|
||||
},
|
||||
"failure": {
|
||||
"missing_runtime_store": "degrade-to-dry-run"
|
||||
},
|
||||
"metadata": {
|
||||
"rigid_import_only": ["charter", "action_allowlist"],
|
||||
"runtime_modes": ["warden.worker", "warden.operator", "warden.agent.*"]
|
||||
}
|
||||
}
|
||||
31
tests/fixtures/ops-warden-evaluation-scenarios.json
vendored
Normal file
31
tests/fixtures/ops-warden-evaluation-scenarios.json
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"schema_version": "phase_memory.evaluation.scenarios.v1",
|
||||
"scenarios": [
|
||||
{
|
||||
"id": "ops-warden-routing-repeat",
|
||||
"events": [
|
||||
{"session_kind": "warden.agent.grok", "command": "route find", "need_fingerprint": "abc123", "route_id": "openbao-api-key", "outcome": "resolved"},
|
||||
{"session_kind": "warden.agent.grok", "command": "route find", "need_fingerprint": "abc123", "route_id": "openbao-api-key", "outcome": "resolved"},
|
||||
{"session_kind": "warden.worker", "command": "worker run", "need_fingerprint": "abc123", "route_id": "openbao-api-key", "outcome": "resolved"}
|
||||
],
|
||||
"expect": {"stabilized": true, "continuity": true}
|
||||
},
|
||||
{
|
||||
"id": "ops-warden-cross-runtime-continuity",
|
||||
"events": [
|
||||
{"session_kind": "warden.agent.claude", "command": "route find", "outcome": "resolved"},
|
||||
{"session_kind": "warden.worker", "command": "worker run", "outcome": "escalated"}
|
||||
],
|
||||
"expect": {"continuity": true}
|
||||
},
|
||||
{
|
||||
"id": "ops-warden-llm-avoidance",
|
||||
"events": [
|
||||
{"session_kind": "warden.operator", "command": "route find", "need_fingerprint": "def456", "route_id": "ops-bridge-tunnel", "outcome": "resolved"},
|
||||
{"session_kind": "warden.operator", "command": "route find", "need_fingerprint": "def456", "route_id": "ops-bridge-tunnel", "outcome": "resolved"},
|
||||
{"session_kind": "warden.worker", "command": "memory.activate", "outcome": "resolved", "metadata": {"llm_calls_avoided": true}}
|
||||
],
|
||||
"expect": {"llm_calls_avoided": true}
|
||||
}
|
||||
]
|
||||
}
|
||||
22
tests/fixtures/public-api-snapshot.json
vendored
22
tests/fixtures/public-api-snapshot.json
vendored
@@ -24,6 +24,7 @@
|
||||
"FakeKontextualRuntimeRegistry",
|
||||
"FakeMarkitectPackageCompiler",
|
||||
"FakeTelemetryAuditSink",
|
||||
"KNOWN_AGENT_IDS",
|
||||
"LIVE_PILOT_REPORT_SCHEMA",
|
||||
"LifecycleAction",
|
||||
"LifecycleActionKind",
|
||||
@@ -52,6 +53,13 @@
|
||||
"MemoryPath",
|
||||
"MemoryPathState",
|
||||
"MemoryPhase",
|
||||
"OPS_WARDEN_ACTIVATION_SCHEMA",
|
||||
"OPS_WARDEN_ADAPTER_PACK_NAME",
|
||||
"OPS_WARDEN_MEMORY_STATUS_SCHEMA",
|
||||
"OPS_WARDEN_PROFILE_ID",
|
||||
"OPS_WARDEN_RUNTIME_SCHEMA",
|
||||
"OPS_WARDEN_SESSION_EVENT_SCHEMA",
|
||||
"OpsWardenMemoryStore",
|
||||
"OptionalMarkitectValidator",
|
||||
"PHASE_MEMORY_CREDENTIAL_NEEDS",
|
||||
"POLICY_OPERATION_POINTS",
|
||||
@@ -77,10 +85,12 @@
|
||||
"WARDEN_ROUTE_FIND_QUERY",
|
||||
"WordCountTokenEstimator",
|
||||
"abandon_path",
|
||||
"activate_ops_warden_memory",
|
||||
"activation_quality_report",
|
||||
"adapter_pack_manifest",
|
||||
"branch_path",
|
||||
"build_service_binding",
|
||||
"build_session_event",
|
||||
"compact_path",
|
||||
"create_path",
|
||||
"create_wsgi_app",
|
||||
@@ -88,6 +98,7 @@
|
||||
"credentialed_drill_config_from_env",
|
||||
"credentialed_operator_report",
|
||||
"credentialed_telemetry_retention_drill",
|
||||
"default_memory_store_path",
|
||||
"evaluation_threshold_report",
|
||||
"evaluation_trend_artifact",
|
||||
"evaluation_trend_history",
|
||||
@@ -102,9 +113,14 @@
|
||||
"make_review_record",
|
||||
"managed_deployment_manifest",
|
||||
"managed_deployment_pilot_report",
|
||||
"memory_enabled",
|
||||
"merge_path",
|
||||
"missing_credentialed_adapter_env",
|
||||
"operator_troubleshooting_matrix",
|
||||
"ops_warden_adapter_pack",
|
||||
"ops_warden_coordination_profile",
|
||||
"ops_warden_evaluation_metrics",
|
||||
"ops_warden_evaluation_report",
|
||||
"package_request_from_selection",
|
||||
"package_response_envelope",
|
||||
"path_event",
|
||||
@@ -119,17 +135,23 @@
|
||||
"plan_retention",
|
||||
"plan_retention_from_rules",
|
||||
"profile_from_markitect",
|
||||
"record_session_event",
|
||||
"resolve_credentialed_environ",
|
||||
"resolve_runtime_adapters",
|
||||
"resolve_session_kind",
|
||||
"retrieve_graph_neighborhood",
|
||||
"runtime_from_config",
|
||||
"select_event_path",
|
||||
"service_app_metadata",
|
||||
"service_binding_from_config",
|
||||
"service_contracts",
|
||||
"session_kind_for_agent",
|
||||
"stabilized_route_match",
|
||||
"validate_adapter_pack_manifest",
|
||||
"validate_managed_deployment_manifest",
|
||||
"validate_memory_write",
|
||||
"validate_operator_troubleshooting_matrix",
|
||||
"validate_ops_warden_profile",
|
||||
"warden_access_advisory",
|
||||
"warden_cli_available",
|
||||
"warden_credential_routing_advisory",
|
||||
|
||||
150
tests/test_ops_warden_memory.py
Normal file
150
tests/test_ops_warden_memory.py
Normal file
@@ -0,0 +1,150 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from phase_memory.ops_warden import (
|
||||
OPS_WARDEN_ACTIVATION_SCHEMA,
|
||||
OPS_WARDEN_MEMORY_STATUS_SCHEMA,
|
||||
OPS_WARDEN_PROFILE_ID,
|
||||
OPS_WARDEN_RUNTIME_SCHEMA,
|
||||
OPS_WARDEN_SESSION_EVENT_SCHEMA,
|
||||
activate_ops_warden_memory,
|
||||
build_session_event,
|
||||
memory_enabled,
|
||||
ops_warden_adapter_pack,
|
||||
ops_warden_coordination_profile,
|
||||
ops_warden_evaluation_metrics,
|
||||
record_session_event,
|
||||
resolve_session_kind,
|
||||
session_kind_for_agent,
|
||||
stabilized_route_match,
|
||||
validate_memory_write,
|
||||
validate_ops_warden_profile,
|
||||
)
|
||||
from phase_memory.external_adapters import validate_adapter_pack_manifest
|
||||
|
||||
FIXTURES = Path(__file__).parent / "fixtures"
|
||||
|
||||
|
||||
def test_ops_warden_profile_validates_with_activation_budget() -> None:
|
||||
profile = ops_warden_coordination_profile(FIXTURES / "ops-warden-coordination-profile.json")
|
||||
validation = validate_ops_warden_profile(profile)
|
||||
|
||||
assert profile["id"] == OPS_WARDEN_PROFILE_ID
|
||||
assert profile["policy"]["secrets_allowed"] is False
|
||||
assert validation["valid"] is True
|
||||
|
||||
|
||||
def test_validate_memory_write_rejects_secret_like_payload() -> None:
|
||||
ok, diagnostics = validate_memory_write(
|
||||
{
|
||||
"command": "access",
|
||||
"outcome": "resolved",
|
||||
"metadata": {"token": "super-secret-token"},
|
||||
}
|
||||
)
|
||||
|
||||
assert ok is False
|
||||
assert diagnostics[0].code == "ops_warden_memory_secret_field_rejected"
|
||||
|
||||
|
||||
def test_session_kind_supports_known_and_future_agents() -> None:
|
||||
assert session_kind_for_agent("grok") == "warden.agent.grok"
|
||||
assert session_kind_for_agent(None) == "warden.operator"
|
||||
assert resolve_session_kind({"WARDEN_AGENT_ID": "claude"}) == "warden.agent.claude"
|
||||
assert resolve_session_kind({"WARDEN_SESSION_KIND": "warden.worker"}) == "warden.worker"
|
||||
|
||||
|
||||
def test_record_and_activate_ops_warden_memory_round_trip(tmp_path) -> None:
|
||||
store = tmp_path / "memory"
|
||||
record_session_event(
|
||||
store,
|
||||
build_session_event(
|
||||
command="route find",
|
||||
session_kind="warden.agent.grok",
|
||||
outcome="resolved",
|
||||
need="openrouter api key",
|
||||
route_id="openrouter-llm-connect",
|
||||
agent_id="grok",
|
||||
session_id="sess-1",
|
||||
),
|
||||
)
|
||||
record_session_event(
|
||||
store,
|
||||
build_session_event(
|
||||
command="route find",
|
||||
session_kind="warden.agent.grok",
|
||||
outcome="resolved",
|
||||
need="openrouter api key",
|
||||
route_id="openrouter-llm-connect",
|
||||
agent_id="grok",
|
||||
session_id="sess-1",
|
||||
),
|
||||
)
|
||||
|
||||
activation = activate_ops_warden_memory(
|
||||
store,
|
||||
session_kind="warden.worker",
|
||||
need="openrouter api key",
|
||||
session_id="worker-1",
|
||||
)
|
||||
|
||||
assert activation["schema_version"] == OPS_WARDEN_ACTIVATION_SCHEMA
|
||||
assert activation["stabilized_route"]["route_id"] == "openrouter-llm-connect"
|
||||
assert activation["llm_calls_avoided"] is True
|
||||
|
||||
|
||||
def test_cross_runtime_continuity_is_visible_to_worker_activation(tmp_path) -> None:
|
||||
store = tmp_path / "memory"
|
||||
record_session_event(
|
||||
store,
|
||||
build_session_event(
|
||||
command="route find",
|
||||
session_kind="warden.agent.codex",
|
||||
outcome="resolved",
|
||||
need="npm token",
|
||||
route_id="openbao-api-key",
|
||||
agent_id="codex",
|
||||
),
|
||||
)
|
||||
activation = activate_ops_warden_memory(store, session_kind="warden.worker", need="npm token")
|
||||
|
||||
kinds = {item.get("session_kind") for item in activation["selected_episodes"] if item.get("kind") == "episode"}
|
||||
assert "warden.agent.codex" in kinds
|
||||
|
||||
|
||||
def test_ops_warden_evaluation_metrics_and_adapter_pack() -> None:
|
||||
scenarios = json.loads((FIXTURES / "ops-warden-evaluation-scenarios.json").read_text(encoding="utf-8"))
|
||||
events = scenarios["scenarios"][0]["events"]
|
||||
metrics = ops_warden_evaluation_metrics(events)
|
||||
pack = ops_warden_adapter_pack()
|
||||
diagnostics = validate_adapter_pack_manifest(pack)
|
||||
|
||||
assert metrics["cross_runtime_continuity"] == 1.0
|
||||
assert metrics["routing_repeat_accuracy"] > 0
|
||||
assert not any(item.severity == "error" for item in diagnostics)
|
||||
assert pack.name == "ops-warden-coordination"
|
||||
|
||||
|
||||
def test_stabilized_route_match_requires_confirmations() -> None:
|
||||
events = [
|
||||
{"need_fingerprint": "abc", "route_id": "openbao-api-key", "outcome": "resolved"},
|
||||
{"need_fingerprint": "abc", "route_id": "openbao-api-key", "outcome": "resolved"},
|
||||
]
|
||||
|
||||
assert stabilized_route_match(events, need_fingerprint_value="abc")["route_id"] == "openbao-api-key"
|
||||
assert stabilized_route_match(events[:1], need_fingerprint_value="abc") is None
|
||||
|
||||
|
||||
def test_memory_enabled_honors_opt_out() -> None:
|
||||
assert memory_enabled({"WARDEN_MEMORY": "1"}) is True
|
||||
assert memory_enabled({"WARDEN_MEMORY": "0"}) is False
|
||||
|
||||
|
||||
def test_ops_warden_evaluation_report_passes_fixture_scenarios() -> None:
|
||||
from phase_memory.ops_warden import ops_warden_evaluation_report
|
||||
|
||||
scenarios = json.loads((FIXTURES / "ops-warden-evaluation-scenarios.json").read_text(encoding="utf-8"))
|
||||
report = ops_warden_evaluation_report(scenarios)
|
||||
|
||||
assert report["valid"] is True
|
||||
assert report["metrics"]["scenario_count"] == 3
|
||||
Reference in New Issue
Block a user