{
  "runtime": {
    "python": "3.14.7",
    "sqlite": "3.53.4"
  },
  "scope": "Actual in-memory SQLite constraints, separate fresh database per matrix cell",
  "cases": [
    {
      "schema": "id_only",
      "case": "same_tenant_insert",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 101)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "cross_tenant_insert",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 202)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          202
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "missing_parent",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 999)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "null_tenant",
      "sql": "INSERT INTO tasks VALUES (1, NULL, 202)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          null,
          202
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "null_project",
      "sql": "INSERT INTO tasks VALUES (1, 'a', NULL)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          null
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "cross_tenant_update",
      "sql": "UPDATE tasks SET project_id=202 WHERE id=1",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          202
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "child_tenant_change",
      "sql": "UPDATE tasks SET tenant_id='b' WHERE id=1",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "b",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "id_only",
      "case": "delete_referenced_parent",
      "sql": "DELETE FROM projects WHERE id=101",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_TRIGGER",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "same_tenant_insert",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 101)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "cross_tenant_insert",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 202)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "missing_parent",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 999)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "null_tenant",
      "sql": "INSERT INTO tasks VALUES (1, NULL, 202)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          null,
          202
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "null_project",
      "sql": "INSERT INTO tasks VALUES (1, 'a', NULL)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          null
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "cross_tenant_update",
      "sql": "UPDATE tasks SET project_id=202 WHERE id=1",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "child_tenant_change",
      "sql": "UPDATE tasks SET tenant_id='b' WHERE id=1",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_nullable",
      "case": "delete_referenced_parent",
      "sql": "DELETE FROM projects WHERE id=101",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_TRIGGER",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "same_tenant_insert",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 101)",
      "accepted": true,
      "error": null,
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "cross_tenant_insert",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 202)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "missing_parent",
      "sql": "INSERT INTO tasks VALUES (1, 'a', 999)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "null_tenant",
      "sql": "INSERT INTO tasks VALUES (1, NULL, 202)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_NOTNULL",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "null_project",
      "sql": "INSERT INTO tasks VALUES (1, 'a', NULL)",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_NOTNULL",
      "tasks_after": [],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "cross_tenant_update",
      "sql": "UPDATE tasks SET project_id=202 WHERE id=1",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "child_tenant_change",
      "sql": "UPDATE tasks SET tenant_id='b' WHERE id=1",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_FOREIGNKEY",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    },
    {
      "schema": "composite_required",
      "case": "delete_referenced_parent",
      "sql": "DELETE FROM projects WHERE id=101",
      "accepted": false,
      "error": "SQLITE_CONSTRAINT_TRIGGER",
      "tasks_after": [
        [
          1,
          "a",
          101
        ]
      ],
      "projects_after": [
        [
          101,
          "a"
        ],
        [
          202,
          "b"
        ]
      ]
    }
  ],
  "invalid_required_writes": {
    "id_only": 5,
    "composite_nullable": 2,
    "composite_required": 0
  },
  "invalid_required_writes_per_schema": 5,
  "additional_checks": {
    "disabled_enforcement": {
      "accepted": true,
      "error": null
    },
    "enable_inside_transaction_value": 0,
    "foreign_key_check_after_enable": [
      [
        "tasks",
        1,
        "projects",
        0
      ]
    ],
    "parent_without_composite_unique": "SQLITE_ERROR"
  }
}
