Browse Source

fix(skills): Refresh migrate-ops to current majors (verifier drift)

Re-verified ALL documented targets against endoflife.date + npm on
2026-07-05 (the earlier live run could not reach endoflife.date):
Laravel 11->13, Python 3.12->3.14, Node 22->26, TypeScript 5->6,
Go 1.22->1.26, PHP 8.4->8.5. React 19 and Rust 2024 edition unchanged.

- description + decision trees + codemod table bumped to new targets
- language-upgrades.md: new sections for Python 3.14, Node 24/26
  (LTS-to-LTS guidance), TypeScript 6.0, Go 1.24-1.26, PHP 8.5;
  summary tables extended
- framework-upgrades.md: Laravel section extended through 12 and 13
  (PHP 8.3 minimum, cache/Redis key-prefix change, opt-in AI SDK /
  attributes / queue routing)
- migrate-facts.json claims + patterns updated to match

check-migrate-facts.py --offline and --live both exit 0. Note: the
live run on this machine needs SSL_CERT_FILE pointed at certifi's
bundle (stale local OpenSSL trust store rejects endoflife.date).

NOTE: scripts/install.ps1 must be re-run after landing so the global
~/.claude copy picks up all four refreshed skills.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0xDarkMatter 2 weeks ago
parent
commit
9a5703bb6d

+ 14 - 14
skills/migrate-ops/SKILL.md

@@ -1,6 +1,6 @@
 ---
 ---
 name: migrate-ops
 name: migrate-ops
-description: "Framework and language migration patterns - version upgrades, breaking changes, dependency audit, safe rollback. Use for: migrate, migration, upgrade, version bump, breaking changes, deprecation, dependency audit, npm audit, pip-audit, codemod, jscodeshift, rector, rollback, semver, changelog, framework upgrade, language upgrade, React 19, Vue 3, Next.js App Router, Laravel 11, Angular, Python 3.12, Node 22, TypeScript 5, Go 1.22, Rust 2024, PHP 8.4."
+description: "Framework and language migration patterns - version upgrades, breaking changes, dependency audit, safe rollback. Use for: migrate, migration, upgrade, version bump, breaking changes, deprecation, dependency audit, npm audit, pip-audit, codemod, jscodeshift, rector, rollback, semver, changelog, framework upgrade, language upgrade, React 19, Vue 3, Next.js App Router, Laravel 13, Angular, Python 3.14, Node 26, TypeScript 6, Go 1.26, Rust 2024, PHP 8.5."
 license: MIT
 license: MIT
 allowed-tools: "Read Edit Write Bash Glob Grep Agent"
 allowed-tools: "Read Edit Write Bash Glob Grep Agent"
 metadata:
 metadata:
@@ -12,7 +12,7 @@ metadata:
 
 
 Comprehensive migration skill covering framework upgrades, language version bumps, dependency auditing, breaking change detection, codemods, and rollback strategies.
 Comprehensive migration skill covering framework upgrades, language version bumps, dependency auditing, breaking change detection, codemods, and rollback strategies.
 
 
-> Ecosystem facts verified as of 2026-07.
+> Ecosystem facts verified as of 2026-07-05.
 
 
 ## Migration Strategy Decision Tree
 ## Migration Strategy Decision Tree
 
 
@@ -23,7 +23,7 @@ What kind of migration are you performing?
 │  └─ In-place upgrade
 │  └─ In-place upgrade
 │     Update dependency, run tests, deploy
 │     Update dependency, run tests, deploy
-├─ Major framework version (React 18→19, Vue 2→3, Laravel 10→11)
+├─ Major framework version (React 18→19, Vue 2→3, Laravel 12→13)
 │  │
 │  │
 │  ├─ Codebase < 50k LOC, good test coverage (>70%)
 │  ├─ Codebase < 50k LOC, good test coverage (>70%)
 │  │  └─ Big Bang Migration
 │  │  └─ Big Bang Migration
@@ -49,7 +49,7 @@ What kind of migration are you performing?
 │        Pros: highest confidence, catch subtle differences
 │        Pros: highest confidence, catch subtle differences
 │        Cons: double infrastructure cost, comparison logic
 │        Cons: double infrastructure cost, comparison logic
