{
 "counts": {
  "admitted": 3,
  "kept": 12,
  "merged": 14,
  "rechecked": 1,
  "review": 9,
  "withdrawn": 14
 },
 "events": [
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "review",
   "id": "pypi/typer/0.27.3/0001",
   "package": "typer",
   "reason": "consistency: alternative 1: signature_not_in_wrong — the error names typer.main, the changed line 'from typer.core import click' does not; alternative 1: variants_disagree — main shows a replacement ('from typer.main import TyperChoice'), alternative 1 drops 'from typer.core import click' with none",
   "symbol": "click",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/typer/0001-click/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/pyopenssl/26.4.0/0005",
   "package": "pyopenssl",
   "reason": "same error (module OpenSSL.crypto has no attribute X509Req) and the same removal under the symbol spelled OpenSSL.crypto.X509Req instead of X509Req; 0004 carries it with 9 confirmations",
   "symbol": "OpenSSL.crypto.X509Req",
   "target": "pypi/pyopenssl/26.4.0/0004",
   "target_url": "https://formachines.ai/errata/pypi/pyopenssl/0004-x509req/",
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0005-openssl-crypto-x509req/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "review",
   "id": "pypi/pyopenssl/26.4.0/0003",
   "package": "pyopenssl",
   "reason": "consistency: alternative 1: variants_disagree — main shows a replacement ('.add_extension('), alternative 1 drops 'cert.add_extensions([' with none",
   "symbol": "add_extensions",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0003-openssl-crypto-x509extension/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "review",
   "id": "pypi/pyopenssl/26.4.0/0002",
   "package": "pyopenssl",
   "reason": "consistency: alternative 3: variants_disagree — main shows a replacement ('builder = builder.add_extension('), alternative 3 drops 'basic_constraints = crypto.X509Extension(b\"basicConstraints\", True, b\"CA:TRUE\")' with none",
   "symbol": "X509Extension",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0002-openssl-crypto-x509extension/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/pyopenssl/26.4.0/0001",
   "package": "pyopenssl",
   "reason": "same error (module OpenSSL.crypto has no attribute X509Extension) and the same replacement (builder.add_extension(x509.BasicConstraints), CA:TRUE instead of CA:FALSE) under the caption X509.add_extension; 0002 carries the changelog quote and the symbol the error names",
   "symbol": "OpenSSL.crypto.X509.add_extension",
   "target": "pypi/pyopenssl/26.4.0/0002",
   "target_url": "https://formachines.ai/errata/pypi/pyopenssl/0002-openssl-crypto-x509extension/",
   "url": "https://formachines.ai/errata/pypi/pyopenssl/0001-openssl-crypto-x509-add-extension/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/opentelemetry-exporter-otlp-proto-http/1.45.1/0001",
   "package": "opentelemetry-exporter-otlp-proto-http",
   "reason": "the same change as opentelemetry-api/0001: Logger.enabled() became abstract in opentelemetry-api 1.43 (the release note names opentelemetry-api; the example imports opentelemetry._logs and nothing from the exporter) — the exporter only pulled the API in as a dependency; opentelemetry-api/0001 owns the API and carries the entry with 10 confirmations",
   "symbol": "Logger.enabled",
   "target": "pypi/opentelemetry-api/1.45.1/0001",
   "target_url": "https://formachines.ai/errata/pypi/opentelemetry-api/0001-logger-enabled/",
   "url": "https://formachines.ai/errata/pypi/opentelemetry-exporter-otlp-proto-http/0001-logger-enabled/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "review",
   "id": "pypi/opentelemetry-api/1.45.1/0001",
   "package": "opentelemetry-api",
   "reason": "consistency: alternative 2: kind_vs_diff — kind behavior_changed on added code (format add): new_required or signature_changed",
   "symbol": "Logger.enabled",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/opentelemetry-api/0001-logger-enabled/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "review",
   "id": "pypi/oauthlib/4.0.0/0001",
   "package": "oauthlib",
   "reason": "consistency: main: symbol_not_in_wrong — symbol 'RevocationEndpoint' is not in the changed line 'enable_jsonp=True,'",
   "symbol": "RevocationEndpoint",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/oauthlib/0001-revocationendpoint/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "admitted",
   "id": "pypi/joblib/1.6.0/0002",
   "package": "joblib",
   "reason": "from joblib.externals import cloudpickle → import cloudpickle (joblib 1.6.0 unvendored cloudpickle): output same (D1), patch applies word for word (D5), proof.auto_apply true — would pass the conditional gate on its own",
   "symbol": "joblib.externals.cloudpickle",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/joblib/0002-joblib-externals-cloudpickle/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/joblib/1.6.0/0001",
   "package": "joblib",
   "reason": "same change (import cloudpickle) seen through the ImportError of a try/except fallback (joblib._cloudpickle); 0002 carries the verified, word-for-word applicable replacement",
   "symbol": "joblib.externals.cloudpickle",
   "target": "pypi/joblib/1.6.0/0002",
   "target_url": "https://formachines.ai/errata/pypi/joblib/0002-joblib-externals-cloudpickle/",
   "url": "https://formachines.ai/errata/pypi/joblib/0001-joblib-externals-cloudpickle/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/typescript/7.0.2/0007",
   "package": "typescript",
   "reason": "the same error as npm/typescript/7.0.2/0004 (ts.ModuleKind in typescript): one correction under two numbers; its fixes are variants of npm/typescript/7.0.2/0004 since the entry key follows the error (D3, 2026-10-27)",
   "symbol": "esModuleInterop: false",
   "target": "npm/typescript/7.0.2/0004",
   "target_url": "https://formachines.ai/errata/npm/typescript/0004-moduleresolution-node/",
   "url": "https://formachines.ai/errata/npm/typescript/0007-esmoduleinterop-false/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "review",
   "id": "npm/typescript/7.0.2/0004",
   "package": "typescript",
   "reason": "jev rejected 10 of 14 fixes of a published entry",
   "symbol": "ts.ModuleKind",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0004-moduleresolution-node/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "review",
   "id": "npm/typescript/7.0.2/0004",
   "package": "typescript",
   "reason": "consistency: alternative 1: variants_disagree — main shows a replacement (\"module: 'commonjs',\"), alternative 1 drops 'module: ts.ModuleKind.CommonJS,' with none",
   "symbol": "ts.ModuleKind",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0004-moduleresolution-node/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "review",
   "id": "npm/typescript/7.0.2/0001",
   "package": "typescript",
   "reason": "consistency: alternative 2: signature_not_in_wrong — the error names ES2020, the changed line 'const result = ts.transpileModule(source, {' does not; alternative 3: signature_not_in_wrong — the error names ES2020, the changed line 'const result = ts.transpileModule(source, {' does not",
   "symbol": "ts.ScriptTarget",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0001-baseurl/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/firebase/13.1.0/0004",
   "package": "firebase",
   "reason": "same error (VertexAIBackend is not a constructor) under the caption getImagenModel: the caption is not what the error is about; one line mixes the VertexAIBackend and the getImagenModel changes; 0001 carries the VertexAIBackend removal with the release note",
   "symbol": "getImagenModel",
   "target": "npm/firebase/13.1.0/0001",
   "target_url": "https://formachines.ai/errata/npm/firebase/0001-vertexaibackend/",
   "url": "https://formachines.ai/errata/npm/firebase/0004-getimagenmodel/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "admitted",
   "id": "npm/firebase/13.1.0/0003",
   "package": "firebase",
   "reason": "getImagenModel removed in firebase 13.1.0 (release notes: Imagen shut down); the verified example moves to getGenerativeModel with a Gemini image model, so the output differs (D1 differs) and the patch covers only the import (D5 incomplete) — a lead with the behavior_changed notice, not for automatic application",
   "symbol": "getImagenModel",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/firebase/0003-getimagenmodel/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "withdrawn",
   "id": "npm/firebase/13.1.0/0002",
   "package": "firebase",
   "reason": "The fix replaced session.sendMediaChunks([chunk1, chunk2]) with session.sendAudioRealtime(chunk1): it sends one chunk instead of two, and its verified example swaps the session's internal WebSocket handler to make the call pass — a workaround, not a migration; its output differs from the original's and the patch does not run when applied word for word. Withdrawn after the audit classes of 2026-10-20/21 (never published).",
   "symbol": "LiveSession.sendMediaChunks",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/firebase/0002-livesession-sendmediachunks/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "review",
   "id": "npm/firebase/13.1.0/0001",
   "package": "firebase",
   "reason": "consistency: alternative 1: variants_disagree — main shows a replacement ('const { getAI, AgentPlatformBackend } = require(\"firebase/ai\");'), alternative 1 drops 'VertexAIBackend,' with none",
   "symbol": "VertexAIBackend",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/firebase/0001-vertexaibackend/",
   "version": ""
  },
  {
   "date": "2026-10-27",
   "ecosystem": "npm",
   "event": "admitted",
   "id": "npm/firebase/13.1.0/0001",
   "package": "firebase",
   "reason": "VertexAIBackend removed in firebase 13.1.0 (release notes: use AgentPlatformBackend); format removed, the replacement is in the alternatives — a lead, not for automatic application (patch not_applicable)",
   "symbol": "VertexAIBackend",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/firebase/0001-vertexaibackend/",
   "version": ""
  },
  {
   "date": "2026-10-24",
   "ecosystem": "pypi",
   "event": "rechecked",
   "id": "pypi/huggingface-hub/2.2.0/0001",
   "package": "huggingface-hub",
   "reason": "the code the models wrote still fails on huggingface-hub 2.3.0; the fix still passes",
   "symbol": "BucketUrl.handle",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/huggingface-hub/0001-bucketurl-handle/",
   "version": "2.3.0"
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/typer/0.27.3/0002",
   "package": "typer",
   "reason": "The fix rewrote a ParamType class as a regex function and the short snippet lost its indentation: a rewrite, not a correction. Withdrawn after the external audits of 2026-10-20/21.",
   "symbol": "click",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/typer/0002-click/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/scipy/1.18.1/0002",
   "package": "scipy",
   "reason": "transformed.shape → (len(transformed),) + transformed[0].shape works around the changed return type instead of explaining it; the entry did not name what changed. Withdrawn after the external audits of 2026-10-20/21.",
   "symbol": "shape",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/scipy/0002-shape/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/openai/3.35.1/0001",
   "package": "openai",
   "reason": "The original imported httpx from a private module (openai._base_client) and the fix (import httpx2 as httpx) is not a migration of the public API. Withdrawn after the external audits of 2026-10-20/21.",
   "symbol": "httpx",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/openai/0001-httpx/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/oauthlib/4.0.0/0002",
   "package": "oauthlib",
   "reason": "same removal (enable_jsonp of RevocationEndpoint); 0001 carries the replacement",
   "symbol": "enable_jsonp",
   "target": "pypi/oauthlib/4.0.0/0001",
   "target_url": "https://formachines.ai/errata/pypi/oauthlib/0001-revocationendpoint/",
   "url": "https://formachines.ai/errata/pypi/oauthlib/0002-enable-jsonp/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/more-itertools/11.2.1/0001",
   "package": "more-itertools",
   "reason": "same removal (zip_equal); 0002 carries the replacement zip(..., strict=True)",
   "symbol": "zip_equal",
   "target": "pypi/more-itertools/11.2.1/0002",
   "target_url": "https://formachines.ai/errata/pypi/more-itertools/0002-zip-equal/",
   "url": "https://formachines.ai/errata/pypi/more-itertools/0001-zip-equal/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "merged",
   "id": "pypi/mcp/2.3.0/0004",
   "package": "mcp",
   "reason": "same change (mcp.server.fastmcp → mcp.server.mcpserver, FastMCP → MCPServer); the caption 'Context.client_id removed' was not what the code showed",
   "symbol": "FastMCP",
   "target": "pypi/mcp/2.3.0/0005",
   "target_url": "https://formachines.ai/errata/pypi/mcp/0005-context-client-id/",
   "url": "https://formachines.ai/errata/pypi/mcp/0004-fastmcp/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/cryptography/50.0.2/0002",
   "package": "cryptography",
   "reason": "The published fix replaced ec.SECT283K1() with ec.SECP256K1(): a different curve, which breaks compatibility of keys and signatures. It runs, but it does not do the same work. Withdrawn after the external audits of 2026-10-20/21; a replacement needs the curve the release notes name, verified for equivalent output.",
   "symbol": "ec.SECT283K1",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/cryptography/0002-ec-sect283k1/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/typescript/7.0.2/0011",
   "package": "typescript",
   "reason": "combines the ScriptTarget (0001) and moduleResolution (0004) changes in one line; 0004 carries the moduleResolution replacement, 0001 the target — the same error as npm/typescript/7.0.2/0001 (ts.ScriptTarget in typescript): one correction under two numbers; its fixes are variants of npm/typescript/7.0.2/0001 since the entry key follows the error (D3, 2026-10-27)",
   "symbol": "moduleResolution: node",
   "target": "npm/typescript/7.0.2/0001",
   "target_url": "https://formachines.ai/errata/npm/typescript/0001-baseurl/",
   "url": "https://formachines.ai/errata/npm/typescript/0011-moduleresolution-node/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/typescript/7.0.2/0008",
   "package": "typescript",
   "reason": "same change (ts.ScriptTarget.ES5 → 'ES5'); 0001 carries the verified replacement",
   "symbol": "target: es5",
   "target": "npm/typescript/7.0.2/0001",
   "target_url": "https://formachines.ai/errata/npm/typescript/0001-baseurl/",
   "url": "https://formachines.ai/errata/npm/typescript/0008-target-es5/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/typescript/7.0.2/0006",
   "package": "typescript",
   "reason": "same change (ts.ScriptTarget.ES2022 → 'ES2022'); 0001 carries the verified replacement",
   "symbol": "ts.ScriptTarget",
   "target": "npm/typescript/7.0.2/0001",
   "target_url": "https://formachines.ai/errata/npm/typescript/0001-baseurl/",
   "url": "https://formachines.ai/errata/npm/typescript/0006-ts-scripttarget/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/typescript/7.0.2/0005",
   "package": "typescript",
   "reason": "same change (ts.ScriptTarget enum → string target); 0001 carries the verified replacement",
   "symbol": "ts.ScriptTarget",
   "target": "npm/typescript/7.0.2/0001",
   "target_url": "https://formachines.ai/errata/npm/typescript/0001-baseurl/",
   "url": "https://formachines.ai/errata/npm/typescript/0005-ts-scripttarget/",
   "version": ""
  },
  {
   "date": "2026-10-23",
   "ecosystem": "npm",
   "event": "merged",
   "id": "npm/typescript/7.0.2/0003",
   "package": "typescript",
   "reason": "same change (moduleResolution node/Node10 → 'nodenext'); 0004 carries the verified replacement",
   "symbol": "moduleResolution: node",
   "target": "npm/typescript/7.0.2/0004",
   "target_url": "https://formachines.ai/errata/npm/typescript/0004-moduleresolution-node/",
   "url": "https://formachines.ai/errata/npm/typescript/0003-moduleresolution-node/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "kept",
   "id": "pypi/typer/0.27.3/0001",
   "package": "typer",
   "reason": "manual review 2026-10-21: TyperChoice keeps the case-insensitive choice; typer.main is internal, as in the original code",
   "symbol": "click",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/typer/0001-click/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/pillow/13.0.0/0001",
   "package": "pillow",
   "reason": "fix prints None instead of the profile's product name: it hard-codes a value instead of migrating (manual review 2026-10-21)",
   "symbol": "ImageCms.ImageCmsProfile.product_name",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/pillow/0001-imagecms-imagecmsprofile-product-name/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "kept",
   "id": "pypi/opentelemetry-sdk/1.45.1/0001",
   "package": "opentelemetry-sdk",
   "reason": "manual review 2026-10-21: logger.emit with event_name / LogRecord(event_name) is the migration from the release notes",
   "symbol": "opentelemetry.sdk._events",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/opentelemetry-sdk/0001-opentelemetry-sdk-events/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "kept",
   "id": "pypi/opentelemetry-api/1.45.1/0002",
   "package": "opentelemetry-api",
   "reason": "manual review 2026-10-21: the rejected variant moves to opentelemetry._logs LogRecord as the release notes say",
   "symbol": "opentelemetry._events",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/opentelemetry-api/0002-opentelemetry-events/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/numpy/2.5.4/0001",
   "package": "numpy",
   "reason": "fix replaces numpy.distutils Configuration with a plain dict that builds nothing; the build has to move to setuptools or meson-python (manual review 2026-10-21)",
   "symbol": "numpy.distutils",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/numpy/0001-numpy-distutils/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "kept",
   "id": "pypi/more-itertools/11.2.1/0001",
   "package": "more-itertools",
   "reason": "manual review 2026-10-21: rejected variants drop the zip_equal import and use zip(..., strict=True); jev saw only the removed import",
   "symbol": "zip_equal",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/more-itertools/0001-zip-equal/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "kept",
   "id": "pypi/mcp/2.3.0/0005",
   "package": "mcp",
   "reason": "manual review 2026-10-21: rejected variants move to mcp.server.mcpserver (FastMCP renamed MCPServer); jev saw only the import line",
   "symbol": "FastMCP",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/mcp/0005-context-client-id/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "kept",
   "id": "pypi/mcp/2.3.0/0002",
   "package": "mcp",
   "reason": "manual review 2026-10-21: importing anyio directly is the fix; the dropped line only printed the removed base class",
   "symbol": "mcp.shared.session",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/mcp/0002-mcp-shared-session/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/mcp/2.3.0/0001",
   "package": "mcp",
   "reason": "fix replaces the removed BaseSession check with an isinstance check against ClientSession itself, which is always true: it hides the change instead of migrating (manual review 2026-10-21)",
   "symbol": "mcp.shared.session",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/mcp/0001-mcp-shared-session/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "withdrawn",
   "id": "npm/typescript/7.0.2/0012",
   "package": "typescript",
   "reason": "fix drops the transpile call and prints a message instead: it removes the work instead of migrating (manual review 2026-10-21)",
   "symbol": "ts.ModuleKind",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0012-ts-modulekind/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "withdrawn",
   "id": "npm/typescript/7.0.2/0010",
   "package": "typescript",
   "reason": "fix replaces ts.resolveModuleName with a hand-written path resolver: it stops using the TypeScript API instead of migrating (manual review 2026-10-21)",
   "symbol": "ts.ModuleResolutionKind",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0010-ts-moduleresolutionkind/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "withdrawn",
   "id": "npm/typescript/7.0.2/0009",
   "package": "typescript",
   "reason": "fix replaces ts.resolveModuleName with a hand-written path resolver: it stops using the TypeScript API instead of migrating (manual review 2026-10-21)",
   "symbol": "ts.ModuleResolutionKind",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0009-ts-moduleresolutionkind/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "kept",
   "id": "npm/typescript/7.0.2/0008",
   "package": "typescript",
   "reason": "manual review 2026-10-21: rejected variants remove options TypeScript 7 no longer supports or follow the release notes; jev saw only the removed import or option line",
   "symbol": "target: es5",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0008-target-es5/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "kept",
   "id": "npm/typescript/7.0.2/0007",
   "package": "typescript",
   "reason": "manual labels (jev retrospective): fixes are correct; jev rejects removals of no-longer-supported options",
   "symbol": "esModuleInterop: false",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0007-esmoduleinterop-false/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "kept",
   "id": "npm/typescript/7.0.2/0006",
   "package": "typescript",
   "reason": "manual review 2026-10-21: rejected variants remove options TypeScript 7 no longer supports or follow the release notes; jev saw only the removed import or option line",
   "symbol": "ts.ScriptTarget",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0006-ts-scripttarget/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "kept",
   "id": "npm/typescript/7.0.2/0005",
   "package": "typescript",
   "reason": "manual review 2026-10-21: rejected variants remove options TypeScript 7 no longer supports or follow the release notes; jev saw only the removed import or option line",
   "symbol": "ts.ScriptTarget",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0005-ts-scripttarget/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "kept",
   "id": "npm/typescript/7.0.2/0003",
   "package": "typescript",
   "reason": "manual review 2026-10-21: rejected variants remove options TypeScript 7 no longer supports or follow the release notes; jev saw only the removed import or option line",
   "symbol": "moduleResolution: node",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0003-moduleresolution-node/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "withdrawn",
   "id": "npm/typescript/7.0.2/0002",
   "package": "typescript",
   "reason": "fix stops using the TypeScript API: compilerOptions are passed unconverted and module resolution is re-implemented by hand (manual review 2026-10-21)",
   "symbol": "ts.convertCompilerOptionsFromJson",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0002-ts-convertcompileroptionsfromjson/",
   "version": ""
  },
  {
   "date": "2026-10-21",
   "ecosystem": "npm",
   "event": "kept",
   "id": "npm/typescript/7.0.2/0001",
   "package": "typescript",
   "reason": "manual review 2026-10-21: rejected variants remove options TypeScript 7 no longer supports or follow the release notes; jev saw only the removed import or option line",
   "symbol": "ts.ScriptTarget",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0001-baseurl/",
   "version": ""
  },
  {
   "date": "2026-10-20",
   "ecosystem": "pypi",
   "event": "withdrawn",
   "id": "pypi/mcp/2.3.0/0006",
   "package": "mcp",
   "reason": "fix guards a removed class with a None check instead of migrating to ClientSession (manual review 2026-10-20)",
   "symbol": "mcp.shared.session",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/pypi/mcp/0006-mcp-shared-session/",
   "version": ""
  },
  {
   "date": "2026-10-20",
   "ecosystem": "npm",
   "event": "withdrawn",
   "id": "npm/typescript/7.0.2/0013",
   "package": "typescript",
   "reason": "fix replaces the transpile call with ts.version: it hides the error instead of migrating (manual review 2026-10-20)",
   "symbol": "ts.transpileModule",
   "target": null,
   "target_url": null,
   "url": "https://formachines.ai/errata/npm/typescript/0013-ts-transpilemodule/",
   "version": ""
  }
 ],
 "license": "https://creativecommons.org/licenses/by/4.0/",
 "updated": "2026-10-27"
}