{
  "$schema": "https://iarpg.com/canonicalization-vectors.schema.json",
  "profile": "IARPG-CJSON-1",
  "release": "IARPG-OPS-2",
  "version": "2.0.4-wip",
  "generated_utc": "2026-07-20T12:04:07Z",
  "passing_vectors": [
    {
      "vector_id": "CJSON-PASS-001",
      "description": "Object keys sort by Unicode scalar value",
      "raw_json": "{\"z\":1,\"a\":2,\"m\":3}",
      "canonical_json": "{\"a\":2,\"m\":3,\"z\":1}",
      "sha256": "ebba85cfdc0a724b6cc327ecc545faeb38b9fe02eca603b430eb872f5cf75370",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-002",
      "description": "Nested objects sort independently",
      "raw_json": "{\"outer\":{\"z\":0,\"a\":1},\"alpha\":{\"b\":2,\"a\":3}}",
      "canonical_json": "{\"alpha\":{\"a\":3,\"b\":2},\"outer\":{\"a\":1,\"z\":0}}",
      "sha256": "4d895332c787e54eca680b0545ba755ecccf3a5b5b9ece97284c220cd1aa1f1b",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-003",
      "description": "Array order remains significant",
      "raw_json": "{\"sequence\":[\"Validate\",\"Collect\",\"Debrief\"],\"ordered\":true}",
      "canonical_json": "{\"ordered\":true,\"sequence\":[\"Validate\",\"Collect\",\"Debrief\"]}",
      "sha256": "b7434d093a0911a7929ea33e6967a446b9b7a61a8bad6269c37fa9141bf8bb4b",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-004",
      "description": "Unicode strings remain UTF-8",
      "raw_json": "{\"place\":\"東京\",\"café\":\"naïve\",\"symbol\":\"🛰️\"}",
      "canonical_json": "{\"café\":\"naïve\",\"place\":\"東京\",\"symbol\":\"🛰️\"}",
      "sha256": "6483ae09b3eaca396850dff2e0383e8e89360fb9d964f06f9851f61d883ff7c3",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-005",
      "description": "Escaped characters use JSON rules",
      "raw_json": "{\"text\":\"quote \\\" slash / backslash \\\\ newline \\n tab \\t\"}",
      "canonical_json": "{\"text\":\"quote \\\" slash / backslash \\\\ newline \\n tab \\t\"}",
      "sha256": "bd4a389174b0fc9302ca6cfa402e241ca913f1746bfad7085394b01b0208ebc3",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-006",
      "description": "Null boolean integer and finite decimal values",
      "raw_json": "{\"null_value\":null,\"boolean\":true,\"integer\":42,\"decimal\":12.5}",
      "canonical_json": "{\"boolean\":true,\"decimal\":12.5,\"integer\":42,\"null_value\":null}",
      "sha256": "07167cea1cb1659a1fd221797e872740786a2d58719eb45ef18bee48d6d3da5f",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-007",
      "description": "UTC fields use Z notation",
      "raw_json": "{\"generated_utc\":\"2026-07-20T12:04:07Z\",\"reviewed_utc\":\"2026-07-20T12:04:07.125Z\"}",
      "canonical_json": "{\"generated_utc\":\"2026-07-20T12:04:07Z\",\"reviewed_utc\":\"2026-07-20T12:04:07.125Z\"}",
      "sha256": "021b6e96c4478253b51420c3b6cbb3c93be2cf999cafdcca52e1e3d9aa90612f",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-008",
      "description": "Empty objects and arrays remain distinct",
      "raw_json": "{\"empty_object\":{},\"empty_array\":[]}",
      "canonical_json": "{\"empty_array\":[],\"empty_object\":{}}",
      "sha256": "0f2158204145fd606c11e64e0161a9a78eb7c27fb39b7b5cb6fee328fb5b99da",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-009",
      "description": "Unknown extension fields are preserved",
      "raw_json": "{\"artifact_id\":\"A-1\",\"extensions\":{\"x_vendor\":{\"flag\":true,\"ordered\":[3,2,1]}}}",
      "canonical_json": "{\"artifact_id\":\"A-1\",\"extensions\":{\"x_vendor\":{\"flag\":true,\"ordered\":[3,2,1]}}}",
      "sha256": "01145ad4c0c2754ff6d1cc912db7bf426e895b8f629812aea0c5bc30689dfc6b",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-010",
      "description": "Unicode object keys use scalar ordering",
      "raw_json": "{\"😀\":\"supplementary\",\"é\":\"accent\",\"z\":\"latin\"}",
      "canonical_json": "{\"z\":\"latin\",\"é\":\"accent\",\"😀\":\"supplementary\"}",
      "sha256": "a94cc42440122c2d90588555d8bd72b0acff72e662a9ef69ae326f36ef7bfab3",
      "expected_result": "pass"
    },
    {
      "vector_id": "CJSON-PASS-011",
      "description": "Negative zero normalizes to zero",
      "raw_json": "{\"value\":-0}",
      "canonical_json": "{\"value\":0}",
      "sha256": "23d7b286bd429460b92a2a1c21b6afc34110446c5034c17363fda363aa0a7c5d",
      "expected_result": "pass"
    }
  ],
  "failing_vectors": [
    {
      "vector_id": "CJSON-FAIL-001",
      "description": "Duplicate object key",
      "input_kind": "raw-json",
      "raw_json": "{\"id\":\"A\",\"id\":\"B\"}",
      "expected_result": "reject",
      "expected_error_code": "duplicate-object-key"
    },
    {
      "vector_id": "CJSON-FAIL-002",
      "description": "Non-finite NaN token",
      "input_kind": "raw-json",
      "raw_json": "{\"value\":NaN}",
      "expected_result": "reject",
      "expected_error_code": "invalid-json-number"
    },
    {
      "vector_id": "CJSON-FAIL-003",
      "description": "Non-finite Infinity token",
      "input_kind": "raw-json",
      "raw_json": "{\"value\":Infinity}",
      "expected_result": "reject",
      "expected_error_code": "invalid-json-number"
    },
    {
      "vector_id": "CJSON-FAIL-004",
      "description": "Integer outside interoperable safe range",
      "input_kind": "raw-json",
      "raw_json": "{\"value\":9007199254740992}",
      "expected_result": "reject",
      "expected_error_code": "unsafe-integer"
    },
    {
      "vector_id": "CJSON-FAIL-005",
      "description": "UTC field uses an offset instead of Z",
      "input_kind": "raw-json",
      "raw_json": "{\"generated_utc\":\"2026-07-20T08:04:07-04:00\"}",
      "expected_result": "reject",
      "expected_error_code": "invalid-utc"
    },
    {
      "vector_id": "CJSON-FAIL-006",
      "description": "UTC field omits time zone",
      "input_kind": "raw-json",
      "raw_json": "{\"generated_utc\":\"2026-07-20 12:04:07\"}",
      "expected_result": "reject",
      "expected_error_code": "invalid-utc"
    },
    {
      "vector_id": "CJSON-FAIL-007",
      "description": "Unpaired Unicode surrogate",
      "input_kind": "raw-json",
      "raw_json": "{\"text\":\"\\ud800\"}",
      "expected_result": "reject",
      "expected_error_code": "invalid-unicode-scalar"
    },
    {
      "vector_id": "CJSON-FAIL-008",
      "description": "Malformed UTF-8 byte sequence",
      "input_kind": "utf8-base64",
      "base64": "eyJ0ZXh0Ijoi/yJ9",
      "expected_result": "reject",
      "expected_error_code": "malformed-utf8"
    },
    {
      "vector_id": "CJSON-FAIL-009",
      "description": "Trailing JSON value",
      "input_kind": "raw-json",
      "raw_json": "{\"a\":1} {\"b\":2}",
      "expected_result": "reject",
      "expected_error_code": "trailing-content"
    }
  ],
  "parity_requirement": "Browser and build-time validators MUST emit the published canonical_json and sha256 for every passing vector and reject every failing vector."
}
