fix(sre): require unique durable learning receipts

This commit is contained in:
Your Name
2026-07-19 06:20:27 +08:00
parent 70112d7f84
commit c707d6dc15
4 changed files with 273 additions and 54 deletions

View File

@@ -1,9 +1,9 @@
"""Telegram alert learning context post-apply verifier readback.
Verifies metadata-only Telegram alert learning context receipts emitted by the
AI Loop consumer readback. This module only reads public-safe receipt metadata;
it does not write KM/RAG/PlayBook, call MCP tools, send Telegram, or touch
runtime infrastructure.
Verifies public-safe Telegram alert learning receipts and requires durable
target-write evidence for every learning target. This module remains a
read-only independent verifier; it does not write KM/RAG/PlayBook, call MCP
tools, send Telegram, or touch runtime infrastructure.
"""
from __future__ import annotations
@@ -81,7 +81,8 @@ def build_telegram_alert_learning_context_post_apply_verifier(
_verify_context_receipt(receipt) for receipt in context_receipts
]
target_count = _safe_int(telegram_context.get("target_count")) or len(_TARGETS)
expected_target_count = len(_TARGETS)
reported_target_count = _safe_int(telegram_context.get("target_count"))
verified_targets = sorted(
{
str(item["target"])
@@ -97,6 +98,20 @@ def build_telegram_alert_learning_context_post_apply_verifier(
failed_results = [
item for item in verifier_results if item["verifier_status"] != "passed"
]
verified_target_context_write_count = sum(
1
for item in verifier_results
if item["verified_target_context_write_performed"] is True
)
verified_target_context_write_receipt_ids = {
str(item["target_context_write_receipt_id"])
for item in verifier_results
if item["verified_target_context_write_performed"] is True
and item["target_context_write_receipt_id"]
}
verified_target_context_write_receipt_count = len(
verified_target_context_write_receipt_ids
)
source_ready = (
telegram_context.get("status") == "ai_loop_agent_context_receipt_ready"
)
@@ -104,7 +119,11 @@ def build_telegram_alert_learning_context_post_apply_verifier(
source_ready
and context_receipts
and not failed_results
and len(verified_targets) == target_count
and reported_target_count == expected_target_count
and len(context_receipts) == expected_target_count
and set(verified_targets) == set(_TARGETS)
and verified_target_context_write_count == expected_target_count
and verified_target_context_write_receipt_count == expected_target_count
and verified_ai_agent_count > 0
)
active_blockers = _active_blockers(
@@ -112,7 +131,13 @@ def build_telegram_alert_learning_context_post_apply_verifier(
context_receipts=context_receipts,
failed_results=failed_results,
verified_targets=verified_targets,
target_count=target_count,
context_receipt_count=len(context_receipts),
reported_target_count=reported_target_count,
expected_target_count=expected_target_count,
verified_target_context_write_count=verified_target_context_write_count,
verified_target_context_write_receipt_count=(
verified_target_context_write_receipt_count
),
verified_ai_agent_count=verified_ai_agent_count,
)
@@ -157,7 +182,8 @@ def build_telegram_alert_learning_context_post_apply_verifier(
1 for item in verifier_results if item["verifier_status"] == "passed"
),
"failed_context_receipt_count": len(failed_results),
"target_count": target_count,
"target_count": expected_target_count,
"reported_target_count": reported_target_count,
"verified_target_count": len(verified_targets),
"verified_targets": verified_targets,
"verified_ai_agent_context_receipt_count": verified_ai_agent_count,
@@ -165,9 +191,7 @@ def build_telegram_alert_learning_context_post_apply_verifier(
1 for item in verifier_results if item["target_selector_verified"]
),
"source_of_truth_diff_verified_count": sum(
1
for item in verifier_results
if item["source_of_truth_diff_verified"]
1 for item in verifier_results if item["source_of_truth_diff_verified"]
),
"check_mode_verified_count": sum(
1 for item in verifier_results if item["check_mode_verified"]
@@ -178,10 +202,11 @@ def build_telegram_alert_learning_context_post_apply_verifier(
"post_apply_verifier_ref_count": sum(
len(item["post_apply_verifier_refs"]) for item in verifier_results
),
"verified_target_context_write_count": sum(
1
for item in verifier_results
if item["verified_target_context_write_performed"] is True
"verified_target_context_write_count": (
verified_target_context_write_count
),
"verified_target_context_write_receipt_count": (
verified_target_context_write_receipt_count
),
"metadata_only_receipt_count": sum(
1 for item in verifier_results if item["metadata_only"] is True
@@ -198,7 +223,12 @@ def build_telegram_alert_learning_context_post_apply_verifier(
"next_action": (
"surface_verified_telegram_alert_context_receipts_in_awooop_runs_work_items_alerts"
if ready
else "fix_failed_telegram_alert_context_receipts_then_rerun_post_apply_verifier"
else (
"collect_exact_six_unique_durable_consumer_write_receipts_then_rerun_post_apply_verifier"
if verified_target_context_write_count != expected_target_count
or verified_target_context_write_receipt_count != expected_target_count
else "fix_failed_telegram_alert_context_receipts_then_rerun_post_apply_verifier"
)
),
"operation_boundaries": {
"metadata_read_performed": True,
@@ -238,14 +268,18 @@ def _verify_context_receipt(receipt: dict[str, Any]) -> dict[str, Any]:
else _ALERT_CARD_TARGET_SELECTOR_FIELDS
)
required_checks = (
_CONSUMER_REQUIRED_CHECKS
if consumer_receipt
else _ALERT_CARD_REQUIRED_CHECKS
_CONSUMER_REQUIRED_CHECKS if consumer_receipt else _ALERT_CARD_REQUIRED_CHECKS
)
target_selector_missing = [
key for key in required_target_selector_fields if not target_selector.get(key)
]
target_selector_contract_verified = _target_selector_contract_verified(
receipt,
target_selector=target_selector,
target=target,
receipt_kind=receipt_kind,
)
checks = _strings(check_mode.get("checks"))
missing_checks = [check for check in required_checks if check not in checks]
source_diff_verified = _source_diff_verified(
@@ -267,6 +301,8 @@ def _verify_context_receipt(receipt: dict[str, Any]) -> dict[str, Any]:
failed_checks.append("receipt_ready_for_ai_loop_context")
if target_selector_missing:
failed_checks.append("target_selector_required_fields_present")
elif not target_selector_contract_verified:
failed_checks.append("target_selector_bound_to_receipt")
if not source_diff_verified:
failed_checks.append("source_of_truth_diff_verified")
if check_mode.get("enabled") is not True or missing_checks:
@@ -296,6 +332,7 @@ def _verify_context_receipt(receipt: dict[str, Any]) -> dict[str, Any]:
"receipt_kind_supported",
"receipt_ready_for_ai_loop_context",
"target_selector_required_fields_present",
"target_selector_bound_to_receipt",
"source_of_truth_diff_verified",
"check_mode_required_checks_present",
"rollback_ref_present",
@@ -320,7 +357,9 @@ def _verify_context_receipt(receipt: dict[str, Any]) -> dict[str, Any]:
"verifier_status": "passed" if not failed_checks else "failed",
"passed_checks": passed_checks,
"failed_checks": failed_checks,
"target_selector_verified": not target_selector_missing,
"target_selector_verified": (
not target_selector_missing and target_selector_contract_verified
),
"target_selector_missing_fields": target_selector_missing,
"source_of_truth_diff_verified": source_diff_verified,
"check_mode_verified": check_mode.get("enabled") is True and not missing_checks,
@@ -334,6 +373,14 @@ def _verify_context_receipt(receipt: dict[str, Any]) -> dict[str, Any]:
receipt.get("target_write_performed") is True
and target_write_contract_verified
),
"target_context_write_receipt_id": (
str(
_dict(receipt.get("consumer_write_receipt")).get("consumer_receipt_id")
or ""
)
if target_write_contract_verified and receipt_kind == _CONSUMER_RECEIPT_KIND
else ""
),
"verifier_write_performed": False,
"metadata_only": receipt.get("metadata_only") is True,
"raw_payload_included": receipt.get("raw_payload_included") is True,
@@ -355,7 +402,11 @@ def _active_blockers(
context_receipts: list[dict[str, Any]],
failed_results: list[dict[str, Any]],
verified_targets: list[str],
target_count: int,
context_receipt_count: int,
reported_target_count: int,
expected_target_count: int,
verified_target_context_write_count: int,
verified_target_context_write_receipt_count: int,
verified_ai_agent_count: int,
) -> list[str]:
blockers: list[str] = []
@@ -363,8 +414,22 @@ def _active_blockers(
blockers.append("telegram_alert_learning_context_source_not_ready")
if not context_receipts:
blockers.append("telegram_alert_learning_context_receipts_missing")
if len(verified_targets) < target_count:
blockers.append("telegram_alert_learning_context_verified_target_count_below_target")
if reported_target_count != expected_target_count:
blockers.append("telegram_alert_learning_context_target_count_not_exact")
if context_receipt_count != expected_target_count:
blockers.append("telegram_alert_learning_context_receipt_count_not_exact")
if set(verified_targets) != set(_TARGETS):
blockers.append(
"telegram_alert_learning_context_verified_target_count_below_target"
)
if verified_target_context_write_count != expected_target_count:
blockers.append(
"telegram_alert_learning_context_verified_target_write_count_not_exact"
)
if verified_target_context_write_receipt_count != expected_target_count:
blockers.append(
"telegram_alert_learning_context_unique_target_write_receipt_count_not_exact"
)
if verified_ai_agent_count <= 0:
blockers.append("telegram_alert_learning_context_ai_agent_receipt_not_verified")
for item in failed_results:
@@ -422,16 +487,44 @@ def _target_write_contract_verified(
if receipt_kind != _CONSUMER_RECEIPT_KIND:
return receipt.get("target_write_performed") is False
consumer_write_receipt = _dict(receipt.get("consumer_write_receipt"))
target_selector = _dict(receipt.get("target_selector"))
consumer_receipt_id = str(consumer_write_receipt.get("consumer_receipt_id") or "")
return bool(
receipt.get("target_write_performed") is True
and consumer_write_receipt.get("consumer_receipt_id")
and consumer_receipt_id
and consumer_receipt_id == str(receipt.get("source_receipt_id") or "")
and consumer_receipt_id == str(target_selector.get("consumer_receipt_id") or "")
and consumer_write_receipt.get("status") == "success"
and consumer_write_receipt.get("target_context_receipt_write_performed")
is True
and consumer_write_receipt.get("target_context_receipt_write_performed") is True
and consumer_write_receipt.get("runtime_target_write_performed") is True
)
def _target_selector_contract_verified(
receipt: Mapping[str, Any],
*,
target_selector: Mapping[str, Any],
target: str,
receipt_kind: str,
) -> bool:
if target_selector.get("target") != target:
return False
if target_selector.get("source_ref") != receipt.get("source_ref"):
return False
if receipt_kind == _CONSUMER_RECEIPT_KIND:
consumer_write_receipt = _dict(receipt.get("consumer_write_receipt"))
return bool(
target_selector.get("dispatch_receipt_id") == receipt.get("source_ref")
and target_selector.get("consumer_receipt_id")
== receipt.get("source_receipt_id")
== consumer_write_receipt.get("consumer_receipt_id")
)
return bool(
target_selector.get("run_id") == receipt.get("source_run_id")
and target_selector.get("message_id") == receipt.get("source_message_id")
)
def _dict(value: Any) -> dict[str, Any]:
return value if isinstance(value, dict) else {}