{
  "schema": 1,
  "sqlstate": "P0004",
  "condition_name": "assert_failure",
  "runner": "scripts/verify_cases.py",
  "targets": {
    "latest": {
      "binary": "Homebrew PostgreSQL 18.6",
      "required": true
    },
    "pg10": {
      "image": "postgres:10",
      "required": true
    }
  },
  "cases": [
    {
      "id": "assertion_failure_recovery",
      "versions": [
        "10",
        "18"
      ],
      "preconditions": [
        "A disposable runner target has PL/pgSQL available.",
        "plpgsql.check_asserts is explicitly enabled before the trigger."
      ],
      "trigger": "Call a PL/pgSQL function whose ASSERT condition is false inside an explicit transaction.",
      "assertions": [
        "The natural ASSERT failure has SQLSTATE P0004 and the expected diagnostic.",
        "The failed explicit transaction is INERROR and ROLLBACK returns it to IDLE.",
        "A valid call succeeds after rollback, and an explicit check_asserts=off control suppresses the assertion.",
        "Re-enabling check_asserts makes the valid call succeed and the runner cleans up."
      ],
      "repair": "Rollback the failed transaction, use a valid input, and keep assertions enabled for production behavior.",
      "cleanup": "Drop the case schema with an owner connection."
    }
  ],
  "evidence_status": "authored",
  "snippets": [
    {
      "id": "assertion_failure_recovery",
      "case_id": "assertion_failure_recovery",
      "language": "sql",
      "statements": {
        "create_function": "CREATE OR REPLACE FUNCTION p0004_assert(value integer) RETURNS integer LANGUAGE plpgsql AS $$ BEGIN ASSERT value > 0, 'value must be positive'; RETURN value; END $$",
        "enable": "SET plpgsql.check_asserts = on",
        "show_enabled": "SHOW plpgsql.check_asserts",
        "begin": "BEGIN",
        "trigger": "SELECT p0004_assert(0)",
        "rollback": "ROLLBACK",
        "repair": "SELECT p0004_assert(1)",
        "disable": "SET plpgsql.check_asserts = off",
        "show_disabled": "SHOW plpgsql.check_asserts",
        "disabled_control": "SELECT p0004_assert(0)",
        "re_enable": "SET plpgsql.check_asserts = on",
        "show_re_enabled": "SHOW plpgsql.check_asserts",
        "final_probe": "SELECT p0004_assert(1)"
      }
    }
  ],
  "runtime": [
    {
      "id": "runtime.P0004-same-session-latest-final.latest",
      "run_id": "P0004-same-session-latest-final",
      "target": "latest",
      "server_version": "18.6 (Homebrew)",
      "server_version_num": 180006,
      "status": "passed",
      "summary_sha256": "5246ae67ee8dd29e769c3a03db7bfb6cde2f201c9f45993201fb269cc53988ad",
      "raw_sha256": "2b03b5469ea34a0e49ad4a71e93cef4b19df0d01d86fc1156e478d88bc93168c",
      "cases": [
        "assertion_failure_recovery"
      ],
      "observed": {
        "sqlstate": "P0004",
        "severity": "ERROR",
        "message_primary": "value must be positive",
        "after_error": "INERROR",
        "after_rollback": "IDLE",
        "repair_result": 1,
        "disabled_control_result": 0
      },
      "result": {
        "status": "passed",
        "environment": {
          "TimeZone": "Asia/Shanghai",
          "backend_pid": 9086,
          "binary": {
            "bindir": "/opt/homebrew/Cellar/postgresql@18/18.6/bin",
            "pg_config": "/opt/homebrew/bin/pg_config",
            "pg_config_version": "PostgreSQL 18.6 (Homebrew)",
            "postgres": "/opt/homebrew/Cellar/postgresql@18/18.6/bin/postgres"
          },
          "connection_scope": "runner-owned localhost port",
          "current_user": "runner",
          "docker": {},
          "lc_messages": "C",
          "libpq_version": "18.6",
          "locale": "en_US.UTF-8",
          "log_destination": "csvlog,jsonlog",
          "log_error_verbosity": "verbose",
          "log_min_error_statement": "error",
          "log_min_messages": "error",
          "logging_collector": "on",
          "machine": "arm64",
          "max_connections": "100",
          "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O",
          "psycopg_version": "3.3.5",
          "python_version": "3.14.6 (main, Jun 10 2026, 10:03:53) [Clang 21.0.0 (clang-2100.0.123.102)]",
          "server_encoding": "UTF8",
          "server_version": "18.6 (Homebrew)",
          "server_version_num": "180006",
          "target_kind": "latest",
          "wal_level": "logical"
        },
        "cases": [
          {
            "assertions": [
              {
                "expected": "P0004",
                "name": "ASSERT SQLSTATE",
                "observed": "P0004",
                "passed": true
              },
              {
                "expected": "value must be positive",
                "name": "ASSERT diagnostic",
                "observed": "value must be positive",
                "passed": true
              },
              {
                "expected": "INERROR",
                "name": "assertion transaction is inerror",
                "observed": "INERROR",
                "passed": true
              },
              {
                "expected": "IDLE",
                "name": "rollback restores idle",
                "observed": "IDLE",
                "passed": true
              },
              {
                "expected": {
                  "status": "IDLE",
                  "value": 1
                },
                "name": "valid input repairs call",
                "observed": {
                  "status": "IDLE",
                  "value": 1
                },
                "passed": true
              },
              {
                "expected": "on",
                "name": "assertions enabled before trigger",
                "observed": "on",
                "passed": true
              },
              {
                "expected": {
                  "setting": "off",
                  "value": 0
                },
                "name": "disabled control returns zero",
                "observed": {
                  "setting": "off",
                  "value": 0
                },
                "passed": true
              },
              {
                "expected": {
                  "setting": "on",
                  "status": "IDLE",
                  "value": 1
                },
                "name": "re-enabled valid probe",
                "observed": {
                  "setting": "on",
                  "status": "IDLE",
                  "value": 1
                },
                "passed": true
              }
            ],
            "case_id": "assertion_failure_recovery",
            "cleanup": {
              "errors": [],
              "passed": true
            },
            "elapsed_seconds": 0.01,
            "observed": {
              "connection_autocommit": true,
              "diagnostic": {
                "column_name": null,
                "constraint_name": null,
                "context": "PL/pgSQL function cp0004_assertion_failure_recovery.p0004_assert(integer) line 1 at ASSERT",
                "datatype_name": null,
                "exception_type": "AssertFailure",
                "internal_position": null,
                "internal_query": null,
                "message_detail": null,
                "message_hint": null,
                "message_primary": "value must be positive",
                "schema_name": null,
                "severity": "ERROR",
                "severity_nonlocalized": "ERROR",
                "source_file": "pl_exec.c",
                "source_function": "exec_stmt_assert",
                "source_line": "3968",
                "sqlstate": "P0004",
                "statement_position": null,
                "table_name": null,
                "text": "value must be positive\nCONTEXT:  PL/pgSQL function cp0004_assertion_failure_recovery.p0004_assert(integer) line 1 at ASSERT"
              },
              "disabled_control_result": 0,
              "final_probe": 1,
              "function": "\"cp0004_assertion_failure_recovery\".\"p0004_assert\"",
              "repair_result": 1,
              "settings": {
                "disabled": "off",
                "enabled": "on",
                "re_enabled": "on"
              },
              "statuses": {
                "after_error": "INERROR",
                "after_repair": "IDLE",
                "after_rollback": "IDLE",
                "final": "IDLE"
              }
            },
            "schema": "cp0004_assertion_failure_recovery",
            "status": "passed"
          }
        ]
      }
    },
    {
      "id": "runtime.P0004-same-session-pg10-final.pg10",
      "run_id": "P0004-same-session-pg10-final",
      "target": "pg10",
      "server_version": "10.21 (Debian 10.21-1.pgdg90+1)",
      "server_version_num": 100021,
      "status": "passed",
      "summary_sha256": "50819f9620584f17766ffb62e2bb1c14e5aaa9162f91ec6cd26795cced3e6d30",
      "raw_sha256": "2369b62eb7c22d99122c9929134a878f2f3c0fe828887ae657f87b7b95e07ac8",
      "cases": [
        "assertion_failure_recovery"
      ],
      "observed": {
        "sqlstate": "P0004",
        "severity": "ERROR",
        "message_primary": "value must be positive",
        "after_error": "INERROR",
        "after_rollback": "IDLE",
        "repair_result": 1,
        "disabled_control_result": 0
      },
      "result": {
        "status": "passed",
        "environment": {
          "TimeZone": "Etc/UTC",
          "backend_pid": 80,
          "binary": {},
          "connection_scope": "runner-owned localhost port",
          "current_user": "postgres",
          "docker": {
            "architecture": "arm64",
            "command": "/usr/local/bin/docker",
            "digest": "sha256:b2baf8998630663d21370da06387c950e587071bdd307ee34e661cdcc7442bcc",
            "id": "sha256:b2baf8998630663d21370da06387c950e587071bdd307ee34e661cdcc7442bcc",
            "image": "postgres:10",
            "image_created": "2022-06-23T09:11:18.374607054Z",
            "image_ref": "postgres@sha256:b2baf8998630663d21370da06387c950e587071bdd307ee34e661cdcc7442bcc",
            "log_destination": "csvlog",
            "os": "linux",
            "repo_digests": [
              "postgres@sha256:b2baf8998630663d21370da06387c950e587071bdd307ee34e661cdcc7442bcc"
            ]
          },
          "lc_messages": "en_US.utf8",
          "libpq_version": "18.6",
          "locale": "en_US.UTF-8",
          "log_destination": "csvlog",
          "log_error_verbosity": "verbose",
          "log_min_error_statement": "error",
          "log_min_messages": "error",
          "logging_collector": "on",
          "machine": "arm64",
          "max_connections": "100",
          "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O",
          "psycopg_version": "3.3.5",
          "python_version": "3.14.6 (main, Jun 10 2026, 10:03:53) [Clang 21.0.0 (clang-2100.0.123.102)]",
          "server_encoding": "UTF8",
          "server_version": "10.21 (Debian 10.21-1.pgdg90+1)",
          "server_version_num": "100021",
          "target_kind": "pg10",
          "wal_level": "logical"
        },
        "cases": [
          {
            "assertions": [
              {
                "expected": "P0004",
                "name": "ASSERT SQLSTATE",
                "observed": "P0004",
                "passed": true
              },
              {
                "expected": "value must be positive",
                "name": "ASSERT diagnostic",
                "observed": "value must be positive",
                "passed": true
              },
              {
                "expected": "INERROR",
                "name": "assertion transaction is inerror",
                "observed": "INERROR",
                "passed": true
              },
              {
                "expected": "IDLE",
                "name": "rollback restores idle",
                "observed": "IDLE",
                "passed": true
              },
              {
                "expected": {
                  "status": "IDLE",
                  "value": 1
                },
                "name": "valid input repairs call",
                "observed": {
                  "status": "IDLE",
                  "value": 1
                },
                "passed": true
              },
              {
                "expected": "on",
                "name": "assertions enabled before trigger",
                "observed": "on",
                "passed": true
              },
              {
                "expected": {
                  "setting": "off",
                  "value": 0
                },
                "name": "disabled control returns zero",
                "observed": {
                  "setting": "off",
                  "value": 0
                },
                "passed": true
              },
              {
                "expected": {
                  "setting": "on",
                  "status": "IDLE",
                  "value": 1
                },
                "name": "re-enabled valid probe",
                "observed": {
                  "setting": "on",
                  "status": "IDLE",
                  "value": 1
                },
                "passed": true
              }
            ],
            "case_id": "assertion_failure_recovery",
            "cleanup": {
              "errors": [],
              "passed": true
            },
            "elapsed_seconds": 0.023,
            "observed": {
              "connection_autocommit": true,
              "diagnostic": {
                "column_name": null,
                "constraint_name": null,
                "context": "PL/pgSQL function cp0004_assertion_failure_recovery.p0004_assert(integer) line 1 at ASSERT",
                "datatype_name": null,
                "exception_type": "AssertFailure",
                "internal_position": null,
                "internal_query": null,
                "message_detail": null,
                "message_hint": null,
                "message_primary": "value must be positive",
                "schema_name": null,
                "severity": "ERROR",
                "severity_nonlocalized": "ERROR",
                "source_file": "pl_exec.c",
                "source_function": "exec_stmt_assert",
                "source_line": "3382",
                "sqlstate": "P0004",
                "statement_position": null,
                "table_name": null,
                "text": "value must be positive\nCONTEXT:  PL/pgSQL function cp0004_assertion_failure_recovery.p0004_assert(integer) line 1 at ASSERT"
              },
              "disabled_control_result": 0,
              "final_probe": 1,
              "function": "\"cp0004_assertion_failure_recovery\".\"p0004_assert\"",
              "repair_result": 1,
              "settings": {
                "disabled": "off",
                "enabled": "on",
                "re_enabled": "on"
              },
              "statuses": {
                "after_error": "INERROR",
                "after_repair": "IDLE",
                "after_rollback": "IDLE",
                "final": "IDLE"
              }
            },
            "schema": "cp0004_assertion_failure_recovery",
            "status": "passed"
          }
        ]
      }
    }
  ]
}
