# tech.lenooby09.kvcs.tag

> Published by [lenooby09.tech](https://lexicon.garden/identity/did:plc:xocoka6dmx74ciqskczoh6ci)

✓ This is the authoritative definition for this NSID.

## 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).

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:xocoka6dmx74ciqskczoh6ci/tech.lenooby09.kvcs.tag)
- [Documentation](https://lexicon.garden/lexicon/did:plc:xocoka6dmx74ciqskczoh6ci/tech.lenooby09.kvcs.tag/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:xocoka6dmx74ciqskczoh6ci/tech.lenooby09.kvcs.tag/examples)

## Definitions

### `tech.lenooby09.kvcs.tag`

**Type**: `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.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `jws` | `string` | Yes | Detached compact JWS over `tag`. 8192 chars covers Ed25519 / ES256 / ES256K compact-JWS sizes with a comfortable margin. |
| `tag` | `string` | Yes | 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` | `string` | Yes | 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` | `string` | Yes | 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` | `string` | Yes | Hex multihash of the patch this tag pins. 128 chars covers the longest hashes in current use (BLAKE3, SHA-512, etc.). |
| `taggerDid` | `string` | Yes | 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. |

## Raw Schema

```json
{
  "id": "tech.lenooby09.kvcs.tag",
  "defs": {
    "main": {
      "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."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "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)."
}
```