-└─ Language version upgrade (Python 3.9→3.12, Node 18→22)
+└─ Language version upgrade (Python 3.12→3.14, Node 22→26)
    └─ In-place upgrade with CI matrix
    └─ In-place upgrade with CI matrix
       Test against both old and new versions in CI
       Test against both old and new versions in CI
       Drop old version support once all tests pass
       Drop old version support once all tests pass
@@ -84,13 +84,13 @@ Which framework are you upgrading?
 │  ├─ Tool: Migration build (@vue/compat) for incremental migration
 │  ├─ Tool: Migration build (@vue/compat) for incremental migration
 │  └─ Load: ./references/framework-upgrades.md
 │  └─ Load: ./references/framework-upgrades.md
-├─ Laravel 10 → 11
-│  ├─ Check: Adopt slim application skeleton
-│  ├─ Check: Update config file structure (consolidated configs)
-│  ├─ Check: Review per-second scheduling changes
-│  ├─ Check: Update Dumpable trait usage
+├─ Laravel 12 → 13
+│  ├─ Check: PHP 8.3 is now the minimum (8.5 supported)
+│  ├─ Check: Cache/Redis key prefixes now use hyphenated suffixes
+│  ├─ Check: Adopt native PHP attributes (models, jobs, controllers) — optional
+│  ├─ Check: Queue routing by class via Queue::route(...) — optional
 │  ├─ Tool: laravel shift (automated upgrade service)
 │  ├─ Tool: laravel shift (automated upgrade service)
-│  └─ Load: ./references/framework-upgrades.md
+│  └─ Load: ./references/framework-upgrades.md (covers 10→11 in depth; 12→13 is near zero-break)
 ├─ Angular (any major version)
 ├─ Angular (any major version)
 │  ├─ Check: Run ng update for guided migration
 │  ├─ Check: Run ng update for guided migration
@@ -197,7 +197,7 @@ How do you detect breaking changes?
 | **Next.js** | next-codemod | `npx @next/codemod@latest` | Next.js version upgrades |
 | **Next.js** | next-codemod | `npx @next/codemod@latest` | Next.js version upgrades |
 | **Vue** | vue-codemod | `npx @vue/codemod src/` | Vue 2 to 3 transforms |
 | **Vue** | vue-codemod | `npx @vue/codemod src/` | Vue 2 to 3 transforms |
 | **PHP** | Rector | `vendor/bin/rector process src` | PHP version + framework upgrades |
 | **PHP** | Rector | `vendor/bin/rector process src` | PHP version + framework upgrades |
-| **Python** | pyupgrade | `pyupgrade --py312-plus *.py` | Python version syntax upgrades |
+| **Python** | pyupgrade | `pyupgrade --py314-plus *.py` | Python version syntax upgrades |
 | **Python** | django-upgrade | `django-upgrade --target-version 5.0 *.py` | Django version upgrades |
 | **Python** | django-upgrade | `django-upgrade --target-version 5.0 *.py` | Django version upgrades |
 | **Go** | gofmt | `gofmt -w .` | Go formatting updates |
 | **Go** | gofmt | `gofmt -w .` | Go formatting updates |
 | **Go** | gofix | `go fix ./...` | Go API changes |
 | **Go** | gofix | `go fix ./...` | Go API changes |
@@ -266,13 +266,13 @@ Migration failed or caused issues — how to roll back?
 
 
 | File | Contents | Lines |
 | File | Contents | Lines |
 |------|----------|-------|
 |------|----------|-------|
-| `references/framework-upgrades.md` | React 18→19, Next.js Pages→App Router, Vue 2→3, Laravel 10→11, Angular, Django upgrade paths | ~700 |
-| `references/language-upgrades.md` | Python 3.9→3.13, Node 18→22, TypeScript 4→5, Go 1.20→1.23, Rust 2021→2024, PHP 8.1→8.4 | ~600 |
+| `references/framework-upgrades.md` | React 18→19, Next.js Pages→App Router, Vue 2→3, Laravel 10→13, Angular, Django upgrade paths | ~700 |
+| `references/language-upgrades.md` | Python 3.9→3.14, Node 18→26, TypeScript 4→6, Go 1.20→1.26, Rust 2021→2024, PHP 8.1→8.5 | ~650 |
 | `references/dependency-management.md` | Audit tools, update strategies, lock files, monorepo deps, supply chain security | ~550 |
 | `references/dependency-management.md` | Audit tools, update strategies, lock files, monorepo deps, supply chain security | ~550 |
 
 
 ## Staleness verifier
 ## Staleness verifier
 
 
