{
  "provenance": {
    "generated_by": "verifier/vectors/generate.ts",
    "from": "@masterdb/shared (envelope, ids, records, projection) — the implementation the services sign with",
    "generated_at": "2026-10-04T12:46:02.755Z",
    "note": "Test keys only, derived from public seeds. ECDSA and ML-DSA signatures are randomised, so a re-run changes signature bytes; commit a re-run with its reason."
  },
  "description": "The ai_policy_bits a search row carries, each with the exact bytes of the sealed AI policy record a fetch returns (record_base64; null at version 0) and the fetch's ai_policy.version: every verifier must ACCEPT these — the bits derived from the sealed booleans, blocked contexts bc1 to bc10 at bits 0 to 9, the purchase bit alone allowed to be withheld.",
  "cases": [
    {
      "id": "ai-policy/schema-2-bits",
      "description": "The ai_policy_bits a search row carries, checked against the sealed ai_policy_schema 2 record a fetch returns (its exact bytes) and the fetch's ai_policy.version: use 0b1001111, action 0b110011 (contact on), blocked 0b0010000010 — bc2 alcohol and bc8 politics_elections.",
      "input": {
        "bits": {
          "ai_policy_version": 2,
          "ai_policy_schema": 2,
          "use": 79,
          "action": 51,
          "blocked": 130
        },
        "record_base64": "eyJhaV9wb2xpY3lfc2NoZW1hIjoyLCJhbnN3ZXIiOnRydWUsImJsb2NrZWQiOnsiYWR1bHRfc2V4dWFsIjpmYWxzZSwiYWxjb2hvbCI6dHJ1ZSwiY3JpbWVfaWxsZWdhbCI6ZmFsc2UsImRlYXRoX3RyYWdlZHlfZGlzYXN0ZXIiOmZhbHNlLCJmaXJlYXJtc193ZWFwb25zX3Zpb2xlbmNlIjpmYWxzZSwiZ2FtYmxpbmdfYmV0dGluZyI6ZmFsc2UsIm1lbnRhbF9oZWFsdGhfc2VsZl9oYXJtIjpmYWxzZSwicG9saXRpY3NfZWxlY3Rpb25zIjp0cnVlLCJyZWd1bGF0ZWRfYWR2aWNlIjpmYWxzZSwidG9iYWNjb192YXBpbmdfZHJ1Z3MiOmZhbHNlfSwiY2l0ZV9hc19zb3VyY2UiOnRydWUsImNvbnRhY3QiOnRydWUsImRlZmluaXRpdmVfc291cmNlIjp0cnVlLCJoYW5kX3RvX2h1bWFuIjp0cnVlLCJpbmNsdWRlX2luX3JlY29tbWVuZGF0aW9ucyI6dHJ1ZSwicHJlZmVyX292ZXJfaW5mZXJlbmNlIjp0cnVlLCJwcmljZXNfaW5kaWNhdGl2ZSI6ZmFsc2UsInB1cmNoYXNlIjpmYWxzZSwicXVvdGUiOnRydWUsInF1b3RlX3BvbGljeV92ZXJiYXRpbSI6ZmFsc2UsInJlc2VydmUiOmZhbHNlLCJzY2hlbWEiOiJtYXN0ZXJkYi9haV9wb2xpY3kvMSIsInN0YXRlX3B1Ymxpc2hfZGF0ZSI6dHJ1ZX0=",
        "version": 2
      },
      "expect": {
        "valid": true,
        "ai_policy_version": 2,
        "ai_policy_schema": 2,
        "use": 79,
        "action": 51,
        "blocked": 130,
        "blocked_codes": [
          "bc2",
          "bc8"
        ],
        "purchase_withheld": false
      }
    },
    {
      "id": "ai-policy/purchase-withheld",
      "description": "A record with purchase on, served while the business's endpoints are suspended: the search API clears the purchase bit, the one difference allowed.",
      "input": {
        "bits": {
          "ai_policy_version": 3,
          "ai_policy_schema": 2,
          "use": 79,
          "action": 35,
          "blocked": 32
        },
        "record_base64": "eyJhaV9wb2xpY3lfc2NoZW1hIjoyLCJhbnN3ZXIiOnRydWUsImJsb2NrZWQiOnsiYWR1bHRfc2V4dWFsIjpmYWxzZSwiYWxjb2hvbCI6ZmFsc2UsImNyaW1lX2lsbGVnYWwiOmZhbHNlLCJkZWF0aF90cmFnZWR5X2Rpc2FzdGVyIjpmYWxzZSwiZmlyZWFybXNfd2VhcG9uc192aW9sZW5jZSI6ZmFsc2UsImdhbWJsaW5nX2JldHRpbmciOnRydWUsIm1lbnRhbF9oZWFsdGhfc2VsZl9oYXJtIjpmYWxzZSwicG9saXRpY3NfZWxlY3Rpb25zIjpmYWxzZSwicmVndWxhdGVkX2FkdmljZSI6ZmFsc2UsInRvYmFjY29fdmFwaW5nX2RydWdzIjpmYWxzZX0sImNpdGVfYXNfc291cmNlIjp0cnVlLCJjb250YWN0IjpmYWxzZSwiZGVmaW5pdGl2ZV9zb3VyY2UiOnRydWUsImhhbmRfdG9faHVtYW4iOnRydWUsImluY2x1ZGVfaW5fcmVjb21tZW5kYXRpb25zIjp0cnVlLCJwcmVmZXJfb3Zlcl9pbmZlcmVuY2UiOnRydWUsInByaWNlc19pbmRpY2F0aXZlIjpmYWxzZSwicHVyY2hhc2UiOnRydWUsInF1b3RlIjp0cnVlLCJxdW90ZV9wb2xpY3lfdmVyYmF0aW0iOmZhbHNlLCJyZXNlcnZlIjpmYWxzZSwic2NoZW1hIjoibWFzdGVyZGIvYWlfcG9saWN5LzEiLCJzdGF0ZV9wdWJsaXNoX2RhdGUiOnRydWV9",
        "version": 3
      },
      "expect": {
        "valid": true,
        "blocked_codes": [
          "bc6"
        ],
        "purchase_withheld": true
      }
    },
    {
      "id": "ai-policy/format-1-terms-record",
      "description": "A row's bits against an AI policy sealed under its earlier name, terms (terms_schema 1): read as ai_policy_schema 1, nothing blocked.",
      "input": {
        "bits": {
          "ai_policy_version": 2,
          "ai_policy_schema": 1,
          "use": 79,
          "action": 35,
          "blocked": 0
        },
        "record_base64": "eyJhbnN3ZXIiOnRydWUsImNpdGVfYXNfc291cmNlIjp0cnVlLCJjb250YWN0IjpmYWxzZSwiZGVmaW5pdGl2ZV9zb3VyY2UiOnRydWUsImhhbmRfdG9faHVtYW4iOnRydWUsImluY2x1ZGVfaW5fcmVjb21tZW5kYXRpb25zIjp0cnVlLCJwcmVmZXJfb3Zlcl9pbmZlcmVuY2UiOnRydWUsInByaWNlc19pbmRpY2F0aXZlIjpmYWxzZSwicHVyY2hhc2UiOmZhbHNlLCJxdW90ZSI6dHJ1ZSwicXVvdGVfcG9saWN5X3ZlcmJhdGltIjpmYWxzZSwicmVzZXJ2ZSI6ZmFsc2UsInNjaGVtYSI6Im1hc3RlcmRiL3Rlcm1zLzEiLCJzdGF0ZV9wdWJsaXNoX2RhdGUiOnRydWUsInRlcm1zX3NjaGVtYSI6MX0=",
        "version": 2
      },
      "expect": {
        "valid": true,
        "ai_policy_schema": 1,
        "blocked": 0,
        "blocked_codes": []
      }
    },
    {
      "id": "ai-policy/version-0",
      "description": "A business that has sealed no AI policy (version 0, record null): every mask is 0.",
      "input": {
        "bits": {
          "ai_policy_version": 0,
          "ai_policy_schema": 2,
          "use": 0,
          "action": 0,
          "blocked": 0
        },
        "record_base64": null
      },
      "expect": {
        "valid": true,
        "ai_policy_version": 0,
        "blocked_codes": []
      }
    }
  ]
}
