LAB-998: correct interop/v1 ship-status in spec, README, and feature matrix - #46
LAB-998: correct interop/v1 ship-status in spec, README, and feature matrix#4627Bslash6 wants to merge 1 commit into
Conversation
…e SDKs (LAB-998) The repo that this project calls the source of truth for cross-SDK interop still told readers interop/v1 was unimplemented. It has been released in every SDK since 2026-07-24, and the public docs site was already corrected (LAB-996 / cachekit-io/docs#24) — so the normative spec and the docs site contradicted each other, with the spec carrying the false half. Under the project's documentation gate that is a trust bug, not a stale nicety. Three surfaces corrected: - spec/interop-mode.md STATUS header: no longer "NOT yet implemented in any SDK"; states normative + shipped opt-in, with per-registry version floors. - README.md spec table: the "(specified, not yet implemented in any SDK)" parenthetical now points at the feature matrix for per-SDK floors, so the version numbers live in exactly one place. - sdk-feature-matrix.md interop row: "Merged (…, unreleased)" becomes "Released" with floors; Last updated preamble gets this change's entry. Availability is stated as FLOORS (PyPI 0.14.0+, crates.io 0.4.0+, npm 0.1.3+) rather than point-in-time snapshots. This is the lesson from LAB-663, whose seven per-registry snapshots were falsified within 25 minutes of being written when npm published 0.1.3 mid-review. A floor stays true as new versions publish; a snapshot rots on contact. Python's floor is 0.14.0, not the 0.13.0 its changelog implies: interop merged under the v0.13.0 tag, but neither 0.12.0 nor 0.13.0 was ever published to PyPI (verified against the PyPI JSON API — no release keys exist for either), so 0.14.0 is the earliest installable release containing it. Footnote 4 records this so a future reader does not "correct" the floor back to an uninstallable version from the changelog alone. Floors verified 2026-07-28 against live registries and each SDK's release notes: cachekit-py #220 in the v0.13.0 tag (first on PyPI at 0.14.0), cachekit-ts #71 in npm 0.1.3, cachekit-rs #33/#35 in crates.io 0.4.0. Deliberately NOT touched — these say "not yet implemented" and are TRUE: decisions/key-rotation.md, spec/encryption.md:346 and CHANGELOG.md:19 (key rotation, genuinely unimplemented, LAB-516), and the auto-mode non-readability statements in spec/interop-mode.md:50 and spec/wire-format.md (auto-mode is SDK-internal by design). Editing those would introduce a lie. No normative claim changed — availability wording only. No key format, AAD construction, encryption, or wire-format change, so the crypto/protocol expert-panel gate does not apply (same ruling the panel made for this class of edit on LAB-663). verify.yml's full test-vector suite was run locally and is green, as expected for a prose-only diff. Closes LAB-998 Co-authored-by: multica-agent <github@multica.ai>
Kody Review CompleteGreat news! 🎉 Keep up the excellent work! 🚀 Kody Guide: Usage and ConfigurationInteracting with Kody
Current Kody ConfigurationReview OptionsThe following review options are enabled or disabled:
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (3)
WalkthroughInterop/v1 documentation now describes opt-in support as shipped across Python, TypeScript, and Rust, with SDK release floors recorded in the feature matrix. ChangesInterop v1 status alignment
Estimated code review effort: 1 (Trivial) | ~5 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Problem
This repo is the declared source of truth for cross-SDK interop, and it was telling readers interop/v1 is unimplemented. It has been released in all three SDKs since 2026-07-24, and the public docs site was already corrected in cachekit-io/docs#24 (LAB-996) — so the normative spec and docs.cachekit.io actively contradicted each other, with the spec carrying the false half. Under the project's documentation gate that is a trust bug, not a stale nicety.
What changed
Availability wording only, in three surfaces:
spec/interop-mode.mdSTATUSnormative, NOT yet implemented in any SDKREADME.mdspec table(specified, not yet implemented in any SDK)(normative; shipped opt-in in all three SDKs — see the feature matrix for per-SDK version floors)sdk-feature-matrix.mdinterop row✅ Merged (#NNN, unreleased)×3✅ Released+ floor per SDK, new footnote ⁴sdk-feature-matrix.md'sLast updated:preamble gets this change's entry per the file's existing convention.The README points at the matrix instead of repeating version numbers, so the floors live in exactly one place and there is only one thing to update next time.
Floors, not snapshots
Every availability claim is a floor —
PyPI 0.14.0+,crates.io 0.4.0+,npm 0.1.3+— plus a pointer to the registry for current versions. A floor stays true as new versions publish.This is the lesson from LAB-663, whose seven per-registry snapshots were falsified within 25 minutes of being authored: npm published 0.1.3 while that PR sat open. LAB-996 re-fixed the docs half with floor phrasing and it has held.
One trap worth flagging: Python's floor is 0.14.0, not 0.13.0
cachekit-py's changelog puts interop (#220) under thev0.13.0tag — but neither0.12.0nor0.13.0was ever published to PyPI. Verified against the PyPI JSON API: no release keys exist for either version, so they are not merely file-less or yanked, they are absent.So
0.14.0(2026-07-22) is the earliest installable release containing interop mode. A floor of "0.13.0+" would have been a fresh lie wearing anti-drift clothing —pip install cachekit==0.13.0cannot resolve. New footnote ⁴ records this explicitly so a future reader doesn't "correct" the floor back to an uninstallable version from the changelog alone.Verification (2026-07-28, live registries + release notes)
v0.13.0cachekit-v0.1.3cachekit-rs-v0.4.0Cross-checked against
concepts/cross-language-interop.mdxondocsmain— the floors here match the ones LAB-996 published (npm 0.1.3+, crates.io 0.4.0+), so spec and docs site now agree. No claim in this diff re-litigates that page.Explicitly NOT touched
These say "not yet implemented" and are true — editing them would introduce a lie:
decisions/key-rotation.md,spec/encryption.md:346,CHANGELOG.md:19— key rotation, genuinely unimplemented (LAB-516).spec/interop-mode.md:50,spec/wire-format.md:42/:157— "no SDK reads another's auto-mode entries". Still correct; auto-mode is SDK-internal by design.I grepped the whole repo for
not (yet )?implemented|unimplemented|unreleasedrather than trusting the three line numbers in the ticket — the only in-scope hits were the three above, and the remaining hits are the true statements just listed plus the PHP column's accurate❌ Not implementedcells.Gates
Crypto/protocol expert-panel gate: does not apply. This diff changes availability wording only; no key format, AAD construction, encryption, or wire-format claim was touched. Same ruling the panel made for this exact class of edit on LAB-663.
Documentation gate: this diff is the docs pass. Surfaces updated:
spec/interop-mode.md,README.md,sdk-feature-matrix.md(incl. footnotes andLast updated:). The sibling docs-site surface was already done in LAB-996; no further doc surface claims interop is unimplemented.Checks.
verify.yml's full suite run locally and green — all Python stdlib-only verifiers, the optional-deps--require-sealpass, and both JS cross-checks (interop-crosscheck.mjs,frame-crosscheck.mjs): 33 key + 4 value + 9 error + 1 AAD + 1 encryption interop vectors, 7 encryption vectors, 6 wire-format pairs, 7 python-frame vectors, 5 file-backend vectors. Unchanged behaviour expected — prose-only diff. (prek installis a no-op here: this repo ships no.pre-commit-config.yaml.)Closes LAB-998
Summary by CodeRabbit