{
  "restatement": {
    "path": "spec/v1/adversarial-execution-evidence.md",
    "digest": "d4826b01b1a7fa89c4ca3d1ca05c9f93cdb2830f4efff6e723f1c55245cf8c63",
    "lines": 1193
  },
  "authority": {
    "path": "aee-conformance/spec/predicates/adversarial-execution-evidence.md",
    "digest": "759d2383e5da36fa509dc335e6159a20b87641b25ebbadcf1676c55d75ffd8b0",
    "lines": 2322
  },
  "acceptedMemberDivergences": {
    "_ext": "The in-toto extension-field convention. Verified 2026-07-30: two occurrences in the shared schema, zero in the authority's prose. Same class as `executionEnvelope` -- present on the wire, undescribed upstream.",
    "expectedCorpusDigest": "Not a member of the predicate at all. It names an out-of-band CONSUMER POLICY input -- the digest a deployment pins for the corpus it will admit -- which by construction never travels in the attestation. Verified 2026-07-30: zero occurrences in the authority and zero in the shared schema, consistent with it being a name this restatement gives to a consumer-side value rather than a field the specification defines.",
    "expectedSubstrateDigest": "The substrate half of the same out-of-band consumer-policy pair, verified the same way: zero occurrences in the authority and zero in the shared schema.",
    "otelTraceId": "The W3C trace-id inside the OPTIONAL `executionEnvelope`. Carried by the shared JSON Schema SSOT (spec/schemas/v1/adversarial-execution-evidence.schema.json) and absent from the authority's prose: verified 2026-07-30, two occurrences in the schema and zero in the authority. So it is a real member of the wire format the authority document does not describe -- a gap to close upstream, in the fork, not by editing this restatement. (`executionEnvelope` itself is named only in non-normative prose here, so it needs no entry of its own; the gate refuses one that nothing uses.)",
    "uncontained": "Named in order to deny it. The sentence says there is no `no_egress`/`uncontained` alias for the clean label, so the authority not carrying the word is the state the sentence asserts. Verified 2026-07-30: zero occurrences in the authority, which is what makes the sentence true rather than what makes it drift."
  },
  "obligations": {
    "purpose#1": {
      "line": 117,
      "keywords": [
        "MUST NOT",
        "MUST",
        "REQUIRED"
      ],
      "digest": "1162e8bb58a41f06ecf0c89b3f601d35e385f36968e18d0f91b86881f2255f60",
      "excerpt": "The key words MUST, MUST NOT, REQUIRED, SHOULD, MAY, and OPTIONAL are to be interpreted as in...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#2": {
      "line": 136,
      "keywords": [
        "MUST"
      ],
      "digest": "fcb55c38a77841d7f76d8c0637f0f58a2a56cb9da2c912e836c3c82eb01b5e08",
      "excerpt": "A duplicate member, a non-integer numeric (a fractional `1.5`, an e-notation `1e+21`, a non-f...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#3": {
      "line": 142,
      "keywords": [
        "MUST"
      ],
      "digest": "989af930e51ff045f735db79840dbd0f54de57e7fd237de8b01e61b92241399f",
      "excerpt": "A lenient parser that silently keeps the last of a repeated member would let two rails disagr...",
      "anchor": {
        "fromLine": 106,
        "toLine": 108,
        "digest": "8674c369533458d38836683e6a990c25e98fa0434bc76560cba96647782ee852",
        "opens": "payload, makes the statement malformed. A lenient parser that silently keeps",
        "closes": "so a verifier MUST reject a duplicate member statement-wide, fail-closed."
      }
    },
    "purpose#4": {
      "line": 148,
      "keywords": [
        "MUST"
      ],
      "digest": "690e251df7435eea068bbc339dc5b4e766683899a4debc49420f877ffa571eb6",
      "excerpt": "A verifier MUST reject, statement-wide and fail-closed, any statement in which a string liter...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#5": {
      "line": 148,
      "keywords": [
        "MUST"
      ],
      "digest": "732e2a39327439560bcb10afd73d80928176cfa681b4e0626b4d24d5387528e8",
      "excerpt": "a `\\u` escape naming a high surrogate MUST be immediately followed by a `\\u` escape naming a ...",
      "anchor": {
        "fromLine": 114,
        "toLine": 116,
        "digest": "ac57eb41dcd79fbb8144dc07ec561e6ecb002d26de073458492a3a0909ad2e6c",
        "opens": "and no surrogate encoded directly in UTF-8 (CESU-8); a `\\u` escape naming a",
        "closes": "surrogate, and an unpaired surrogate escape of either half is malformed; and a"
      }
    },
    "purpose#6": {
      "line": 148,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "588c5ae91eb93819fa01df0bde2a3130cf3a66d16ff70ecdb548974c15ef2095",
      "excerpt": "a string MUST NOT contain a raw unescaped character below U+0020;",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#7": {
      "line": 148,
      "keywords": [
        "MUST"
      ],
      "digest": "3593a53af44f9c650c3b85ed72160d6555de45b70b2e82f56a39432b6abd938c",
      "excerpt": "and a `\\u` escape MUST consist of exactly four hexadecimal digits, with no sign, whitespace, ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#8": {
      "line": 148,
      "keywords": [
        "MUST"
      ],
      "digest": "4411abb0fb3f27c2c11a3bd3f2432e4a1d7f1c86f4d4e778addda42d5b811361",
      "excerpt": "A verifier MUST therefore apply this check to the raw bytes, before any decoded string is read.",
      "anchor": {
        "fromLine": 136,
        "toLine": 137,
        "digest": "161f19f6e45460188ff41d12f115e400ac4895fbaf229c787361f5eb1f71b1a1",
        "opens": "malformed. A verifier MUST therefore apply this check to the raw bytes, before",
        "closes": "any decoded string is read."
      }
    },
    "purpose#9": {
      "line": 170,
      "keywords": [
        "MUST"
      ],
      "digest": "2780dd9208c20ba03d9eec45d8e076265e908188ada820fe328daf872cc8b104",
      "excerpt": "**Nesting-depth bound (normative).** A verifier MUST reject, fail-closed, a statement whose J...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#10": {
      "line": 179,
      "keywords": [
        "MUST"
      ],
      "digest": "d74950db9af19decc132afc3f7a3fbba7b17ee45a3c2b18789eb16ff7cfc98f9",
      "excerpt": "**BMP-only string profile (normative).** On every signed surface, object member names and the...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "purpose#11": {
      "line": 179,
      "keywords": [
        "MUST"
      ],
      "digest": "00fdc138871a0cb4304c7d609c0fe3988d93b4873b1c84516faab5e54910a561",
      "excerpt": "BMP-only is a verifier rejection obligation, not producer hygiene: a verifier MUST treat a su...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "subject#1": {
      "line": 206,
      "keywords": [
        "MUST"
      ],
      "digest": "5d8bea184dd281dec1d51bbe778b1d6b130d3b1be97ea6d98215a5450dd031f5",
      "excerpt": "For this predicate `subject` MUST contain exactly one entry on a statement of any basis;",
      "anchor": {
        "fromLine": 210,
        "toLine": 211,
        "digest": "0d306979c5291dc38598e5cd90675241998e1b8c980ab8c4c6ee0c35f3261026",
        "opens": "For this predicate `subject` MUST contain exactly one entry on a statement",
        "closes": "of any basis; a statement carrying zero or more than one subject is"
      }
    },
    "subject#2": {
      "line": 206,
      "keywords": [
        "MUST"
      ],
      "digest": "7eaaba345401061e9c1bead35da466c377184831434088bc1d5e7f2cd24b6ff2",
      "excerpt": "Its digest MUST carry a `sha256` value that is already lowercase 64-hex (the run binding take...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "run-binding#1": {
      "line": 243,
      "keywords": [
        "MUST"
      ],
      "digest": "bf7f2dc0fd26d62d9cb9984b6074d76da0a5c70e08f6c20fdcb52b27770f12a8",
      "excerpt": "Values are taken as written (no case-folding, no null fill), and `catchPolicy`, `corpus`, `ru...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "run-binding#2": {
      "line": 243,
      "keywords": [
        "MUST"
      ],
      "digest": "6d731da492d365cef1b41c0c15a149c696e133e780b58c642511828c5e460a26",
      "excerpt": "So MUST `networkPosture.digest.sha256`, even though version 2 no longer reads it verbatim, be...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "run-binding#3": {
      "line": 257,
      "keywords": [
        "MUST"
      ],
      "digest": "7a7398c0c574541c71962e8ffe1b5d1a7b624ce50b297c58cf656c6a969d431f",
      "excerpt": "A future version that changes the construction (another hash algorithm, additional inputs, mu...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "result-required#1": {
      "line": 406,
      "keywords": [
        "MUST"
      ],
      "digest": "da3c6a811b73882274de502ae9e07251165ba29c7a3f64e9f1b2623ec2875db5",
      "excerpt": "**Why it is not phrased over the evidence tier.** The tier is key-relative, and `result` MUST...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "result-required#2": {
      "line": 406,
      "keywords": [
        "MUST"
      ],
      "digest": "46ea973d7f594b3c6b9277b558fa571aeced17099b988b2003c375f5f86a0c94",
      "excerpt": "A consumer crediting any `basis: substrate` row MUST still derive the tier.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "result-required#3": {
      "line": 412,
      "keywords": [
        "MUST"
      ],
      "digest": "85e879dcbd2f365070162bf002027471829a10f9cff5e8fdee46470d4505ccd6",
      "excerpt": "A consumer MAY accept `pass_indirect`, and one that relaxes below `pass` MUST additionally ke...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "result-required#4": {
      "line": 416,
      "keywords": [
        "MUST NOT",
        "MUST"
      ],
      "digest": "00e49e7a349cc98529cfe5189a15fc9b8cf61656997a40ab6c015dc1fb110196",
      "excerpt": "There is deliberately no severity threshold, no policy ruleset, and no free-text reason field...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "result-required#5": {
      "line": 416,
      "keywords": [
        "MUST"
      ],
      "digest": "9269416fa0c1cd15ba739c446bbe2a1d8a83809bab769ec57c6d3cda5ea5eec9",
      "excerpt": "A missing expected observation MUST surface as a coverage gap (the affected class moves to `o...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#1": {
      "line": 424,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "0097ce9867e2c812f9ac2d3d3d62f0e369a3f01af9441cac2cb9b06b1232012b",
      "excerpt": "Five members are REQUIRED (`substrate`, `corpus`, `catchPolicy`, `networkPosture`, `observati...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#2": {
      "line": 424,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "de0caa2c5ab8a2b730fd5ffbc88d3424ad14739566d50b45c78b079474a9c7b9",
      "excerpt": "a sixth, `runEntropy`, is REQUIRED exactly when any row is `basis: substrate`.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#3": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "0236bf98f69b4cffefe181ccdaa32ac9712abe8c8b65db2363498e7393585b0f",
      "excerpt": "- **`corpus`** - a locally typed reference to the attack corpus, not a ResourceDescriptor (se...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#4": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "1605983069dba1cd1d352f61c79ec68004c3ad8c2281177292517cd65a4cb028",
      "excerpt": "- **`uri`** (REQUIRED, string) - a locator, RECOMMENDED as a [purl](https://github.com/packag...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#5": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "872e4acf0542de31c3213c49f942bc6ccdb568bc3e93bf5b484a92e14f031275",
      "excerpt": "- **`digest.sha256`** (REQUIRED) - the SHA-256 of the **RFC 8785 (JCS)** canonical JSON of th...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#6": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "3ace55e3f0e7caa65e46ef17f7d2bd337300399791efce1ea40eb3f9d7ed5b0e",
      "excerpt": "- **`manifest.classes`** (REQUIRED, object) - a map from each assessment-class code to the **...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#7": {
      "line": 429,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "66ed5e4a004d1154465f093637d9399f4a0ad358e54c77e62cbbdd5c015228fc",
      "excerpt": "An `attackId` MUST NOT appear under more than one class.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#8": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "f5bac2ec553fb9d6d42014cffca3263a68787bf374bc91b874e44e5fcc2f95e4",
      "excerpt": "Its **`digest.sha256`** (REQUIRED) is the SHA-256 of the RFC 8785 (JCS) canonical JSON of tha...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#9": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "0038fc769c8c9697d6eb2c666dde8d1a06e237d42fd9aa3607ae1ce0d7ed1ae7",
      "excerpt": "- **`posture`** (REQUIRED, string) - one of `no_network` (no egress path exists), `allowlist`...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#10": {
      "line": 429,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "84255786d8415bf3e46a85b7c0219830d8b2b35fd8d3ea2ea844d27b3be00dee",
      "excerpt": "A minor version MAY append a value and MUST NOT redefine a registered one.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#11": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "0fc2fb5784c83eecf5ae8ab691c7ae36550370fb414de2cba4109a8249d624e3",
      "excerpt": "- **`digest.sha256`** (REQUIRED) - the SHA-256 of the substrate's non-secret posture view (po...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#12": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "359738b3f52b9d594fb9eb5155f1b9463bfe444478e0998e5005fca8fc4bf122",
      "excerpt": "- **`labels`** (REQUIRED, array of strings) - the complete array of `containmentObserved` val...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#13": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "2f92aef6f5579cdc274dfa95fcfcba2bb7536a4123e6eefcfd7963c711821549",
      "excerpt": "- **`caught`** (REQUIRED, array of strings) - the subset whose observation constitutes a caug...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#14": {
      "line": 429,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "52218859d0a0ec672442a6bc81039f5c8a8be3fea14eebb8c17717cf98d8b3f6",
      "excerpt": "- **`digest.sha256`** (REQUIRED) - the SHA-256 of the RFC 8785 (JCS) canonicalization of the ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#15": {
      "line": 486,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "19e65563d4f2803552fbb0121b7280a3d29af8e16ca36caf879da676fc4058a0",
      "excerpt": "a different producer carries its own labels on-wire under this same member, and a consumer tr...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationenvironment-required#16": {
      "line": 504,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "e6b1aaab4117f6fb41464e23a7bee3b00fed8c0659ec42f7bc73781889ec4524",
      "excerpt": "The `sha256` REQUIRED on each is a requirement the descriptor specification explicitly permit...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "coverage-required#1": {
      "line": 542,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "7055db05255dfad3f528aba97aa6cffaf95c03eadf61a13d76243d673c21da61",
      "excerpt": "- **`assessedClasses`** (REQUIRED, array of strings) - the class codes actually assessed in t...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "coverage-required#2": {
      "line": 542,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "a0f0e80ac94171fd69d1c7c1b348054b4e9ab5f120fc365e84e5acfeade8ecc4",
      "excerpt": "- **`outOfScope`** (REQUIRED, object) - a map from a class code to a human-readable reason it...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "coverage-required#3": {
      "line": 542,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "5c96330ab45c16c26fe0e213178391fdc1215df6cc187572414efb8db0c24f9a",
      "excerpt": "- **`routedElsewhere`** (REQUIRED, object) - a map from a class code to the layer or mechanis...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "coverage-required#4": {
      "line": 549,
      "keywords": [
        "MUST"
      ],
      "digest": "feabe580fcdc83f71855ff2379531a86a4ec72aa7f9c63f5e8db14e836b67d28",
      "excerpt": "Every class code in `assessedClasses`, `outOfScope`, and `routedElsewhere` MUST be a key of `...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "coverage-required#5": {
      "line": 549,
      "keywords": [
        "MUST"
      ],
      "digest": "5e4b3b87603fdc12712a36b34a6243fb9ff4e35cd3477f35af70009623a6474d",
      "excerpt": "Additionally (attack-level exhaustion), the `attackId` set of `attackResults` MUST equal the ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#1": {
      "line": 558,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "0045028b80b1fb3af2bd753ce1a6119880d629d2ff384d3a5c3bec82cc07dc4c",
      "excerpt": "- **`attackId`** (REQUIRED, string) - the corpus attack/vector identifier;",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#2": {
      "line": 558,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "a5931251688e4c323457d05009c4fed978f8bc969e284cb16760f725d3d41b0c",
      "excerpt": "- **`containmentObserved`** (REQUIRED, string) - a label from the carried `observationVocabul...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#3": {
      "line": 558,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "a6002c0350ad62d0f6ab988d6cce26e6fab6e14e63e0af4b00512f17437694b8",
      "excerpt": "there is no `no_egress`/`uncontained` alias.) - **`basis`** (REQUIRED, string) - the observat...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#4": {
      "line": 587,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "14857d8628727998b0ae61a60f43a818623bfe786b8ff4f05fb7190051fb8df5",
      "excerpt": "A producer MUST NOT declare `basis: substrate` on a row it cannot cover under GATE 1 (Coverag...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#5": {
      "line": 587,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "d98e129111788e0d4a3828a1f796d47ca03cafbd58967d444ced540b9fe7e9ca",
      "excerpt": "- **`method`** (REQUIRED, string) - the observation's **directness**, closed vocabulary `{int...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#6": {
      "line": 598,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "ac85c4c2b7740a8c662e8a158a0413a65f94e3cb6a8a68f906e7f395da6430bb",
      "excerpt": "Both fields are REQUIRED on every row and both vocabularies are closed: a missing value, or a...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#7": {
      "line": 598,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "897d92e4b6a2cb7a801dfdd340c563730b9568e5bf1b1fb491f7c662537be951",
      "excerpt": "- **`actualLayer`** (REQUIRED, string) - which enforcement layer acted on the row's containme...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#8": {
      "line": 598,
      "keywords": [
        "MUST"
      ],
      "digest": "837647dc78dd4302c329a3559e0d0a79c87dc5e2e58ebbb294cb8ddcfcff4ca5",
      "excerpt": "A row whose `containmentObserved` is a label-not-in-caught (a **clean row**: nothing acted) M...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#9": {
      "line": 598,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "12940ffe4202dd8c79607c49d41978e106dd80c9f9e93397c6ccba41ac5deb99",
      "excerpt": "`actualLayer` is REQUIRED on every row;",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#10": {
      "line": 598,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "f6428ea4fc205bfb482f665fa3ff8a9d56e7b4c6b09aaba23cb5f8fa38abc3e5",
      "excerpt": "- **`observationRefs`** (REQUIRED on `basis: substrate` rows, array of non-negative integers)...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#11": {
      "line": 598,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "0a2c9bd15d96cc7be5841ad61b8f7eda222e6a1c25233b58172501d214536f79",
      "excerpt": "A producer MUST NOT reference a record from a row whose attack the record's committed payload...",
      "anchor": {
        "fromLine": 931,
        "toLine": 932,
        "digest": "74ba96757975e4a54d1d1dcb6d53b8d9485a4fb1fe831ddeba779f12bfea3946",
        "opens": "than one row. A producer MUST NOT reference a record from a row whose",
        "closes": "attack the record's committed payload does not evidence. On a row declaring"
      }
    },
    "attackresults-required#12": {
      "line": 598,
      "keywords": [
        "MUST"
      ],
      "digest": "d8df64d4f6ba8623e4eca25bfc61cd9221ac5bc49c7ef34187c5afb5c518963f",
      "excerpt": "Wherever `observationRefs` is present - on any row, regardless of `basis`, and including rows...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "attackresults-required#13": {
      "line": 649,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "a7c329717d389c36f599227915fb206cf0841c9dd12dc8d8c9b3c1953730a470",
      "excerpt": "the substrate observation key MUST NOT be accessible to the subject artifact and SHOULD be he...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#1": {
      "line": 674,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "f5dbce661df035dca6fecdc5d4a2cf361488e1aefce9f160ad17ab662450670e",
      "excerpt": "- **`payload`** (REQUIRED, string) - the **base64 (RFC 4648 \u00a74 standard alphabet)** of the ex...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#2": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "fc2027e54dea2ddce3546ea0060e463090ebaed93fc2f70c434bc6327e0552ed",
      "excerpt": "Any record used to cover a `basis: substrate` row MUST base64-decode to a JSON object that is...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#3": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "48421810cb6130acc16258d25e7607abfce6d6d526166bcddf8028610e4dfb7e",
      "excerpt": "`aeeMethod` MUST be `intercepted`.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#4": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "3c8b9e6d998f7509531b6b020b9785514ccd2be2e0ababf39607048f83f00e3c",
      "excerpt": "Payload MUST carry `armedAt` (under the timestamp profile `issuedAt` defines, no later than `...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#5": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "48421810cb6130acc16258d25e7607abfce6d6d526166bcddf8028610e4dfb7e",
      "excerpt": "`aeeMethod` MUST be `intercepted`.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#6": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "0a8b46388f8952681ffafad3dfbc94677fcca5cd49eaf8457424e041c289e1d0",
      "excerpt": "Payload MUST carry `aeeStillArmed` (boolean, MUST be `true` to cover), `aeeDropCount` (integer;",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#7": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "82a74a10b0240821e16215b49f4f6efc05ee231140d67621dc1055d5fbef1f0a",
      "excerpt": "MUST be `0`, or `0 <= aeeDropCount <= aeeDropBound` where `aeeDropBound` is a producer-declar...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#8": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "48421810cb6130acc16258d25e7607abfce6d6d526166bcddf8028610e4dfb7e",
      "excerpt": "`aeeMethod` MUST be `intercepted`.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#9": {
      "line": 674,
      "keywords": [
        "MUST"
      ],
      "digest": "6ce9a465bac77701805c4bfabf4625e51a18eb875029fb1f037cc99383078635",
      "excerpt": "`aeeMethod` MUST be `reconstructed`.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#10": {
      "line": 698,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "1ce374d7c8a2f33a5fd605fbc2e674309b1837fdc660005dab8b409827917464",
      "excerpt": "REQUIRED whenever `aeeRunSeq` is present).",
      "anchor": {
        "fromLine": 1619,
        "toLine": 1619,
        "digest": "0101338038e39e4e916eee976d8b4a4579bcf2bf46a1962ebec6f491dcd47ed1",
        "opens": "3.2.3); REQUIRED whenever `aeeRunSeq` is present). The chain is always",
        "closes": "3.2.3); REQUIRED whenever `aeeRunSeq` is present). The chain is always"
      }
    },
    "observationrecords-optional#11": {
      "line": 712,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "45f1282ff1c70a3c4228fd5ee9a4eb97bdc2330ce7f0eec0822ca12541c5b034",
      "excerpt": "Minor versions MAY append tokens (each with a pinned projection) and MUST NOT redefine an exi...",
      "anchor": {
        "fromLine": 1636,
        "toLine": 1637,
        "digest": "dcb6f01461a29f35cc66084c846858b8a5df4f90ad6a6d260f5abb3d5f3d6485",
        "opens": "field for this run. Minor versions MAY append tokens (each with a pinned",
        "closes": "projection) and MUST NOT redefine an existing one; an unrecognized token"
      }
    },
    "observationrecords-optional#12": {
      "line": 753,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "cc46cdcb79274f6ca6b885d36bc954492cfeb20679daf9c022952db768bcc79f",
      "excerpt": "- **`payloadType`** (REQUIRED, string) - a **producer-defined media type ending in `+json`**.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "observationrecords-optional#13": {
      "line": 753,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "3951df13ca9b7d0b6dbdbafedda4190a9ef0c6c261b2a595c63604c0885eab7d",
      "excerpt": "- **`signatures`** (REQUIRED, array, `minItems: 1`) - each element `{ \"keyid\": <hex>, \"sig\": ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "doesnotassert-optional#1": {
      "line": 825,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "b20479d36c26fbb4219d7eb7cae408af27a959b32d89a108ecea14857e0b4d63",
      "excerpt": "Advisory: a verifier MUST NOT require it and nothing in it participates in the recompute or t...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "issuedat-required#1": {
      "line": 835,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "5c3c9256e8ed8f203915049ddbd6cd4de001819ceeb8ed88268099c8674ca0a5",
      "excerpt": "REQUIRED in v0.6 (was OPTIONAL in v0.3).",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "issuedat-required#2": {
      "line": 835,
      "keywords": [
        "MUST"
      ],
      "digest": "06f28f86473f915432c7c059098c3bda61dbc6c7d9e00f497acce907f26e3a71",
      "excerpt": "an `arming` record's `armedAt` MUST be no later than `issuedAt`.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "issuedat-required#3": {
      "line": 843,
      "keywords": [
        "MUST"
      ],
      "digest": "86bee627343007102dd4071948ecce2fa6de04882e69f4cc3333600b8cee96db",
      "excerpt": "The date-time separator and the zone designator MUST be uppercase - never the lowercase `t` a...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "executionenvelope-optional#1": {
      "line": 860,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "fc9bf2080e37466cb74a9a2b7c2489f07eb9775fc98d2b715f0a5a6f8f425da7",
      "excerpt": "When present, **`otelTraceId`** (REQUIRED within, 32-char lowercase-hex W3C trace-id) is the ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "ext-optional#1": {
      "line": 866,
      "keywords": [
        "MUST NOT",
        "MUST"
      ],
      "digest": "cb8090eb6200a0b72fb916cd5666696a32957e0c195fdb1b3304152c93586bfa",
      "excerpt": "A verifier MUST NOT require `_ext` and MUST ignore extensions it does not recognize;",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "verification-third-party-offline-two-gates#1": {
      "line": 898,
      "keywords": [
        "MUST"
      ],
      "digest": "0472002885eeb13a2c02cc0b8ee99fccac9a15b0a5a4f4a9e0b2149c73226159",
      "excerpt": "A consumer MUST pin, out of band, the `expectedCorpusDigest` and `expectedSubstrateDigest` fo...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "gate-1-coverage-validity-rats-appraisal-policy-for-evidence#1": {
      "line": 938,
      "keywords": [
        "MUST"
      ],
      "digest": "58c7c8b3ef21875d01537547eadf3fe1f9a332bec952e54f174ca176d80ccde7",
      "excerpt": "A consumer that consumes `result`, credits any row, or applies either strength ordering MUST ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "gate-1-coverage-validity-rats-appraisal-policy-for-evidence#2": {
      "line": 938,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "13302487ee5b6ea321b6f7429f6984378e815daba726ba1f11d6b61970022fe2",
      "excerpt": "on failure the attestation is INVALID and its `result` MUST NOT be consumed - the same handli...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "gate-2-evidence-tier-rats-appraisal-policy-for-attestation-results#1": {
      "line": 973,
      "keywords": [
        "MUST"
      ],
      "digest": "36c79fe1ff8b0288d00dd3c4ff8f21b76e0e91b3cb60143bb250ad3230fdbce7",
      "excerpt": "Given a valid attestation, a consumer MUST - before crediting any `basis: substrate` row or a...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "gate-2-evidence-tier-rats-appraisal-policy-for-attestation-results#2": {
      "line": 973,
      "keywords": [
        "MUST NOT",
        "MUST"
      ],
      "digest": "2fea32f337158a90e9950cd2ab04dcb27349f4e736bac342d02efa8e0c30b038",
      "excerpt": "**No TOFU:** a consumer with no policy-pinned substrate root MUST treat every `basis: substra...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "gate-2-evidence-tier-rats-appraisal-policy-for-attestation-results#3": {
      "line": 973,
      "keywords": [
        "MUST NOT",
        "MUST"
      ],
      "digest": "20d42cbec160fc30828f4309656f0e86f4b043ca407f63f3869309d9d7320819",
      "excerpt": "A carried predicate member named `evidenceTier`, or any predicate-level member beginning with...",
      "anchor": {
        "fromLine": 779,
        "toLine": 781,
        "digest": "1d61114461d32546c27221293fd5dc9c8638dc2d2ff64df27380a2d39a1e4429",
        "opens": "beginning with `aee` are reserved. A carried predicate member named",
        "closes": "prefix `aee`, MUST be ignored and MUST NOT alter the derivation."
      }
    },
    "gate-2-evidence-tier-rats-appraisal-policy-for-attestation-results#4": {
      "line": 983,
      "keywords": [
        "MUST"
      ],
      "digest": "a859ddcc6505d56ce3b8777b6d241084c4e99863cdc28ddf6b9084d5799163ed",
      "excerpt": "Finally the consumer-policy step: when the consumer supplies anchors (it MUST for admission d...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "named-non-claims#1": {
      "line": 993,
      "keywords": [
        "MUST NOT"
      ],
      "digest": "5182546d1b9717376e3aee928de729ace9cf23bd44350f6371dbe919fedc87ac",
      "excerpt": "- **COV-3 (no cross-predicate composition).** This predicate makes no cross-predicate claim: ...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "related-standards#1": {
      "line": 1028,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "2944d5d1a24a5968fd44d782d772c168e7956d6a95d4944d1e9f0d4341b9e72e",
      "excerpt": "- **in-toto `test-result`** - the fused-`result` precedent: a REQUIRED `result` enum recomput...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "changelog#1": {
      "line": 1074,
      "keywords": [
        "MUST"
      ],
      "digest": "ca46777bf3492a67f35b4ee2cb249ec1d7082690c86c13ccac93dcf69f22df82",
      "excerpt": "The whole statement is parsed as strict I-JSON (a duplicate member anywhere is malformed) and...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "changelog#2": {
      "line": 1074,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "1a15003545f27e11abd8a2e0b398929a923302b496a94ccb1f5fd8ae8df3afa9",
      "excerpt": "`issuedAt` is now REQUIRED.",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "changelog#3": {
      "line": 1074,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "1726b273ba944216ff8516aa2bef40e4b05bdc1acfce04ab924cbe6ffe06fd9a",
      "excerpt": "- **v0.5** - Split the per-row `basis` into two orthogonal REQUIRED fields: `basis` (closed v...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "changelog#4": {
      "line": 1074,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "4e811b5902fa928c6be6f9e0ec47987ee4175a43567eceddc5bf23f30c02859d",
      "excerpt": "Made `actualLayer` REQUIRED on every row (a missing member is malformed, a different altitude...",
      "unanchored": {
        "class": "prose-divergence"
      }
    },
    "changelog#5": {
      "line": 1074,
      "keywords": [
        "REQUIRED"
      ],
      "digest": "f7a3ffd0577c97c908bd359089ef8e481f19f7690e5dc371d42a2fa7f26a2904",
      "excerpt": "and `expectedCorpusDigest` + `expectedSubstrateDigest` as REQUIRED offline-verifier inputs.",
      "unanchored": {
        "class": "prose-divergence"
      }
    }
  }
}
