Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ repos:
files: ^((packages|crates)/[^/]+/)?README[^/]*$|^docs/
types: [text]
stages: [pre-commit]
- id: no-retired-names
name: No retired product names or wrong package names in docs
# The hosted service is "CacheKit Cloud" in prose; `CachekitIO` is only a code identifier.
# Naming rules: https://docs.cachekit.io/contributing/#names
language: pygrep
entry: '(?i:\bCachekitIO[ -](?:Cloud|SaaS|backend|service|server|API)s?\b)|\bSaaS\b|(?i:(?<![\w./-])cachekit\.io (?:backend|service|cloud|server|platform|API|client|account|tenant|dashboard|plan|tier)s?\b)|\bCacheKit ?IO\b|\bCachekit\.IO\b|\bCacheKit\.io\b|\b(?!CacheKit Cloud\b)[Cc]ache[Kk]it [Cc]loud\b|(?<![\w./@`-])Cachekit(?![\w.-])|(?i:Production-ready Redis caching)|(?i:\bno backend required\b)|\bcargo add cachekit(?![\w-])|\b(?:npm (?:i|install)|pnpm (?:add|i|install)|yarn add|bun add) +cachekit(?![\w-])|\bpip install \W?cachekit-py\b'
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
files: ^((packages|crates)/[^/]+/)?README[^/]*$|^docs/|^llms\.txt$
types: [text]
stages: [pre-commit]
- id: no-internal-references-commit-msg
name: No internal references in commit message
# Same patterns. git hands this hook the raw message file: "# " comment lines, the diff
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Any SDK implementation **MUST** pass the canonical test vectors to be considered
│ │ (LZ4 block + xxHash3-64 + MsgPack)│
│ Layer 2: Serialization│ MessagePack (binary, typed) │
│ Layer 1: Key Gen │ Blake2b-256 (deterministic) │
│ Layer 0: Transport │ SaaS REST API / Redis │
│ Layer 0: Transport │ CacheKit Cloud API / Redis │
└────────────────────────┴────────────────────────────────────┘
```

Expand All @@ -67,7 +67,7 @@ layer's own store/retrieve flows are specified in
| [spec/cache-key-format.md](spec/cache-key-format.md) | Cache key generation algorithm — Blake2b-256, argument normalization, cross-SDK key strategy |
| [spec/wire-format.md](spec/wire-format.md) | ByteStorage envelope — LZ4 block compression, xxHash3-64 integrity, decompression bomb protection |
| [spec/encryption.md](spec/encryption.md) | AES-256-GCM encryption, HKDF-SHA256 key derivation, AAD v0x03, counter-based nonces, key rotation |
| [spec/saas-api.md](spec/saas-api.md) | REST API endpoints, cache-key path encoding, binary wire protocol, error codes, metrics headers |
| [`spec/saas-api.md`](spec/saas-api.md) | CacheKit Cloud REST API endpoints, cache-key path encoding, binary wire protocol, error codes, metrics headers |
| [spec/interop-mode.md](spec/interop-mode.md) | Cross-SDK cache sharing — language-neutral key format, canonical argument normalization *(normative; shipped opt-in in all three SDKs — see the [feature matrix](sdk-feature-matrix.md#compliance-status) for per-SDK version floors)* |
| [spec/interop-v2.md](spec/interop-v2.md) | Interop v2 compressed-values profile — opt-in LZ4-block + AES-256-GCM cross-SDK values *(DRAFT; no SDK implements it yet)* |
| [spec/file-backend-format.md](spec/file-backend-format.md) | Shared local File backend filename, header, expiry, and fail-closed flag negotiation |
Expand Down Expand Up @@ -96,7 +96,7 @@ Where your SDK uses the envelope for its own auto-mode storage, wrap serialized

Client-side AES-256-GCM with HKDF-SHA256 key derivation. The backend stores opaque ciphertext. AAD v0x03 binds ciphertext to its intended key (critical for security).

**4. SaaS API** — [spec/saas-api.md](spec/saas-api.md)
**4. CacheKit Cloud API** — [`spec/saas-api.md`](spec/saas-api.md)

PUT/GET/DELETE binary blobs at `/v1/cache/{key}`. The API is format-agnostic — it stores whatever bytes you send.

Expand Down Expand Up @@ -129,7 +129,7 @@ An SDK is protocol-compliant when:
1. [Interop-mode](spec/interop-mode.md) key generation produces identical keys for identical inputs across all languages (auto-mode keys embed language-specific function identity and are not cross-SDK by design)
2. Interop-mode values encode and decode per the canonical vectors; where the SDK implements the ByteStorage envelope, it deserializes any spec-conformant envelope
3. Encrypted interop-mode payloads can be decrypted by any SDK with the same master key and tenant ID
4. SaaS API integration follows the documented endpoint contracts, including [cache-key path encoding](spec/saas-api.md#cache-key-path-encoding) (`test-vectors/path-encoding.json`)
4. CacheKit Cloud API integration follows the documented endpoint contracts, including [cache-key path encoding](spec/saas-api.md#cache-key-path-encoding) (`test-vectors/path-encoding.json`)

Test vectors are published in [`test-vectors/`](test-vectors/) as JSON files.

Expand All @@ -154,7 +154,7 @@ requirements each SDK's vendored vectors cover and which no vector reaches yet.

<div align="center">

[Protocol Repo](https://github.com/cachekit-io/protocol) · [SDK Feature Matrix](sdk-feature-matrix.md) · [Cache Key Format](spec/cache-key-format.md) · [Wire Format](spec/wire-format.md) · [Encryption](spec/encryption.md) · [SaaS API](spec/saas-api.md)
[Protocol Repo](https://github.com/cachekit-io/protocol) · [SDK Feature Matrix](sdk-feature-matrix.md) · [Cache Key Format](spec/cache-key-format.md) · [Wire Format](spec/wire-format.md) · [Encryption](spec/encryption.md) · [CacheKit Cloud API](spec/saas-api.md)

</div>

Expand Down
2 changes: 1 addition & 1 deletion conformance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ and its `retired` ids. Each requirement entry has these fields:
| Field | Meaning |
| :--- | :--- |
| `section` | The heading the id sits under. `check` compares it with the spec. |
| `binds` | Who must comply: `sdk`, `server` (the CachekitIO service) or `caller` (application code that uses an SDK, or its deployment). |
| `binds` | Who must comply: `sdk`, `server` (CacheKit Cloud) or `caller` (application code that uses an SDK, or its deployment). |
| `sdks` | Optional. The SDKs a requirement binds when it binds only some of them, such as `["cachekit-ts"]`: one that is language-specific, or conditional on a format or feature only those SDKs implement. Omitted, it binds every SDK. |
| `vectors` | Vectors that exercise the requirement: `<fixture>.json:<name>`, or `<fixture>.json` for every vector in the fixture. A `path-encoding.json` vector is named by its `key`. A name that holds a control character is written with JSON's escapes (`"path-encoding.json:.\t."`, and DEL as `\u007f`, though JSON allows it raw), and `coverage.md` shows a name as its JSON string literal when it is not all printable, is not in Unicode normal form C, starts with a quote, or starts or ends with a space. |
| `tests` | Tests in this repository's tools that exercise it, as `tools/<file>:<name>`. `<name>` must be a function the tool defines: a `def` in a `.py` tool (found with Python's `ast`), or a `function` declared at the start of a line in a `.mjs` tool, outside comments, strings, template literals and regular expressions. These run only against the reference implementations. |
Expand Down
Loading