SDK Semantic Versioning Covenant
This document is the canonical versioning covenant for the official Claimful SDKs. It binds:
@claimful/sdk— TypeScript SDK published to npm (packages/sdk-ts)claimful/sdk— PHP SDK published to Packagist (packages/sdk-php)
It does not govern the HTTP API itself — URL versioning, deprecation
headers, sunset cadence, and the breaking-change taxonomy for /api/v{'{N}'}/...
live in ADR 0028. The covenant below specifies how SDK package releases
track, surface, and overlap those API changes for integrators.
Document marker: CLAIMFUL_SDK_SEMVER_SENTINEL
1. Versioning scheme
Both SDKs follow SemVer 2.0.0 — MAJOR.MINOR.PATCH:
- MAJOR — any change that meets the SDK breaking-change definition in §2. Examples: removing a public export, renaming a public method, changing the type of a method parameter or return value, raising the language floor.
- MINOR — new public exports, new optional method parameters, new public method overloads, new optional response fields surfaced through typed helpers, new helper functions. Strictly additive. Consumers MUST tolerate.
- PATCH — bug fixes, internal refactors with no observable surface change, dependency bumps that do not change the public type signature, documentation-only changes shipped to the package.
The pre-1.0 escape hatch from SemVer §4 does not apply — both SDKs are already at 1.x and bound by the full covenant.
2. SDK breaking-change definition
An SDK change is breaking (forces MAJOR) when any one of the following is true:
- A public export, public method, or public constructor is removed or renamed.
- The type signature of a public method changes in a way that makes previously-valid call sites invalid (parameter added without a default, parameter type narrowed, return type changed).
- A previously-optional method parameter becomes required.
- The language or runtime floor is raised (Node engines field, PHP
requirephpconstraint, minimum TypeScript or PHP language level). - A public exception / error type is removed, renamed, or moved between namespaces.
- The shape of a public response DTO (TypeScript interface or PHP value object) changes in a way that breaks consumers reading existing fields.
- The SDK starts relying on a server response shape that has not yet
shipped in a deployed
/api/v{'{N}'}/...major — i.e. SDK and API majors are not allowed to drift. - Default behaviour of a public method changes — same name, same signature, different semantics (e.g. retry policy default flips, default base URL moves).
Additive changes — new exports, new optional parameters with defaults, new fields on response DTOs that existing consumers tolerate, new error subclasses added below an existing public base type — are MINOR.
This taxonomy is the SDK-side mirror of ADR 0028 §2; SDK breaking changes are a superset because language-floor bumps and binding-shape changes are SDK-only concerns.
3. 90-day deprecation-overlap window
When a MAJOR is cut, the previous MAJOR line continues to receive security and severity-1 bug patches for a minimum of 90 days from the day the new MAJOR is published. This mirrors the ADR 0028 §3 API deprecation lifecycle:
When a major bumps, the previous major runs in parallel for a 90-day minimum overlap, signalled via RFC 8594
Sunset+ RFC 8288Deprecation/Linkheaders and a Postmark notification cadence.
What the SDK overlap window guarantees:
- The previous MAJOR remains installable from npm / Packagist (no unpublish, no Packagist removal).
- Security advisories (CVE-grade) and severity-1 correctness bugs are back-ported to the previous MAJOR for the full 90 days.
- New features (MINOR-grade changesets) do not back-port — the previous MAJOR is frozen at the last patch line plus security/sev-1 fixes.
- The CHANGELOG entry that introduces a new MAJOR pins the calendar end of the overlap window — e.g. "Previous v1.x line maintained until 2026-08-21".
- Integrators on the previous MAJOR receive the same Postmark cadence defined in ADR 0028 §5 when the underlying API major is also sunsetting.
The 90-day floor is a minimum, not a maximum. The CTO may extend a specific MAJOR's overlap window per ADR 0028 §3 row 3.
4. LTS posture
The Claimful SDKs ship in a rolling-stable posture, not a long-term support (LTS) posture:
- There is no dedicated LTS branch beyond the rolling 90-day overlap on the prior MAJOR.
- Security and severity-1 patches land on
main(current MAJOR) first, then on the previous-MAJOR maintenance branch during the 90-day overlap window. - The pre-pilot state described in ADR 0028 §9 applies symmetrically: the SDK has no v2.x to maintain until the API takes its first breaking change. Both SDKs are currently at 1.x.
- Integrators who require a longer support tail than 90 days should contact Claimful through their merchant agreement; bespoke extensions are handled per-account, not by a published LTS schedule.
5. Changeset → version mapping
@claimful/sdk releases are driven by
Changesets. The .changeset/
workflow at the repo root binds intent → bump:
patch— bug fix; no public-API change → PATCH bump.minor— new public export or new optional parameter; strictly additive → MINOR bump.major— any item in §2 above → MAJOR bump.
Rules enforced by .changeset/README.md:
- A
majorchangeset MUST cite which row of ADR 0028 §2 (for an API-binding break) or §2 above (for an SDK-only break) applies. The changeset body is the audit trail. - A
majorchangeset implies the 90-day overlap window starts on the publish date of the new MAJOR. The release PR description carries the calendar end-date. - The Changeset "Version Packages" PR rolls accumulated
.changeset/*.mdfiles intopackages/sdk-ts/CHANGELOG.mdand bumpspackages/sdk-ts/package.json#version. Merging the Version Packages PR triggers the npm publish workflow with provenance + SBOM (Phase 16 G1).
claimful/sdk (PHP) does not use Changesets — versions are bumped manually
in packages/sdk-php/composer.json and tagged. The same MAJOR / MINOR /
PATCH mapping above governs the PHP bump. packages/sdk-php/CHANGELOG.md
mirrors the same intent capture as the TS changesets.
6. Cross-references
- ADR 0028 — API versioning + deprecation window policy
- ADR 0036 — banned lexicon (governs all SDK strings + comments)
.changeset/README.md— local workflowpackages/sdk-ts/CHANGELOG.md— TypeScript SDK release logpackages/sdk-php/CHANGELOG.md— PHP SDK release log