-This skill hardcodes specific framework/language target versions (React 19, Laravel 11, Python 3.12, Node 22, TypeScript 5, Go 1.22, Rust 2024, PHP 8.4). [`scripts/check-migrate-facts.py`](scripts/check-migrate-facts.py) guards them against silent drift:
+This skill hardcodes specific framework/language target versions (React 19, Laravel 13, Python 3.14, Node 26, TypeScript 6, Go 1.26, Rust 2024, PHP 8.5). [`scripts/check-migrate-facts.py`](scripts/check-migrate-facts.py) guards them against silent drift:
 
 
 ```bash
 ```bash
 # Structural (PR CI, no network): every catalogued target version still appears
 # Structural (PR CI, no network): every catalogued target version still appears

+ 19 - 19
skills/migrate-ops/assets/migrate-facts.json

@@ -12,38 +12,38 @@
     },
     },
     {
     {
       "label": "Laravel",
       "label": "Laravel",
-      "version": "11",
+      "version": "13",
       "where": ["description", "body"],
       "where": ["description", "body"],
-      "pattern": "laravel[^\\n]*\\b11\\b",
-      "live": {"source": "endoflife", "product": "laravel", "compare": "major", "documented": "11"}
+      "pattern": "laravel[^\\n]*\\b13\\b",
+      "live": {"source": "endoflife", "product": "laravel", "compare": "major", "documented": "13"}
     },
     },
     {
     {
       "label": "Python",
       "label": "Python",
-      "version": "3.12",
+      "version": "3.14",
       "where": ["description", "body"],
       "where": ["description", "body"],
-      "pattern": "python[^\\n]*3\\.12\\b",
-      "live": {"source": "endoflife", "product": "python", "compare": "line", "documented": "3.12"}
+      "pattern": "python[^\\n]*3\\.14\\b",
+      "live": {"source": "endoflife", "product": "python", "compare": "line", "documented": "3.14"}
     },
     },
     {
     {
       "label": "Node",
       "label": "Node",
-      "version": "22",
+      "version": "26",
       "where": ["description", "body"],
       "where": ["description", "body"],
-      "pattern": "node[^\\n]*\\b22\\b",
-      "live": {"source": "endoflife", "product": "nodejs", "compare": "major", "documented": "22"}
+      "pattern": "node[^\\n]*\\b26\\b",
+      "live": {"source": "endoflife", "product": "nodejs", "compare": "major", "documented": "26"}
     },
     },
     {
     {
       "label": "TypeScript",
       "label": "TypeScript",
-      "version": "5",
+      "version": "6",
       "where": ["description", "body"],
       "where": ["description", "body"],
-      "pattern": "typescript[^\\n]*\\b5\\b",
-      "live": {"source": "npm", "product": "typescript", "compare": "major", "documented": "5"}
+      "pattern": "typescript[^\\n]*\\b6\\b",
+      "live": {"source": "npm", "product": "typescript", "compare": "major", "documented": "6"}
     },
     },
     {
     {
       "label": "Go",
       "label": "Go",
-      "version": "1.22",
+      "version": "1.26",
       "where": ["description", "body"],
       "where": ["description", "body"],
-      "pattern": "go[^\\n]*1\\.22\\b",
-      "live": {"source": "endoflife", "product": "go", "compare": "line", "documented": "1.22"}
+      "pattern": "go[^\\n]*1\\.26\\b",
+      "live": {"source": "endoflife", "product": "go", "compare": "line", "documented": "1.26"}
     },
     },
     {
     {
       "label": "Rust",
       "label": "Rust",
@@ -51,14 +51,14 @@
       "where": ["description", "body"],
       "where": ["description", "body"],
       "pattern": "rust[^\\n]*2024\\b",
       "pattern": "rust[^\\n]*2024\\b",
       "live": null,
       "live": null,
-      "_comment": "Rust 2024 is an EDITION (reached stable with Rust 1.85), not a semver major tracked on endoflife.date's product list. Live-checked nowhere; offline-only."
+      "_comment": "Rust 2024 is an EDITION (reached stable with Rust 1.85), not a semver major tracked on endoflife.date's product list. Still the newest edition as of 2026-07 (next expected 2027). Live-checked nowhere; offline-only."
     },
     },
     {
     {
       "label": "PHP",
       "label": "PHP",
-      "version": "8.4",
+      "version": "8.5",
       "where": ["description", "body"],
       "where": ["description", "body"],
-      "pattern": "php[^\\n]*8\\.4\\b",
-      "live": {"source": "endoflife", "product": "php", "compare": "line", "documented": "8.4"}
+      "pattern": "php[^\\n]*8\\.5\\b",
+      "live": {"source": "endoflife", "product": "php", "compare": "line", "documented": "8.5"}
     }
     }
   ]
   ]
 }
 }

