Skip to content

Developers · changelog

What shipped.
What to update.

Newest first. We follow strict SemVer across the SDKs; a major bump is announced 14 days ahead with a migration guide. Subscribe via the Atom feed at /developers/changelog.atom.

Release notes

Every shipped change.

  1. 2026-05-21

    All 5 SDKs now expose typed LinkErrorCode

    • TypeScript / Python / Go / Swift / Kotlin SDKs all expose `LinkErrorCode` (or equivalent) — the 18 stable error codes as language-idiomatic typed constants. Branch on `code`, not on HTTP status.
    • TS SDK adds `jobEventTypes` — pass to `client.registerWebhook({ topics: jobEventTypes })` to subscribe to every `link.job.*` event with one named constant.
    • Each SDK README documents the recommended switch/match/when pattern; equality with `LinkError.code` is zero-friction (no `.value` / `.rawValue` juggling).
  2. 2026-05-21

    JOB_FORBIDDEN_TRANSITION (409) added to the error model

    • Returned by `POST /internal/v1/jobs/:id/events` when the requested transition isn't legal from the current state (e.g. `delivered` from `booked`).
    • Listed in `Problem.code` enum + the SPEC §15 error table. All 5 SDKs recognize it as a typed constant.
  3. 2026-05-21

    Public /v1/incidents/public endpoint

    • Redacted public incidents feed for the status page. Excludes `subjectRef`, `runbookSlug`, `detail`; filters out SEV-3; 30-day window. Safe to expose unauthenticated.
    • Gateway proxies it and returns `503 DEPENDENCY_DEGRADED` on incidents outage so the status page never renders a false empty history.
  4. 2026-05-21

    Status.critical flag on every component

    • The `/v1/status` envelope's components now carry a `critical: boolean`. The public status page uses it to render a CORE badge + drive the banner (a non-critical going dark = 'Some systems degraded', not 'Partial outage').
  5. 2026-05-20

    Event taxonomy: settlement + incidents

    • 5 event types added to the canonical `eventTypes` union: `link.settlement.posted.v1` + the 4 incident events (`opened`, `paged`, `acked`, `resolved`).
    • Plus `link.insurance.period-changed.v1`, `link.dscsa.custody-break.v1`, `link.fsma.lot-event.v1` are now pinned in the schema package — they were live but not in the typed union.
    • All 8 are also in SPEC §7 + the events.test.ts drift catcher.
  6. 2026-05-20

    RETRYABLE_CODES + isRetryableCode

    • All 5 SDKs converge on the same 3-code retryable set: `RATE_LIMITED`, `DEPENDENCY_DEGRADED`, `INTERNAL_ERROR`.
    • TS SDK's `LinkError.retryable` now falls back to `isRetryableCode(code)` when the server's `retryable` field is falsy — so transient codes the server forgets to flag are still auto-retried.
  7. 2026-05-20

    Slice 7 / SDK 0.1.0

    • TypeScript: `npm i @l1fe/link`
    • Python: `pip install l1fe-link`
    • Go: `go get github.com/l1feai/link-go`
    • Swift: `.package(url: "https://github.com/l1feai/link-swift", from: "0.1.0")`
    • Kotlin: `implementation("ai.l1fe:link:0.1.0")`

For the canonical engineering changelog covering every code change, see CHANGELOG.md in the repo.