fix(governance): 補齊 P2-141 S4.9 owner 欄位
All checks were successful
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Successful in 1m33s
CD Pipeline / build-and-deploy (push) Successful in 4m43s
CD Pipeline / post-deploy-checks (push) Successful in 1m46s

This commit is contained in:
Your Name
2026-06-14 13:44:20 +08:00
parent 8c9f41242b
commit 77515bbe94
7 changed files with 109 additions and 23 deletions

View File

@@ -269,6 +269,13 @@ def _require_no_forbidden_display_terms(payload: Any, label: str) -> None:
"chain_of_thought",
"authorization_header",
"secret_value",
"工作視窗",
"內部協作",
"原始提示詞",
"私有推理",
"原始 runtime payload",
"raw runtime payload",
"authorization header",
}
found = sorted(term for term in forbidden if _contains_term(payload, term))
if found:

View File

@@ -22,7 +22,7 @@ def test_load_latest_release_decision_input_prep_snapshot() -> None:
rollups = snapshot["rollups"]
assert rollups["decision_input_packet_count"] == 5
assert rollups["missing_input_field_count"] == 15
assert rollups["missing_input_field_count"] == 18
assert rollups["blocked_input_transition_count"] == 6
assert rollups["operator_action_count"] == 5
assert rollups["approval_required_subtotal"] == 12
@@ -94,6 +94,15 @@ def test_rejects_forbidden_display_terms(tmp_path: Path) -> None:
load_latest_ai_agent_result_capture_release_decision_input_prep(tmp_path)
def test_rejects_chinese_forbidden_display_terms(tmp_path: Path) -> None:
snapshot = copy.deepcopy(load_latest_ai_agent_result_capture_release_decision_input_prep())
snapshot["operator_actions"][0]["operator_instruction"] = "不要顯示工作視窗內容"
_write_snapshot(tmp_path, snapshot)
with pytest.raises(ValueError, match="forbidden display terms leaked"):
load_latest_ai_agent_result_capture_release_decision_input_prep(tmp_path)
def _write_snapshot(directory: Path, payload: dict) -> None:
path = directory / "ai_agent_result_capture_release_decision_input_prep_2099-01-01.json"
path.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8")

View File

@@ -20,7 +20,7 @@ def test_release_decision_input_prep_endpoint() -> None:
assert payload["prior_next_handoff"]["schema_version"] == "ai_agent_result_capture_release_decision_next_handoff_v1"
assert payload["prior_next_handoff"]["next_task_id"] == "P2-141"
assert payload["rollups"]["decision_input_packet_count"] == 5
assert payload["rollups"]["missing_input_field_count"] == 15
assert payload["rollups"]["missing_input_field_count"] == 18
assert payload["rollups"]["blocked_input_transition_count"] == 6
assert payload["rollups"]["operator_action_count"] == 5
assert payload["rollups"]["approval_required_subtotal"] == 12
@@ -30,3 +30,14 @@ def test_release_decision_input_prep_endpoint() -> None:
assert payload["rollups"]["telegram_send_count"] == 0
assert payload["rollups"]["bot_api_call_count"] == 0
assert payload["rollups"]["production_write_count"] == 0
owner_packet = payload["decision_input_packets"][0]
assert owner_packet["packet_id"] == "decision_input_owner_release"
assert owner_packet["missing_fields"] == [
"owner_role_team",
"owner_decision",
"decision_reason",
"affected_scope",
"redacted_evidence_refs",
"followup_owner",
]