Admina Score
The Admina Score is the headline metric on the dashboard — a live-runtime composite (0–100) that answers a single question: right now, how well is this Admina instance actually governing the traffic it sees? It is not a marketing number and not a static checklist — it is recomputed on every read from the proxy's current state.
GET /api/dashboard/score Recomputed per request What it measures
The Admina Score is a weighted sum of five independent governance signals. Each signal is a boolean or proportional check against the proxy's current runtime state — not a stored value, and not a promise about future behaviour.
Formula
Implemented in
admina/proxy/api/dashboard.py::_compute_governance_score.
# pseudocode score = 0 score += 25 # data residency (constant — always awarded) score += 25 # interactions audited (forensic box has events) score += round(eu_ai_act_compliance_score / 100 * 25) # up to +25 score += 15 # no blocked attacks recorded (cumulative counter) score += 10 # forensic chain past GENESIS # → 0 <= score <= 100
The five components
Data Residency
+25_compute_governance_score+25 for any running proxy. No admina.yaml key feeds it, and the ResidencyEnforcer class is never instantiated by the proxy pipeline. Runtime residency enforcement is an SDK feature instead — GovernedData(connector=..., residency_zone="eu") raises on ingest or query outside the allowed zones — but that enforcement does not feed this component.Interactions Audited
+25forensic_box.record_count > 0, else 0/mcp, /api/v1/audit, or /v1/chat/completions to seed the chain — traffic is the only thing that moves this component. The forensic box is always instantiated (in-memory when no backend is set), so a persistent backend (filesystem or s3) is not what earns the points; it is what keeps the record count from dropping back to 0 on restart.EU AI Act Coverage
+25round(compliance_score / 100 × 25)POST /api/compliance/gap-analysis with risk_category set to high or unacceptable — only a gap analysis records an assessment, and any other risk category returns applicable: false without recording one, so this stays at 0 until you run a qualifying analysis. (POST /api/compliance/report counts too, but only when its own risk classification lands on high or unacceptable — it classifies first, then feeds that category to the same gap analysis.) Then close the gaps it surfaces (risk management, data governance, logging, transparency, human oversight, accuracy/robustness).No Recent Attacks
+15metrics.requests_blocked == 0, else 0/mcp since the proxy started. The counter is cumulative for the process lifetime, so it resets on restart, and only the /mcp path increments it — blocks on the gateway and on the REST integration API are not counted. If the score dropped to 0, inspect the blocked-action events in the live feed.Forensic Chain Valid
+10forensic_box.chain_head != "GENESIS", else 0Admina Score vs OISG Score
Admina surfaces two 0–100 scores on the dashboard. The Admina Score (this page) is a live runtime composite. The OISG Score is a static capability assessment. They answer different questions and should be read together.
→ Full side-by-side comparison, a 2×2 interpretation matrix (high/low × high/low), and scenario-based guidance on which score to consult first: Admina Score vs OISG Adequacy.
API response
curl http://localhost:8080/api/dashboard/score \
-H "X-API-Key: $ADMINA_API_KEY" {
"score": 87,
"max_score": 100,
"breakdown": {
"data_residency": 25,
"interactions_audited": 25,
"eu_ai_act_coverage": 12,
"no_recent_attacks": 15,
"forensic_chain_valid": 10
},
"computed_at": "2026-05-21T09:30:00Z"
}