rezabarkhordary commited on
Commit
bd10a9b
·
verified ·
1 Parent(s): a5d3b49

Create sovereign_freeze_review.py

Browse files
Files changed (1) hide show
  1. sovereign_freeze_review.py +129 -0
sovereign_freeze_review.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from __future__ import annotations
3
+
4
+ import json
5
+ import time
6
+ from pathlib import Path
7
+ from typing import Dict, Any, Optional
8
+
9
+
10
+ def _utc():
11
+ return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
12
+
13
+
14
+ class SovereignFreezeReview:
15
+ """
16
+ Bank-grade freeze lifecycle manager
17
+
18
+ Handles:
19
+ - review
20
+ - approve (release)
21
+ - reject (block)
22
+ """
23
+
24
+ def __init__(self, freeze_dir: str = ".sovereign_runtime/freezes"):
25
+ self.freeze_dir = Path(freeze_dir)
26
+ self.freeze_dir.mkdir(parents=True, exist_ok=True)
27
+
28
+ def _path(self, freeze_id: str) -> Path:
29
+ return self.freeze_dir / f"{freeze_id}.json"
30
+
31
+ def load(self, freeze_id: str) -> Dict[str, Any]:
32
+ path = self._path(freeze_id)
33
+ if not path.exists():
34
+ raise FileNotFoundError(f"Freeze not found: {freeze_id}")
35
+
36
+ return json.loads(path.read_text())
37
+
38
+ def save(self, freeze_id: str, data: Dict[str, Any]):
39
+ path = self._path(freeze_id)
40
+ path.write_text(json.dumps(data, indent=2))
41
+
42
+ # ---------------------------------------------------------
43
+ # REVIEW (read-only)
44
+ # ---------------------------------------------------------
45
+ def review(self, freeze_id: str) -> Dict[str, Any]:
46
+ data = self.load(freeze_id)
47
+
48
+ return {
49
+ "freeze_id": freeze_id,
50
+ "status": data.get("status"),
51
+ "reason": data.get("reason"),
52
+ "risk_score": data.get("decision_payload", {}).get("risk_score"),
53
+ "policy": data.get("decision_payload", {}).get("policy_id"),
54
+ "created_at": data.get("created_at"),
55
+ "request": data.get("request_payload"),
56
+ }
57
+
58
+ # ---------------------------------------------------------
59
+ # RELEASE (approve execution)
60
+ # ---------------------------------------------------------
61
+ def release(
62
+ self,
63
+ freeze_id: str,
64
+ reviewer: str,
65
+ reason: str
66
+ ) -> Dict[str, Any]:
67
+
68
+ data = self.load(freeze_id)
69
+
70
+ if data.get("status") != "FROZEN":
71
+ raise Exception("Freeze is not active")
72
+
73
+ data["status"] = "RELEASED"
74
+ data["released_at"] = _utc()
75
+ data["released_by"] = reviewer
76
+ data["release_reason"] = reason
77
+
78
+ self.save(freeze_id, data)
79
+
80
+ return {
81
+ "status": "RELEASED",
82
+ "freeze_id": freeze_id,
83
+ "released_by": reviewer
84
+ }
85
+
86
+ # ---------------------------------------------------------
87
+ # ESCALATE → BLOCK
88
+ # ---------------------------------------------------------
89
+ def block(
90
+ self,
91
+ freeze_id: str,
92
+ reviewer: str,
93
+ reason: str
94
+ ) -> Dict[str, Any]:
95
+
96
+ data = self.load(freeze_id)
97
+
98
+ if data.get("status") != "FROZEN":
99
+ raise Exception("Freeze is not active")
100
+
101
+ data["status"] = "BLOCKED"
102
+ data["blocked_at"] = _utc()
103
+ data["blocked_by"] = reviewer
104
+ data["block_reason"] = reason
105
+
106
+ self.save(freeze_id, data)
107
+
108
+ return {
109
+ "status": "BLOCKED",
110
+ "freeze_id": freeze_id,
111
+ "blocked_by": reviewer
112
+ }
113
+
114
+
115
+ # ---------------------------------------------------------
116
+ # test
117
+ # ---------------------------------------------------------
118
+ if __name__ == "__main__":
119
+ fr = SovereignFreezeReview()
120
+
121
+ # Example usage:
122
+ # assumes freeze file already exists
123
+
124
+ try:
125
+ fz = fr.review("frz_test")
126
+ print("REVIEW:", json.dumps(fz, indent=2))
127
+ except:
128
+ print("No test freeze found")
129
+