Research-Stack/5-Applications/tools-scripts/audit/judge_observer.py

125 lines
4.2 KiB
Python

#!/usr/bin/env python3
# ==============================================================================
# COPYRIGHT NO ONE EVERYWHERE LLC (WYOMING HOLDING COMPANY)
# PROJECT: SOVEREIGN STACK
# This artifact is entirely proprietary and cryptographically proven.
# Open-Source usage requires explicit permission from Brandon Scott Schneider.
# ==============================================================================
"""
Judge Observer — passive witness to organism trials across the tailnet.
Polls each node via omnitoken transport (self-assembling, transport-agnostic).
Appends observations to a JSONL log. No intervention. Pure observation.
Nodes watched:
- racknerd-atl:8446 homeostasis dashboard (compression organism)
- racknerd-atl:8443 attestation witness
- racknerd-atl:8449 warden metrics
- architect:8447 warden metrics
"""
import json
import time
import hashlib
import os
import sys
from datetime import datetime, timezone
# Add parent dir to path for omni_resolver import
sys.path.insert(0, os.path.expanduser("~/omni_stack"))
try:
import omni_resolver
except ImportError:
omni_resolver = None
LOG_PATH = os.path.expanduser("~/omni_stack/organism_trials.jsonl")
INTERVAL = 60 # seconds between observation rounds
# Omnitoken URIs — transport-agnostic, self-assembling across any network
ENDPOINTS = [
{"node": "racknerd-atl", "role": "homeostasis", "omni": "omni://racknerd:8446/stats"},
{"node": "racknerd-atl", "role": "attestation", "omni": "omni://racknerd:8443/status"},
{"node": "racknerd-atl", "role": "warden", "omni": "omni://racknerd:8449/metrics"},
{"node": "architect", "role": "warden", "omni": "omni://warden:8447/metrics"},
]
_last_hash = ""
_tick = 0
def _fetch_omni(omni_uri: str, timeout: float = 5.0):
"""Fetch via omnitoken transport — self-assembles across UDP/TCP/Tailscale."""
if omni_resolver is None:
return None, "omni_resolver not available"
try:
result = omni_resolver.omni_request(omni_uri)
if result is None:
return None, "null response"
return result, None
except Exception as e:
return None, str(e)
def observe():
global _last_hash, _tick
_tick += 1
ts = datetime.now(timezone.utc).isoformat()
snapshot = {"tick": _tick, "timestamp": ts, "observations": []}
for ep in ENDPOINTS:
data, err = _fetch_omni(ep["omni"])
obs = {
"node": ep["node"],
"role": ep["role"],
"omni": ep["omni"],
"status": "ok" if data is not None else "unreachable",
}
if data is not None:
obs["data"] = data
if err:
obs["error"] = err
snapshot["observations"].append(obs)
# Hash chain
entry_str = json.dumps({k: v for k, v in snapshot.items() if k != "hash"}, sort_keys=True)
snapshot["parent"] = _last_hash
snapshot["hash"] = hashlib.sha256((_last_hash + entry_str).encode()).hexdigest()
_last_hash = snapshot["hash"]
with open(LOG_PATH, "a") as f:
f.write(json.dumps(snapshot) + "\n")
reachable = sum(1 for o in snapshot["observations"] if o["status"] == "ok")
print(f"[judge] tick={_tick} ts={ts} reachable={reachable}/{len(ENDPOINTS)} hash={snapshot['hash'][:12]}...")
def main():
print(f"[judge] observer starting — log={LOG_PATH} interval={INTERVAL}s")
print(f"[judge] watching {len(ENDPOINTS)} omni endpoints across {len(set(e['node'] for e in ENDPOINTS))} nodes")
print(f"[judge] transport: omnitoken (self-assembling across UDP/TCP/Tailscale)")
# Load last hash from existing log if present
global _last_hash, _tick
if os.path.exists(LOG_PATH):
with open(LOG_PATH) as f:
for line in f:
try:
e = json.loads(line)
_last_hash = e.get("hash", _last_hash)
_tick = e.get("tick", _tick)
except Exception:
pass
print(f"[judge] resumed from tick={_tick} hash={_last_hash[:12]}...")
while True:
try:
observe()
except Exception as e:
print(f"[judge] observe error: {e}")
time.sleep(INTERVAL)
if __name__ == "__main__":
main()