{
  "version": "1.0.0",
  "published": "2026-07-24",
  "description": "Public conformance cases for the PayloadPair semantic JSON comparison engine.",
  "cases": [
    {
      "id": "PP-001",
      "title": "Equal empty objects",
      "category": "JSON values",
      "original": "{}",
      "modified": "{}",
      "expect": { "exactEqual": true, "filteredEqual": true, "patchVerified": true }
    },
    {
      "id": "PP-002",
      "title": "Object member order is insignificant",
      "category": "JSON values",
      "original": "{\"a\":1,\"b\":2}",
      "modified": "{\"b\":2,\"a\":1}",
      "expect": { "exactEqual": true, "filteredEqual": true, "patchVerified": true }
    },
    {
      "id": "PP-003",
      "title": "Added object member",
      "category": "Objects",
      "original": "{\"a\":1}",
      "modified": "{\"a\":1,\"b\":2}",
      "expect": { "exactEqual": false, "counts": { "added": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-004",
      "title": "Removed object member",
      "category": "Objects",
      "original": "{\"a\":1,\"b\":2}",
      "modified": "{\"a\":1}",
      "expect": { "exactEqual": false, "counts": { "removed": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-005",
      "title": "Missing differs from null",
      "category": "JSON values",
      "original": "{\"value\":null}",
      "modified": "{}",
      "expect": { "exactEqual": false, "counts": { "removed": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-006",
      "title": "Boolean differs from string",
      "category": "Types",
      "original": "{\"enabled\":false}",
      "modified": "{\"enabled\":\"false\"}",
      "expect": { "exactEqual": false, "counts": { "type": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-007",
      "title": "Root scalar modification",
      "category": "Root values",
      "original": "1",
      "modified": "2",
      "expect": { "exactEqual": false, "counts": { "modified": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-008",
      "title": "Root value type change",
      "category": "Root values",
      "original": "[]",
      "modified": "{}",
      "expect": { "exactEqual": false, "counts": { "type": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-009",
      "title": "Ordered arrays compare by position",
      "category": "Ordered arrays",
      "original": "[1,2]",
      "modified": "[2,1]",
      "expect": { "exactEqual": false, "counts": { "modified": 2 }, "patchVerified": true }
    },
    {
      "id": "PP-010",
      "title": "Array tail append",
      "category": "Ordered arrays",
      "original": "[1]",
      "modified": "[1,2]",
      "expect": { "exactEqual": false, "counts": { "added": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-011",
      "title": "Array tail removal",
      "category": "Ordered arrays",
      "original": "[1,2]",
      "modified": "[1]",
      "expect": { "exactEqual": false, "counts": { "removed": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-012",
      "title": "Keyed array reorder",
      "category": "Keyed arrays",
      "original": "{\"items\":[{\"id\":\"a\",\"v\":1},{\"id\":\"b\",\"v\":2}]}",
      "modified": "{\"items\":[{\"id\":\"b\",\"v\":2},{\"id\":\"a\",\"v\":1}]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "exactEqual": false, "filteredEqual": true, "patchVerified": true }
    },
    {
      "id": "PP-013",
      "title": "Keyed array value change",
      "category": "Keyed arrays",
      "original": "{\"items\":[{\"id\":\"a\",\"v\":1}]}",
      "modified": "{\"items\":[{\"id\":\"a\",\"v\":2}]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "counts": { "modified": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-014",
      "title": "Keyed array addition",
      "category": "Keyed arrays",
      "original": "{\"items\":[{\"id\":\"a\"}]}",
      "modified": "{\"items\":[{\"id\":\"a\"},{\"id\":\"b\"}]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "counts": { "added": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-015",
      "title": "Keyed array removal",
      "category": "Keyed arrays",
      "original": "{\"items\":[{\"id\":\"a\"},{\"id\":\"b\"}]}",
      "modified": "{\"items\":[{\"id\":\"a\"}]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "counts": { "removed": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-016",
      "title": "Duplicate keyed identity is unresolved",
      "category": "Ambiguity",
      "original": "{\"items\":[{\"id\":\"a\"},{\"id\":\"a\"}]}",
      "modified": "{\"items\":[{\"id\":\"a\"}]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "counts": { "unresolved": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-017",
      "title": "Missing keyed identity is unresolved",
      "category": "Ambiguity",
      "original": "{\"items\":[{\"id\":\"a\"},{}]}",
      "modified": "{\"items\":[{\"id\":\"a\"}]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "counts": { "unresolved": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-018",
      "title": "Non-object keyed item is unresolved",
      "category": "Ambiguity",
      "original": "{\"items\":[1]}",
      "modified": "{\"items\":[2]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/items", "mode": "keyed", "key": "id" }] },
      "expect": { "counts": { "unresolved": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-019",
      "title": "Unordered array reorder",
      "category": "Unordered arrays",
      "original": "{\"tags\":[\"a\",\"b\"]}",
      "modified": "{\"tags\":[\"b\",\"a\"]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/tags", "mode": "unordered" }] },
      "expect": { "exactEqual": false, "filteredEqual": true, "patchVerified": true }
    },
    {
      "id": "PP-020",
      "title": "Unordered arrays preserve duplicate counts",
      "category": "Unordered arrays",
      "original": "{\"tags\":[\"a\",\"a\"]}",
      "modified": "{\"tags\":[\"a\"]}",
      "options": { "arrayRules": [{ "id": "r1", "pointer": "/tags", "mode": "unordered" }] },
      "expect": { "counts": { "removed": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-021",
      "title": "Ignore exact pointer",
      "category": "Ignore rules",
      "original": "{\"meta\":{\"requestId\":\"a\"},\"value\":1}",
      "modified": "{\"meta\":{\"requestId\":\"b\"},\"value\":1}",
      "options": { "ignorePointers": ["/meta/requestId"] },
      "expect": { "exactEqual": false, "filteredEqual": true, "ignoredCount": 1, "patchVerified": true }
    },
    {
      "id": "PP-022",
      "title": "JSON Pointer slash escaping",
      "category": "JSON Pointer",
      "original": "{\"a/b\":1}",
      "modified": "{\"a/b\":2}",
      "options": { "ignorePointers": ["/a~1b"] },
      "expect": { "exactEqual": false, "filteredEqual": true, "ignoredCount": 1, "patchVerified": true }
    },
    {
      "id": "PP-023",
      "title": "JSON Pointer tilde escaping",
      "category": "JSON Pointer",
      "original": "{\"a~b\":1}",
      "modified": "{\"a~b\":2}",
      "options": { "ignorePointers": ["/a~0b"] },
      "expect": { "exactEqual": false, "filteredEqual": true, "ignoredCount": 1, "patchVerified": true }
    },
    {
      "id": "PP-024",
      "title": "Ignore a key everywhere",
      "category": "Ignore rules",
      "original": "{\"id\":1,\"nested\":{\"id\":2}}",
      "modified": "{\"id\":3,\"nested\":{\"id\":4}}",
      "options": { "ignoreKeys": ["id"] },
      "expect": { "exactEqual": false, "filteredEqual": true, "ignoredCount": 2, "patchVerified": true }
    },
    {
      "id": "PP-025",
      "title": "Numeric change within tolerance",
      "category": "Numbers",
      "original": "{\"score\":10}",
      "modified": "{\"score\":10.04}",
      "options": { "numericTolerance": 0.05 },
      "expect": { "exactEqual": false, "filteredEqual": true, "patchVerified": true }
    },
    {
      "id": "PP-026",
      "title": "Numeric change outside tolerance",
      "category": "Numbers",
      "original": "{\"score\":10}",
      "modified": "{\"score\":10.06}",
      "options": { "numericTolerance": 0.05 },
      "expect": { "exactEqual": false, "counts": { "modified": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-027",
      "title": "Large integers remain distinct",
      "category": "Numbers",
      "original": "{\"id\":9007199254740992}",
      "modified": "{\"id\":9007199254740993}",
      "expect": { "exactEqual": false, "counts": { "modified": 1 }, "patchVerified": true }
    },
    {
      "id": "PP-028",
      "title": "Equivalent exponent notation",
      "category": "Numbers",
      "original": "{\"value\":1e3}",
      "modified": "{\"value\":1000}",
      "expect": { "exactEqual": true, "filteredEqual": true, "patchVerified": true }
    },
    {
      "id": "PP-029",
      "title": "Duplicate object names block patch export",
      "category": "Ambiguity",
      "original": "{\"id\":1,\"id\":2}",
      "modified": "{\"id\":2}",
      "expect": { "patchVerified": false, "duplicateWarning": true }
    },
    {
      "id": "PP-030",
      "title": "Patch path escapes slash and tilde",
      "category": "JSON Patch",
      "original": "{}",
      "modified": "{\"a/b~c\":1}",
      "expect": { "exactEqual": false, "counts": { "added": 1 }, "patchVerified": true, "patchContains": "/a~1b~0c" }
    }
  ]
}
