rezabarkhordary commited on
Commit
85d3a29
·
verified ·
1 Parent(s): 74ab07f

Create sovereign_audit_chain_integration.py

Browse files
Files changed (1) hide show
  1. sovereign_audit_chain_integration.py +167 -0
sovereign_audit_chain_integration.py ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # sovereign_audit_chain_integration.py
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ from datetime import datetime, timezone
6
+ from typing import Any, Dict, Optional
7
+
8
+ from sovereign_audit_chain import append_audit_event
9
+
10
+
11
+ def _utc_now() -> str:
12
+ return datetime.now(timezone.utc).isoformat()
13
+
14
+
15
+ def _norm_text(v: Any) -> str:
16
+ return str(v or "").strip()
17
+
18
+
19
+ def _norm_tags(v: Any) -> list[str]:
20
+ if isinstance(v, list):
21
+ return [str(x).strip().lower() for x in v if str(x).strip()]
22
+ if isinstance(v, str):
23
+ return [x.strip().lower() for x in v.split(",") if x.strip()]
24
+ return []
25
+
26
+
27
+ def build_chain_event(
28
+ *,
29
+ event_type: str,
30
+ decision: str,
31
+ engine_name: str,
32
+ parent_model: str = "",
33
+ model_version: str = "",
34
+ data_tags: Any = None,
35
+ risk_level: str = "",
36
+ notes: str = "",
37
+ execution: Optional[Dict[str, Any]] = None,
38
+ authority_bundle: Optional[Dict[str, Any]] = None,
39
+ policy_bundle: Optional[Dict[str, Any]] = None,
40
+ freeze_case: Optional[Dict[str, Any]] = None,
41
+ extra: Optional[Dict[str, Any]] = None,
42
+ ) -> Dict[str, Any]:
43
+ return {
44
+ "timestamp": _utc_now(),
45
+ "event_type": _norm_text(event_type),
46
+ "decision": _norm_text(decision).upper(),
47
+ "engine_name": _norm_text(engine_name),
48
+ "parent_model": _norm_text(parent_model),
49
+ "model_version": _norm_text(model_version),
50
+ "data_tags": _norm_tags(data_tags),
51
+ "risk_level": _norm_text(risk_level).lower(),
52
+ "notes": _norm_text(notes),
53
+ "execution": execution or {},
54
+ "authority_bundle": authority_bundle or {},
55
+ "policy_bundle": policy_bundle or {},
56
+ "freeze_case": freeze_case or {},
57
+ "extra": extra or {},
58
+ }
59
+
60
+
61
+ def write_chain_event(
62
+ *,
63
+ event_type: str,
64
+ decision: str,
65
+ engine_name: str,
66
+ parent_model: str = "",
67
+ model_version: str = "",
68
+ data_tags: Any = None,
69
+ risk_level: str = "",
70
+ notes: str = "",
71
+ execution: Optional[Dict[str, Any]] = None,
72
+ authority_bundle: Optional[Dict[str, Any]] = None,
73
+ policy_bundle: Optional[Dict[str, Any]] = None,
74
+ freeze_case: Optional[Dict[str, Any]] = None,
75
+ extra: Optional[Dict[str, Any]] = None,
76
+ ) -> Dict[str, Any]:
77
+ event = build_chain_event(
78
+ event_type=event_type,
79
+ decision=decision,
80
+ engine_name=engine_name,
81
+ parent_model=parent_model,
82
+ model_version=model_version,
83
+ data_tags=data_tags,
84
+ risk_level=risk_level,
85
+ notes=notes,
86
+ execution=execution,
87
+ authority_bundle=authority_bundle,
88
+ policy_bundle=policy_bundle,
89
+ freeze_case=freeze_case,
90
+ extra=extra,
91
+ )
92
+ result = append_audit_event(event)
93
+ return {
94
+ "ok": True,
95
+ "event": event,
96
+ "chain": result,
97
+ }
98
+
99
+
100
+ def attach_chain_to_result(
101
+ result: Dict[str, Any],
102
+ *,
103
+ event_type: str,
104
+ engine_name: Optional[str] = None,
105
+ parent_model: str = "",
106
+ model_version: str = "",
107
+ data_tags: Any = None,
108
+ risk_level: str = "",
109
+ notes: str = "",
110
+ policy_bundle: Optional[Dict[str, Any]] = None,
111
+ freeze_case: Optional[Dict[str, Any]] = None,
112
+ extra: Optional[Dict[str, Any]] = None,
113
+ ) -> Dict[str, Any]:
114
+ result = result or {}
115
+
116
+ decision = str(
117
+ result.get("decision")
118
+ or result.get("outcome")
119
+ or result.get("action")
120
+ or "UNKNOWN"
121
+ ).upper()
122
+
123
+ authority_bundle = result.get("authority_gate") or result.get("authority_bundle") or {}
124
+ execution = result.get("execution") or {}
125
+
126
+ chain_write = write_chain_event(
127
+ event_type=event_type,
128
+ decision=decision,
129
+ engine_name=engine_name or result.get("engine_name") or result.get("engine") or "unknown_engine",
130
+ parent_model=parent_model or result.get("parent_model") or "",
131
+ model_version=model_version or result.get("model_version") or "",
132
+ data_tags=data_tags if data_tags is not None else result.get("data_tags") or [],
133
+ risk_level=risk_level or result.get("risk_level") or "",
134
+ notes=notes or result.get("notes") or "",
135
+ execution=execution,
136
+ authority_bundle=authority_bundle,
137
+ policy_bundle=policy_bundle,
138
+ freeze_case=freeze_case,
139
+ extra=extra,
140
+ )
141
+
142
+ result["audit_chain"] = chain_write["chain"]
143
+ return result
144
+
145
+
146
+ def chain_event_from_freeze_case(
147
+ freeze_case: Dict[str, Any],
148
+ *,
149
+ event_type: str,
150
+ decision: str,
151
+ extra: Optional[Dict[str, Any]] = None,
152
+ ) -> Dict[str, Any]:
153
+ freeze_case = freeze_case or {}
154
+
155
+ return write_chain_event(
156
+ event_type=event_type,
157
+ decision=decision,
158
+ engine_name=freeze_case.get("engine_name") or "unknown_engine",
159
+ parent_model=freeze_case.get("parent_model") or "",
160
+ model_version=freeze_case.get("model_version") or "",
161
+ data_tags=freeze_case.get("data_tags") or [],
162
+ risk_level=freeze_case.get("risk_level") or "",
163
+ notes=freeze_case.get("notes") or "",
164
+ freeze_case=freeze_case,
165
+ extra=extra or {},
166
+ )
167
+