feat(governance): 新增 12-Agent War Room 讀回
Some checks failed
CD Pipeline / tests (push) Failing after 7s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
Code Review / ai-code-review (push) Successful in 22s

This commit is contained in:
Your Name
2026-06-14 14:03:15 +08:00
parent e76c424431
commit 5de4b3f36b
13 changed files with 1574 additions and 4 deletions

View File

@@ -0,0 +1,100 @@
from __future__ import annotations
import copy
import json
import os
from pathlib import Path
import pytest
os.environ.setdefault("DATABASE_URL", "postgresql+asyncpg://test:test@localhost/test")
from src.services.ai_agent_12_agent_war_room import (
load_latest_ai_agent_12_agent_war_room,
)
def test_load_latest_ai_agent_12_agent_war_room_snapshot() -> None:
snapshot = load_latest_ai_agent_12_agent_war_room()
assert snapshot["schema_version"] == "ai_agent_12_agent_war_room_v1"
assert snapshot["program_status"]["current_task_id"] == "P2-142"
assert snapshot["program_status"]["next_task_id"] == "P2-143"
assert snapshot["program_status"]["overall_completion_percent"] == 72
assert snapshot["program_status"]["runtime_authority"] == "12_agent_war_room_read_only_no_live_write"
assert len(snapshot["agent_roles"]) == 12
rollups = snapshot["rollups"]
assert rollups["agent_role_count"] == 12
assert rollups["read_only_review_completed_count"] == 12
assert rollups["subagent_batch_limit"] == 6
assert rollups["subagent_batch_count"] == 2
assert rollups["total_work_units"] == 82
assert rollups["total_evidence_items"] == 84
assert rollups["approval_required_total"] == 61
assert rollups["blocker_total"] == 54
assert rollups["live_write_count"] == 0
assert rollups["telegram_send_count"] == 0
assert rollups["bot_api_call_count"] == 0
assert rollups["production_write_count"] == 0
assert rollups["paid_api_call_count"] == 0
assert rollups["sdk_install_count"] == 0
def test_war_room_contract_keeps_reports_market_and_telegram_read_only() -> None:
snapshot = load_latest_ai_agent_12_agent_war_room()
assert snapshot["coordination_model"]["arbiter"] == "openclaw"
assert snapshot["reporting_contract"]["daily"]["required"] is True
assert snapshot["reporting_contract"]["weekly"]["required"] is True
assert snapshot["reporting_contract"]["monthly"]["required"] is True
assert len(snapshot["market_watch_contract"]["p0_refresh_candidates"]) == 5
assert snapshot["telegram_contract"]["direct_send_allowed"] is False
assert snapshot["telegram_contract"]["bot_api_call_allowed"] is False
assert snapshot["telegram_contract"]["dedup_required"] is True
assert snapshot["telegram_contract"]["receipt_required"] is True
assert snapshot["display_redaction_contract"]["conversation_transcript_display_allowed"] is False
assert snapshot["display_redaction_contract"]["secret_value_display_allowed"] is False
def test_rejects_missing_agent_role(tmp_path: Path) -> None:
snapshot = copy.deepcopy(load_latest_ai_agent_12_agent_war_room())
snapshot["agent_roles"] = snapshot["agent_roles"][:-1]
snapshot["rollups"]["agent_role_count"] = 11
snapshot["rollups"]["read_only_review_completed_count"] = 11
_write_snapshot(tmp_path, snapshot)
with pytest.raises(ValueError, match="expected exactly 12 agent roles"):
load_latest_ai_agent_12_agent_war_room(tmp_path)
def test_rejects_role_live_write_drift(tmp_path: Path) -> None:
snapshot = copy.deepcopy(load_latest_ai_agent_12_agent_war_room())
snapshot["agent_roles"][0]["live_write_count"] = 1
_write_snapshot(tmp_path, snapshot)
with pytest.raises(ValueError, match="live_write_count must remain zero"):
load_latest_ai_agent_12_agent_war_room(tmp_path)
def test_rejects_telegram_direct_send_drift(tmp_path: Path) -> None:
snapshot = copy.deepcopy(load_latest_ai_agent_12_agent_war_room())
snapshot["telegram_contract"]["direct_send_allowed"] = True
_write_snapshot(tmp_path, snapshot)
with pytest.raises(ValueError, match="direct_send_allowed must remain false"):
load_latest_ai_agent_12_agent_war_room(tmp_path)
def test_rejects_forbidden_public_terms(tmp_path: Path) -> None:
snapshot = copy.deepcopy(load_latest_ai_agent_12_agent_war_room())
snapshot["agent_roles"][0]["next_action"] = "blocked source_thread_id leak"
_write_snapshot(tmp_path, snapshot)
with pytest.raises(ValueError, match="forbidden public terms leaked"):
load_latest_ai_agent_12_agent_war_room(tmp_path)
def _write_snapshot(directory: Path, payload: dict) -> None:
path = directory / "ai_agent_12_agent_war_room_2099-01-01.json"
path.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8")

View File

@@ -0,0 +1,36 @@
from __future__ import annotations
import os
from fastapi.testclient import TestClient
os.environ.setdefault("DATABASE_URL", "postgresql+asyncpg://test:test@localhost/test")
from src.main import app
def test_ai_agent_12_agent_war_room_endpoint() -> None:
client = TestClient(app)
response = client.get("/api/v1/agents/agent-12-agent-war-room")
assert response.status_code == 200
payload = response.json()
assert payload["schema_version"] == "ai_agent_12_agent_war_room_v1"
assert payload["program_status"]["current_task_id"] == "P2-142"
assert payload["program_status"]["next_task_id"] == "P2-143"
assert payload["program_status"]["overall_completion_percent"] == 72
assert payload["program_status"]["runtime_authority"] == "12_agent_war_room_read_only_no_live_write"
assert payload["rollups"]["agent_role_count"] == 12
assert payload["rollups"]["read_only_review_completed_count"] == 12
assert payload["rollups"]["subagent_batch_limit"] == 6
assert payload["rollups"]["subagent_batch_count"] == 2
assert payload["rollups"]["total_work_units"] == 82
assert payload["rollups"]["approval_required_total"] == 61
assert payload["rollups"]["blocker_total"] == 54
assert payload["rollups"]["live_write_count"] == 0
assert payload["rollups"]["telegram_send_count"] == 0
assert payload["rollups"]["bot_api_call_count"] == 0
assert payload["rollups"]["production_write_count"] == 0
assert payload["telegram_contract"]["direct_send_allowed"] is False
assert payload["display_redaction_contract"]["conversation_transcript_display_allowed"] is False