{
  "$note": "ACAM machine-readable entity-risk declaration (A5): the five ordinal signed axes, the fail-closed default, the risk-tier dominance rules feeding the A2 minimum-n table, and the alignment map to assurance-target.schema.json as data. One release unit with acam/ACAM-ENTITY-RISK.md and the ACAM standard; versions together (ACAM-SPEC.md 17 V-1). Keys recursively sorted; ASCII only. Ordinals ascend in risk; no blended score exists (SC-3 applied to scoping).",
  "acam_version": "0.1.0-draft",
  "alignment_source": "apeiris-control-core/assurance-target.schema.json",
  "axes": [
    {
      "alignment": {
        "assurance_target_field": "impact_level",
        "note": "ACAM splits the single blended impact_level into three harm categories reusing its value vocabulary; max of the three must equal a pinned snapshot's impact_level (ER-6). Proposed upstream extension: optional impact_by_category.",
        "status": "extension"
      },
      "axis_id": "consequence_class",
      "categories": [
        "financial",
        "safety",
        "rights"
      ],
      "kind": "per-category ordinal",
      "ordinal": [
        {
          "rank": 0,
          "value": "minimal"
        },
        {
          "rank": 1,
          "value": "limited"
        },
        {
          "rank": 2,
          "value": "significant"
        },
        {
          "rank": 3,
          "value": "high"
        },
        {
          "rank": 4,
          "value": "critical"
        }
      ]
    },
    {
      "alignment": {
        "assurance_target_field": "autonomy_level",
        "note": "name and enum reused verbatim; enum drift against the platform schema is a release blocker",
        "status": "aligned"
      },
      "axis_id": "autonomy_level",
      "kind": "ordinal",
      "ordinal": [
        {
          "rank": 0,
          "value": "assistive"
        },
        {
          "rank": 1,
          "value": "advisory"
        },
        {
          "rank": 2,
          "value": "semi-autonomous"
        },
        {
          "rank": 3,
          "value": "autonomous"
        }
      ]
    },
    {
      "alignment": {
        "assurance_target_field": null,
        "note": "assurance-target embeds reversibility in impact_level prose only; ACAM makes it a declarable field. basis must name the undo mechanism for any value below irreversible.",
        "status": "extension"
      },
      "axis_id": "reversibility",
      "kind": "ordinal",
      "ordinal": [
        {
          "rank": 0,
          "value": "fully-reversible"
        },
        {
          "rank": 1,
          "value": "reversible-with-intervention"
        },
        {
          "rank": 2,
          "value": "partially-reversible"
        },
        {
          "rank": 3,
          "value": "irreversible"
        }
      ]
    },
    {
      "alignment": {
        "assurance_target_field": "affected_parties",
        "note": "affected_parties stays the qualitative companion; the band is a population claim, so ranks 0-2 require an enumeration basis or promote fail-closed to general-public",
        "status": "extension"
      },
      "axis_id": "population_exposed",
      "kind": "ordinal",
      "ordinal": [
        {
          "rank": 0,
          "value": "internal-only"
        },
        {
          "bound": "enumerable external population <= 10000 (draft, decision E-2)",
          "rank": 1,
          "value": "bounded-external"
        },
        {
          "bound": "enumerable external population > 10000",
          "rank": 2,
          "value": "broad-external"
        },
        {
          "bound": "unbounded reach; no enumeration exists",
          "rank": 3,
          "value": "general-public"
        }
      ]
    },
    {
      "alignment": {
        "assurance_target_field": null,
        "inputs": [
          "jurisdiction",
          "sector",
          "asset_size_usd",
          "actor_role"
        ],
        "note": "declared value may never be lower than the ASSESS-9/F3 applicability computation implies; higher (conservative) declarations are permitted",
        "status": "extension"
      },
      "axis_id": "regulatory_classification",
      "kind": "ordinal",
      "ordinal": [
        {
          "rank": 0,
          "value": "no-applicable-regime"
        },
        {
          "rank": 1,
          "value": "voluntary-frameworks-only"
        },
        {
          "rank": 2,
          "value": "supervisory-guidance-in-scope"
        },
        {
          "rank": 3,
          "value": "binding-sector-regulation"
        },
        {
          "rank": 4,
          "value": "high-risk-regime"
        }
      ]
    }
  ],
  "challenge_record": {
    "fields": [
      "declaration_digest",
      "axis_id",
      "declared_value",
      "proposed_value",
      "basis",
      "signature"
    ],
    "semantics": "append-only; accepted challenge = restatement recomputing every consumer of the axis",
    "type": "entity-risk-challenge"
  },
  "design_of_record": "COVERAGE_ASSESSMENT_PLAN.md section 5; ACAM-SPEC.md section 14.3",
  "draft_decisions": [
    {
      "id": "E-1",
      "question": "ER-2 fail-closed default is the maximum ordinal per axis, not a refusal to compute."
    },
    {
      "id": "E-2",
      "question": "bounded-external/broad-external boundary is 10000 enumerable external parties."
    },
    {
      "id": "E-3",
      "question": "ER-5 tier thresholds and the two-tier vocabulary (baseline/heightened), finalized jointly with A2."
    },
    {
      "id": "E-4",
      "question": "consequence_class reuses the impact_level value vocabulary per category rather than defining per-category scales."
    }
  ],
  "fail_closed_default": {
    "policy": "max-ordinal-per-undeclared-axis",
    "statement": "For any consuming computation, an undeclared axis takes rank = max rank of its ordinal; for consequence_class, every undeclared category takes critical (4)."
  },
  "license": "CC BY 4.0",
  "risk_tier": {
    "enum": [
      "baseline",
      "heightened"
    ],
    "note": "two-tier vocabulary is draft (decision E-3), finalized jointly with the A2 table"
  },
  "risk_tier_rules": [
    {
      "predicate": "any consequence_class category rank >= 3 (high)",
      "result": "heightened",
      "rule_id": "TIER-1"
    },
    {
      "predicate": "autonomy_level rank = 3 (autonomous) AND reversibility rank >= 2 (partially-reversible)",
      "result": "heightened",
      "rule_id": "TIER-2"
    },
    {
      "predicate": "population_exposed rank = 3 (general-public)",
      "result": "heightened",
      "rule_id": "TIER-3"
    },
    {
      "predicate": "regulatory_classification rank >= 3 (binding-sector-regulation)",
      "result": "heightened",
      "rule_id": "TIER-4"
    },
    {
      "predicate": "no TIER-1..TIER-4 predicate holds",
      "result": "baseline",
      "rule_id": "TIER-DEFAULT"
    }
  ],
  "rules": [
    {
      "enforcement": "schema required at final; cover rendering computed from recorded fields",
      "rule_id": "ER-1",
      "statement": "All five axes required at status final, each with ordinal value + basis, inside the signed payload, rendered on the cover."
    },
    {
      "draft_decision": "E-1",
      "enforcement": "consuming functions apply fail_closed_default; conformance corpus includes an axes-absent draft specimen computing maximum-tier minimums",
      "rule_id": "ER-2",
      "statement": "Fail-closed default: an undeclared or unparseable axis evaluates at its maximum ordinal in every consuming computation; risk defaults high, never low."
    },
    {
      "enforcement": "no mutable declaration fields; challenge references by digest; verifier lists open challenges",
      "rule_id": "ER-3",
      "statement": "Axes are challengeable via signed append-only entity-risk-challenge records rendered alongside; an accepted challenge is a restatement, never a silent mutation."
    },
    {
      "enforcement": "closed schema has no score field; risk_tier_rules are predicates, not weights",
      "rule_id": "ER-4",
      "statement": "No synthetic entity-risk index exists; axes combine only through published threshold predicates (dominance, not blending)."
    },
    {
      "enforcement": "pure predicate evaluation shipped as data; verifier recomputes tier + firing list; a non-recomputable recorded tier fails conformance",
      "rule_id": "ER-5",
      "statement": "risk_tier in {baseline, heightened}; heightened iff any one risk_tier_rules predicate holds; each firing predicate is displayed."
    },
    {
      "enforcement": "one ACAM version pin per dossier; verifier evaluates table and tier from the same release",
      "rule_id": "ER-5a",
      "statement": "The tier feeds the A2 minimum-n lookup alongside control frequency and blocking_effect; row semantics belong to acam-sampling.json and bind by version pin."
    },
    {
      "enforcement": "composition of ER-2 and ER-5, exercised by the ER-2 conformance specimen",
      "rule_id": "ER-5b",
      "statement": "Undeclared axes imply maximum ordinals imply heightened imply the highest minimum-n row; lower sampling burden requires declaring and signing lower risk."
    },
    {
      "enforcement": "verifier field comparison against the pinned snapshot digest",
      "rule_id": "ER-6",
      "statement": "Where a dossier pins an assurance-target snapshot: autonomy_level must match; max of consequence_class categories must equal impact_level; contradiction at final fails validation."
    },
    {
      "enforcement": "export schema requires per-axis fields as siblings of the rank",
      "rule_id": "ER-7",
      "statement": "Recommendation exports show the per-axis contribution to every rank position; no aggregate multiplier renders without its decomposition."
    },
    {
      "enforcement": "weights carry the release version; claim-language rule of section 14.5",
      "rule_id": "ER-8",
      "statement": "The weight vector consuming the axes ships as versioned release data, never hardcoded; the section 14.5 rank-stability commitment gates its marketing."
    }
  ],
  "sampling_binding": {
    "annex": "acam-sampling.json (work package A2)",
    "binding": "by ACAM version pin (V-1: annexes version together)",
    "key": "control frequency x risk_tier, alongside the control's blocking_effect"
  },
  "spec": "acam/ACAM-ENTITY-RISK.md"
}