+ 25 - 1
skills/migrate-ops/references/framework-upgrades.md

@@ -325,7 +325,7 @@ npm test
 
 
 ---
 ---
 
 
-## Laravel 10 to 11
+## Laravel 10 to 13
 
 
 ### Pre-Upgrade Checklist
 ### Pre-Upgrade Checklist
 
 
@@ -431,6 +431,30 @@ php artisan config:show
 php artisan route:list
 php artisan route:list
 ```
 ```
 
 
+### Continuing to Laravel 12 and 13
+
+Upgrade one major at a time (11 → 12 → 13); both steps are deliberately light.
+
+**Laravel 12** (Feb 2025) — maintenance-focused: minimal breaking changes, dependency
+bumps, and new starter kits (React/Vue/Livewire). Most apps upgrade by updating
+`composer.json` constraints and re-running the suite.
+
+**Laravel 13** (Mar 2026) — stability-first with an AI/DX push:
+- **Requires PHP 8.3+** (supports through PHP 8.5) — upgrade the runtime first
+- Default cache and Redis key prefixes now use hyphenated suffixes — irrelevant if your
+  config files already pin these values, breaking if you shared a store across versions
+- New (opt-in): first-party Laravel AI SDK, native PHP attributes across models/jobs/
+  controllers/authorization, `Queue::route(...)` class-based queue routing, query-builder
+  vector similarity search (pgvector)
+- Laravel Shift remains the automated PR-based upgrade path
+
+```bash
+# Per major: bump constraint, update, test
+composer require laravel/framework:^13.0 --with-all-dependencies
+php artisan config:show cache   # verify key-prefix expectations
+php artisan test
+```
+
 ---
 ---
 
 
 ## Angular Version Upgrades
 ## Angular Version Upgrades

+ 159 - 13
skills/migrate-ops/references/language-upgrades.md

@@ -4,7 +4,7 @@ Detailed upgrade paths for major programming language version transitions.
 
 
 ---
 ---
 
 
-## Python 3.9 to 3.13
+## Python 3.9 to 3.14
 
 
 ### Python 3.10 (from 3.9)
 ### Python 3.10 (from 3.9)
 
 
@@ -140,6 +140,34 @@ rg "typing\.re\." .
 python3.13t script.py  # if built with --disable-gil
 python3.13t script.py  # if built with --disable-gil
 ```
 ```
 
 
+### Python 3.14 (from 3.13)
+
+**Key Features Gained:**
+- Deferred evaluation of annotations by default (PEP 649/749) — inspect via `annotationlib`; `from __future__ import annotations` is no longer needed
+- Template strings / t-strings (PEP 750)
+- Free-threaded build officially supported (PEP 779 — still a separate build, no longer "experimental")
+- Multiple interpreters in the stdlib (`concurrent.interpreters`, PEP 734)
+- Zstandard compression (`compression.zstd`, PEP 784)
+- Safe external debugger interface (`sys.remote_exec`)
+
+**Breaking Changes:**
+- `asyncio.get_event_loop()` no longer creates a new event loop — use `asyncio.run()` or `get_running_loop()`
+- Long-deprecated `ast` aliases (`ast.Num`, `ast.Str`, `ast.Bytes`, ...) removed — use `ast.Constant`
+- Annotation-introspection code that reads `__annotations__` eagerly may see deferred semantics — migrate to `annotationlib`
+
+**Migration Commands:**
+```bash
+# Find eager-annotation assumptions
+rg "from __future__ import annotations" .   # now redundant (harmless to keep)
+rg "__annotations__" .                       # candidates for annotationlib
+
+# Find event-loop creation via the removed pattern
+rg "asyncio\.get_event_loop\(\)" .
+
+# Modernize syntax to the new floor
+pyupgrade --py314-plus **/*.py
+```
+
 ### Python Version Upgrade Summary
 ### Python Version Upgrade Summary
 
 
 | From → To | Key Action | Biggest Risk |
 | From → To | Key Action | Biggest Risk |
