mirror of
https://github.com/semantica-agi/semantica.git
synced 2026-08-29 04:26:20 +00:00
Improve non-persistent decision trace audit logging
This commit is contained in:
@@ -252,9 +252,21 @@ def capture_decision_trace(
|
||||
try:
|
||||
# Backward-compatible behavior: allow legacy call sites without graph_store.
|
||||
if graph_store is None:
|
||||
policy_refs = _normalize_policy_refs(policy_ids)
|
||||
logger.warning(
|
||||
"capture_decision_trace called without graph_store; "
|
||||
"returning decision_id only for backward compatibility"
|
||||
"capture_decision_trace skipped persistence (no graph_store) | "
|
||||
f"decision_id={decision.decision_id} "
|
||||
f"decision_maker={decision.decision_maker} "
|
||||
f"timestamp={decision.timestamp.isoformat() if hasattr(decision.timestamp, 'isoformat') else decision.timestamp} "
|
||||
f"category={decision.category} "
|
||||
f"outcome={decision.outcome} "
|
||||
f"confidence={decision.confidence} "
|
||||
f"cross_system_keys={list((cross_system_context or {}).keys())} "
|
||||
f"policy_refs={policy_refs} "
|
||||
f"exception_count={len(_normalize_record_list(exceptions))} "
|
||||
f"approval_count={len(_normalize_record_list(approvals))} "
|
||||
f"precedent_count={len(_normalize_precedents(precedents))} "
|
||||
"mode=backward_compatible_non_persistent"
|
||||
)
|
||||
return decision.decision_id
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Tests for decision trace capture convenience API."""
|
||||
|
||||
from datetime import datetime
|
||||
import logging
|
||||
from unittest.mock import Mock
|
||||
|
||||
from semantica.context.decision_methods import capture_decision_trace
|
||||
@@ -20,10 +21,19 @@ def _sample_decision() -> Decision:
|
||||
)
|
||||
|
||||
|
||||
def test_capture_decision_trace_without_graph_store_is_backward_compatible():
|
||||
def test_capture_decision_trace_without_graph_store_is_backward_compatible(caplog):
|
||||
decision = _sample_decision()
|
||||
decision_id = capture_decision_trace(decision, cross_system_context={})
|
||||
with caplog.at_level(logging.WARNING):
|
||||
decision_id = capture_decision_trace(
|
||||
decision,
|
||||
cross_system_context={"crm": {"arr": 120000}},
|
||||
policy_ids=[{"policy_id": "renewal_discount_policy", "version": "3.2"}],
|
||||
)
|
||||
assert decision_id == decision.decision_id
|
||||
assert "capture_decision_trace skipped persistence (no graph_store)" in caplog.text
|
||||
assert f"decision_id={decision.decision_id}" in caplog.text
|
||||
assert f"decision_maker={decision.decision_maker}" in caplog.text
|
||||
assert f"outcome={decision.outcome}" in caplog.text
|
||||
|
||||
|
||||
def test_capture_decision_trace_with_graph_store_records_trace_events():
|
||||
|
||||
Reference in New Issue
Block a user