{
  "description": "Signed objects a verifier must reject (A5.4). Each is built to break the rule named in rule. Where breaking it necessarily breaks another as well, such as an algorithm other than ES256 disagreeing with the proof's alg, the description says so, and expected.reason names the rule A5.4 lists first. A key_set given inline replaces the named key set from keys.json.",
  "vectors": [
    {
      "id": "tampered-payload",
      "description": "disclosure-active-key with one entry value changed after signing.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "signature"
      },
      "rule": "Verify the signature over the canonical form of the parsed object without proof (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"balanced\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "duplicate-member",
      "description": "disclosure-active-key with a second purpose member placed first. A parser that keeps the last member sees the signed value and the signature verifies, while one that keeps the first reads advertising.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "duplicate_member"
      },
      "rule": "Parse strictly before canonicalisation: reject duplicate members, compared after escapes are decoded, and anything that is not I-JSON (A5.4).",
      "text": "{\"purpose\":\"advertising\",\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "duplicate-member-escaped-name",
      "description": "As duplicate-member, with the repeated name written with an escape.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "duplicate_member"
      },
      "rule": "Parse strictly before canonicalisation: reject duplicate members, compared after escapes are decoded, and anything that is not I-JSON (A5.4).",
      "text": "{\"purp\\u006fse\":\"advertising\",\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "duplicate-member-last",
      "description": "disclosure-active-key with a second purpose member placed last. A parser that keeps the first member sees the signed value and the signature verifies, while one that keeps the last reads advertising.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "duplicate_member"
      },
      "rule": "Parse strictly before canonicalisation: reject duplicate members, compared after escapes are decoded, and anything that is not I-JSON (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"},\"purpose\":\"advertising\"}"
    },
    {
      "id": "number-beyond-binary64",
      "description": "disclosure-active-key with grant_revision written as 1.0000000000000000001, which parses to the signed value 1 but carries precision binary64 does not.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "not_i_json"
      },
      "rule": "Parse strictly before canonicalisation: reject duplicate members, compared after escapes are decoded, and anything that is not I-JSON (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1.0000000000000000001,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "lone-surrogate",
      "description": "disclosure-active-key with a lone surrogate added to an entry value, signed over the bytes a canonicaliser that writes it as the escape JSON.stringify writes would produce, so only the I-JSON check refuses it.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "not_i_json"
      },
      "rule": "Parse strictly before canonicalisation: reject duplicate members, compared after escapes are decoded, and anything that is not I-JSON (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\\udc00\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..LN_IhHTuQnR9NPdusQdM9JHzLm8rAVaYwixj0RlbbFEU1Vs7ct1z-Fyo37MrGKogLuYT9WVmbmMMd9xkxEj1Cg\"}}"
    },
    {
      "id": "noncharacter",
      "description": "disclosure-active-key with the noncharacter U+FFFF added to an entry value and signed over its canonical bytes, so only the I-JSON check refuses it.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "not_i_json"
      },
      "rule": "Parse strictly before canonicalisation: reject duplicate members, compared after escapes are decoded, and anything that is not I-JSON (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\\uffff\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..JMlitnTNHlkHglOMa8YYzkCSmRkWm9hKihfTJ1dezBiTJEwnGTUjFO2durdik390795XleMV-CdpkzBLhWfHzw\"}}"
    },
    {
      "id": "alg-none",
      "description": "disclosure-active-key with a protected header naming alg none and the real signature bytes. Its proof still names ES256 and the signature was made over another header; A5.4 refuses the algorithm first.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "algorithm"
      },
      "rule": "Reject alg:none and every algorithm other than ES256 (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJub25lIiwia2lkIjoibVlPMUJwWGFMNTc5VnRxcmc3RmRmdkp0OXktdUJyTWFVRTZfQ1ctREhXYyIsInR5cCI6ImF1dG9ueW0tZGlzY2xvc3VyZStqd3MifQ..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "alg-hs256-public-key",
      "description": "A genuine HS256 signature over disclosure-active-key whose secret is the active provider key's RFC 7638 member text: the algorithm confusion a verifier that lets the header choose the algorithm would accept. Its proof also names ES256, a disagreement A5.4 reaches after refusing the algorithm.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "algorithm"
      },
      "rule": "Reject alg:none and every algorithm other than ES256 (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..5_uaAtKDkshX8KX2QXtTKVlYorpFEMnfAKWVy75noac\"}}"
    },
    {
      "id": "alg-hs256-public-key-pem",
      "description": "A genuine HS256 signature over disclosure-active-key whose secret is the active provider key's SPKI public key in PEM: the algorithm confusion a verifier that lets the header choose the algorithm would accept. Its proof also names ES256, a disagreement A5.4 reaches after refusing the algorithm.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "algorithm"
      },
      "rule": "Reject alg:none and every algorithm other than ES256 (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..NwJZs-ilxRz0goWKk_wUSRD2BViKfcwiR5S8aapoC2c\"}}"
    },
    {
      "id": "alg-hs256-public-jwk",
      "description": "A genuine HS256 signature over disclosure-active-key whose secret is the active provider key's published JWK as JSON: the algorithm confusion a verifier that lets the header choose the algorithm would accept. Its proof also names ES256, a disagreement A5.4 reaches after refusing the algorithm.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "algorithm"
      },
      "rule": "Reject alg:none and every algorithm other than ES256 (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJIUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..HsRyKHZDs6N0dNyCL7GnNB5IiNGdaaRyRONGr5BrVAo\"}}"
    },
    {
      "id": "unknown-kid",
      "description": "disclosure-active-key signed by the recipient's key, whose key ID is not in the provider's key set.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "unknown_key"
      },
      "rule": "Reject a key ID that is not in the trusted set, appears in it more than once, or is not the thumbprint of its key (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"w7t35gDe7Lcp0DXE4NrgKar6duLgsJCrvmYyLuVjpIc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Inc3dDM1Z0RlN0xjcDBEWEU0TnJnS2FyNmR1TGdzSkNydm1ZeUx1VmpwSWMiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..F_p7Ty5K8kRU6xvkghEMM8uIc2Nh3Ni47elQvbbdXhNxLCva0ufC4kViI1XVKk93NqsTM4iqsi8bCRVhGkb_xw\"}}"
    },
    {
      "id": "ambiguous-kid",
      "description": "disclosure-active-key verified with a key set that lists its key twice.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig"
            },
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig"
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "unknown_key"
      },
      "rule": "Reject a key ID that is not in the trusted set, appears in it more than once, or is not the thumbprint of its key (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "unknown-crit",
      "description": "disclosure-active-key signed under a header with crit naming an extension member.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "critical_header"
      },
      "rule": "Reject any protected header member other than alg, kid and typ, including crit, jwk, jku, x5u and b64, and any duplicate header member (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImNyaXQiOlsiYXV0b255bV9leHRlbnNpb24iXSwiYXV0b255bV9leHRlbnNpb24iOnRydWUsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..Bd2l7Vgq7rGgcUVvNL8Po7EfF3E53_TO-m0dR3J_lu-hR6Icfd3d7rDa3K2zGVlR54YA9UhJAwTDNXNFT496KA\"}}"
    },
    {
      "id": "header-supplied-key",
      "description": "disclosure-active-key signed by the recipient's key, with that key embedded in the header as jwk and the active key's ID as kid: a verifier that used the header's key would accept it. It also fails the signature under the trusted key, which A5.4 reaches only after refusing the header.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "header"
      },
      "rule": "Reject any protected header member other than alg, kid and typ, including crit, jwk, jku, x5u and b64, and any duplicate header member (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6Inp5emtjb256ajc0UGhGUlZzTDRHQWN5S1A4enBwRVhBTXptQWtEUzBFb28iLCJ5IjoibWZQNWk5UXNncFpvOTBRdldqd0cwU2R4MWlXc3RrMXF6Nng1SFZMa0gyUSJ9LCJraWQiOiJtWU8xQnBYYUw1NzlWdHFyZzdGZGZ2SnQ5eS11QnJNYVVFNl9DVy1ESFdjIiwidHlwIjoiYXV0b255bS1kaXNjbG9zdXJlK2p3cyJ9..FTzxH_Pr-6yhc4ZwDkrInsRSIhXB3xscneQ3x8-QKWiQgjdaFvzm-CJgfiy6_AjbrrTPpi8yv3APlj7CyQt7KQ\"}}"
    },
    {
      "id": "header-extra-member-x5u",
      "description": "disclosure-active-key signed by the active key under a header that also names x5u. The extra member is the only rule it breaks.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "header"
      },
      "rule": "Reject any protected header member other than alg, kid and typ, including crit, jwk, jku, x5u and b64, and any duplicate header member (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIiwieDV1IjoiaHR0cHM6Ly9hdHRhY2tlci5leGFtcGxlL2NlcnRpZmljYXRlLnBlbSJ9..e6nAzTitfF_Gnv3LQO5XGA0T8tacRV-lidLnaSul_gmDHODMT7RM50XPIjofmKSQ8g9LtlqW7gO3WWBAoZRQBQ\"}}"
    },
    {
      "id": "header-extra-member-b64",
      "description": "disclosure-active-key signed by the active key under a header that also has b64 true, without crit. RFC 7797 would read the payload as ordinary base64url, but A5.4 refuses the member.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "header"
      },
      "rule": "Reject any protected header member other than alg, kid and typ, including crit, jwk, jku, x5u and b64, and any duplicate header member (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImI2NCI6dHJ1ZSwia2lkIjoibVlPMUJwWGFMNTc5VnRxcmc3RmRmdkp0OXktdUJyTWFVRTZfQ1ctREhXYyIsInR5cCI6ImF1dG9ueW0tZGlzY2xvc3VyZStqd3MifQ..dBz1U4fBIBYKqp2qLRmB4ZDKDir7XKBJ6m3hkLM6aQiZjn5-I_MZuBlU8PfFzwL38PqsZ0u3YT1IqdIGjVi3GQ\"}}"
    },
    {
      "id": "header-non-canonical-base64url",
      "description": "disclosure-active-key with its protected header's last character changed so its unused bits are set: the same header bytes in a second spelling, which a verifier that re-encodes the decoded header would accept.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "malformed_proof"
      },
      "rule": "Each part of the detached JWS is unpadded base64url in no other spelling of the same bytes (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn1..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "duplicate-header-member",
      "description": "disclosure-active-key signed under a protected header that repeats alg.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "duplicate_member"
      },
      "rule": "Reject any protected header member other than alg, kid and typ, including crit, jwk, jku, x5u and b64, and any duplicate header member (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImFsZyI6IkVTMjU2Iiwia2lkIjoibVlPMUJwWGFMNTc5VnRxcmc3RmRmdkp0OXktdUJyTWFVRTZfQ1ctREhXYyIsInR5cCI6ImF1dG9ueW0tZGlzY2xvc3VyZStqd3MifQ..mqyi12IMRu_uHrj62843pTRsUtTyx3yOIXzBJFOMZT9VVZUFUIOEIHIpsYSsS8wmvNOFveG_6lOR5n0GqDGRVw\"}}"
    },
    {
      "id": "typ-other-object",
      "description": "disclosure-active-key signed with the receipt typ, so a signature made for one type cannot be replayed as another.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "type"
      },
      "rule": "Reject a typ that differs from the expected value, compared exactly (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLXJlY2VpcHQrandzIn0..piDpajmYLQf7OPNEBOoMAt3mRwkV2PHUnBAwiAohHLPDqOU2aQNxEud-JDsYzJV5JC9gB59e2-0d1tmLlDSfOw\"}}"
    },
    {
      "id": "typ-media-type-prefix",
      "description": "disclosure-active-key signed with typ application/autonym-disclosure+jws. Some libraries treat the prefix as equivalent; A5.4 compares exactly.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "type"
      },
      "rule": "Reject a typ that differs from the expected value, compared exactly (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhcHBsaWNhdGlvbi9hdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..kDZstQyGyT-tkJY8y5vE6TYaVzLnGwM-TvONZdw9mbYCoHEAgg_8tEW4PEZpFdM-IFDeRyOedkJpzBduwhdQoA\"}}"
    },
    {
      "id": "proof-kid-disagrees",
      "description": "disclosure-active-key with proof.kid naming the retired key while the protected header names the active one.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "header_mismatch"
      },
      "rule": "Reject proof metadata whose alg or kid disagrees with the protected header (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"3QA66uHrbG9BnCQj8_OfGgzottqgZBfdvL1q14XiT9w\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "kid-not-thumbprint",
      "description": "disclosure-active-key signed by the active key under the recipient key's ID, verified with a key set that lists the active key under that ID.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "w7t35gDe7Lcp0DXE4NrgKar6duLgsJCrvmYyLuVjpIc",
              "alg": "ES256",
              "use": "sig"
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key_id"
      },
      "rule": "Reject a key ID that is not in the trusted set, appears in it more than once, or is not the thumbprint of its key (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"w7t35gDe7Lcp0DXE4NrgKar6duLgsJCrvmYyLuVjpIc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Inc3dDM1Z0RlN0xjcDBEWEU0TnJnS2FyNmR1TGdzSkNydm1ZeUx1VmpwSWMiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..ugAYCliUWyBPDIRNg4o4i848nHA5z1W3HDjDWwNxEw0WNqHZXh5C-Bbn5Zk1oWJChnB4su6vMlHZuoNzRBo4BA\"}}"
    },
    {
      "id": "non-canonical-key-coordinate",
      "description": "The active key with x spelled with its last character's unused bits set: the same key bytes under a second key ID. Signed by the active key under that ID.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedV",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "7BCNbydUdGYREipRH_zZorv7AFETIWYa6KtlvY1h9Xg",
              "alg": "ES256",
              "use": "sig"
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key"
      },
      "rule": "Reject a matching key that does not follow key-set.json, such as one with a private member, key_ops or a lifetime member other than exp (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"7BCNbydUdGYREipRH_zZorv7AFETIWYa6KtlvY1h9Xg\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6IjdCQ05ieWRVZEdZUkVpcFJIX3pab3J2N0FGRVRJV1lhNkt0bHZZMWg5WGciLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..AKjf3SNa5Dzj7-2brLcqd2RKSI3V4MeB1bk7mRjxPC_raWafDmVjkW2N_QkL2OtYjmlM5ejBuCd87ge6JN806g\"}}"
    },
    {
      "id": "key-with-nbf",
      "description": "disclosure-active-key verified with its key carrying nbf, a lifetime member A5.4 does not use.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig",
              "nbf": 1788220800
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key"
      },
      "rule": "Reject a matching key that does not follow key-set.json, such as one with a private member, key_ops or a lifetime member other than exp (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "key-with-revoked",
      "description": "disclosure-active-key verified with its key carrying revoked: a key with that member is not used to verify anything.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig",
              "revoked": {
                "revoked_at": 1790121600,
                "reason": "keyCompromise"
              }
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key"
      },
      "rule": "Reject a matching key that does not follow key-set.json, such as one with a private member, key_ops or a lifetime member other than exp (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "key-with-key-ops",
      "description": "disclosure-active-key verified with its key carrying key_ops.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig",
              "key_ops": [
                "verify"
              ]
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key"
      },
      "rule": "Reject a matching key that does not follow key-set.json, such as one with a private member, key_ops or a lifetime member other than exp (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "key-with-iat",
      "description": "disclosure-active-key verified with its key carrying iat, a lifetime member A5.4 does not use.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig",
              "iat": 1788220800
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key"
      },
      "rule": "Reject a matching key that does not follow key-set.json, such as one with a private member, key_ops or a lifetime member other than exp (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "key-with-private-member",
      "description": "disclosure-active-key verified with its key carrying a d member. The value is a placeholder, not a private key: a verifier refuses any private member without using it.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": {
          "keys": [
            {
              "kty": "EC",
              "crv": "P-256",
              "x": "RnfKbTJ_SkRMoNnp_L_mcoWCZzfexCOej0E5Z_peedU",
              "y": "ywxQtuG3Nw4R-MyAF8fl2yULAhT_2I_mHSIMaaUnRFU",
              "kid": "mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc",
              "alg": "ES256",
              "use": "sig",
              "d": "AA"
            }
          ]
        },
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "key"
      },
      "rule": "Reject a matching key that does not follow key-set.json, such as one with a private member, key_ops or a lifetime member other than exp (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "signature-non-canonical-base64url",
      "description": "disclosure-active-key with the signature's last character changed so its unused bits are set: the same signature bytes in a second spelling.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "malformed_proof"
      },
      "rule": "Each part of the detached JWS is unpadded base64url in no other spelling of the same bytes (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROB\"}}"
    },
    {
      "id": "signature-padded-integers",
      "description": "disclosure-active-key with each of the signature's two integers given a leading zero byte: 66 bytes that denote the same r and s. An ES256 signature is exactly 64 bytes (RFC 7518 section 3.4).",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "signature"
      },
      "rule": "Verify the signature over the canonical form of the parsed object without proof (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..ACiTvLIIOkzlyfOIFStJJTqk_oMOCeXJGPSYI1naQBvnABNvNAub7bZcF4wBfVUgROIw3wAulGfBv1-CgyntPNE4\"}}"
    },
    {
      "id": "retired-key-at-exp",
      "description": "A disclosure signed by the retired provider key with issued_at equal to the key's exp.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-21T12:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "retired"
      },
      "rule": "Reject a signed object whose signed time is at or after the instant the matching key's exp denotes (A5.4, A9).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R3\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-21T12:00:00Z\",\"valid_until\":\"2026-09-21T12:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":1,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"brief\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false},{\"id\":\"rent_vectorhometemperatureaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"home\",\"key\":\"temperature_preference\",\"level\":\"L2\",\"value_type\":\"number\",\"value\":20.5,\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false},{\"id\":\"rent_vectoridentitydisplaynameaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":1,\"domain\":\"identity\",\"key\":\"display_name\",\"level\":\"L2\",\"value_type\":\"structured\",\"value\":{\"first\":\"Zoë\"},\"context_kind\":\"fact\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"3QA66uHrbG9BnCQj8_OfGgzottqgZBfdvL1q14XiT9w\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6IjNRQTY2dUhyYkc5Qm5DUWo4X09mR2d6b3R0cWdaQmZkdkwxcTE0WGlUOXciLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..Mu_7UH3uOeymG1sO4UY93-gFPCRGSz3F9WPZ1rpypqv8PesUJFvOWWdWukdlyRi6BQqa99A9DlhFsutH7o0HJQ\"}}"
    },
    {
      "id": "retired-key-after-exp",
      "description": "A disclosure signed by the retired provider key half a second after its exp. With disclosure-retired-key-just-before-exp it shows that signed times are compared exactly.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-21T12:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "retired"
      },
      "rule": "Reject a signed object whose signed time is at or after the instant the matching key's exp denotes (A5.4, A9).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R4\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-21T12:00:00.5Z\",\"valid_until\":\"2026-09-21T12:05:00.5Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":1,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"brief\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false},{\"id\":\"rent_vectorhometemperatureaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"home\",\"key\":\"temperature_preference\",\"level\":\"L2\",\"value_type\":\"number\",\"value\":20.5,\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false},{\"id\":\"rent_vectoridentitydisplaynameaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":1,\"domain\":\"identity\",\"key\":\"display_name\",\"level\":\"L2\",\"value_type\":\"structured\",\"value\":{\"first\":\"Zoë\"},\"context_kind\":\"fact\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"3QA66uHrbG9BnCQj8_OfGgzottqgZBfdvL1q14XiT9w\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6IjNRQTY2dUhyYkc5Qm5DUWo4X09mR2d6b3R0cWdaQmZkdkwxcTE0WGlUOXciLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..3nM0Whkk2Qgk7FLTjunl_gmm6s74-VhBechFR6YSTxK92DXZAb17hrTluUdIv2Utr0dgw94dl14eF2g6qaRO9g\"}}"
    },
    {
      "id": "receipt-retired-key-at-exp",
      "description": "A receipt signed by the retired provider key with at equal to the key's exp, verified a year later.",
      "checks": [
        "SIGN-01",
        "KEY-01"
      ],
      "typ": "autonym-receipt+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2027-09-22T00:00:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "retired"
      },
      "rule": "Reject a signed object whose signed time is at or after the instant the matching key's exp denotes (A5.4, A9).",
      "text": "{\"event_id\":\"evt_01JVECT0RS00000000000000E3\",\"provider\":\"https://autonym.example\",\"read_id\":\"rd_01JVECT0RS00000000000000R3\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"client_id\":\"https://recipient.example/client\",\"at\":\"2026-09-21T12:00:00Z\",\"purpose\":\"recommendation\",\"surface\":\"rest\",\"request\":{\"domains\":[\"agent\",\"home\",\"identity\"],\"max_level\":\"L2\",\"declared_only\":false,\"min_confidence\":0},\"returned\":[{\"entry_id\":\"ent_01JVECT0RS0000000000000EN1\",\"version\":1,\"level\":\"L2\"},{\"entry_id\":\"ent_01JVECT0RS0000000000000EN2\",\"version\":2,\"level\":\"L2\"},{\"entry_id\":\"ent_01JVECT0RS0000000000000EN3\",\"version\":1,\"level\":\"L2\"}],\"response_hash\":\"sha256:e63651758b2c575a18d555d836a4a8015a05442833a6061e8dfff2dae6f5df98\",\"prev_hash\":null,\"hash\":\"sha256:24e0f6a6f059bc1ece3fb0ec10fedc9bf033b69596e196d44ce0b628c4eb83fb\",\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"3QA66uHrbG9BnCQj8_OfGgzottqgZBfdvL1q14XiT9w\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6IjNRQTY2dUhyYkc5Qm5DUWo4X09mR2d6b3R0cWdaQmZkdkwxcTE0WGlUOXciLCJ0eXAiOiJhdXRvbnltLXJlY2VpcHQrandzIn0..Rb2KjIIoSFyfYHK5GNcZ6DGe-vDeUg_bDVAGwRVrH5vjxqHXGL6EEimThxH-ZPxgbe9_0nE6_WakNBA9DH5tzw\"}}"
    },
    {
      "id": "expired",
      "description": "disclosure-active-key verified at exactly its valid_until.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:05:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "expired"
      },
      "rule": "Reject a disclosure whose valid_until is not after issued_at, is more than five minutes after it, or disagrees with ttl_seconds; one whose issued_at is more than 60 seconds after the verifier's trusted current time; and one whose valid_until is not after the verifier's trusted current time (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "not-yet-valid",
      "description": "disclosure-active-key verified by a clock 60.001 seconds behind its issued_at.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T09:58:59.999Z"
      },
      "expected": {
        "valid": false,
        "reason": "not_yet_valid"
      },
      "rule": "Reject a disclosure whose valid_until is not after issued_at, is more than five minutes after it, or disagrees with ttl_seconds; one whose issued_at is more than 60 seconds after the verifier's trusted current time; and one whose valid_until is not after the verifier's trusted current time (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..KJO8sgg6TOXJ84gVK0klOqT-gw4J5ckY9JgjWdpAG-cTbzQLm-22XBeMAX1VIETiMN8ALpRnwb9fgoMp7TzROA\"}}"
    },
    {
      "id": "valid-until-beyond-five-minutes",
      "description": "A disclosure whose valid_until is 301 seconds after issued_at, signed by the active key. disclosure.json caps ttl_seconds at 300, so a deadline beyond five minutes also disagrees with ttl_seconds; both are the same A5.4 rule.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "time_bounds"
      },
      "rule": "Reject a disclosure whose valid_until is not after issued_at, is more than five minutes after it, or disagrees with ttl_seconds; one whose issued_at is more than 60 seconds after the verifier's trusted current time; and one whose valid_until is not after the verifier's trusted current time (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:01Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..Q8it2U6Vg7iAvS7p2SVgYs_azzd40MS0hPR3P4kw5HtMMQGwL4nMAzheUYzAOWDt4FkzoB5JIhjRlyNYNZRY-g\"}}"
    },
    {
      "id": "ttl-disagrees",
      "description": "A disclosure whose ttl_seconds is 299 while valid_until is 300 seconds after issued_at.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "time_bounds"
      },
      "rule": "Reject a disclosure whose valid_until is not after issued_at, is more than five minutes after it, or disagrees with ttl_seconds; one whose issued_at is more than 60 seconds after the verifier's trusted current time; and one whose valid_until is not after the verifier's trusted current time (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":299,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..Qz4SQE2bjGw46nmS7KTwJzJkDgmCalvXwy-r3W4_OIZ1nYqI066n9AxBW6iCa3KhdIJ8VegMozySxVRD5viIYw\"}}"
    },
    {
      "id": "valid-until-not-after-issued",
      "description": "A disclosure whose valid_until equals its issued_at, with ttl_seconds 0, signed by the active key.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "time_bounds"
      },
      "rule": "Reject a disclosure whose valid_until is not after issued_at, is more than five minutes after it, or disagrees with ttl_seconds; one whose issued_at is more than 60 seconds after the verifier's trusted current time; and one whose valid_until is not after the verifier's trusted current time (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://autonym.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:00:00Z\",\"ttl_seconds\":0,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..7hxfGZL9ZkIcuT-WPQBNaOyXVvDvrnf8pUfOEmOi94uk4MFUS4YkozjdJoPtTEdih4hKUzg0SE1WjBH1jBxhIA\"}}"
    },
    {
      "id": "wrong-provider",
      "description": "A disclosure naming another provider, signed by this provider's active key and verified for this provider.",
      "checks": [
        "SIGN-01"
      ],
      "typ": "autonym-disclosure+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2026-09-22T10:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "issuer"
      },
      "rule": "Reject a disclosure or receipt whose provider is not the trusted issuer, compared as exact strings (A5.4).",
      "text": "{\"autonym_version\":\"1.0\",\"provider\":\"https://other-provider.example\",\"audience\":\"https://autonym.example/v1\",\"client_id\":\"https://recipient.example/client\",\"handle\":\"autonym:x6yn4kmlbpcobb3kujp2x6wzmotcbyfh@autonym.example\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"grant_revision\":1,\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"purpose\":\"recommendation\",\"issued_at\":\"2026-09-22T10:00:00Z\",\"valid_until\":\"2026-09-22T10:05:00Z\",\"ttl_seconds\":300,\"persist_until\":\"2026-09-28T09:00:00Z\",\"entries\":[{\"id\":\"rent_vectoragentverbosityaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"version\":2,\"domain\":\"agent\",\"key\":\"verbosity\",\"level\":\"L2\",\"value_type\":\"enum\",\"value\":\"detailed\",\"context_kind\":\"preference\",\"safety_critical\":false,\"provenance\":{\"kind\":\"declared\",\"confirmed\":true},\"stale\":false}],\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLWRpc2Nsb3N1cmUrandzIn0..GO6sPPq6tjSGwlDbgSWpyeFMjxutJc9aUNXcYH6C_jZ7xAnrxwkAOBGk08rTI-Bzvih3bioztv9c_4VoGKv55A\"}}"
    },
    {
      "id": "receipt-carried-other-provider",
      "description": "A receipt carried in this provider's verified export, naming another provider, signed with a key the export publishes. The export's origin_host is the trusted issuer for the receipts it carries, so the receipt is not verified as this provider's; it is verified against the other provider's own key set or reported as unverified history.",
      "checks": [
        "SIGN-01",
        "LOG-02"
      ],
      "typ": "autonym-receipt+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2027-09-22T00:00:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "issuer"
      },
      "rule": "Reject a disclosure or receipt whose provider is not the trusted issuer, compared as exact strings (A5.4).",
      "text": "{\"event_id\":\"evt_01JVECT0RS00000000000000E2\",\"provider\":\"https://other-provider.example\",\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"client_id\":\"https://recipient.example/client\",\"at\":\"2026-09-22T10:00:00Z\",\"purpose\":\"recommendation\",\"surface\":\"mcp_tool\",\"request\":{\"domains\":[\"agent\"],\"max_level\":\"L3\",\"keys\":[\"verbosity\"],\"declared_only\":false,\"min_confidence\":0.5,\"since\":\"2026-09-21T09:00:00Z\"},\"returned\":[{\"entry_id\":\"ent_01JVECT0RS0000000000000EN1\",\"version\":2,\"level\":\"L2\"}],\"response_hash\":\"sha256:e8e97850dd88e69aed71137cce47beced665e53e793694fb984874032368bf79\",\"prev_hash\":\"sha256:72d9604e1c1b21f557450448c06c8abf1b6646026dcdd83ef37b490c5ff56325\",\"hash\":\"sha256:b4d933a58dc7f84eebb1b9a70d3290f65e077eba04c0c0611638582455401895\",\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLXJlY2VpcHQrandzIn0..es2i3rh5Fh_H-VKSY3bxceEfBg1p_BZRtYflbGUi7_KKNLr2_OAlNsiXJXsZyD5NX9u8FD94iPZNn128pcQPJQ\"}}"
    },
    {
      "id": "receipt-hash-mismatch",
      "description": "receipt-after-rotation with hash replaced by the previous receipt's hash, signed by the active key.",
      "checks": [
        "SIGN-01",
        "LOG-01"
      ],
      "typ": "autonym-receipt+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://autonym.example",
        "now": "2027-09-22T00:00:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "hash"
      },
      "rule": "Reject a receipt whose hash is not the A9 hash of its own content (A5.4).",
      "text": "{\"event_id\":\"evt_01JVECT0RS00000000000000E2\",\"provider\":\"https://autonym.example\",\"read_id\":\"rd_01JVECT0RS00000000000000R2\",\"grant_id\":\"gr_01JVECT0RS00000000000000G1\",\"client_id\":\"https://recipient.example/client\",\"at\":\"2026-09-22T10:00:00Z\",\"purpose\":\"recommendation\",\"surface\":\"mcp_tool\",\"request\":{\"domains\":[\"agent\"],\"max_level\":\"L3\",\"keys\":[\"verbosity\"],\"declared_only\":false,\"min_confidence\":0.5,\"since\":\"2026-09-21T09:00:00Z\"},\"returned\":[{\"entry_id\":\"ent_01JVECT0RS0000000000000EN1\",\"version\":2,\"level\":\"L2\"}],\"response_hash\":\"sha256:e8e97850dd88e69aed71137cce47beced665e53e793694fb984874032368bf79\",\"prev_hash\":\"sha256:72d9604e1c1b21f557450448c06c8abf1b6646026dcdd83ef37b490c5ff56325\",\"hash\":\"sha256:72d9604e1c1b21f557450448c06c8abf1b6646026dcdd83ef37b490c5ff56325\",\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"mYO1BpXaL579Vtqrg7FdfvJt9y-uBrMaUE6_CW-DHWc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Im1ZTzFCcFhhTDU3OVZ0cXJnN0ZkZnZKdDl5LXVCck1hVUU2X0NXLURIV2MiLCJ0eXAiOiJhdXRvbnltLXJlY2VpcHQrandzIn0..rr8EH-FflTya8fpeBGADKgUPAz2vYmC8tUPBXNLSPvmJmlyi9jleMnocoRcnGWtNq_UjyLXoaWsxpb_txsfm6A\"}}"
    },
    {
      "id": "acknowledgement-provider-key",
      "description": "purge-acknowledgement verified against the provider's key set. An acknowledgement is verified against that recipient's registered keys only.",
      "checks": [
        "SIGN-01",
        "PURGE-01"
      ],
      "typ": "autonym-purge-ack+jws",
      "verify": {
        "key_set": "provider",
        "trusted_issuer": "https://recipient.example/client",
        "now": "2026-09-23T15:01:00Z"
      },
      "expected": {
        "valid": false,
        "reason": "unknown_key"
      },
      "rule": "Reject a key ID that is not in the trusted set, appears in it more than once, or is not the thumbprint of its key (A5.4).",
      "text": "{\"instruction_id\":\"pi_01JVECT0RS00000000000000P1\",\"attestation\":\"purged\",\"at\":\"2026-09-23T15:00:00Z\",\"note\":\"Deleted the copy received under this grant.\",\"proof\":{\"type\":\"jws\",\"alg\":\"ES256\",\"kid\":\"w7t35gDe7Lcp0DXE4NrgKar6duLgsJCrvmYyLuVjpIc\",\"jws\":\"eyJhbGciOiJFUzI1NiIsImtpZCI6Inc3dDM1Z0RlN0xjcDBEWEU0TnJnS2FyNmR1TGdzSkNydm1ZeUx1VmpwSWMiLCJ0eXAiOiJhdXRvbnltLXB1cmdlLWFjaytqd3MifQ..ryMwdBH4V3e1zTuXZy5vkZRQl8d393gV8XnO0f7FAN_le71IWtv8qn0XAXgWamfPougyEOdfS6B3WNzgUvrV_g\"}}"
    }
  ]
}
