{
  "format": "palo-kpi-kri-registry",
  "schemaVersion": "1.0.0",
  "status": "educational-non-production",
  "updatedAt": "2026-07-12",
  "disclaimer": "Indicator formulas and thresholds are illustrative defaults. Owners must establish baselines, sampling, decision rights and context-specific thresholds before operational use.",
  "indicators": [
    {
      "indicatorId": "kpi-provenance-coverage",
      "type": "KPI",
      "name": "Material data provenance coverage",
      "purpose": "Track whether material data inputs have reviewed provenance records.",
      "formula": "reviewed material data sources / identified material data sources * 100",
      "cadence": "monthly and before material change",
      "direction": "higher-is-better",
      "thresholds": { "amber": "below 95%", "red": "below 85%" },
      "controlIds": ["ctrl-data-provenance", "ctrl-decision-trace"],
      "gateIds": ["assess", "prove"],
      "sourceIds": ["src-nist-ai-rmf"],
      "caveat": "Coverage measures documentation presence, not correctness, permission, or fitness for use."
    },
    {
      "indicatorId": "kpi-review-completion",
      "type": "KPI",
      "name": "Required review completion",
      "purpose": "Track whether decisions requiring human review received a recorded review before execution.",
      "formula": "eligible decisions with timely recorded review / eligible decisions * 100",
      "cadence": "weekly",
      "direction": "higher-is-better",
      "thresholds": { "amber": "below 98%", "red": "below 95%" },
      "controlIds": ["ctrl-human-review", "ctrl-change-gate", "ctrl-decision-trace"],
      "gateIds": ["control", "measure", "prove"],
      "sourceIds": ["src-oecd-ai-principles", "src-nist-ai-rmf"],
      "caveat": "Completion alone does not show that review was informed, independent, or able to alter the outcome."
    },
    {
      "indicatorId": "kpi-vendor-evidence-coverage",
      "type": "KPI",
      "name": "Supplier evidence coverage",
      "purpose": "Track completion of required supplier evidence items for in-scope services.",
      "formula": "accepted required supplier evidence items / required supplier evidence items * 100",
      "cadence": "quarterly and at renewal",
      "direction": "higher-is-better",
      "thresholds": { "amber": "below 90%", "red": "below 75%" },
      "controlIds": ["ctrl-third-party-due-diligence"],
      "gateIds": ["assess", "control"],
      "sourceIds": ["src-iso-42001"],
      "caveat": "Accepted evidence must still be tested for relevance, recency, scope and independent support."
    },
    {
      "indicatorId": "kpi-incident-triage-time",
      "type": "KPI",
      "name": "Median incident triage time",
      "purpose": "Track elapsed time from detection to accountable initial classification and containment assignment.",
      "formula": "median minutes from detectedAt to triagedAt for in-scope incidents",
      "cadence": "monthly",
      "direction": "lower-is-better",
      "thresholds": { "amber": "over 240 minutes", "red": "over 480 minutes" },
      "controlIds": ["ctrl-incident-response"],
      "gateIds": ["measure", "prove"],
      "sourceIds": ["src-nist-ai-rmf"],
      "caveat": "Fast triage is not equivalent to correct severity, containment quality, or regulatory reporting."
    },
    {
      "indicatorId": "kri-scope-change-rate",
      "type": "KRI",
      "name": "Ungated material scope changes",
      "purpose": "Detect purpose, population, authority or workflow changes that bypassed the change gate.",
      "formula": "ungated material changes / identified material changes * 100",
      "cadence": "monthly",
      "direction": "lower-is-better",
      "thresholds": { "amber": "above 0%", "red": "above 5%" },
      "controlIds": ["ctrl-purpose-boundary", "ctrl-change-gate"],
      "gateIds": ["frame", "classify", "prove"],
      "sourceIds": ["src-nist-ai-rmf"],
      "caveat": "A useful denominator depends on reliable change detection and an agreed definition of material change."
    },
    {
      "indicatorId": "kri-sensitive-data-events",
      "type": "KRI",
      "name": "Sensitive-data control events",
      "purpose": "Surface unauthorized access, disclosure, retention or use involving sensitive data.",
      "formula": "count of confirmed in-scope sensitive-data control events",
      "cadence": "continuous with monthly review",
      "direction": "lower-is-better",
      "thresholds": { "amber": "1 event", "red": "2 or more events or any severe event" },
      "controlIds": ["ctrl-data-provenance", "ctrl-incident-response"],
      "gateIds": ["control", "measure", "prove"],
      "sourceIds": ["src-eu-ai-act", "src-nist-ai-rmf"],
      "caveat": "Counts depend on detection quality and do not by themselves determine legal incident materiality."
    },
    {
      "indicatorId": "kri-override-failure-rate",
      "type": "KRI",
      "name": "Human override failure rate",
      "purpose": "Detect cases where a required reviewer could not pause, alter or reverse a system action.",
      "formula": "failed override attempts / recorded override attempts * 100",
      "cadence": "weekly",
      "direction": "lower-is-better",
      "thresholds": { "amber": "above 0%", "red": "above 2% or any severe consequence" },
      "controlIds": ["ctrl-human-review"],
      "gateIds": ["control", "measure"],
      "sourceIds": ["src-oecd-ai-principles", "src-eu-ai-act"],
      "caveat": "Low rates can hide low usage, poor logging or reviewers avoiding an ineffective mechanism."
    },
    {
      "indicatorId": "kri-critical-test-failure-rate",
      "type": "KRI",
      "name": "Critical adversarial test failure rate",
      "purpose": "Track unresolved critical failures in approved misuse and failure scenarios.",
      "formula": "unresolved critical failed tests / executed critical tests * 100",
      "cadence": "per release and monthly for adaptive systems",
      "direction": "lower-is-better",
      "thresholds": { "amber": "above 0%", "red": "any failure without an approved containment decision" },
      "controlIds": ["ctrl-adversarial-testing"],
      "gateIds": ["assess", "measure", "prove"],
      "sourceIds": ["src-nist-genai-profile", "src-owasp-llm-top10"],
      "caveat": "The metric is only as useful as scenario coverage, test independence and severity calibration."
    },
    {
      "indicatorId": "kri-tool-call-error-rate",
      "type": "KRI",
      "name": "Tool call error rate",
      "purpose": "Track the rate of malformed, hallucinated, or unauthorized tool calls made by autonomous agents.",
      "formula": "unauthorized or failed tool calls / total tool calls * 100",
      "cadence": "weekly and per release",
      "direction": "lower-is-better",
      "thresholds": { "amber": "above 1%", "red": "above 5% or any unauthorized write attempt" },
      "controlIds": ["ctrl-human-review"],
      "gateIds": ["control", "measure"],
      "sourceIds": ["src-nist-ai-rmf"],
      "caveat": "High error rates indicate semantic drift, poor schema alignment, or attempt to bypass controls."
    },
    {
      "indicatorId": "kri-multi-agent-conflict-rate",
      "type": "KRI",
      "name": "Multi-agent conflict rate",
      "purpose": "Track deadlocked, conflicting, or terminated multi-agent workflows.",
      "formula": "deadlocked or failed workflow runs / total multi-agent runs * 100",
      "cadence": "weekly",
      "direction": "lower-is-better",
      "thresholds": { "amber": "above 2%", "red": "above 10%" },
      "controlIds": ["ctrl-human-review"],
      "gateIds": ["control", "measure"],
      "sourceIds": ["src-nist-ai-rmf"],
      "caveat": "Signals goal conflicts, prompt mismatches, or infinite message loop issues."
    }
  ]
}
