Nexlem Stability Contract
This document classifies every consumer-facing surface of Nexlem into one of three tiers and
states the deprecation policy for each tier. Consumers — both scripts automating against
nexlem-sdk query and humans using /nexlem skill commands — can use this document to
understand what they can depend on and what may change.
Scope: This contract covers the v2.2.0 surface. Surfaces not listed here carry no stability promise until explicitly classified in a future release.
Tier Definitions
| Tier | Meaning |
|---|---|
| stable | The interface is frozen. Removing or breaking it requires a deprecation notice in the announcing release and removal no sooner than the next minor version (vN to vN+1). |
| evolving | The interface may change between releases. Changes are documented in CHANGELOG.md. No formal deprecation window is required. |
| experimental | The interface may change or be removed at any time without notice. Not suitable for automation. |
SDK Queries (Machine/Wire Contract)
The nexlem-sdk query namespace is a machine/wire contract: scripts and automation pipelines
depend on the JSON output shapes. The --json output shapes for stable-tier handlers are
frozen by tests/unit/stable-sdk-shapes.test.ts — a failing test in that file means a
breaking shape change has occurred.
| Namespace | Tier | Since |
|---|---|---|
nexlem-sdk query version | stable | v2.2.0 |
nexlem-sdk query state.healthy | stable | v2.2.0 |
nexlem-sdk query setup.check | stable | v2.2.0 |
nexlem-sdk query skill.inventory | evolving | v2.2.0 |
nexlem-sdk query wizard.validate | evolving | v2.2.0 |
Stable JSON output shapes (keys and types are frozen; values may vary):
nexlem-sdk query version→{ "version": string }nexlem-sdk query state.healthy→{ "ok": boolean, "reason"?: string, "checks": Array<{ "name": string, "status": string, "detail"?: string }> }nexlem-sdk query setup.check→{ "ok": boolean, "reason"?: string, "checks": Array<{ "name": string, "status": string, "detail"?: string }> }
The golden-file tests that enforce these shapes live at:
tests/unit/stable-sdk-shapes.test.ts
Any change to a stable handler's output shape that breaks those tests is a breaking change and must follow the stable deprecation policy below.
Skills Surface (Interactive User Commands)
The /nexlem skill commands are an interactive user surface: a human invokes them from Claude
Code. The skills surface is classified separately from the SDK query surface because its
consumers are humans, not scripts, and its guarantees are different.
All /nexlem skills are evolving as of v2.2.0. No skill is promoted to stable in the
initial public release — the command surface has iterated significantly across milestones and
freezing names now would be premature. Promotion to stable will be announced in a future
release with a corresponding CHANGELOG entry.
Only top-level /nexlem commands are listed below — these match the 18 commands in the
auto-generated docs/SKILLS.md. Flow files (e.g. campaign-create, calendar-planning) are
internal sub-skills loaded on demand by a router skill; they are not directly invocable as
/nexlem commands and so are not part of the skills surface contract.
| Skill Command | Tier | Since |
|---|---|---|
/nexlem backup | evolving | v2.2.0 |
/nexlem calendar | evolving | v2.2.0 |
/nexlem campaign | evolving | v2.2.0 |
/nexlem content | evolving | v2.2.0 |
/nexlem help | evolving | v2.2.0 |
/nexlem init | evolving | v2.2.0 |
/nexlem keywords | evolving | v2.2.0 |
/nexlem next | evolving | v2.2.0 |
/nexlem pipeline | evolving | v2.2.0 |
/nexlem reconfigure | evolving | v2.2.0 |
/nexlem run | evolving | v2.2.0 |
/nexlem setup | evolving | v2.2.0 |
/nexlem silo | evolving | v2.2.0 |
/nexlem site | evolving | v2.2.0 |
/nexlem status | evolving | v2.2.0 |
/nexlem uninstall | evolving | v2.2.0 |
/nexlem update | evolving | v2.2.0 |
/nexlem week | evolving | v2.2.0 |
Deprecation Policy
The deprecation policy is tied directly to the tier of the interface being changed. There is no universal deprecation timeline — the tier is the contract.
Stable tier
Breaking or removing a stable interface requires:
- A deprecation notice published in the release that announces the intended removal. The notice must describe what is changing, why, and what the replacement (if any) is.
- Removal no sooner than the next minor version (vN.x to vN+1.0). For example, a deprecation announced in v2.2.0 may not be removed until v2.3.0 at the earliest.
A "breaking change" to a stable SDK query means: removing a field, renaming a field, changing a field's type, or changing the query's exit codes in a way that breaks existing scripts. Adding new optional fields to a stable query response is NOT a breaking change.
Evolving tier
Interfaces in the evolving tier may change between releases. Changes must be documented in
CHANGELOG.md with a clear description of what changed. No formal deprecation window is
required, but best-effort advance notice is appreciated when feasible.
Experimental tier
Interfaces in the experimental tier may change or be removed at any time without notice or CHANGELOG entry. Do not build automation against experimental interfaces.
Related Documents
tests/unit/stable-sdk-shapes.test.ts— machine-checked contract for stable SDK query shapesdocs/SDK_REFERENCE.md— full documentation for allnexlem-sdk queryhandlersdocs/RELEASING.md— maintainer release process (cross-reference; deprecation policy lives here, not there)CHANGELOG.md— per-release record of changes to evolving interfaces