{
  "python": "3.14.0",
  "sqlite": "3.50.4",
  "scope": "four isolated real SQLite in-memory databases, foreign_keys ON throughout; no concurrency or user-defined triggers",
  "cases": [
    {
      "case": "replace_same_id",
      "sql": "INSERT OR REPLACE INTO parent(id, name) VALUES (?, ?)",
      "parameters": [
        1,
        "new-name"
      ],
      "direct_changes": 1,
      "before": {
        "parents": [
          [
            1,
            "old-name",
            "keep-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      },
      "after": {
        "parents": [
          [
            1,
            "new-name",
            "default-note"
          ]
        ],
        "children": [],
        "foreign_key_violations": []
      }
    },
    {
      "case": "upsert_existing",
      "sql": "INSERT INTO parent(id, name) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET name=excluded.name",
      "parameters": [
        1,
        "new-name"
      ],
      "direct_changes": 1,
      "before": {
        "parents": [
          [
            1,
            "old-name",
            "keep-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      },
      "after": {
        "parents": [
          [
            1,
            "new-name",
            "keep-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      }
    },
    {
      "case": "update_existing",
      "sql": "UPDATE parent SET name=? WHERE id=?",
      "parameters": [
        "new-name",
        1
      ],
      "direct_changes": 1,
      "before": {
        "parents": [
          [
            1,
            "old-name",
            "keep-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      },
      "after": {
        "parents": [
          [
            1,
            "new-name",
            "keep-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      }
    },
    {
      "case": "upsert_new",
      "sql": "INSERT INTO parent(id, name) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET name=excluded.name",
      "parameters": [
        2,
        "new-name"
      ],
      "direct_changes": 1,
      "before": {
        "parents": [
          [
            1,
            "old-name",
            "keep-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      },
      "after": {
        "parents": [
          [
            1,
            "old-name",
            "keep-note"
          ],
          [
            2,
            "new-name",
            "default-note"
          ]
        ],
        "children": [
          [
            10,
            1
          ]
        ],
        "foreign_key_violations": []
      }
    }
  ]
}
PASS: same-ID replacement, cascading children, omitted defaults, upsert branches and direct-change counts
