Deprecation policy¶
How features get removed from TLSStress.Art without surprising customers who built workflows on top of them.
The contract¶
| Audience | Minimum notice |
|---|---|
| API endpoints (dashboard REST, K8s manifest contracts, OOBI canonical addressing, signed envelope schema) | 2 minor releases + 6 calendar months, whichever is longer |
| Config flags / env vars | 1 minor release |
| CLI flags | 1 minor release |
| MÓDULO X.Art removal (an entire module retiring) | 3 minor releases + 9 calendar months |
| Test Kind retirement | 2 minor releases |
| Documentation paths | Best-effort; redirects when feasible |
| Patent-claim-anchored surfaces (#1..#25) | Never silently — always via ADR + explicit deprecation announcement |
"Minor release" = a vX.Y.0 bump where Y increments. "Calendar
months" run from the release that first marked the feature
deprecated.
The mechanics¶
A feature goes through four phases:
┌──────────┐ ┌────────────┐ ┌──────────┐ ┌──────────┐
│ Active │ → │ Deprecated │ → │ Frozen │ → │ Removed │
└──────────┘ └────────────┘ └──────────┘ └──────────┘
│ │
│ └── No new feature work; bug fixes only
└── Marked in code + docs + CHANGELOG
| Phase | Code state | User state | Trigger to next |
|---|---|---|---|
| Active | Works normally | Use freely | An ADR or RFC marks the feature for deprecation |
| Deprecated | Works normally; emits a runtime warning + appears in Deprecated section of CHANGELOG.md; doc carries a callout |
Migrate to the replacement — listed in the deprecation notice | Notice period elapses |
| Frozen | Works normally; receives security fixes only; no new features land on it | Migration deadline approaches | Removal release ships |
| Removed | Code path deleted | Calling the removed surface returns a clear error message pointing to the migration doc | — |
What MUST appear when a feature is deprecated¶
- CHANGELOG.md entry under the
Deprecatedheading for the release where deprecation begins, naming: - The deprecated surface
- The replacement (or "removed without replacement" if applicable)
- The earliest release where removal becomes possible
- A link to the migration doc
- Code annotation wherever practical:
- Go:
// Deprecated: <reason>; remove no earlier than vX.Y.0 - TypeScript:
/** @deprecated <reason>; remove no earlier than vX.Y.0 */ - Config files: comment header
# Deprecated as of vA.B.C — remove no earlier than vX.Y.0 - Runtime warning when the deprecated surface is exercised (log line, dashboard banner, or one-shot stderr — choose what the user will actually see)
- Migration doc under
docs/migrations/(or a referenced section in the relevant operator guide) showing the before / after pattern - ADR delta if the feature anchors a patent claim or shipped ADR — supersede the prior ADR with a new one citing this policy
Removal-day checklist¶
Before the PR that removes the deprecated code lands:
- Notice period from the policy table has elapsed
- Migration doc has been published for the full notice window
- CHANGELOG.md
Removedentry drafted for the release - Tests that exercised the removed surface have been migrated or deleted
- Public-facing materials (Investor Deck KPI counts, marketing page, datasheet) that referenced the removed feature have been updated in the same release
- Search across the repo for residual references (use
grep -rE "<removed-surface>") returns empty after cleanup
Exceptions¶
Two exceptions to the notice period, both rare:
- Security-driven removal — the feature is itself the vulnerability. Notice may compress to 1 minor release + 30 days, with explicit security-advisory disclosure. ADR required.
- Patent-prosecution-driven removal — a filing requires the feature to be retired before the application proceeds. Notice may compress; the maintainer announces in CHANGELOG with a reference to the controlling ADR.
Both exceptions are documented in the release notes; neither is ever silent.
Why this matters¶
Customers building procurement-grade workflows on TLSStress.Art need to know how much migration runway they get. A 6–9 month floor is the minimum a regulated-sector ops team can fit into a change-management calendar. Anything shorter forces them to fork.
For audit / valuation purposes, the existence of this policy is itself a signal — solo projects don't write deprecation policies.
Related¶
- RFC process — propose the deprecation here first
- Release cadence — when notice windows close
- Backporting policy — security fixes on Frozen lines
- CHANGELOG.md — where the user sees the notice
- ADR catalog — supersession records
Last verified against shipping code: v3.7.0 (2026-05-12).