tech.lenooby09.kvcs.tag
Schema Diff
+12 -6
Compatibility Analysis
Breaking Changes Detected
6 breaking changes, 0 non-breaking changes.
Breaking Changes (6)
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.jws", sort: "maxLength", value: "8192" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.tag", sort: "maxLength", value: "16384" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.name", sort: "maxLength", value: "256" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.patchId", sort: "maxLength", value: "128" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.digest", sort: "maxLength", value: "128" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.taggerDid", sort: "maxLength", value: "2048" }
Migration Guidance
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.name", sort: "maxLength", value: "256" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.digest", sort: "maxLength", value: "128" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.jws", sort: "maxLength", value: "8192" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.taggerDid", sort: "maxLength", value: "2048" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.tag", sort: "maxLength", value: "16384" }
- ConstraintAdded ConstraintAdded { vertex_id: "tech.lenooby09.kvcs.tag:body.patchId", sort: "maxLength", value: "128" }
1
1
{
2
2
"id": "tech.lenooby09.kvcs.tag",
3
3
"defs": {
4
4
"main": {
5
5
"key": "any",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"name",
11
11
"digest",
12
12
"taggerDid",
13
13
"patchId",
14
14
"tag",
15
15
"jws"
16
16
],
17
17
"properties": {
18
18
"jws": {
19
19
"type": "string",
20
-
"description": "Detached compact JWS over `tag`."
20
+
"maxLength": 8192,
21
+
"description": "Detached compact JWS over `tag`. 8192 chars covers Ed25519 / ES256 / ES256K compact-JWS sizes with a comfortable margin."
21
22
},
22
23
"tag": {
23
24
"type": "string",
24
-
"description": "Canonical JSON of the Tag payload, bytewise identical to the JWS input."
25
+
"maxLength": 16384,
26
+
"description": "Canonical JSON of the Tag payload, bytewise identical to the JWS input. 16 KiB is well under goat's 20 KiB `large-string` lint threshold while still being generous for the small structured payloads kvcs emits today; future fields (e.g. signed annotations) still fit comfortably."
25
27
},
26
28
"name": {
27
29
"type": "string",
28
-
"description": "Human-readable tag label (e.g. \"v0.1.0\")."
30
+
"maxLength": 256,
31
+
"description": "Human-readable tag label (e.g. \"v0.1.0\"). Capped at 256 chars — kvcs tag labels are short identifiers similar to git tag names."
29
32
},
30
33
"digest": {
31
34
"type": "string",
32
-
"description": "Lower-case hex BLAKE3 multihash of the canonical-JSON tag payload — equals the record's rkey."
35
+
"maxLength": 128,
36
+
"description": "Lower-case hex BLAKE3 multihash of the canonical-JSON tag payload — equals the record's rkey. 128 chars covers the longest hashes in current use."
33
37
},
34
38
"patchId": {
35
39
"type": "string",
36
-
"description": "Hex multihash of the patch this tag pins."
40
+
"maxLength": 128,
41
+
"description": "Hex multihash of the patch this tag pins. 128 chars covers the longest hashes in current use (BLAKE3, SHA-512, etc.)."
37
42
},
38
43
"taggerDid": {
39
44
"type": "string",
40
-
"description": "DID of the signer, mirrored at the top level so listRecords summaries don't need to parse `tag`."
45
+
"maxLength": 2048,
46
+
"description": "DID of the signer, mirrored at the top level so listRecords summaries don't need to parse `tag`. Capped at 2048 chars to accommodate did:jwk values whose method-specific id embeds a base64url-encoded JWK."
41
47
}
42
48
}
43
49
},
44
50
"description": "A signed kvcs tag record. Pins a patch by its hex multihash and is itself addressed by the canonical-JSON digest of its tag payload, mirrored on disk as a SignedTag."
45
51
}
46
52
},
47
53
"$type": "com.atproto.lexicon.schema",
48
54
"lexicon": 1,
49
55
"description": "A signed kvcs tag, addressable on the tagger's atproto PDS. The rkey is the canonical-JSON digest of the tag payload (lower-case hex BLAKE3 multihash)."
50
56
}