fix(agents): map consumer receipts into learning loop
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled

This commit is contained in:
ogt
2026-07-09 23:04:10 +08:00
parent 2a4110e981
commit 38f1f8d5e7
2 changed files with 317 additions and 18 deletions

View File

@@ -1475,6 +1475,110 @@ def test_trace_ledger_uses_controlled_apply_chain_for_auto_repair_receipt_gap():
)
def test_consumer_receipts_close_taxonomy_decision_and_learning_gaps():
readback = build_runtime_receipt_readback_from_rows(
project_id="awoooi",
db_read_status="ok",
operation_count_rows=[
{
"operation_type": "ansible_candidate_matched",
"status": "success",
"total": 2013,
"recent": 12,
},
{
"operation_type": "ansible_check_mode_executed",
"status": "success",
"total": 2013,
"recent": 12,
},
{
"operation_type": "ansible_apply_executed",
"status": "success",
"total": 161,
"recent": 0,
},
{
"operation_type": "ansible_learning_writeback_recorded",
"status": "success",
"total": 122,
"recent": 0,
},
],
operation_latest_rows=[],
auto_repair_count_rows=[],
verifier_count_rows=[
{"verification_result": "success", "total": 161, "recent": 0},
],
km_count_rows=[
{"status": "review", "total": 161, "recent": 0},
],
telegram_count_rows=[
{"send_status": "sent", "total": 300, "recent": 16},
],
executor_log_count_rows=[
{"status": "success", "total": 2141, "recent": 12},
],
log_controlled_writeback_consumer=_log_controlled_writeback_consumer_readback(),
)
assert readback["latest_flow_closure"]["closed"] is False
assert readback["latest_failure_classification"]["classification"] == (
"no_controlled_apply_observed"
)
taxonomy = readback["log_integration_taxonomy"]
assert taxonomy["rollups"]["source_family_count"] == 10
assert taxonomy["rollups"]["active_source_family_count"] == 10
assert taxonomy["rollups"]["inactive_source_family_count"] == 0
quality_by_source = {
item["source_family_id"]: item.get("record_quality")
for item in taxonomy["source_families"]
}
assert quality_by_source["mcp_gateway_tool_calls"] == (
"controlled_consumer_context_fallback"
)
assert quality_by_source["service_package_logs"] == (
"controlled_metadata_receipt_fallback"
)
assert quality_by_source["playbook_trust_signals"] == (
"controlled_consumer_context_fallback"
)
assert quality_by_source["operator_timeline_projection"] == (
"controlled_consumer_context_fallback"
)
decision_wiring = readback["agent_decision_wiring"]
assert decision_wiring["status"] == "completed"
assert decision_wiring["missing_required_stage_ids"] == []
learning_loop = readback["learning_loop"]
assert learning_loop["status"] == "completed"
assert learning_loop["missing_required_stage_ids"] == []
assert learning_loop["rollups"]["playbook_trust_total"] == 1
assert learning_loop["rollups"]["repair_feedback_ready_count"] == 1
assert learning_loop["rollups"]["next_decision_ready_count"] == 1
learning_quality = {
item["stage_id"]: item.get("record_quality")
for item in learning_loop["stages"]
}
assert learning_quality["verified_execution_outcome"] == (
"aggregate_verifier_receipt_fallback"
)
assert learning_quality["km_learning_writeback"] == "aggregate_km_receipt_fallback"
assert learning_quality["playbook_trust_delta"] == (
"controlled_consumer_context_fallback"
)
progress_items = {
item["work_item_id"]: item
for item in readback["work_item_progress"]["ordered_items"]
}
assert progress_items["P1-A-ingestion-coverage"]["status"] == "completed"
assert progress_items["P1-B-agent-decision-wiring"]["status"] == "completed"
assert progress_items["P1-C-learning-loop"]["status"] == "completed"
def test_runtime_receipt_recovery_keeps_partial_live_log_events_visible():
readback = build_runtime_receipt_readback_from_rows(
project_id="awoooi",