@@ -148,10 +176,11 @@ python3.13t script.py  # if built with --disable-gil
 | 3.10 → 3.11 | Replace `toml` with `tomllib`, enjoy speed boost | `smtpd` removal |
 | 3.10 → 3.11 | Replace `toml` with `tomllib`, enjoy speed boost | `smtpd` removal |
 | 3.11 → 3.12 | Remove `distutils`/`imp`, adopt type syntax | `distutils` full removal, sqlite3 adapter changes |
 | 3.11 → 3.12 | Remove `distutils`/`imp`, adopt type syntax | `distutils` full removal, sqlite3 adapter changes |
 | 3.12 → 3.13 | Remove deprecated stdlib modules | Large number of removed stdlib modules |
 | 3.12 → 3.13 | Remove deprecated stdlib modules | Large number of removed stdlib modules |
+| 3.13 → 3.14 | Adopt deferred annotations + t-strings | `asyncio.get_event_loop()` no longer creates a loop |
 
 
 ---
 ---
 
 
-## Node.js 18 to 22
+## Node.js 18 to 26
 
 
 ### Node.js 20 (from 18)
 ### Node.js 20 (from 18)
 
 
@@ -233,16 +262,48 @@ node --experimental-require-module app.js
 # Replace: chokidar/nodemon → node --watch
 # Replace: chokidar/nodemon → node --watch
 ```
 ```
 
 
+### Node.js 24 (from 22)
+
+**Key Features Gained:**
+- `require()` of ESM modules enabled by default (no flag)
+- V8 13.6 — `Float16Array`, `RegExp.escape`, `Error.isError`, explicit resource management (`await using`)
+- `URLPattern` as a global
+- Permission model stable (flag renamed to `--permission`)
+- npm 11, Undici 7
+
+**Breaking Changes:**
+- Windows native builds drop MSVC (ClangCL toolchain) — affects native-addon build pipelines
+- Assorted deprecated API removals (`url.parse()` further discouraged — use `URL`)
+
+**Migration Commands:**
+```bash
+nvm install 24
+nvm use 24
+# FROM node:24-alpine
+
+npm rebuild                      # native modules against new ABI
+rg "require\(['\"]\./.*\.mjs" .  # spots that relied on require(esm) flags
+```
+
+### Node.js 26 (from 24)
+
+Node 26 is the Current line (April 2026); it enters Active LTS in October 2026. For
+production, upgrade LTS-to-LTS: 22 → 24 now, 24 → 26 once 26 is LTS. The mechanics are
+the same as every even-major bump: rebuild native modules, re-run the test suite on the
+new V8, and update `FROM node:26` images plus CI matrices when you cut over.
+
 ### Node.js Version Upgrade Summary
 ### Node.js Version Upgrade Summary
 
 
 | From → To | Key Action | Biggest Risk |
 | From → To | Key Action | Biggest Risk |
 |-----------|-----------|--------------|
 |-----------|-----------|--------------|
 | 18 → 20 | Rebuild native modules, test URL parsing | Stricter URL validation, loader hooks off-thread |
 | 18 → 20 | Rebuild native modules, test URL parsing | Stricter URL validation, loader hooks off-thread |
 | 20 → 22 | Rebuild native modules, check glibc version | Native module compatibility, header validation |
 | 20 → 22 | Rebuild native modules, check glibc version | Native module compatibility, header validation |
+| 22 → 24 | Adopt require(esm), permission model | Native-addon toolchain change on Windows |
+| 24 → 26 | LTS-to-LTS bump when 26 enters LTS (Oct 2026) | Riding the Current line before LTS |
 
 
 ---
 ---
 
 
-## TypeScript 4.x to 5.x
+## TypeScript 4.x to 6.0
 
 
 ### TypeScript 5.0 (from 4.9)
 ### TypeScript 5.0 (from 4.9)
 
 
@@ -295,27 +356,65 @@ rg '"suppressExcessPropertyErrors"' tsconfig.json
 | **5.6** | Iterator helper methods, `--noUncheckedSideEffectImports` |
 | **5.6** | Iterator helper methods, `--noUncheckedSideEffectImports` |
 | **5.7** | `--rewriteRelativeImportExtensions`, `--target es2024` |
 | **5.7** | `--rewriteRelativeImportExtensions`, `--target es2024` |
 
 
