{
  "schema_version": 1,
  "records": [
    {
      "id": "pytorch-2-6-torch-load-weights-only-default",
      "title": "PyTorch 2.6 makes weights-only checkpoint loading the default",
      "vendor": "PyTorch Foundation",
      "product": "PyTorch 2.6 torch.load",
      "category": "breaking-change",
      "announced_on": "2024-11-04",
      "effective_on": "2025-01-29",
      "verified_on": "2026-09-07",
      "summary": "PyTorch 2.6 changed `torch.load` to behave as `weights_only=True` when callers do not provide a custom `pickle_module`. Plain tensor state dictionaries should continue loading, while serialized modules, tensor subclasses, NumPy objects, and other custom globals can now fail until the caller chooses an explicit trusted-load path or allowlists required types.",
      "implications": [
        "Inventory every `torch.load` call and make intent explicit: keep weights-only loading for ordinary state dictionaries, and use `weights_only=False` only for trusted legacy artifacts whose provenance is controlled.",
        "Exercise representative checkpoints in CI; `get_unsafe_globals_in_checkpoint`, `safe_globals`, and TorchFix can identify migration work before a production model refresh."
      ],
      "uncertainty": "The default changes only when `pickle_module` is omitted, and explicit arguments still control a call. Weights-only loading narrows arbitrary-code execution risk but the PyTorch documentation says it does not prevent denial-of-service and cannot rule out every memory-safety problem.",
      "sources": [
        {
          "title": "BC-Breaking Change: torch.load is being flipped to use weights_only=True by default",
          "url": "https://dev-discuss.pytorch.org/t/bc-breaking-change-torch-load-is-being-flipped-to-use-weights-only-true-by-default-in-the-nightlies-after-137602/2573"
        },
        {
          "title": "PyTorch 2.6 Release Blog",
          "url": "https://pytorch.org/blog/pytorch2-6/"
        },
        {
          "title": "PyTorch serialization semantics",
          "url": "https://docs.pytorch.org/docs/main/notes/serialization.html"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/pytorch-2-6-torch-load-weights-only-default.html"
    },
    {
      "id": "openai-assistants-api-sunset-2026",
      "title": "OpenAI Assistants API shut down in favor of Responses and Conversations",
      "vendor": "OpenAI",
      "product": "OpenAI Assistants API",
      "category": "deprecation",
      "announced_on": "2025-08-26",
      "effective_on": "2026-08-26",
      "verified_on": "2026-09-07",
      "summary": "OpenAI has shut down the Assistants API and directs integrations to the Responses API, with Conversations used for persistent state. The migration changes the core object model from Assistants, Threads, Runs, and Run Steps to Prompts, Conversations, Responses, and Items.",
      "implications": [
        "Inventory calls to the beta assistants, threads, messages, and runs resources; replace them with Responses calls and decide whether each workflow needs a durable Conversation object.",
        "Retest tool-call loops and state handling because Responses exposes generalized items and expects the application to manage explicit tool execution differently from Assistants runs."
      ],
      "uncertainty": "OpenAI's deprecations section heading says 2025-08-20 while its body says developers were notified on 2025-08-26; announced_on uses the explicit notification date. Migration effort depends on which Assistants features and hosted tools an application used.",
      "sources": [
        {
          "title": "OpenAI API deprecations",
          "url": "https://developers.openai.com/api/docs/deprecations"
        },
        {
          "title": "Assistants migration guide",
          "url": "https://developers.openai.com/api/docs/assistants/migration"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/openai-assistants-api-sunset-2026.html"
    },
    {
      "id": "numpy-2-0-abi-and-api-break",
      "title": "NumPy 2.0 breaks the 1.x binary ABI and removes legacy APIs",
      "vendor": "NumPy",
      "product": "NumPy 2.0 ABI and APIs",
      "category": "breaking-change",
      "announced_on": "2024-05-23",
      "effective_on": "2024-06-16",
      "verified_on": "2026-09-07",
      "summary": "NumPy 2.0 introduced the project’s first major ABI break since the 1.x line, so extension binaries built against NumPy 1.x may fail to import under 2.0. It also removed old Python and C APIs and adopted new type-promotion behavior, creating migration work even for some projects without compiled code.",
      "implications": [
        "Projects shipping C, Cython, or other NumPy-linked extensions should rebuild wheels against NumPy 2.x and test those wheels with both NumPy 1.26 and 2.x where dual-runtime support is intended.",
        "Python code should run the NPY201 Ruff migration rule and then test numerical behavior, especially mixed-dtype operations, removed aliases, Windows integer defaults, and code that relied on private namespaces."
      ],
      "uncertainty": "The impact depends on whether a project imports compiled extensions and which removed or behavior-changing APIs it uses; pure-Python consumers may see no ABI failure. NumPy’s compatibility guidance supports dual-runtime wheels, but downstream build systems and bundled third-party binaries still require their own validation.",
      "sources": [
        {
          "title": "NumPy News: NumPy 2.0 release date and release announcement",
          "url": "https://numpy.org/news/"
        },
        {
          "title": "NumPy 2.0.0 Release Notes",
          "url": "https://numpy.org/doc/2.0/release/2.0.0-notes.html"
        },
        {
          "title": "NumPy 2.0 migration guide",
          "url": "https://numpy.org/doc/stable/numpy_2_0_migration_guide.html"
        },
        {
          "title": "NumPy guidance for downstream package authors",
          "url": "https://numpy.org/doc/stable/dev/depending_on_numpy.html"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/numpy-2-0-abi-and-api-break.html"
    },
    {
      "id": "mlflow-3-model-and-api-migration",
      "title": "MLflow 3 changes model storage and removes deprecated APIs",
      "vendor": "MLflow Project (LF Projects)",
      "product": "MLflow 3 model storage and APIs",
      "category": "breaking-change",
      "announced_on": "2025-06-09",
      "effective_on": "2025-06-10",
      "verified_on": "2026-09-07",
      "summary": "MLflow 3 promotes logged models to first-class entities, changes model logging from `artifact_path` to `name`, and stores model artifacts outside the run-artifact hierarchy. It also removes Recipes, several model flavors and parameters, the deployment-server command, and portions of the older evaluation API.",
      "implications": [
        "Pipelines and dashboards that discover models through run artifacts or `list_artifacts` need to move to Logged Model APIs and verify that lineage, retention, and access-control logic still reaches the intended artifacts.",
        "Back up and migrate the database, upgrade the server, validate existing clients, then upgrade SDKs. Rehearse restoration: schema migrations may not be transactional, and newer clients may not work against older servers."
      ],
      "uncertainty": "Dates differ: the launch post is June 9, PyPI availability June 10 (used as effective_on), and release pages June 11. The current guide includes later 3.x changes; verify your exact version. Client/server compatibility is best effort.",
      "sources": [
        {
          "title": "MLflow 3 release announcement",
          "url": "https://mlflow.org/releases/3/"
        },
        {
          "title": "MLflow 3 migration guide",
          "url": "https://mlflow.org/docs/latest/ml/mlflow-3/"
        },
        {
          "title": "How to upgrade MLflow",
          "url": "https://mlflow.org/docs/latest/self-hosting/migration/"
        },
        {
          "title": "MLflow v3.0.0 GitHub release",
          "url": "https://github.com/mlflow/mlflow/releases/tag/v3.0.0"
        },
        {
          "title": "MLflow 3 launch post",
          "url": "https://mlflow.org/blog/mlflow-3-launch"
        },
        {
          "title": "MLflow 3.0.0 package release",
          "url": "https://pypi.org/project/mlflow/3.0.0/"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/mlflow-3-model-and-api-migration.html"
    },
    {
      "id": "hugging-face-transformers-v5-migration",
      "title": "Transformers v5 removes TensorFlow and JAX backends and refactors core APIs",
      "vendor": "Hugging Face",
      "product": "Hugging Face Transformers 5.0 / v5 migration",
      "category": "breaking-change",
      "announced_on": "2025-12-01",
      "effective_on": "2026-01-26",
      "verified_on": "2026-09-07",
      "summary": "Transformers v5 made PyTorch the sole model backend, removed long-deprecated surfaces, and replaced the slow-versus-fast tokenizer split with a new backend architecture. The major release also added dynamic weight conversion and moved to `huggingface_hub>=1.0`, bringing HTTPX exceptions, environment-based proxy configuration, and cache-variable changes into the migration.",
      "implications": [
        "Applications importing TensorFlow or Flax model classes must stay on the 4.x line or move model execution to PyTorch or a separately supported interoperability path before adopting v5.",
        "Custom tokenizers, remote model code, Trainer integrations, proxy handling, cache configuration, and code catching `requests.HTTPError` deserve targeted tests because their compatibility risks extend beyond model forward passes."
      ],
      "uncertainty": "Hugging Face labels the main-branch migration guide as continuously updated, so it may include adjustments made after 5.0.0. Custom and remote-code models differ widely; teams should compare the guide with the release notes for the exact v5 minor they plan to install.",
      "sources": [
        {
          "title": "Transformers v5 announcement",
          "url": "https://huggingface.co/blog/transformers-v5"
        },
        {
          "title": "Transformers v5.0.0 release notes",
          "url": "https://github.com/huggingface/transformers/releases/tag/v5.0.0"
        },
        {
          "title": "Transformers 5.0.0 package release",
          "url": "https://pypi.org/project/transformers/5.0.0/"
        },
        {
          "title": "Transformers Version 5 migration guide",
          "url": "https://github.com/huggingface/transformers/blob/main/MIGRATION_GUIDE_V5.md"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/hugging-face-transformers-v5-migration.html"
    },
    {
      "id": "google-gemini-interactions-steps-schema-2026",
      "title": "Gemini Interactions API replaced outputs with a typed steps timeline",
      "vendor": "Google",
      "product": "Gemini v1beta Interactions API, May–June 2026 schema",
      "category": "breaking-change",
      "announced_on": "2026-05-06",
      "effective_on": "2026-06-08",
      "verified_on": "2026-09-07",
      "summary": "Google replaced the Interactions API outputs array with typed steps and consolidated output controls under a polymorphic response_format. Its current migration timeline marks the legacy schema removed on June 8, 2026, after the new schema became the default on May 26.",
      "implications": [
        "Update response parsing, stored interaction fixtures, function-call extraction, and streaming event handlers to consume typed steps rather than assuming a flat model-output array.",
        "Upgrade Gemini SDK clients to version 2 or later and migrate response_mime_type plus modality-specific configuration into response_format before enabling newer Interactions features."
      ],
      "uncertainty": "This covers v1beta Interactions, not GenerateContent. The current timeline marks removal, but surrounding prose still uses future tense and the changelog has no separate post-event June 8 confirmation. We have not probed the retired endpoint.",
      "sources": [
        {
          "title": "Interactions API breaking changes migration guide (May 2026)",
          "url": "https://ai.google.dev/gemini-api/docs/interactions-breaking-changes-may-2026"
        },
        {
          "title": "Gemini API release notes",
          "url": "https://ai.google.dev/gemini-api/docs/changelog"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/google-gemini-interactions-steps-schema-2026.html"
    },
    {
      "id": "google-gemini-2-0-flash-shutdown-2026",
      "title": "Gemini 2.0 Flash and Flash-Lite API endpoints were shut down",
      "vendor": "Google",
      "product": "Gemini 2.0 Flash / Flash-Lite and -001 variants",
      "category": "deprecation",
      "announced_on": "2026-02-18",
      "effective_on": "2026-06-01",
      "verified_on": "2026-09-07",
      "summary": "Google shut down the Gemini 2.0 Flash and Flash-Lite model IDs, including their -001 variants, on June 1, 2026. The current lifecycle table recommends Gemini 3.6 Flash for the Flash IDs and Gemini 3.1 Flash-Lite for the Lite IDs.",
      "implications": [
        "Search code, environment variables, evaluation baselines, and fallback routing for all four retired IDs; an alias hidden in configuration can still cause a production outage.",
        "Benchmark the recommended replacement under representative token, tool-use, latency, and structured-output workloads before updating aliases because a model-ID swap can change behavior and cost."
      ],
      "uncertainty": "Google's release notes originally named Gemini 3.5 Flash as a replacement, while the current lifecycle table now names Gemini 3.6 Flash; recommendations can change and neither page promises behavioral equivalence.",
      "sources": [
        {
          "title": "Gemini API release notes",
          "url": "https://ai.google.dev/gemini-api/docs/changelog"
        },
        {
          "title": "Gemini API deprecations",
          "url": "https://ai.google.dev/gemini-api/docs/deprecations"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/google-gemini-2-0-flash-shutdown-2026.html"
    },
    {
      "id": "anthropic-post-opus-4-6-sampling-parameters",
      "title": "Newer Claude models restrict or reject explicit sampling parameters",
      "vendor": "Anthropic",
      "product": "Claude Messages API; models released after Opus 4.6",
      "category": "breaking-change",
      "announced_on": null,
      "effective_on": null,
      "verified_on": "2026-09-07",
      "summary": "For models released after Claude Opus 4.6, Anthropic accepts `temperature` only at 1.0 and `top_p` only at 0.99 or higher, while any explicit `top_k` is rejected with HTTP 400. The Python SDK version 1.0 and later rejects these fields locally with TypeError.",
      "implications": [
        "Remove explicit sampling controls from shared Claude request builders before changing a model identifier to Opus 4.7 or later, including configuration defaults added by wrappers.",
        "Replace sampling-based behavior tuning with prompts, and add a migration test that exercises the exact production payload against the target model rather than relying only on static SDK types."
      ],
      "uncertainty": "The API reference describes models released after Opus 4.6; the deprecations table names Opus 4.7 and later plus Mythos Preview. Neither supplies a single enforcement date. Omit these fields rather than assuming all model and SDK combinations accept the same exceptions.",
      "sources": [
        {
          "title": "Claude API: Create a Message",
          "url": "https://platform.claude.com/docs/en/api/http/messages/create"
        },
        {
          "title": "Claude model deprecations",
          "url": "https://platform.claude.com/docs/en/about-claude/model-deprecations"
        }
      ],
      "history": [
        {
          "date": "2026-09-07",
          "note": "Initial record added after checking the linked official documentation; migration checks are editorial interpretation."
        }
      ],
      "url": "https://www.plaintextml.com/changes/anthropic-post-opus-4-6-sampling-parameters.html"
    }
  ]
}
