Skip to content

Commit d6e7bb1

Browse files
committed
feat: add deprecation policy doc
1 parent 46bda64 commit d6e7bb1

3 files changed

Lines changed: 66 additions & 0 deletions

File tree

README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,30 @@ The desktop app uses [pywebview](https://pywebview.flowrl.com/) to render the Fl
240240
- **Frontend:** Vanilla HTML/CSS/JS (no npm, no build step)
241241
- **PDF:** fpdf2
242242

243+
## Versioning
244+
245+
This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html) (`MAJOR.MINOR.PATCH`).
246+
247+
**Pre-1.0 stability (current):** The project is at `0.x.y`. During this phase:
248+
249+
- **Minor version bumps (`0.x``0.x+1`)** may include breaking changes to the HTTP API, CLI flags, or exported file formats. Consumers of the `/api/*` endpoints or the `cursor-chat-export` CLI should review the changelog before upgrading.
250+
- **Patch version bumps (`0.x.y``0.x.y+1`)** are backward-compatible bug fixes only.
251+
252+
**What constitutes a breaking change:**
253+
254+
| Surface | Breaking examples |
255+
|---|---|
256+
| HTTP API | Removing or renaming an endpoint; changing the JSON schema of a response in a non-additive way |
257+
| CLI (`cursor-chat-export`) | Removing or renaming a flag; changing default output structure |
258+
| Export formats | Removing YAML frontmatter fields; changing the zip directory layout |
259+
| Python package | Removing a public symbol from an importable module |
260+
261+
Adding new optional fields to JSON responses, adding new CLI flags with sensible defaults, or adding new export-format sections are *not* considered breaking.
262+
263+
A complete history of changes is maintained in **[CHANGELOG.md](CHANGELOG.md)** following the [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.
264+
265+
When an API surface is scheduled for removal, follow the process in **[docs/API_DEPRECATION.md](docs/API_DEPRECATION.md)** (response headers, changelog entries, minimum notice period).
266+
243267
## License
244268

245269
This project is licensed under the [Boost Software License 1.0](https://www.boost.org/LICENSE_1_0.txt).

docs/API_DEPRECATION.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# API Deprecation Policy
2+
3+
How the HTTP API (`/api/*`), CLI flags (`cursor-chat-export`), and shared JSON response fields are deprecated and removed. Complements the [Versioning](../README.md#versioning) section and [CHANGELOG.md](../CHANGELOG.md).
4+
5+
## Pre-1.0 posture
6+
7+
While the project is at `0.x.y`, **breaking changes may land in any minor release** without a prior deprecation cycle. Deprecations are still recorded in the changelog when practicable, but there is no guarantee of advance notice before removal. After `1.0.0`, the workflow below applies in full.
8+
9+
## Deprecation workflow
10+
11+
When an endpoint, parameter, response field, or CLI flag is scheduled for removal:
12+
13+
1. **CHANGELOG** — Add an entry under `### Deprecated` naming the surface, its replacement (if any), and the planned removal version.
14+
2. **Response headers** — Deprecated HTTP endpoints and parameters emit a `Deprecation` header on every affected response (see [Header format](#header-format)).
15+
3. **Server log** — Route handlers log `logging.warning()` with the deprecated symbol and recommended replacement.
16+
4. **Removal** — Remove no earlier than **one minor version** after the deprecation was announced (e.g. deprecated in `1.2.0`, removable from `1.4.0`). Document under `### Removed` in the changelog.
17+
18+
## Header format
19+
20+
Deprecated HTTP routes and query parameters set:
21+
22+
```http
23+
Deprecation: true; sunset=2026-09-01
24+
```
25+
26+
- `sunset` — ISO 8601 calendar date (UTC) when removal is scheduled.
27+
- Optionally add `link="<url>"` pointing to the changelog entry or migration notes.
28+
29+
Clients should treat any `Deprecation: true` response as a signal to migrate before the sunset date.
30+
31+
## Surfaces covered
32+
33+
| Surface | Signals |
34+
|---------|---------|
35+
| HTTP endpoint or parameter | `Deprecation` header, changelog entry, server log |
36+
| JSON response field | Changelog entry; field remains until removal |
37+
| CLI flag | `(deprecated)` in `--help`, changelog entry |
38+
39+
## Removal documentation
40+
41+
Removals go under `### Removed` in [CHANGELOG.md](../CHANGELOG.md): what was removed, which version deprecated it, and the migration path.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ include = [
7979
"launcher.py",
8080
"requirements.txt",
8181
"README.md",
82+
"docs/",
8283
"DEPLOYMENT.md",
8384
"LICENSE",
8485
"cursor-browser.spec",

0 commit comments

Comments
 (0)