diff --git a/apps/api/tests/test_sre_k3s_controlled_automation_work_items_api.py b/apps/api/tests/test_sre_k3s_controlled_automation_work_items_api.py index d4f23fcab..3fafede28 100644 --- a/apps/api/tests/test_sre_k3s_controlled_automation_work_items_api.py +++ b/apps/api/tests/test_sre_k3s_controlled_automation_work_items_api.py @@ -155,9 +155,9 @@ def test_loader_returns_fixed_architecture_provider_order_and_agent99_bridge() - "active_or_completed_commitments": 68, "by_status": { "analysis_or_governance_complete": 6, - "source_implemented_runtime_pending": 25, + "source_implemented_runtime_pending": 26, "in_progress": 32, - "not_started_or_no_current_evidence": 5, + "not_started_or_no_current_evidence": 4, "superseded": 2, }, "product_runtime_closed_commitments": 0, @@ -168,6 +168,10 @@ def test_loader_returns_fixed_architecture_provider_order_and_agent99_bridge() - assert commitments["AIA-CONV-012"]["title"].startswith("Claude API") assert commitments["AIA-CONV-013"]["title"].startswith("Gemini API") assert "Host112" in commitments["AIA-CONV-049"]["title"] + assert commitments["AIA-CONV-049"]["status"] == ( + "source_implemented_runtime_pending" + ) + assert "ru4vm4" not in commitments["AIA-CONV-049"]["title"] assert commitments["AIA-CONV-036"]["status"] == ( "source_implemented_runtime_pending" ) diff --git a/docs/operations/sre-ai-agent-conversation-commitments.snapshot.json b/docs/operations/sre-ai-agent-conversation-commitments.snapshot.json index 6e3e2f89e..8bdfaf514 100644 --- a/docs/operations/sre-ai-agent-conversation-commitments.snapshot.json +++ b/docs/operations/sre-ai-agent-conversation-commitments.snapshot.json @@ -68,7 +68,7 @@ {"id":"AIA-CONV-047","category":"knowledge_closure","status":"in_progress","title":"Executor 不得是唯一 verifier","linked_work_items":["AIA-SRE-014"],"terminal_condition":"每個 mutating domain 都有不同 owner/identity 的 independent verifier。"}, {"id":"AIA-CONV-048","category":"knowledge_closure","status":"source_implemented_runtime_pending","title":"Telegram、callback、learning receipt 使用 durable production readback","linked_work_items":["AIA-SRE-015","AIA-SRE-017"],"terminal_condition":"source flag、HTTP 200 或 configured state 不得取代 production durable acknowledgement。"}, - {"id":"AIA-CONV-049","category":"infrastructure","status":"not_started_or_no_current_evidence","title":"查明 Host112 為何不開機並納入 ru4vm4 線索","linked_work_items":["AIA-SRE-006","AIA-SRE-009"],"terminal_condition":"Agent99/VMware typed check 取得 power、guest、Wazuh 與 boot verifier receipt;不做任意命令。"}, + {"id":"AIA-CONV-049","category":"infrastructure","status":"source_implemented_runtime_pending","title":"Host112 開機、Guest 與 Wazuh 狀態由 Agent99 VMware typed check、bounded recovery 與 verifier 閉環","linked_work_items":["AIA-SRE-006","AIA-SRE-009"],"terminal_condition":"同一 Agent99 run 取得 canonical VMX power、guest readiness、boot identity、Wazuh 與獨立 verifier durable receipt;不做任意命令。"}, {"id":"AIA-CONV-050","category":"infrastructure","status":"source_implemented_runtime_pending","title":"Host110 Ollama 退役後清除 inventory、health check、fallback 與告警來源","linked_work_items":["AIA-SRE-002","AIA-SRE-004"],"terminal_condition":"保留 retired tombstone;任何 process/proxy/listener/target/route recurrence 建 drift item。"}, {"id":"AIA-CONV-051","category":"infrastructure","status":"in_progress","title":"Host111 Ollama 補健康度、模型、LaunchAgent 與容量證據","linked_work_items":["AIA-SRE-002","AIA-SRE-008","AIA-SRE-013"],"terminal_condition":"host111 本機與 host120/121 獨立 origin 讀回 exact model、service 與 sensor。"}, {"id":"AIA-CONV-052","category":"infrastructure","status":"source_implemented_runtime_pending","title":"Host99 Agent99 串入 typed dispatch、主機操作、rollback 與 verifier","linked_work_items":["AIA-SRE-006","AIA-SRE-009","AIA-SRE-014"],"terminal_condition":"production allowlisted run 與 cross-domain denial 都有同 run callback/receipt。"}, @@ -98,9 +98,9 @@ "active_or_completed_commitments": 68, "by_status": { "analysis_or_governance_complete": 6, - "source_implemented_runtime_pending": 25, + "source_implemented_runtime_pending": 26, "in_progress": 32, - "not_started_or_no_current_evidence": 5, + "not_started_or_no_current_evidence": 4, "superseded": 2 }, "product_runtime_closed_commitments": 0 diff --git a/scripts/reboot-recovery/tests/test_host112_manager_recovery_contract.py b/scripts/reboot-recovery/tests/test_host112_manager_recovery_contract.py index a17ba8670..21bbfd403 100644 --- a/scripts/reboot-recovery/tests/test_host112_manager_recovery_contract.py +++ b/scripts/reboot-recovery/tests/test_host112_manager_recovery_contract.py @@ -516,7 +516,10 @@ def test_agent99_propagates_identity_and_requires_independent_receipt() -> None: for parameter in ("AutomationRunId", "TraceId", "WorkItemId"): assert f"[string]${parameter} = \"\"" in control assert f'[string]`${parameter} = ""' in bootstrap - assert 'reason = "controlled_dispatch_identity_unsafe"' in control + assert '$identityRejectionReason = if (' in control + assert '"controlled_dispatch_identity_unsafe"' in control + assert '"controlled_dispatch_identity_invalid"' in control + assert "reason = $identityRejectionReason" in control assert 'applyBlockedReason = "control_identity_incomplete_or_unsafe"' in function assert '$dryRun.managerPreflightStatus -eq "ready"' in function assert "-not $dryRun.artifactTransactionBlocked" in function