Lifecycle & end-of-life

Interpret deprecation, retirement, date confidence, and monitoring coverage without turning missing provider information into a false guarantee.

Two distinct milestones

deprecation
The provider discourages new usage or has moved the resource into a legacy phase. It may still accept requests.
end_of_life
The provider plans to stop, or has stopped, serving the resource on the stated surface. Providers may call this retirement, shutdown, removal, or end-of-support.

Deprecation is not end-of-life

A provider deprecation date is never copied into end_of_life.date. When only deprecation is known, end-of-life remains explicitly unknown.

Resource scopes

provider
Lifecycle of a provider or service itself. A provider summary may aggregate its deployments, but it does not retire every model the lab produced.
model
Lifecycle of the canonical release produced by a lab, independently from any one hosting provider.
deployment
Lifecycle of a provider-specific model ID, region, and API surface. This is the reference scope for routing and migration decisions.

A model can be retired by one cloud while remaining available from its lab or another gateway. ALLM therefore does not propagate deployment lifecycle assertions to the canonical model, or canonical model assertions to every deployment.

Status and date semantics

status
enumrequired
preview, available, legacy, deprecated, retired, or unknown.
state
enumrequired
scheduled, effective, not_announced, unknown, conflicting, or not_applicable. Each milestone has its own state.
date
ISO 8601 | nullrequired
Normalized date or date-time. Null means no qualifying date is available; it does not mean the milestone will never happen.
precision
enumrequired
datetime, day, month, quarter, year, or unknown. Do not invent day-level precision for a provider that announced only a month.
date_type
enumrequired
confirmed, not_before, not_after, estimated, or unknown. A not_before value is a boundary, not a confirmed shutdown date.

Unknown and not announced differ

not_announced is a positive assertion backed by current provider information. unknown means ALLM cannot make that assertion from current evidence.

Coverage and evidence

Every lifecycle object includes monitoring coverage and every milestone carries its own evidence. This lets consumers distinguish a current official statement from an unchecked or community-derived date.

coverage.status
monitored, partial, unmonitored, stale, or source_error. Coverage describes ALLM's observation of relevant sources, not provider uptime.
verification_status
official_declared, cross_checked, community, probe outcomes, or unknown. Prefer official or cross-checked evidence for automated shutdown decisions.
observed_at
When ALLM observed this evidence. Use it with coverage freshness rather than assuming a source remains current forever.
last_changed_at
When the normalized lifecycle assertion last changed, when known. It differs from the latest source check time.

Production policy

  1. Make routing decisions at deployment scope.
  2. Act on dates according to date_type and precision; reserve an earlier migration buffer for boundaries and estimates.
  3. Reject retired; migrate deprecated or legacy deployments according to your risk window.
  4. Treat unknown, stale coverage, and source errors as risk states—not as evidence of continued availability.
  5. Persist the resource ID, catalog release, evidence URL, and observation time with the decision.
Policy sketch
const milestone = deployment.lifecycle.end_of_life;

if (deployment.lifecycle.status === "retired") blockDeployment();

if (milestone.state === "scheduled" && milestone.date) {
  const bufferDays = milestone.date_type === "confirmed" ? 30 : 60;
  scheduleMigration(milestone.date, bufferDays);
}

if (["unknown", "stale", "source_error"].includes(
  deployment.lifecycle.coverage.status,
)) {
  requireHumanReview();
}