RELEASE POLICY · COMPLETE
Compatibility and deprecations
Know which public surfaces are stable, how long deprecated behavior remains available, which replacement is canonical, and which upgrade transform owns the change.
The policy is implemented as data. Compiler results, upgrade tooling, documentation, and AI agents read the same stable deprecation IDs.
SEMANTIC VERSIONS
Promises grow with stability
The feature milestone and the stable release label remain separate decisions.
- 0.x
Prerelease: incompatible changes still require documented deprecation when a compatibility path exists.
- 1.x
Stable: documented APIs, class syntax, directives, CLI flags, schemas, and official adapter configuration remain compatible within the major.
- +
Additive: utilities, variants, optional tools, and manifest fields may ship in minor releases.
- !
Removal: deprecated stable behavior is removed only in an eligible major after its promised window.
Read the machine contract
import {
createCompatibilityManifest,
deprecationRegistry,
} from "@coordiation/css";
console.log(createCompatibilityManifest({ prefix: "co-" }));The manifest includes framework version, stable-policy start, runtime support, guarantees, prefix-aware replacement syntax, and every registered deprecation.
Inspect compiler diagnostics
const result = compileCandidates(["co-flex", "hover:co--mt-4"]);
result.deprecations
// [{
// code: "deprecated-candidate",
// replacement: "hover:-co-mt-4"
// }]Deprecated syntax remains accepted during its declared window. Diagnostics are returned as data and never written unexpectedly to application stdout.
Follow the full lifecycle
- Register a stable deprecation ID, introduction, earliest removal, replacement, and migration owner.
- Keep old behavior working and return a machine-readable warning.
- Ship a safe codemod when migration is mechanical.
- Document the release and migration guidance.
- Remove only in an eligible major release.
RELEASE GATE
45/45 is necessary, not sufficient
Feature implementation is complete, while the stable release still has operational gates.
- Every public API, test, integration fixture, manifest, and guide must agree.
- Supported-platform native builds and performance checks must pass for the release commit.
- Native artifacts must be signed and attached through the release process.
- Every breaking change needs migration guidance.
- No prerelease version may be described as stable solely because the checklist reached 100%.
