You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -249,7 +249,7 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
249
249
**Pre-1.0 stability (current):** The project is at `0.x.y`. During this phase:
250
250
251
251
-**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.
252
-
-**Patch version bumps (`0.x.y` → `0.x.y+1`)** are backward-compatible bug fixes only.
252
+
-**Patch version bumps (`0.x.y` → `0.x.y+1`)** are backward-compatible bug fixes only. Critical security fixes may break compatibility at any version with appropriate changelog notation.
253
253
254
254
**What constitutes a breaking change:**
255
255
@@ -258,7 +258,8 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
258
258
| HTTP API | Removing or renaming an endpoint; changing the JSON schema of a response in a non-additive way |
259
259
| CLI (`cursor-chat-export`) | Removing or renaming a flag; changing default output structure |
260
260
| Export formats | Removing YAML frontmatter fields; changing the zip directory layout |
261
-
| Python package | Removing a public symbol from an importable module |
261
+
262
+
Internal Python modules are not a semver-governed library API for external importers.
262
263
263
264
Adding new optional fields to JSON responses, adding new CLI flags with sensible defaults, or adding new export-format sections are *not* considered breaking.
Copy file name to clipboardExpand all lines: docs/API_DEPRECATION.md
+22-10Lines changed: 22 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,36 +4,48 @@ How the HTTP API (`/api/*`), CLI flags (`cursor-chat-export`), and shared JSON r
4
4
5
5
## Pre-1.0 posture
6
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.
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. Pre-1.0, workflow steps 2–4 (CLI help text, response headers, server logs) are **encouraged but optional**; step 1 (changelog) applies when practicable. After `1.0.0`, the workflow below applies in full.
8
8
9
9
## Deprecation workflow
10
10
11
11
When an endpoint, parameter, response field, or CLI flag is scheduled for removal:
12
12
13
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)). When the first endpoint is deprecated, implement this via a small shared Flask helper so handlers stay consistent with the policy.
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.3.0`). Document under `### Removed` in the changelog.
14
+
2.**CLI help** (flags only) — Add `(deprecated, use <replacement>)` to the flag's argparse help string.
15
+
3.**Response headers** — Deprecated HTTP endpoints and parameters emit deprecation headers on every affected response (see [Header format](#header-format)). When the first endpoint is deprecated, implement via a small shared Flask helper so handlers stay consistent with the policy.
16
+
4.**Server log** — Route handlers log `logging.warning()` with the deprecated symbol and recommended replacement.
17
+
5.**Removal** — Remove no earlier than **one minor version** after the deprecation was announced (e.g. deprecated in `1.2.0`, removable from `1.3.0`). Document under `### Removed` in the changelog.
17
18
18
19
## Header format
19
20
20
-
Deprecated HTTP routes and query parameters set:
21
+
This project currently documents a **simplified custom format** for pre-1.0. It does not match [IETF `Deprecation`](https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-deprecation-header) (HTTP-date value, not `true`) or [RFC 8594](https://www.rfc-editor.org/rfc/rfc8594) (separate `Sunset` and `Link` headers). Adopt the standards-aligned form below when the shared Flask helper lands or at `1.0.0`.
22
+
23
+
**Current (custom, pre-1.0):**
21
24
22
25
```http
23
26
Deprecation: true; sunset=2026-09-01
24
27
```
25
28
26
-
-`sunset` — ISO 8601 calendar date (UTC) when removal is scheduled.
27
-
- Optionally add `link="<url>"` pointing to the changelog entry or migration notes.
29
+
-`sunset=` — ISO 8601 calendar date (UTC) when removal is scheduled, embedded in the `Deprecation` value.
30
+
31
+
**Target (standards-aligned)** — emit as **separate headers** from Flask:
Migration notes use a separate **`Link`** header (RFC 8288), not a `link=` parameter on `Deprecation`.
28
40
29
-
Clients should treat any `Deprecation: true` response as a signal to migrate before the sunset date.
41
+
Clients should treat any deprecation signal as a prompt to migrate before the sunset date.
30
42
31
43
## Surfaces covered
32
44
33
45
| Surface | Signals |
34
46
|---------|---------|
35
-
| HTTP endpoint or parameter |`Deprecation` header, changelog entry, server log |
36
-
| JSON response field | Changelog entry; field remains until removal |
47
+
| HTTP endpoint or parameter | Deprecation headers, changelog entry, server log |
48
+
| JSON response field | Changelog entry; field remains until removal (no in-band signal today; future: `X-Deprecated-Fields` header or `_deprecated` envelope key) |
37
49
| CLI flag |`(deprecated)` in `--help`, changelog entry |
0 commit comments