model-eol 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,31 +14,6 @@ tooling that turns it into a Dependabot for models.**
14
14
 
15
15
  ![model-eol demo: retired models, distributor clocks, worst-case date](docs/img/demo.gif)
16
16
 
17
- ## Release line
18
-
19
- **0.4.1 - trusted migrations.** The 0.4 line made bot migrations independently
20
- evaluable and bound each result to the exact default-branch commit, plan, eval
21
- configuration, and feed digests. The workflow resolves the package version once
22
- and reuses that exact version across planning, evaluation, and publication. It added
23
- path-scoped policy and lifecycle routing for mixed-provider repositories,
24
- trusted PR/issue ownership, stale-work reconciliation, and fresh-work behavior
25
- when a retired model returns. The 0.4.1 patch moved the copy-ready workflows to
26
- the current Node-backed Actions and fixed Google models-endpoint pagination. The
27
- bundled feeds contain 313 entries across Amazon, Anthropic, Google, and OpenAI.
28
-
29
- **0.5.0 - public contract and trust.** This milestone makes the data contract public:
30
- canonical hosted schemas, a zero-dependency `validate` command, hosted feeds,
31
- an Atom changelog, and byte-exact refresh receipts whose digests must match the
32
- published data. It adds status-aware distributor refresh including Bedrock Public
33
- Extended Access, preserves structured replacement guidance across JSON reports
34
- and preserves channel-specific lifecycle clocks in CycloneDX,
35
- preflights multi-file apply plan-wide and rolls back later commit failures,
36
- fails explicitly on unapproved symlink coverage, and keeps configured eval
37
- failures as distinct durable issues. It also
38
- ships a repository-owned eval-harness starter, permanent exact-package consumer
39
- UAT, and a Node 22 support floor. The hosted URLs become authoritative only after
40
- the first green Pages deployment.
41
-
42
17
  ## The problem
43
18
 
44
19
  On July 23, 2026, OpenAI shut down a scheduled wave of model snapshots. One of my
@@ -58,7 +33,7 @@ second, so the existing trackers can converge instead of each scraping alone.
58
33
  replacement, `distributions` for per-channel lifecycles, and publisher `policy`
59
34
  floors. Small enough that a provider could serve it at
60
35
  `/.well-known/model-eol.json` in an afternoon.
61
- - **`feeds/`** - <!-- feeds-status -->Amazon (4 entries), Anthropic (29 entries), Google (86 entries) and OpenAI (194 entries), generated from the providers' live deprecation pages plus the AWS Bedrock and Google Vertex AI lifecycle pages, feed data generated 2026-08-18<!-- /feeds-status -->. Every
36
+ - **`feeds/`** - <!-- feeds-status -->Amazon (4 entries), Anthropic (29 entries), Google (89 entries) and OpenAI (194 entries), generated from the providers' live deprecation pages plus the AWS Bedrock and Google Vertex AI lifecycle pages, feed data generated 2026-08-31<!-- /feeds-status -->. Every
62
37
  dated entry carries a source URL.
63
38
  - **`check.mjs`** - zero-dependency CLI: CI gate, PR diff gate, inventory, CycloneDX
64
39
  ML-BOM export, retirement schedule, alerts and badges, migration plan/apply,
@@ -68,10 +43,11 @@ second, so the existing trackers can converge instead of each scraping alone.
68
43
  - **`bot/`** - the Dependabot part: a cron GitHub workflow that maintains one
69
44
  migration PR or issue per retiring model, published as the `model-eol-bot`
70
45
  binary in the same npm package.
