Skip to content

Commit 073c79f

Browse files
committed
fix: coderabbitai's findings.
1 parent e80ab80 commit 073c79f

2 files changed

Lines changed: 25 additions & 12 deletions

File tree

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
249249
**Pre-1.0 stability (current):** The project is at `0.x.y`. During this phase:
250250

251251
- **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.
253253

254254
**What constitutes a breaking change:**
255255

@@ -258,7 +258,8 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
258258
| HTTP API | Removing or renaming an endpoint; changing the JSON schema of a response in a non-additive way |
259259
| CLI (`cursor-chat-export`) | Removing or renaming a flag; changing default output structure |
260260
| 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.
262263

263264
Adding new optional fields to JSON responses, adding new CLI flags with sensible defaults, or adding new export-format sections are *not* considered breaking.
264265

docs/API_DEPRECATION.md

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,48 @@ How the HTTP API (`/api/*`), CLI flags (`cursor-chat-export`), and shared JSON r
44

55
## Pre-1.0 posture
66

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.
88

99
## Deprecation workflow
1010

1111
When an endpoint, parameter, response field, or CLI flag is scheduled for removal:
1212

1313
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.
1718

1819
## Header format
1920

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):**
2124

2225
```http
2326
Deprecation: true; sunset=2026-09-01
2427
```
2528

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:
32+
33+
```http
34+
Deprecation: Tue, 01 Sep 2026 00:00:00 GMT
35+
Sunset: Tue, 01 Sep 2026 00:00:00 GMT
36+
Link: <https://github.com/cppalliance/cppa-cursor-browser/blob/HEAD/CHANGELOG.md>; rel="deprecation"
37+
```
38+
39+
Migration notes use a separate **`Link`** header (RFC 8288), not a `link=` parameter on `Deprecation`.
2840

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.
3042

3143
## Surfaces covered
3244

3345
| Surface | Signals |
3446
|---------|---------|
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) |
3749
| CLI flag | `(deprecated)` in `--help`, changelog entry |
3850

3951
## Removal documentation

0 commit comments

Comments
 (0)