{
"id": "at.atjam.round",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"jam",
"assignment",
"acceptedSubmissionTypes",
"milestones",
"createdAt"
],
"properties": {
"jam": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong-ref to the parent at.atjam.jam record."
},
"name": {
"type": "string",
"maxLength": 640,
"description": "Human label for this round (e.g. 'Round 26', 'December 2025'). Optional.",
"maxGraphemes": 64
},
"subject": {
"type": "unknown",
"description": "Optional structured subject for the round. Records embedded here must include a $type discriminator. Example: a site.eptss.song record for an EPTSS round."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"assignment": {
"type": "string",
"maxLength": 30000,
"description": "The prompt or brief participants are working against.",
"maxGraphemes": 3000
},
"milestones": {
"type": "array",
"items": {
"ref": "#milestone",
"type": "ref"
},
"maxLength": 16,
"minLength": 1,
"description": "Dated milestones for this round. At minimum should include a submission deadline. State is derived by comparing now() to these dates."
},
"closingEvent": {
"type": "unknown",
"description": "Optional structured closing event (e.g. a listening party, demo day). Records embedded here must include a $type discriminator."
},
"acceptedSubmissionTypes": {
"type": "array",
"items": {
"type": "string",
"format": "nsid"
},
"maxLength": 32,
"minLength": 1,
"description": "NSIDs of record types that can be submitted to this round (e.g. ['fm.plyr.track'])."
}
}
},
"description": "Declares a round under a parent jam."
},
"milestone": {
"type": "object",
"required": [
"label",
"date"
],
"properties": {
"date": {
"type": "string",
"format": "datetime"
},
"label": {
"type": "string",
"maxLength": 640,
"description": "Short label. Known values get special UI treatment but unknown labels are accepted.",
"knownValues": [
"signup-deadline",
"submission-deadline",
"closing-event",
"results"
],
"maxGraphemes": 64
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A single instance of a jam: an assignment with a deadline that participants sign up for and submit to. State (open / in-progress / closed) is derived from milestones, not stored as an enum."
}