From
bafyreibxgvrg2ae2nelaxszeo6jekjn7v7e3ts5hhmbfimdyfangmqyu3m
indexed 2026-05-01 19:53 UTC
View this version
To
bafyreievoj6p4vxo3ksu4mhymub5jcnf4orwy23chrrtdgkj3hwyqpordu
indexed 2026-05-05 13:43 UTC
View this version
Compatibility
breaking 3 breaking changes, 0 non-breaking changes.
Breaking changes (3)
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.patch:body.patchCbor", sort: "maxLength", value: "20480" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.patch:body.jws", sort: "maxLength", value: "8192" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.patch:body.patchId", sort: "maxLength", value: "128" }
Migration guidance
Constraint changes
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.patch:body.jws", sort: "maxLength", value: "8192" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.patch:body.patchId", sort: "maxLength", value: "128" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.patch:body.patchCbor", sort: "maxLength", value: "20480" }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "A signed kvcs patch envelope record. Carries the canonical CBOR of the patch and its detached compact JWS, indexed by the patch's hex multihash id.",66
"key": "any",77
"record": {88
"properties": {99
"jws": {10
"description": "Detached compact JWS over patchCbor, identical to the local SignedPatch.jws field.",10
"description": "Detached compact JWS over patchCbor, identical to the local SignedPatch.jws field. 8192 chars covers Ed25519 / ES256 / ES256K compact-JWS sizes with a comfortable margin.",11
"maxLength": 8192,1112
"type": "string"1213
},1314
"patchCbor": {14
"description": "Base64url-encoded canonical CBOR of the signed patch.",15
"description": "Base64url-encoded canonical CBOR of the signed patch. Capped at 20 KiB (20480 chars) — the largest a Lexicon string field can be without triggering goat's `large-string` lint, which recommends using blob refs for anything bigger. Patches whose base64 form exceeds this cap should be split or migrated to a blob-based record schema; in practice, atproto PDSes already enforce a tight per-record size limit well below 1 MiB.",16
"maxLength": 20480,1517
"type": "string"1618
},1719
"patchId": {18
"description": "Lower-case hex multihash of the canonical CBOR — matches kvcs's PatchId.",20
"description": "Lower-case hex multihash of the canonical CBOR — matches kvcs's PatchId. 128 chars covers the longest hashes in current use (BLAKE3, SHA-512, etc.).",21
"maxLength": 128,1922
"type": "string"2023
}2124
},2225
"required": [2326
"patchId",2427
"patchCbor",2528
"jws"2629
],2730
"type": "object"2831
},2932
"type": "record"3033
}3134
},3235
"description": "A signed kvcs patch envelope, addressable on the author's atproto PDS. The rkey is the patch id in hex.",3336
"id": "tech.lenooby09.kvcs.patch",3437
"lexicon": 13538
}