71
- - **Public contract rollout** - the 0.5 Pages workflow publishes versioned
72
- schemas, hosted feeds, refresh health, and an Atom changelog. Those URLs
73
- become authoritative only after Pages is enabled and the exact-byte deployment
74
- check passes.
46
+ - **Public contract** - versioned schemas, hosted feeds, refresh health, a
47
+ publication manifest, and an Atom changelog are live at
48
+ [`thossullivan.github.io/model-eol`](https://thossullivan.github.io/model-eol/).
49
+ Publication requires a refresh receipt for the exact feeds on `main`, followed
50
+ by an exact-byte check against every deployed asset.
75
51
 
76
52
  ## Try it
77
53
 
@@ -400,10 +376,9 @@ after the dry run if you want to retain the receipt as UAT evidence. Then let
400
376
  `bot.yml.example` run the same contract with any explicitly opted-in provider
401
377
  keys available to its read-only evaluate job, not its write-capable publish job.
402
378
 
403
- Starting in 0.5, inline `model-eol-bot --eval` and the legacy unbound report/status
404
- artifacts are refused. A configured publication must consume the commit-bound
405
- manifest from `model-eol-bot evaluate`; missing results fail before GitHub API
406
- access.
379
+ Inline `model-eol-bot --eval` and the legacy unbound report/status artifacts are
380
+ refused. A configured publication must consume the commit-bound manifest from
381
+ `model-eol-bot evaluate`; missing results fail before GitHub API access.
407
382
 
408
383
  On its first actionable run, the bot creates the `model-eol` label. If repository
409
384
  policy prevents label creation or assignment, it fails closed rather than publish
@@ -448,9 +423,8 @@ The refresh also travels in the other direction. On August 3, Google removed the
448
423
  previously listed October 16 earliest shutdown dates for the Gemini 2.5 Pro,
449
424
  Flash, and Flash-Lite GA models. The pipeline opened
450
425
  [a PR with the semantic retraction](https://github.com/thossullivan/model-eol/pull/60),
451
- and merging it published v0.2.3 so downstream checks stopped warning from dates
452
- Google no longer listed. A lifecycle tracker has to retract stale alarms as well
453
- as add new ones.
426
+ and downstream checks stopped warning from dates Google no longer listed. A
427
+ lifecycle tracker has to retract stale alarms as well as add new ones.
454
428
 
455
429
  ## The actual ask
456
430
 
@@ -469,15 +443,12 @@ move any of us can make here.
469
443
  CI runs the full suite on every push and PR. The copy-ready bot workflow ships
470
444
  as `bot.yml.example` and consumes the published package rather than local copies
471
445
  of the tooling.
472
- - The 0.5 Pages workflow publishes canonical schemas, feeds, refresh health, and
473
- Atom at `thossullivan.github.io/model-eol`. Treat that host as authoritative
474
- only after repository Pages is enabled and its first deployment passes the
475
- exact-byte live check. `model-eol validate` checks feeds, repository policy,
476
- check reports, inventories, schedules, alerts, and plans against the same zero-dependency
477
- runtime contracts.
478
- Maintainer rollout: set Pages source to GitHub Actions, dispatch `feed-refresh`
479
- from `main`, and require the resulting `public-contract` deployment to pass
480
- before releasing 0.5.
446
+ - The [public contract](https://thossullivan.github.io/model-eol/) publishes
447
+ canonical schemas, feeds, refresh health, a publication manifest, and Atom.
448
+ Each deployment is bound to an exact feed-refresh receipt and verified against
449
+ every live asset. `model-eol validate` checks feeds, repository policy, check
450
+ reports, inventories, schedules, alerts, and plans against the same
451
+ zero-dependency runtime contracts.
481
452
  - Current-model entries (and therefore policy-floor horizons) populate only when
482
453
  refresh runs with provider API keys for the models endpoints.
483
454
  - The checker matches known IDs only - it will not discover models absent from the
package/feeds/google.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "spec": "model-eol/0.1",
3
3
  "publisher": "google",
4
- "generated": "2026-08-18T00:47:44.931Z",
4
+ "generated": "2026-08-31T05:30:20.090Z",
5
5
  "source": "https://ai.google.dev/gemini-api/docs/deprecations",
6
6
  "models": [
7
7
  {
@@ -574,7 +574,11 @@
574
574
  ]
575
575
  },
576
576
  {
577
- "id": "gemini-omni-flash-preview"
577
+ "id": "gemini-omni-flash-preview",
578
+ "source": "https://ai.google.dev/gemini-api/docs/deprecations",
579
+ "shutdown": "2026-09-30",
580
+ "date_precision": "earliest",
581
+ "replacement": "gemini-omni-1.1-flash"
578
582
  },
579
583
  {
580
584
  "id": "gemini-robotics-er-2-preview"
@@ -610,7 +614,20 @@
610
614
  "id": "gemini-robotics-er-2-streaming-preview"
611
615
  },
612
616
  {
613
- "id": "gemini-3.5-live-translate-preview"
617
+ "id": "gemini-3.5-live-translate-preview",
618
+ "source": "https://ai.google.dev/gemini-api/docs/deprecations"
619
+ },
620
+ {
621
+ "id": "gemini-3.5-transcribe-live",
622
+ "source": "https://ai.google.dev/gemini-api/docs/deprecations"
623
+ },
624
+ {
625
+ "id": "gemini-3.5-transcribe",
626
+ "source": "https://ai.google.dev/gemini-api/docs/deprecations"
627
+ },
628
+ {
629
+ "id": "gemini-omni-1.1-flash",
630
+ "source": "https://ai.google.dev/gemini-api/docs/deprecations"
614
631
  }
615
632
  ]
616
633
  }
package/feeds/openai.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "spec": "model-eol/0.1",
3
3
  "publisher": "openai",
4
- "generated": "2026-08-18T00:47:44.930Z",
4
+ "generated": "2026-08-31T05:30:19.216Z",
5
5
  "source": "https://developers.openai.com/api/docs/deprecations",
6
6
  "note": "Community-maintained seed dataset, compiled 2026-07-25 from the provider's deprecations page. Verify against the source before acting; this file demonstrates the format.",
7
7
  "models": [
@@ -937,7 +937,14 @@
937
937
  "id": "text-embedding-ada-002"
938
938
  },
939
939
  {
940
- "id": "whisper-1"
940
+ "id": "whisper-1",
941
+ "announced": "2026-08-26",
942
+ "shutdown": "2027-02-26",
943
+ "source": "https://developers.openai.com/api/docs/deprecations",
944
+ "replacement_options": [
945
+ "gpt-live-transcribe",
946
+ "gpt-transcribe"
947
+ ]
941
948
  },
942
949
  {
943
950
  "id": "tts-1"
@@ -988,10 +995,24 @@
988
995
  "id": "gpt-4o-mini-search-preview"
989
996
  },
990
997
  {
991
- "id": "gpt-4o-transcribe"
998
+ "id": "gpt-4o-transcribe",
999
+ "announced": "2026-08-26",
1000
+ "shutdown": "2027-02-26",
1001
+ "source": "https://developers.openai.com/api/docs/deprecations",
1002
+ "replacement_options": [
1003
+ "gpt-live-transcribe",
1004
+ "gpt-transcribe"
1005
+ ]
992
1006
  },
993
1007
  {
994
- "id": "gpt-4o-mini-transcribe"
1008
+ "id": "gpt-4o-mini-transcribe",
1009
+ "announced": "2026-08-26",
1010
+ "shutdown": "2027-02-26",
1011
+ "source": "https://developers.openai.com/api/docs/deprecations",
1012
+ "replacement_options": [
1013
+ "gpt-live-transcribe",
1014
+ "gpt-transcribe"
1015
+ ]
995
1016
  },
996
1017
  {
997
1018
  "id": "gpt-4o-mini-tts"
@@ -1009,7 +1030,14 @@
1009
1030
  "id": "gpt-4.1-mini"
1010
1031
  },
1011
1032
  {
1012
- "id": "gpt-4o-transcribe-diarize"
1033
+ "id": "gpt-4o-transcribe-diarize",
1034
+ "announced": "2026-08-26",
1035
+ "shutdown": "2027-02-26",
1036
+ "source": "https://developers.openai.com/api/docs/deprecations",
1037
+ "replacement_options": [
1038
+ "gpt-live-transcribe",
1039
+ "gpt-transcribe"
1040
+ ]
1013
1041
  },
1014
1042
  {
1015
1043
  "id": "gpt-5"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "model-eol",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "AI model deprecation feeds with a zero-dependency checker, inventory CLI, and migration bot.",
5
5
  "type": "module",
6
6
  "bin": {