fm.freemix.track.comment

lex-publisher.freemix.fm

Documentation

A comment on a FreeMix track. Authored by the commenter's DID, stored in the commenter's PDS. Track-level only — no stem targets. May be timestamped to a waveform position or apply to the whole track. Replies carry BOTH the track ref and the parent-comment ref so a reply survives parent deletion by flattening to a top-level track comment.

main record

A comment on a FreeMix track. Authored by the commenter's DID, stored in the commenter's PDS. Track-level only — no stem targets. May be timestamped to a waveform position or apply to the whole track. Replies carry BOTH the track ref and the parent-comment ref so a reply survives parent deletion by flattening to a top-level track comment.

Record Key tid Timestamp-based ID

Properties

createdAt string datetime Required

An RFC 3339 formatted timestamp.

maxLength: 100 bytes
replyParent string at-uri Optional

OPTIONAL. AT URI of the parent comment when this is a reply. ABSENT = top-level. Depth is enforced at the API/client layer (v1 = depth-1), NOT by this lexicon — schema stays permissive so the depth cap can be raised later without a migration. On parent deletion, the write-path drops replyParent/replyParentCid and the reply flattens to a top-level comment on `track`.

maxLength: 3000 bytes
replyParentCid string cid Optional

OPTIONAL. CID of the parent comment record. Present only alongside replyParent; dropped together on flatten.

maxLength: 200 bytes
text string Required

Comment body. Protocol max; API may enforce tighter without a migration.

maxLength: 3000 bytesmaxGraphemes: 1000 graphemes
timeOffset integer Optional

OPTIONAL. Seconds from the start of the track this comment is anchored to. ABSENT = whole-track comment. Never defaulted to 0 — absence is semantically distinct from a comment at 0:00.

minimum: 0
track string at-uri Required

AT URI of the fm.freemix.track this comment is on. Required on EVERY comment, replies included — a reply references the track independently of its parent so it can flatten to top-level if the parent is deleted. Track-level only; stem targets are out of scope for v1.

maxLength: 3000 bytes
trackCid string cid Required

CID of the track record at comment time — pins which version the comment (and its timeOffset) was anchored to.

maxLength: 200 bytes
View raw schema
{
  "key": "tid",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "track",
      "trackCid",
      "text",
      "createdAt"
    ],
    "properties": {
      "text": {
        "type": "string",
        "maxLength": 3000,
        "description": "Comment body. Protocol max; API may enforce tighter without a migration.",
        "maxGraphemes": 1000
      },
      "track": {
        "type": "string",
        "format": "at-uri",
        "maxLength": 3000,
        "description": "AT URI of the fm.freemix.track this comment is on. Required on EVERY comment, replies included — a reply references the track independently of its parent so it can flatten to top-level if the parent is deleted. Track-level only; stem targets are out of scope for v1."
      },
      "trackCid": {
        "type": "string",
        "format": "cid",
        "maxLength": 200,
        "description": "CID of the track record at comment time — pins which version the comment (and its timeOffset) was anchored to."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "maxLength": 100
      },
      "timeOffset": {
        "type": "integer",
        "minimum": 0,
        "description": "OPTIONAL. Seconds from the start of the track this comment is anchored to. ABSENT = whole-track comment. Never defaulted to 0 — absence is semantically distinct from a comment at 0:00."
      },
      "replyParent": {
        "type": "string",
        "format": "at-uri",
        "maxLength": 3000,
        "description": "OPTIONAL. AT URI of the parent comment when this is a reply. ABSENT = top-level. Depth is enforced at the API/client layer (v1 = depth-1), NOT by this lexicon — schema stays permissive so the depth cap can be raised later without a migration. On parent deletion, the write-path drops replyParent/replyParentCid and the reply flattens to a top-level comment on `track`."
      },
      "replyParentCid": {
        "type": "string",
        "format": "cid",
        "maxLength": 200,
        "description": "OPTIONAL. CID of the parent comment record. Present only alongside replyParent; dropped together on flatten."
      }
    }
  },
  "description": "A comment on a FreeMix track. Authored by the commenter's DID, stored in the commenter's PDS. Track-level only — no stem targets. May be timestamped to a waveform position or apply to the whole track. Replies carry BOTH the track ref and the parent-comment ref so a reply survives parent deletion by flattening to a top-level track comment."
}

Lexicon Garden

@