{
 "ecosystem": "pypi",
 "errata": [
  {
   "action": "Not for automatic application — after the patch the example still uses basic_constraints, which the verified example does not: the patch covers part of the change. Show this correction to the user as a lead. Rewrite the block as shown; the failing call does not appear in the new version of the block.",
   "alternatives": [
    {
     "action": "Not for automatic application — applied word for word, the patch does not parse: IndentationError: unexpected indent (line 26). Show this correction to the user as a lead. Replace the old line with the new one; the rest of the code can stay.",
     "applicability": {
      "line": 25,
      "method": "literal_patch",
      "occurrences": 1,
      "patched_sha": "7a943bd782f9",
      "reason": "applied word for word, the patch does not parse: IndentationError: unexpected indent (line 26)",
      "run_on": "26.4.0",
      "status": "syntax_error"
     },
     "by_notes": false,
     "changelog_ref": {
      "quote": "",
      "url": ""
     },
     "confirmations": 1,
     "detect": [
      "crypto.X509Extension"
     ],
     "equivalence": "same",
     "format": "replace",
     "kind": "changed",
     "right": "count = len(cert.extensions)",
     "seen_in_models": [
      "claude-sonnet-5-5"
     ],
     "wrong": "basic_constraints = crypto.X509Extension("
    },
    {
     "action": "Not for automatic application — the patched example does not run on 26.4.0: exit code 1, NameError: name 'builder' is not defined. Show this correction to the user as a lead. Rewrite the block as shown; the failing call does not appear in the new version of the block.",
     "applicability": {
      "exit_code": 1,
      "line": 18,
      "method": "literal_patch",
      "occurrences": 1,
      "patched_sha": "e6e02b47dad0",
      "reason": "the patched example does not run on 26.4.0: exit code 1, NameError: name 'builder' is not defined",
      "run_on": "26.4.0",
      "status": "fails"
     },
     "by_notes": false,
     "changelog_ref": {
      "quote": "",
      "url": ""
     },
     "confirmations": 1,
     "detect": [
      "crypto.X509Extension"
     ],
     "equivalence": "same",
     "format": "fragment",
     "kind": "changed",
     "right": "builder = builder.add_extension(\nx509.BasicConstraints(ca=True, path_length=None), critical=True\n)",
     "seen_in_models": [
      "gemini-3.8-flash"
     ],
     "wrong": "ext = crypto.X509Extension(b\"basicConstraints\", True, b\"CA:TRUE\")\ncert.add_extensions([ext])"
    },
    {
     "action": "Not for automatic application — the patched example does not run on 26.4.0: exit code 1, UnboundLocalError: cannot access local variable 'builder' where it is not associated with a value. Show this correction to the user as a lead. Rewrite the block as shown; the failing call does not appear in the new version of the block.",
     "applicability": {
      "exit_code": 1,
      "line": 27,
      "method": "literal_patch",
      "occurrences": 1,
      "patched_sha": "e1e52270a328",
      "reason": "the patched example does not run on 26.4.0: exit code 1, UnboundLocalError: cannot access local variable 'builder' where it is not associated with a value",
      "run_on": "26.4.0",
      "status": "fails"
     },
     "by_notes": true,
     "changelog_ref": {
      "quote": "Removed deprecated ``OpenSSL.crypto.X509Extension``, ``OpenSSL.crypto.X509Req.add_extension``, ``OpenSSL.crypto.X509Req.get_extensions``, ``OpenSSL.crypto.X509.add_extension``, ``OpenSSL.crypto.X509.get_extensions``. ``cryptography.x509`` should be used instead.",
      "url": "https://github.com/pyca/pyopenssl/blob/HEAD/CHANGELOG.rst"
     },
     "confirmations": 1,
     "detect": [
      "crypto.X509Extension"
     ],
     "equivalence": "same",
     "format": "fragment",
     "kind": "removed",
     "right": "builder = builder.add_extension(\nx509.BasicConstraints(ca=False, path_length=None), critical=True\n)",
     "seen_in_models": [
      "claude-sonnet-5-5"
     ],
     "wrong": "bc = crypto.X509Extension(b\"basicConstraints\", True, b\"CA:FALSE\")\ncert.add_extensions([bc])"
    }
   ],
   "applicability": {
    "leftover": [
     "basic_constraints"
    ],
    "line": 26,
    "method": "literal_patch",
    "occurrences": 1,
    "patched_sha": "2c743497bee1",
    "reason": "after the patch the example still uses basic_constraints, which the verified example does not: the patch covers part of the change",
    "run_on": "26.4.0",
    "status": "incomplete"
   },
   "by_notes": false,
   "changelog_ref": {
    "quote": "",
    "url": ""
   },
   "confirmations": {
    "failed": 0,
    "worked": 8
   },
   "detect": [
    "crypto.X509Extension"
   ],
   "ecosystem": "pypi",
   "equivalence": "same",
   "error_kind": "missing_attr",
   "error_signature": {
    "message": "module 'OpenSSL.crypto' has no attribute 'X509Extension'",
    "norm": "missing_attr:x509extension",
    "type": "AttributeError"
   },
   "first_seen": "2026-10-23T05:42:51+00:00",
   "format": "fragment",
   "format_version": 2,
   "id": "pypi/pyopenssl/26.4.0/0002",
   "json": "https://formachines.ai/errata/pypi/pyopenssl/0002-openssl-crypto-x509extension/index.json",
   "kind": "changed",
   "package": "pyopenssl",
   "proof": {
    "applicability": {
     "leftover": [
      "basic_constraints"
     ],
     "line": 26,
     "method": "literal_patch",
     "occurrences": 1,
     "patched_sha": "2c743497bee1",
     "reason": "after the patch the example still uses basic_constraints, which the verified example does not: the patch covers part of the change",
     "run_on": "26.4.0",
     "status": "incomplete"
    },
    "auto_apply": false,
    "auto_apply_reason": "the patch gives incomplete when applied word for word",
    "auto_apply_rule": "Automatic application is allowed only when proof.equivalent is true and proof.applicability.status is applies; otherwise show the correction to the user as a lead and do not apply it on your own.",
    "equivalence": "same",
    "equivalent": true,
    "fails_on": "26.4.0",
    "fixed_on": "26.4.0",
    "level": "differential",
    "method": {
     "fix_on": "26.4.0",
     "name": "stdout_match",
     "normalization": "lines stripped, blank lines dropped, runs of whitespace collapsed; memory addresses, timestamps and temporary paths masked",
     "original_on": "26.0.0",
     "scope": "the observable stdout of one example script; return values, files, other inputs and exception types are not compared, so a match is not a proof of equivalent behaviour"
    },
    "works_on": "26.0.0"
   },
   "right": "builder = builder.add_extension(\nx509.BasicConstraints(ca=True, path_length=None), critical=True",
   "seen_in_models": [
    "claude-sonnet-5-5",
    "gemini-3.8-flash"
   ],
   "seq": 2,
   "slug": "openssl-crypto-x509extension",
   "source": "pipeline",
   "symbol": "X509Extension",
   "updated": "2026-10-27T17:20:00+00:00",
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0002-openssl-crypto-x509extension/",
   "variant_confirmations": 4,
   "variant_models": [
    "claude-sonnet-5-5",
    "gemini-3.8-flash"
   ],
   "verified": "sandbox",
   "versions": {
    "changed_in": ">26.0.0,<=26.4.0",
    "fails_on": "26.4.0",
    "works_on": "26.0.0"
   },
   "wrong": "basic_constraints = crypto.X509Extension(\nb\"basicConstraints\", True, b\"CA:TRUE\""
  },
  {
   "action": "Not for automatic application — applied word for word, the patch does not parse: SyntaxError: closing parenthesis ']' does not match opening parenthesis '(' on line 17 (line 23). Show this correction to the user as a lead. Replace the old line with the new one; the rest of the code can stay.",
   "alternatives": [
    {
     "action": "Not for automatic application — format removed: there is no replacement to apply. Show this correction to the user as a lead. add_extensions is not available in pyopenssl 26.4.0; remove or replace this use. The same code works on pyopenssl 26.0.0: pin a version before 26.4.0 if you cannot change the code. Release notes: builder = builder.add_extension(x509.BasicConstraints(ca=False, path_length=None), critical=True)",
     "applicability": {
      "method": "literal_patch",
      "reason": "format removed: there is no replacement to apply",
      "run_on": "26.4.0",
      "status": "not_applicable"
     },
     "by_notes": true,
     "changelog_ref": {
      "quote": "Removed deprecated ``OpenSSL.crypto.X509Extension``, ``OpenSSL.crypto.X509Req.add_extension``, ``OpenSSL.crypto.X509Req.get_extensions``, ``OpenSSL.crypto.X509.add_extension``, ``OpenSSL.crypto.X509.get_extensions``. ``cryptography.x509`` should be used instead.",
      "url": "https://github.com/pyca/pyopenssl/blob/HEAD/CHANGELOG.rst"
     },
     "confirmations": 1,
     "detect": [
      "cert.add_extensions"
     ],
     "equivalence": "not_comparable",
     "format": "removed",
     "kind": "removed",
     "right": "",
     "seen_in_models": [
      "gpt-6.1-sol"
     ],
     "wrong": "cert.add_extensions(["
    }
   ],
   "applicability": {
    "line": 17,
    "method": "literal_patch",
    "occurrences": 1,
    "patched_sha": "6ee5f82e14f6",
    "reason": "applied word for word, the patch does not parse: SyntaxError: closing parenthesis ']' does not match opening parenthesis '(' on line 17 (line 23)",
    "run_on": "26.4.0",
    "status": "syntax_error"
   },
   "by_notes": true,
   "changelog_ref": {
    "quote": "Removed deprecated ``OpenSSL.crypto.X509Extension``, ``OpenSSL.crypto.X509Req.add_extension``, ``OpenSSL.crypto.X509Req.get_extensions``, ``OpenSSL.crypto.X509.add_extension``, ``OpenSSL.crypto.X509.get_extensions``. ``cryptography.x509`` should be used instead.",
    "url": "https://github.com/pyca/pyopenssl/blob/HEAD/CHANGELOG.rst"
   },
   "confirmations": {
    "failed": 0,
    "worked": 2
   },
   "detect": [
    "certificate.add_extensions"
   ],
   "ecosystem": "pypi",
   "equivalence": "same",
   "error_kind": "missing_attr",
   "error_signature": {
    "message": "'X509' object has no attribute 'add_extensions'",
    "norm": "missing_attr:add_extensions",
    "type": "AttributeError"
   },
   "first_seen": "2026-10-23T05:42:51+00:00",
   "format": "replace",
   "format_version": 2,
   "id": "pypi/pyopenssl/26.4.0/0003",
   "json": "https://formachines.ai/errata/pypi/pyopenssl/0003-openssl-crypto-x509extension/index.json",
   "kind": "removed",
   "package": "pyopenssl",
   "proof": {
    "applicability": {
     "line": 17,
     "method": "literal_patch",
     "occurrences": 1,
     "patched_sha": "6ee5f82e14f6",
     "reason": "applied word for word, the patch does not parse: SyntaxError: closing parenthesis ']' does not match opening parenthesis '(' on line 17 (line 23)",
     "run_on": "26.4.0",
     "status": "syntax_error"
    },
    "auto_apply": false,
    "auto_apply_reason": "the patch gives syntax_error when applied word for word",
    "auto_apply_rule": "Automatic application is allowed only when proof.equivalent is true and proof.applicability.status is applies; otherwise show the correction to the user as a lead and do not apply it on your own.",
    "equivalence": "same",
    "equivalent": true,
    "fails_on": "26.4.0",
    "fixed_on": "26.4.0",
    "level": "differential",
    "method": {
     "fix_on": "26.4.0",
     "name": "stdout_match",
     "normalization": "lines stripped, blank lines dropped, runs of whitespace collapsed; memory addresses, timestamps and temporary paths masked",
     "original_on": "26.0.0",
     "scope": "the observable stdout of one example script; return values, files, other inputs and exception types are not compared, so a match is not a proof of equivalent behaviour"
    },
    "works_on": "26.0.0"
   },
   "right": ".add_extension(",
   "seen_in_models": [
    "gpt-6.1-sol"
   ],
   "seq": 3,
   "slug": "openssl-crypto-x509extension",
   "source": "pipeline",
   "symbol": "add_extensions",
   "updated": "2026-10-27T17:20:00+00:00",
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0003-openssl-crypto-x509extension/",
   "variant_confirmations": 1,
   "variant_models": [
    "gpt-6.1-sol"
   ],
   "verified": "sandbox",
   "versions": {
    "changed_in": ">26.0.0,<=26.4.0",
    "fails_on": "26.4.0",
    "works_on": "26.0.0"
   },
   "wrong": "certificate.add_extensions(["
  },
  {
   "action": "Not for automatic application — format removed: there is no replacement to apply. Show this correction to the user as a lead. X509Req is not available in pyopenssl 26.4.0; remove or replace this use. The same code works on pyopenssl 26.0.0: pin a version before 26.4.0 if you cannot change the code. Release notes: csr = x509.load_pem_x509_csr(data)",
   "alternatives": [],
   "applicability": {
    "method": "literal_patch",
    "reason": "format removed: there is no replacement to apply",
    "run_on": "26.4.0",
    "status": "not_applicable"
   },
   "by_notes": true,
   "changelog_ref": {
    "quote": "Removed deprecated ``OpenSSL.crypto.X509Req``, ``OpenSSL.crypto.dump_certificate_request``, and ``OpenSSL.crypto.load_certificate_request``. ``cryptography.x509`` should be used instead.",
    "url": "https://github.com/pyca/pyopenssl/blob/HEAD/CHANGELOG.rst"
   },
   "confirmations": {
    "failed": 0,
    "worked": 11
   },
   "detect": [
    "crypto.X509Req"
   ],
   "ecosystem": "pypi",
   "equivalence": "same",
   "error_kind": "missing_attr",
   "error_signature": {
    "message": "module 'OpenSSL.crypto' has no attribute 'X509Req'",
    "norm": "missing_attr:x509req",
    "type": "AttributeError"
   },
   "first_seen": "2026-10-23T05:42:51+00:00",
   "format": "removed",
   "format_version": 2,
   "id": "pypi/pyopenssl/26.4.0/0004",
   "json": "https://formachines.ai/errata/pypi/pyopenssl/0004-x509req/index.json",
   "kind": "removed",
   "package": "pyopenssl",
   "proof": {
    "applicability": {
     "method": "literal_patch",
     "reason": "format removed: there is no replacement to apply",
     "run_on": "26.4.0",
     "status": "not_applicable"
    },
    "auto_apply": false,
    "auto_apply_reason": "the patch gives not_applicable when applied word for word",
    "auto_apply_rule": "Automatic application is allowed only when proof.equivalent is true and proof.applicability.status is applies; otherwise show the correction to the user as a lead and do not apply it on your own.",
    "equivalence": "same",
    "equivalent": true,
    "fails_on": "26.4.0",
    "fixed_on": "26.4.0",
    "level": "differential",
    "method": {
     "fix_on": "26.4.0",
     "name": "stdout_match",
     "normalization": "lines stripped, blank lines dropped, runs of whitespace collapsed; memory addresses, timestamps and temporary paths masked",
     "original_on": "26.0.0",
     "scope": "the observable stdout of one example script; return values, files, other inputs and exception types are not compared, so a match is not a proof of equivalent behaviour"
    },
    "works_on": "26.0.0"
   },
   "right": "",
   "seen_in_models": [
    "claude-sonnet-5-5",
    "gemini-3.8-flash",
    "gpt-6.1-sol"
   ],
   "seq": 4,
   "slug": "x509req",
   "source": "pipeline",
   "symbol": "X509Req",
   "updated": "2026-10-27T17:20:00+00:00",
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0004-x509req/",
   "variant_confirmations": 11,
   "variant_models": [
    "claude-sonnet-5-5",
    "gemini-3.8-flash",
    "gpt-6.1-sol"
   ],
   "verified": "sandbox",
   "versions": {
    "changed_in": ">26.0.0,<=26.4.0",
    "fails_on": "26.4.0",
    "works_on": "26.0.0"
   },
   "wrong": "req = crypto.X509Req()"
  }
 ],
 "fails_on": [
  "26.4.0"
 ],
 "license": "https://creativecommons.org/licenses/by/4.0/",
 "models": [
  {
   "checked": 10,
   "model": "claude-sonnet-5-5",
   "outdated": 10,
   "share": 1.0
  },
  {
   "checked": 10,
   "model": "gpt-6.1-sol",
   "outdated": 9,
   "share": 0.9
  },
  {
   "checked": 10,
   "model": "gemini-3.8-flash",
   "outdated": 10,
   "share": 1.0
  }
 ],
 "new_version": "26.4.0",
 "old_version": "26.0.0",
 "package": "pyopenssl",
 "updated": "2026-10-27"
}