tech.lenooby09.kvcs.tag

lenooby09.tech

Documentation

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.

main record

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.

Record Key any Any valid record key

Properties

digest string Required

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.

maxLength: 128 bytes
jws string Required

Detached compact JWS over `tag`. 8192 chars covers Ed25519 / ES256 / ES256K compact-JWS sizes with a comfortable margin.

maxLength: 8192 bytes
name string Required

Human-readable tag label (e.g. "v0.1.0"). Capped at 256 chars — kvcs tag labels are short identifiers similar to git tag names.

maxLength: 256 bytes
patchId string Required

Hex multihash of the patch this tag pins. 128 chars covers the longest hashes in current use (BLAKE3, SHA-512, etc.).

maxLength: 128 bytes
tag string Required

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.

maxLength: 16384 bytes
taggerDid string Required

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.

maxLength: 2048 bytes
View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "name",
      "digest",
      "taggerDid",
      "patchId",
      "tag",
      "jws"
    ],
    "properties": {
      "jws": {
        "type": "string",
        "maxLength": 8192,
        "description": "Detached compact JWS over `tag`. 8192 chars covers Ed25519 / ES256 / ES256K compact-JWS sizes with a comfortable margin."
      },
      "tag": {
        "type": "string",
        "maxLength": 16384,
        "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."
      },
      "name": {
        "type": "string",
        "maxLength": 256,
        "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."
      },
      "digest": {
        "type": "string",
        "maxLength": 128,
        "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."
      },
      "patchId": {
        "type": "string",
        "maxLength": 128,
        "description": "Hex multihash of the patch this tag pins. 128 chars covers the longest hashes in current use (BLAKE3, SHA-512, etc.)."
      },
      "taggerDid": {
        "type": "string",
        "maxLength": 2048,
        "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."
      }
    }
  },
  "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."
}

Lexicon Garden

@