+### TypeScript 6.0 (from 5.x)
+
+The last release on the JavaScript-based compiler — 6.0 modernises defaults as the
+bridge to the native (Go) compiler in TypeScript 7.
+
+**Key Features Gained:**
+- `es2025` target/lib with types for Temporal, `Map.getOrInsert`, `RegExp.escape`
+- Better inference for `this`-less functions; `#/` subpath-import support
+- `--stableTypeOrdering` flag to ease 6.0 → 7.0 migration diffing
+- Large-monorepo `tsc --watch` rebuilds significantly faster
+
+**Breaking Changes:**
+- `strict: true` is now the **default** — configs that never set it surface new errors
+- Defaults changed: `module: esnext`, `target: es2025`
+- Removed: `moduleResolution: classic`; `module: amd/umd/system/none`; minimum `target` is ES2015 (`es5` deprecated)
+- `esModuleInterop` / `allowSyntheticDefaultImports` can no longer be set to `false`
+- Namespace-with-class merging requires explicit `export`
+
+**Migration Commands:**
+```bash
+npm install -D typescript@6
+
+# Find options 6.0 removed or hard-wires
+rg '"moduleResolution":\s*"classic"' tsconfig.json
+rg '"module":\s*"(amd|umd|system|none)"' tsconfig.json
+rg '"esModuleInterop":\s*false' tsconfig.json
+rg '"target":\s*"es5"' -i tsconfig.json
+
+# Surface the strict-by-default delta before committing to it
+npx tsc --noEmit
+```
+
 ### Migration Strategy
 ### Migration Strategy
 
 
 ```
 ```
 TypeScript version upgrade approach:
 TypeScript version upgrade approach:
-├─ Minor version (5.x → 5.y)
+├─ Minor version (x.y → x.z)
 │  └─ Generally safe, just update and fix new errors
 │  └─ Generally safe, just update and fix new errors
-│     npm install -D typescript@5.y
+│     npm install -D typescript@latest
 │     npx tsc --noEmit
 │     npx tsc --noEmit
-└─ Major version (4.x → 5.x)
-   ├─ 1. Update tsconfig.json (remove deleted options)
-   ├─ 2. Install typescript@5
-   ├─ 3. Run tsc --noEmit, fix errors
-   ├─ 4. Decide on decorator strategy (legacy vs ECMAScript)
-   └─ 5. Consider adopting moduleResolution: "bundler"
+├─ Major version (4.x → 5.x)
+│  ├─ 1. Update tsconfig.json (remove deleted options)
+│  ├─ 2. Install typescript@5
+│  ├─ 3. Run tsc --noEmit, fix errors
+│  ├─ 4. Decide on decorator strategy (legacy vs ECMAScript)
+│  └─ 5. Consider adopting moduleResolution: "bundler"
+│
+└─ Major version (5.x → 6.0)
+   ├─ 1. Set strict: true explicitly and fix errors BEFORE upgrading
+   ├─ 2. Replace removed module/moduleResolution options
+   ├─ 3. Install typescript@6, run tsc --noEmit
+   └─ 4. Pin the target you actually ship (defaults moved to es2025)
 ```
 ```
 
 
 ---
 ---
 
 
-## Go 1.20 to 1.23
+## Go 1.20 to 1.26
 
 
 ### Go 1.21 (from 1.20)
 ### Go 1.21 (from 1.20)
 
 
@@ -403,6 +502,27 @@ rg "\.Stop\(\)" . --glob "*.go"  # Review timer stop behavior
 rg "\.Reset\(" . --glob "*.go"   # Review timer reset behavior
 rg "\.Reset\(" . --glob "*.go"   # Review timer reset behavior
 ```
 ```
 
 
+### Go 1.24 – 1.26 (from 1.23)
+
+**Key Features Gained:**
+- **1.24**: generic type aliases; `tool` directives in go.mod (tracked tool deps); `os.Root` (filesystem-scoped file access); Swiss-table map implementation (runtime perf); `weak` package; `runtime.AddCleanup` (successor to `SetFinalizer`)
+- **1.25**: container-aware `GOMAXPROCS` (respects cgroup CPU limits); `testing/synctest` for concurrent-code tests; experimental green-tea GC
+- **1.26**: current stable line — as with every Go release, review the release notes for `go vet`/runtime deltas; language changes remain rare and gated on the `go` directive
+
+**Breaking Changes:**
+- Effectively none at the language level (Go 1 compatibility promise); behavior deltas are gated on the `go` directive version in go.mod, so bumps activate deliberately
+
+**Migration Commands:**
+```bash
+go mod edit -go=1.26
+go mod tidy
+go vet ./...
+govulncheck ./...
+
+# Adopt tool directives (1.24+) — replaces tools.go pattern
+go get -tool golang.org/x/tools/cmd/stringer
+```
+
 ### Go Version Upgrade Summary
 ### Go Version Upgrade Summary
 
 
 | From → To | Key Action | Biggest Risk |
 | From → To | Key Action | Biggest Risk |
