tech.lenooby09.kvcs.tag

lenooby09.tech

Schema Diff

+12 -6

From

CID
bafyreifja6est45...
Indexed At
2026-05-01 19:53 UTC
View this version

To

CID
bafyreifwgurbizy...
Indexed At
2026-05-05 13:43 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@