At this level
at.atjam · 6- at.atjam.invitation record An invitation to participate in a round, written by an inviter on their own PDS. The inviter's DID is implicit (the record creator). Required for participation in rounds where round.joinMode is 'hosted' (only the jam organizer can invite) or 'network' (the organizer or any current participant that meets networkGate can invite). Consumers MUST validate that the creator DID is a valid inviter for the referenced round before treating an invitation — and the signup it authorizes — as authoritative.
- at.atjam.jam record A recurring (or one-shot) creative challenge that contains rounds. Identity-bearing container: 'EPTSS-the-project' is one jam; a one-shot game jam is also a jam with a single round.
- at.atjam.playlist record An ordered list of records, authored by the repo owner. Deliberately knows nothing about music — or about any project type, which is why it lives in atjam: items are strongRefs to records of any collection, so one list can hold owned audio, an external song reference, and a record from an app that did not exist when this was written, with no schema change. A reader that does not recognise an item's collection renders the URI and moves on — that is the property that makes this infrastructure rath
- at.atjam.round record 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.
- at.atjam.signup record A declaration of intent to participate in a specific round. The participant's DID is implicit (the record creator). When the round's joinMode is 'hosted' or 'network', a signup is only valid for readers when it strong-refs an at.atjam.invitation written by a valid inviter. Writers SHOULD key a signup by a hash of the round's at-uri (the first 32 hex chars of its SHA-256) and write it with putRecord, so a person has at most one signup per round; readers MUST still tolerate several signups from on
- at.atjam.submission record A participant's submission to a round. atjam does not host the deliverable; it points at it. The strong way is `payload` — a strong-ref to a record on whichever ATProto app owns the data (plyr.fm track, standard.site post, etc.), which is content-addressed, verifiable, and portable. The fallback is `url` — a plain link, for deliverables that don't live on ATProto yet (an itch.io build, a hosted doc). Prefer payload; `url` is the humble alternative. The lexicon can't express "one-of" across field