@@ -410,6 +530,7 @@ rg "\.Reset\(" . --glob "*.go"   # Review timer reset behavior
 | 1.20 → 1.21 | Update go.mod toolchain, adopt slog | Toolchain directive in go.mod |
 | 1.20 → 1.21 | Update go.mod toolchain, adopt slog | Toolchain directive in go.mod |
 | 1.21 → 1.22 | Enjoy loop variable fix, adopt enhanced routing | Loop variable semantics (usually fixes bugs) |
 | 1.21 → 1.22 | Enjoy loop variable fix, adopt enhanced routing | Loop variable semantics (usually fixes bugs) |
 | 1.22 → 1.23 | Replace x/exp packages, adopt iterators | Timer/Ticker behavior change |
 | 1.22 → 1.23 | Replace x/exp packages, adopt iterators | Timer/Ticker behavior change |
+| 1.23 → 1.26 | Bump go directive stepwise, adopt tool directives + os.Root | Runtime perf deltas (Swiss maps, GC) in hot paths |
 
 
 ---
 ---
 
 
@@ -471,7 +592,7 @@ cargo doc --no-deps  # check documentation builds
 
 
 ---
 ---
 
 
-## PHP 8.1 to 8.4
+## PHP 8.1 to 8.5
 
 
 ### PHP 8.2 (from 8.1)
 ### PHP 8.2 (from 8.1)
 
 
@@ -580,6 +701,30 @@ vendor/bin/rector process src --set php84
 rg "function \w+\([^)]*\w+ \$\w+ = null" src/ --glob "*.php"
 rg "function \w+\([^)]*\w+ \$\w+ = null" src/ --glob "*.php"
 ```
 ```
 
 
+### PHP 8.5 (from 8.4)
+
+**Key Features Gained:**
+- Pipe operator `|>` for left-to-right call chaining
+- `array_first()` and `array_last()`
+- `#[\NoDiscard]` attribute (warn when a return value is ignored)
+- Fatal errors now include backtraces
+- `clone with` — update readonly/other properties during clone
+
+**Breaking Changes:**
+- Minor-release discipline: mostly new deprecations rather than removals; run the suite with deprecations surfaced (`error_reporting(E_ALL)`) before and after
+
+**Migration Commands:**
+```bash
+vendor/bin/rector process src --set php85
+
+# Adopt the pipe operator where nested calls hurt readability
+# Old: trim(strtolower($name))
+# New: $name |> strtolower(...) |> trim(...)
+
+# Replace reset()/end() misuse for first/last element
+rg "\breset\(|\bend\(" src/ --glob "*.php"   # candidates for array_first/array_last
+```
+
 ### PHP Version Upgrade Summary
 ### PHP Version Upgrade Summary
 
 
 | From → To | Key Action | Biggest Risk |
 | From → To | Key Action | Biggest Risk |
@@ -587,6 +732,7 @@ rg "function \w+\([^)]*\w+ \$\w+ = null" src/ --glob "*.php"
 | 8.1 → 8.2 | Fix dynamic properties, deprecation warnings | Dynamic properties deprecated |
 | 8.1 → 8.2 | Fix dynamic properties, deprecation warnings | Dynamic properties deprecated |
 | 8.2 → 8.3 | Adopt typed constants, #[Override] | array_sum/array_product behavior |
 | 8.2 → 8.3 | Adopt typed constants, #[Override] | array_sum/array_product behavior |
 | 8.3 → 8.4 | Adopt property hooks, asymmetric visibility | Implicit nullable deprecation |
 | 8.3 → 8.4 | Adopt property hooks, asymmetric visibility | Implicit nullable deprecation |
+| 8.4 → 8.5 | Adopt pipe operator, array_first/array_last | New deprecations surfacing in dependencies |
 
 
 ---
 ---