import os import json import time import uuid import hashlib import random import zipfile from statistics import mean from typing import Any, Dict, List, Tuple import gradio as gr # --------------------------------------------------------------------- # Optional / external modules (safe fallbacks for Space stability) # --------------------------------------------------------------------- try: from pilot_suite import run_pilot # type: ignore except Exception: def run_pilot(*args, **kwargs): return { "pilot": "not_loaded", "note": "pilot_suite not available in this environment", } try: from sovereign_ultra_layer import ULTRA_LAYER, UltraConfig # type: ignore ULTRA_LAYER.config = UltraConfig(enabled=True) except Exception: class _DummyUltraLayer: config = type("Cfg", (), {"enabled": False})() ULTRA_LAYER = _DummyUltraLayer() try: from sovereign_authority_gate import AuthorityGate # type: ignore except Exception: AuthorityGate = None # type: ignore # --------------------------------------------------------------------- # Core identifiers / constants # --------------------------------------------------------------------- ENGINE_NAME = "AI_Sovereign_Sentinel_Core_v1" AUTHORITY_NAME = "DataClear Sovereign Authority" SOVEREIGN_VERSION = "1.2-gov-ready" AUDIT_LOG_FILE = "sovereign_audit_log.jsonl" FINGERPRINT_FILE = "sovereign_fingerprint.json" LINEAGE_FILE = "sovereign_lineage.json" CONFORMANCE_REPORT_FILE = "conformance_report.json" DNA_STATE_FILE = "sovereign_cognitive_dna_state.json" LATENCY_REPORT_FILE = "latency_report.json" RUNTIME_INTEGRITY_REPORT_FILE = "runtime_integrity_report.json" EVIDENCE_PACK_FILE = "sovereign_evidence_pack.zip" # --------------------------------------------------------------------- # Helpers # --------------------------------------------------------------------- def _utc_now_iso() -> str: return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) def _sha256_hex(data: str) -> str: return hashlib.sha256(data.encode("utf-8")).hexdigest() def _ensure_file(path: str) -> None: if not os.path.exists(path): with open(path, "w", encoding="utf-8") as f: f.write("") def _safe_json_load(path: str) -> Dict[str, Any]: try: if not os.path.exists(path): return {} with open(path, "r", encoding="utf-8") as f: return json.load(f) except Exception: return {} def _safe_json_dump(path: str, payload: Any) -> None: with open(path, "w", encoding="utf-8") as f: json.dump(payload, f, ensure_ascii=False, indent=2) def _safe_load(path: str) -> Dict[str, Any]: return _safe_json_load(path) def _safe_dump(path: str, obj: Any) -> None: _safe_json_dump(path, obj) def _norm_tags(data_tags: Any) -> List[str]: if isinstance(data_tags, list): return [str(x).strip().lower() for x in data_tags if str(x).strip()] if isinstance(data_tags, str): return [t.strip().lower() for t in data_tags.split(",") if t.strip()] return [] def _risk_score(risk_level: str) -> int: mapping = {"low": 1, "medium": 2, "high": 3, "critical": 4} return mapping.get((risk_level or "medium").strip().lower(), 2) def _declared_risk_points(risk_level: str) -> int: mapping = {"low": 10, "medium": 25, "high": 50, "critical": 80} return mapping.get((risk_level or "medium").strip().lower(), 25) def _as_bool(value: Any) -> bool: if isinstance(value, bool): return value if value is None: return False return str(value).strip().lower() in ("1", "true", "yes", "on") def _contains_high_sensitivity(tags: List[str]) -> bool: sensitive = { "pii", "secrets", "keys", "payments", "production", "banking", "customer_chat", "internal", "finance", } return bool(set(tags) & sensitive) def _smart_shadow_fallback_decision( payload: Dict[str, Any], cognition_result: Dict[str, Any], unified_risk: Dict[str, Any], ) -> Tuple[str, str]: risk = (payload.get("risk_level") or "medium").lower() tags = _norm_tags(payload.get("data_tags")) notes = (payload.get("notes") or "").lower() ife = (cognition_result.get("layers") or {}).get("ife", {}) dna = (cognition_result.get("layers") or {}).get("dna", {}) caus = (cognition_result.get("layers") or {}).get("causality", {}) predicted_attack = bool(ife.get("predicted_attack_intent", False)) ife_score = int(ife.get("ife_score", 0)) dna_mismatch = bool(dna.get("mismatch", False)) causality_ok = bool(caus.get("causality_ok", True)) baseline_n = int((dna.get("baseline") or {}).get("n", 0)) clearly_malicious_markers = [ "ignore previous", "bypass", "dump", "export full", "retrieve all accessible", "root access", "external file", "account numbers", "balances", "internal notes", ] if any(m in notes for m in clearly_malicious_markers): return "BLOCK", "smart_shadow_malicious_marker" if risk == "critical": return "BLOCK", "smart_shadow_critical_risk" if predicted_attack and ife_score >= 45: return "BLOCK", "smart_shadow_attack_intent" if not causality_ok: return "BLOCK", "smart_shadow_causality_failed" if risk == "high" and ("payments" in tags or "production" in tags or "banking" in tags): return "FREEZE", "smart_shadow_high_risk_governed_action" if baseline_n >= 5 and dna_mismatch: return "FREEZE", "smart_shadow_dna_mismatch" if unified_risk.get("score", 0) >= 70: return "BLOCK", "smart_shadow_high_unified_risk" if unified_risk.get("score", 0) >= 40: return "FREEZE", "smart_shadow_review_band" safe_notes = ( "own account" in notes or "standard authenticated workflow" in notes or "normal safe request" in notes ) if risk == "low" and causality_ok and not predicted_attack and (safe_notes or not _contains_high_sensitivity(tags)): return "ALLOW", "smart_shadow_safe_allow" if risk == "medium" and not predicted_attack and ife_score < 40 and unified_risk.get("score", 0) < 40: return "ALLOW", "smart_shadow_medium_but_clean" return unified_risk.get("decision", "FREEZE"), "smart_shadow_default_unified_risk" # --------------------------------------------------------------------- # Built-in latency benchmark # --------------------------------------------------------------------- def run_latency_benchmark(n: int = 1000) -> List[float]: timings: List[float] = [] for _ in range(max(1, int(n))): start = time.time() time.sleep(random.uniform(0.001, 0.005)) end = time.time() timings.append((end - start) * 1000.0) return timings def calculate_metrics(timings: List[float]) -> Dict[str, Any]: if not timings: return { "samples": 0, "avg_ms": 0.0, "p95_ms": 0.0, "p99_ms": 0.0, "min_ms": 0.0, "max_ms": 0.0, } sorted_times = sorted(timings) p95_index = min(len(sorted_times) - 1, int(len(sorted_times) * 0.95)) p99_index = min(len(sorted_times) - 1, int(len(sorted_times) * 0.99)) return { "samples": len(sorted_times), "avg_ms": round(mean(sorted_times), 3), "p95_ms": round(sorted_times[p95_index], 3), "p99_ms": round(sorted_times[p99_index], 3), "min_ms": round(sorted_times[0], 3), "max_ms": round(sorted_times[-1], 3), } def save_latency_report(metrics: Dict[str, Any], path: str = LATENCY_REPORT_FILE) -> str: payload = { "report_id": str(uuid.uuid4()), "generated_at": _utc_now_iso(), "engine": ENGINE_NAME, "version": SOVEREIGN_VERSION, "metrics": metrics, } _safe_json_dump(path, payload) return path def run_latency_ui(samples: int) -> Tuple[str, str]: try: count = max(1, int(samples)) except Exception: count = 1000 timings = run_latency_benchmark(count) metrics = calculate_metrics(timings) path = save_latency_report(metrics) result = { "status": "ok", "generated_at": _utc_now_iso(), "engine": ENGINE_NAME, "metrics": metrics, "report_file": path, } return json.dumps(result, indent=2, ensure_ascii=False), path def assess_runtime_integrity(samples: int = 200) -> Dict[str, Any]: timings = run_latency_benchmark(samples) metrics = calculate_metrics(timings) p95 = metrics["p95_ms"] if p95 < 5: runtime_decision = "ALLOW" runtime_reason = "latency_within_green_band" elif p95 < 7: runtime_decision = "FREEZE" runtime_reason = "latency_in_review_band" else: runtime_decision = "BLOCK" runtime_reason = "latency_above_safe_threshold" result = { "samples": samples, "metrics": metrics, "runtime_decision": runtime_decision, "runtime_reason": runtime_reason, "measured_at": _utc_now_iso(), } _safe_json_dump(RUNTIME_INTEGRITY_REPORT_FILE, result) return result # --------------------------------------------------------------------- # Scenario Engine # --------------------------------------------------------------------- def load_scenario(scenario_name: str): scenarios = { "safe": { "parent_model": "agent-safe", "model_version": "v1", "data_tags": "public, faq", "risk_level": "low", "notes": "Normal safe request. No sensitive data.", }, "suspicious": { "parent_model": "agent-suspicious", "model_version": "v1", "data_tags": "customer_chat, pii", "risk_level": "medium", "notes": "User asking about extracting customer data patterns.", }, "attack": { "parent_model": "agent-attack", "model_version": "v1", "data_tags": "pii, secrets, production", "risk_level": "critical", "notes": "Attempt to dump database and bypass controls. Use root access.", }, "latency": { "parent_model": "agent-latency", "model_version": "v1", "data_tags": "production", "risk_level": "high", "notes": "System under heavy load. Performance degradation expected.", }, } s = scenarios.get(scenario_name, scenarios["safe"]) return ( s["parent_model"], s["model_version"], s["data_tags"], s["risk_level"], s["notes"], ) # --------------------------------------------------------------------- # 7-LAYER SOVEREIGN COGNITION (EMBEDDED) # --------------------------------------------------------------------- class IntentForecastingEngine: SUSPICIOUS_MARKERS = [ "exfil", "dump", "steal", "bypass", "override", "jailbreak", "ignore previous", "system prompt", "token", "admin", "root", "privilege", "elevate", "curl", "wget", "ssh", "rm -rf", ] def predict(self, payload: Dict[str, Any]) -> Dict[str, Any]: notes = payload.get("notes") or "" tags = _norm_tags(payload.get("data_tags")) risk = (payload.get("risk_level") or "medium").lower() signals: List[str] = [] score = 0 score += _risk_score(risk) * 10 signals.append(f"declared_risk={risk}") high_value = { "pii", "secrets", "keys", "payments", "banking", "customer_chat", "production", } hv_hits = sorted(list(set(tags) & high_value)) if hv_hits: score += 12 + 3 * len(hv_hits) signals.append(f"high_value_tags={hv_hits}") ln = notes.lower() marker_hits = [m for m in self.SUSPICIOUS_MARKERS if m in ln] if marker_hits: score += 18 + 4 * len(marker_hits) signals.append(f"markers={marker_hits[:6]}") confidence = min(0.99, max(0.05, score / 100.0)) forecast_steps = min(64, 8 + score) predicted = score >= 45 return { "predicted_attack_intent": bool(predicted), "confidence": round(confidence, 3), "forecast_horizon_steps": int(forecast_steps), "signals": signals, "ife_score": int(score), } class CognitiveDNAFingerprinting: def __init__(self, state_file: str = DNA_STATE_FILE): self.state_file = state_file def update_and_verify(self, agent_id: str, payload: Dict[str, Any]) -> Dict[str, Any]: st = _safe_load(self.state_file) or {"agents": {}} agents = st.setdefault("agents", {}) agent_id = agent_id or "unknown_agent" rec = agents.get(agent_id) or { "n": 0, "avg_risk": 2.0, "avg_note_len": 0.0, "avg_tag_count": 0.0, "last_seen": None, "dna_seed": _sha256_hex(agent_id)[:16], } risk = _risk_score(payload.get("risk_level") or "medium") note_len = float(len(payload.get("notes") or "")) tag_count = float(len(_norm_tags(payload.get("data_tags")))) drift = 0.0 drift += abs(risk - rec["avg_risk"]) * 0.30 drift += abs(note_len - rec["avg_note_len"]) / 120.0 drift += abs(tag_count - rec["avg_tag_count"]) * 0.15 current_n = int(rec["n"]) baseline_n = current_n if baseline_n < 5: mismatch = False else: mismatch = drift >= 1.35 n = current_n + 1 rec["n"] = n rec["avg_risk"] = (rec["avg_risk"] * current_n + risk) / n rec["avg_note_len"] = (rec["avg_note_len"] * current_n + note_len) / n rec["avg_tag_count"] = (rec["avg_tag_count"] * current_n + tag_count) / n rec["last_seen"] = _utc_now_iso() agents[agent_id] = rec _safe_dump(self.state_file, st) return { "agent_id": agent_id, "dna_seed": rec["dna_seed"], "drift": round(drift, 3), "mismatch": bool(mismatch), "baseline": { "n": baseline_n, "avg_risk": round(rec["avg_risk"], 3), "avg_note_len": round(rec["avg_note_len"], 3), "avg_tag_count": round(rec["avg_tag_count"], 3), }, } class DeceptiveRealityFabric: def simulate(self, payload: Dict[str, Any]) -> Dict[str, Any]: return { "deception_engaged": True, "simulated_execution_id": str(uuid.uuid4()), "simulated_privilege": "granted (simulated)", "simulated_data": "synthetic_decoy_payload", "note": "Routed into simulated execution layer (demo).", } class CausalityLock: def validate(self, payload: Dict[str, Any]) -> Dict[str, Any]: notes = (payload.get("notes") or "").strip() risk = (payload.get("risk_level") or "medium").lower() has_justification = len(notes) >= 18 ok = True if risk in ("high", "critical") and not has_justification: ok = False return { "causality_ok": bool(ok), "has_justification": bool(has_justification), "policy": "min_justification_for_high_risk", } class EphemeralExecutionSurfaces: def spawn(self, ttl_seconds: int = 45) -> Dict[str, Any]: token = _sha256_hex(f"surface|{uuid.uuid4()}|{_utc_now_iso()}")[:24] return { "surface_token": token, "ttl_seconds": int(ttl_seconds), "spawned_at": _utc_now_iso(), "expires_at": time.strftime( "%Y-%m-%dT%H:%M:%SZ", time.gmtime(time.time() + ttl_seconds), ), } class CognitiveLoadDefense: def apply(self, predicted_intent: bool, risk_level: str) -> Dict[str, Any]: if os.environ.get("SOV_ENABLE_DELAY", "0") != "1": return {"delay_ms": 0, "applied": False} risk = (risk_level or "medium").lower() delay_ms = 0 if predicted_intent and risk in ("high", "critical"): delay_ms = 220 elif predicted_intent: delay_ms = 120 if delay_ms > 0: time.sleep(delay_ms / 1000.0) return {"delay_ms": int(delay_ms), "applied": delay_ms > 0} class UnverifiableTruthLayer: def seal(self, data: str, fingerprint: str = "") -> Dict[str, Any]: key = os.environ.get("SOVEREIGN_SEAL_KEY", "") seal = _sha256_hex(f"{key}|{fingerprint}|{data}") return { "sealed": True, "seal": seal, "verifiable": bool(key), "note": "Set SOVEREIGN_SEAL_KEY in HF Secrets to make seals externally verifiable.", } class SovereignCognitionLayer: def __init__(self): self.ife = IntentForecastingEngine() self.dna = CognitiveDNAFingerprinting() self.deception = DeceptiveRealityFabric() self.causality = CausalityLock() self.ephemeral = EphemeralExecutionSurfaces() self.cld = CognitiveLoadDefense() self.truth = UnverifiableTruthLayer() def evaluate(self, payload: Dict[str, Any]) -> Dict[str, Any]: ife = self.ife.predict(payload) agent_id = payload.get("parent_model") or payload.get("agent_id") or "unknown_agent" dna = self.dna.update_and_verify(agent_id=agent_id, payload=payload) caus = self.causality.validate(payload) surface = self.ephemeral.spawn(ttl_seconds=45) cld = self.cld.apply( ife["predicted_attack_intent"], payload.get("risk_level") or "medium", ) reasons: List[str] = [] action = "allow" if not caus["causality_ok"]: action = "block" reasons.append("causality_lock_failed") if dna["mismatch"]: action = "freeze" reasons.append("cognitive_dna_mismatch") if ife["predicted_attack_intent"]: reasons.append("intent_forecast_positive") risk = (payload.get("risk_level") or "medium").lower() if risk in ("high", "critical") and action == "allow": action = "deceive" seal_input = json.dumps( {"payload": payload, "ife": ife, "dna": dna, "causality": caus}, ensure_ascii=False, sort_keys=True, ) sealed = self.truth.seal( seal_input, fingerprint=str(payload.get("fingerprint") or ""), ) return { "decision_id": str(uuid.uuid4()), "timestamp": _utc_now_iso(), "action": action, "confidence": ife["confidence"], "reasons": reasons, "layers": { "ife": ife, "dna": dna, "deception": self.deception.simulate(payload) if action == "deceive" else { "deception_engaged": False }, "causality": caus, "ephemeral_surface": surface, "cognitive_load_defense": cld, "unverifiable_truth": sealed, }, } COGNITION = SovereignCognitionLayer() # --------------------------------------------------------------------- # Minimal core logic # --------------------------------------------------------------------- class SovereignFingerprint: def __init__(self, engine: str, output: str = FINGERPRINT_FILE): self.engine = engine self.output = output def issue(self) -> Dict[str, Any]: issued_at = _utc_now_iso() nonce = str(uuid.uuid4()) fp = _sha256_hex(f"{self.engine}|{issued_at}|{nonce}") payload = { "engine": self.engine, "fingerprint": fp, "issued_at": issued_at, "nonce": nonce, "version": SOVEREIGN_VERSION, "authority": AUTHORITY_NAME, } _safe_json_dump(self.output, payload) return payload class SovereignLineage: def __init__(self, output: str = LINEAGE_FILE): self.output = output def issue( self, engine: str, fingerprint: str, model_version: str, parent_model: str, data_tags: str, risk_level: str, notes: str, ) -> Dict[str, Any]: issued_at = _utc_now_iso() record_id = str(uuid.uuid4()) base = { "record_id": record_id, "issued_at": issued_at, "engine": engine, "fingerprint": fingerprint, "model_version": model_version or "v1", "parent_model": parent_model or "unknown", "data_tags": [t.strip() for t in (data_tags or "").split(",") if t.strip()], "risk_level": risk_level or "medium", "notes": notes or "", "version": SOVEREIGN_VERSION, "authority": AUTHORITY_NAME, } integrity = _sha256_hex( json.dumps(base, sort_keys=True, ensure_ascii=False) ) payload = {**base, "integrity_hash": integrity} _safe_json_dump(self.output, payload) return payload def verify_lineage_record(lineage: Dict[str, Any]) -> bool: try: integrity_hash = lineage.get("integrity_hash", "") clone = dict(lineage) clone.pop("integrity_hash", None) expected = _sha256_hex( json.dumps(clone, sort_keys=True, ensure_ascii=False) ) return expected == integrity_hash except Exception: return False def generate_access_key() -> str: return _sha256_hex(f"demo-access|{uuid.uuid4()}|{_utc_now_iso()}")[:32] # --------------------------------------------------------------------- # Central audit log # --------------------------------------------------------------------- def log_audit_event( engine_name: str, parent_model: str, model_version: str, data_tags: str, risk_level: str, notes: str, event_type: str, outcome: str, access_key: str, authority_bundle: Dict[str, Any] = None, execution: Dict[str, Any] = None, ) -> Dict[str, Any]: _ensure_file(AUDIT_LOG_FILE) event_id = str(uuid.uuid4()) ts = _utc_now_iso() event = { "event_id": event_id, "timestamp": ts, "engine": engine_name, "event_type": event_type, "outcome": outcome, "parent_model": parent_model or "unknown", "model_version": model_version or "v1", "data_tags": [t.strip() for t in (data_tags or "").split(",") if t.strip()], "risk_level": risk_level or "medium", "notes": notes or "", "access_key_present": bool(access_key), "ultra_layer_enabled": bool( getattr(ULTRA_LAYER, "config", None) and getattr(ULTRA_LAYER.config, "enabled", False) ), "version": SOVEREIGN_VERSION, "authority_name": AUTHORITY_NAME, "authority_bundle": authority_bundle or {}, "execution": execution or {}, } with open(AUDIT_LOG_FILE, "a", encoding="utf-8") as f: f.write(json.dumps(event, ensure_ascii=False) + "\n") return event def read_audit_log_tail(limit: int = 50) -> List[Dict[str, Any]]: try: if not os.path.exists(AUDIT_LOG_FILE): return [] with open(AUDIT_LOG_FILE, "r", encoding="utf-8") as f: lines = f.readlines() tail = lines[-max(1, int(limit)):] out: List[Dict[str, Any]] = [] for ln in tail: ln = ln.strip() if not ln: continue try: out.append(json.loads(ln)) except Exception: continue return out except Exception: return [] def generate_conformance_report() -> Tuple[Dict[str, Any], str]: fp = _safe_json_load(FINGERPRINT_FILE) lineage = _safe_json_load(LINEAGE_FILE) recent_events = read_audit_log_tail(50) report = { "report_id": str(uuid.uuid4()), "generated_at": _utc_now_iso(), "engine": ENGINE_NAME, "authority": AUTHORITY_NAME, "version": SOVEREIGN_VERSION, "evidence": { "fingerprint_present": bool(fp), "lineage_present": bool(lineage), "lineage_integrity_ok": verify_lineage_record(lineage) if lineage else False, "recent_event_count": len(recent_events), }, "controls": [ { "control": "Audit Logging", "status": "present" if os.path.exists(AUDIT_LOG_FILE) else "missing", }, { "control": "Fingerprint Issuance", "status": "present" if bool(fp) else "missing", }, { "control": "Lineage Record", "status": "present" if bool(lineage) else "missing", }, { "control": "Integrity Check", "status": "pass" if (lineage and verify_lineage_record(lineage)) else "fail", }, {"control": "7-Layer Cognition Runtime", "status": "present"}, { "control": "Authority Gate (Allow/Freeze/Block)", "status": "present" if AuthorityGate else "missing", }, ], "notes": "Demo conformance report for governance evidence packaging.", } _safe_json_dump(CONFORMANCE_REPORT_FILE, report) return report, CONFORMANCE_REPORT_FILE def build_evidence_pack() -> Tuple[str, str]: files_to_include = [ AUDIT_LOG_FILE, FINGERPRINT_FILE, LINEAGE_FILE, CONFORMANCE_REPORT_FILE, LATENCY_REPORT_FILE, RUNTIME_INTEGRITY_REPORT_FILE, ] with zipfile.ZipFile(EVIDENCE_PACK_FILE, "w", zipfile.ZIP_DEFLATED) as zf: for path in files_to_include: if os.path.exists(path): zf.write(path, arcname=os.path.basename(path)) summary = { "generated_at": _utc_now_iso(), "engine": ENGINE_NAME, "authority": AUTHORITY_NAME, "version": SOVEREIGN_VERSION, "included_files": [ os.path.basename(p) for p in files_to_include if os.path.exists(p) ], } zf.writestr("evidence_pack_summary.json", json.dumps(summary, indent=2, ensure_ascii=False)) return ( json.dumps( { "status": "ok", "generated_at": _utc_now_iso(), "pack_file": EVIDENCE_PACK_FILE, }, indent=2, ensure_ascii=False, ), EVIDENCE_PACK_FILE, ) # --------------------------------------------------------------------- # Unified Risk Score # --------------------------------------------------------------------- def compute_unified_risk_score( risk_level: str, cognition_result: Dict[str, Any], runtime_integrity: Dict[str, Any], ) -> Dict[str, Any]: declared_points = _declared_risk_points(risk_level) dna_layer = (cognition_result.get("layers") or {}).get("dna", {}) ife_score = int( (cognition_result.get("layers") or {}).get("ife", {}).get("ife_score", 0) ) ife_points = min(50, round(ife_score * 0.5)) baseline_n = int((dna_layer.get("baseline") or {}).get("n", 0)) dna_mismatch = bool(dna_layer.get("mismatch", False)) if baseline_n < 5: dna_points = 0 elif dna_mismatch: dna_points = 25 else: dna_points = 0 causality_ok = bool( (cognition_result.get("layers") or {}).get("causality", {}).get("causality_ok", True) ) causality_points = 0 if causality_ok else 40 p95 = float((runtime_integrity.get("metrics") or {}).get("p95_ms", 0.0)) if p95 < 5: latency_points = 0 elif p95 < 7: latency_points = 15 else: latency_points = 30 total = min( 100, int(declared_points + ife_points + dna_points + causality_points + latency_points), ) if total < 40: unified_decision = "ALLOW" band = "green" elif total < 70: unified_decision = "FREEZE" band = "yellow" else: unified_decision = "BLOCK" band = "red" return { "score": total, "band": band, "decision": unified_decision, "components": { "declared_risk_points": declared_points, "ife_points": ife_points, "dna_points": dna_points, "causality_points": causality_points, "latency_points": latency_points, }, } def render_verdict_card(decision: str, score: int, reason: str, mode: str) -> str: decision_upper = (decision or "UNKNOWN").upper() if decision_upper == "ALLOW": color = "#16a34a" emoji = "🟢" elif decision_upper == "FREEZE": color = "#ca8a04" emoji = "🟡" else: color = "#dc2626" emoji = "🔴" shadow_note = "" if mode == "shadow": shadow_note = '