Scenarios
A working tour of every behavior atjam can express — each one a live round on the network, not a mockup. Read top to bottom: a round is born, opens, runs, and closes; people join under different trust models; and a round carries just enough structure to stay generic.
Every round here is a real record on the network. It opens with a jam running in production, then walks every behavior through a deliberate test set on @nls-testuser1.bsky.social’s PDS, created by pnpm populate. Click any to open it.
In the wild: EPTSS
Not a fixture — this is EPTSS (“Everyone Plays the Same Song”) running live on atjam, owned by @everyoneplaysthesamesong.com. Each round names a song as its subject; participants submit a cover (an fm.plyr.track). Same primitives, same transit line as the test rounds below — see how it maps onto the extension points.
- createdJun 3, 2021
- signup-opensJun 3, 2021, 7:00 AM (passed)
- voting-opensJun 22, 2021, 7:00 AM (passed)
- covering-beginsJun 30, 2021, 7:00 AM (passed)
- submission-deadlineAug 2, 2021, 7:00 AM (passed)
- closing-eventAug 10, 2021, 7:00 AM (passed)
- now — closed
- createdJun 3, 2021
- signup-opensJun 3, 2021, 7:00 AM (passed)
- voting-opensJun 22, 2021, 7:00 AM (passed)
- covering-beginsJun 30, 2021, 7:00 AM (passed)
- submission-deadlineAug 2, 2021, 7:00 AM (passed)
- closing-eventAug 10, 2021, 7:00 AM (passed)
- now — closed
- createdMar 30, 2021
- signup-opensMar 30, 2021, 7:00 AM (passed)
- voting-opensApr 15, 2021, 7:00 AM (passed)
- covering-beginsApr 23, 2021, 7:00 AM (passed)
- submission-deadlineMay 24, 2021, 7:00 AM (passed)
- closing-eventJun 21, 2021, 7:00 AM (passed)
- now — closed
- createdMar 30, 2021
- signup-opensMar 30, 2021, 7:00 AM (passed)
- voting-opensApr 15, 2021, 7:00 AM (passed)
- covering-beginsApr 23, 2021, 7:00 AM (passed)
- submission-deadlineMay 24, 2021, 7:00 AM (passed)
- closing-eventJun 21, 2021, 7:00 AM (passed)
- now — closed
- createdFeb 3, 2021
- closing-eventMar 29, 2020, 7:00 AM (passed)
- signup-opensFeb 3, 2021, 8:00 AM (passed)
- voting-opensFeb 13, 2021, 8:00 AM (passed)
- covering-beginsFeb 23, 2021, 8:00 AM (passed)
- submission-deadlineMar 22, 2021, 7:00 AM (passed)
- now — closed
- createdFeb 3, 2021
- closing-eventMar 29, 2020, 7:00 AM (passed)
- signup-opensFeb 3, 2021, 8:00 AM (passed)
- voting-opensFeb 13, 2021, 8:00 AM (passed)
- covering-beginsFeb 23, 2021, 8:00 AM (passed)
- submission-deadlineMar 22, 2021, 7:00 AM (passed)
- now — closed
- createdNov 15, 2020
- signup-opensDec 1, 2020, 8:00 AM (passed)
- voting-opensDec 15, 2020, 8:00 AM (passed)
- covering-beginsDec 24, 2020, 8:00 AM (passed)
- submission-deadlineJan 25, 2021, 8:00 AM (passed)
- closing-eventFeb 2, 2021, 8:00 AM (passed)
- now — closed
- createdNov 15, 2020
- signup-opensDec 1, 2020, 8:00 AM (passed)
- voting-opensDec 15, 2020, 8:00 AM (passed)
- covering-beginsDec 24, 2020, 8:00 AM (passed)
- submission-deadlineJan 25, 2021, 8:00 AM (passed)
- closing-eventFeb 2, 2021, 8:00 AM (passed)
- now — closed
- createdOct 13, 2020
- signup-opensOct 13, 2020, 7:00 AM (passed)
- voting-opensOct 22, 2020, 7:00 AM (passed)
- covering-beginsOct 31, 2020, 7:00 AM (passed)
- submission-deadlineNov 22, 2020, 8:00 AM (passed)
- closing-eventNov 24, 2020, 8:00 AM (passed)
- now — closed
- createdOct 13, 2020
- signup-opensOct 13, 2020, 7:00 AM (passed)
- voting-opensOct 22, 2020, 7:00 AM (passed)
- covering-beginsOct 31, 2020, 7:00 AM (passed)
- submission-deadlineNov 22, 2020, 8:00 AM (passed)
- closing-eventNov 24, 2020, 8:00 AM (passed)
- now — closed
- createdSep 2, 2020
- signup-opensAug 20, 2020, 7:00 AM (passed)
- voting-opensSep 2, 2020, 7:00 AM (passed)
- covering-beginsSep 10, 2020, 7:00 AM (passed)
- submission-deadlineOct 5, 2020, 7:00 AM (passed)
- closing-eventOct 13, 2020, 7:00 AM (passed)
- now — closed
- createdSep 2, 2020
- signup-opensAug 20, 2020, 7:00 AM (passed)
- voting-opensSep 2, 2020, 7:00 AM (passed)
- covering-beginsSep 10, 2020, 7:00 AM (passed)
- submission-deadlineOct 5, 2020, 7:00 AM (passed)
- closing-eventOct 13, 2020, 7:00 AM (passed)
- now — closed
- createdApr 22, 2026
- signup-opensApr 22, 2026, 7:00 AM (passed)
- voting-opensMay 2, 2026, 6:59 AM (passed)
- covering-beginsMay 11, 2026, 6:59 AM (passed)
- submission-deadlineJul 16, 2026, 6:59 AM (passed)
- closing-eventJul 16, 2026, 6:59 AM (passed)
- now — closed
- createdApr 22, 2026
- signup-opensApr 22, 2026, 7:00 AM (passed)
- voting-opensMay 2, 2026, 6:59 AM (passed)
- covering-beginsMay 11, 2026, 6:59 AM (passed)
- submission-deadlineJul 16, 2026, 6:59 AM (passed)
- closing-eventJul 16, 2026, 6:59 AM (passed)
- now — closed
- createdJul 10, 2020
- signup-opensJul 10, 2020, 7:00 AM (passed)
- voting-opensJul 23, 2020, 7:00 AM (passed)
- covering-beginsJul 31, 2020, 7:00 AM (passed)
- submission-deadlineAug 17, 2020, 7:00 AM (passed)
- closing-eventAug 25, 2020, 7:00 AM (passed)
- now — closed
- createdJul 10, 2020
- signup-opensJul 10, 2020, 7:00 AM (passed)
- voting-opensJul 23, 2020, 7:00 AM (passed)
- covering-beginsJul 31, 2020, 7:00 AM (passed)
- submission-deadlineAug 17, 2020, 7:00 AM (passed)
- closing-eventAug 25, 2020, 7:00 AM (passed)
- now — closed
- createdOct 5, 2025
- signup-opensOct 5, 2025, 3:12 AM (passed)
- voting-opensFeb 2, 2026, 8:00 AM (passed)
- covering-beginsFeb 9, 2026, 8:00 AM (passed)
- submission-deadlineApr 23, 2026, 6:59 AM (passed)
- closing-eventApr 23, 2026, 6:59 AM (passed)
- now — closed
- createdOct 5, 2025
- signup-opensOct 5, 2025, 3:12 AM (passed)
- voting-opensFeb 2, 2026, 8:00 AM (passed)
- covering-beginsFeb 9, 2026, 8:00 AM (passed)
- submission-deadlineApr 23, 2026, 6:59 AM (passed)
- closing-eventApr 23, 2026, 6:59 AM (passed)
- now — closed
- createdOct 2, 2025
- signup-opensOct 2, 2025, 7:00 AM (passed)
- voting-opensOct 15, 2025, 7:00 AM (passed)
- covering-beginsOct 22, 2025, 7:00 AM (passed)
- submission-deadlineJan 21, 2026, 8:00 PM (passed)
- closing-eventJan 21, 2026, 8:00 PM (passed)
- now — closed
- createdOct 2, 2025
- signup-opensOct 2, 2025, 7:00 AM (passed)
- voting-opensOct 15, 2025, 7:00 AM (passed)
- covering-beginsOct 22, 2025, 7:00 AM (passed)
- submission-deadlineJan 21, 2026, 8:00 PM (passed)
- closing-eventJan 21, 2026, 8:00 PM (passed)
- now — closed
- createdMar 18, 2025
- signup-opensJul 3, 2025, 11:59 PM (passed)
- voting-opensJul 14, 2025, 7:00 AM (passed)
- covering-beginsJul 22, 2025, 8:34 AM (passed)
- submission-deadlineOct 15, 2025, 7:00 AM (passed)
- closing-eventOct 15, 2025, 7:00 AM (passed)
- now — closed
- createdMar 18, 2025
- signup-opensJul 3, 2025, 11:59 PM (passed)
- voting-opensJul 14, 2025, 7:00 AM (passed)
- covering-beginsJul 22, 2025, 8:34 AM (passed)
- submission-deadlineOct 15, 2025, 7:00 AM (passed)
- closing-eventOct 15, 2025, 7:00 AM (passed)
- now — closed
- createdJan 3, 2025
- signup-opensJan 1, 2025, 5:38 AM (passed)
- voting-opensApr 12, 2025, 12:00 AM (passed)
- covering-beginsApr 19, 2025, 12:00 AM (passed)
- submission-deadlineJul 3, 2025, 11:59 PM (passed)
- closing-eventJul 3, 2025, 11:59 PM (passed)
- now — closed
- createdJan 3, 2025
- signup-opensJan 1, 2025, 5:38 AM (passed)
- voting-opensApr 12, 2025, 12:00 AM (passed)
- covering-beginsApr 19, 2025, 12:00 AM (passed)
- submission-deadlineJul 3, 2025, 11:59 PM (passed)
- closing-eventJul 3, 2025, 11:59 PM (passed)
- now — closed
- createdSep 23, 2024
- signup-opensSep 23, 2024, 2:26 PM (passed)
- voting-opensJan 1, 2025, 8:00 AM (passed)
- covering-beginsJan 10, 2025, 8:00 AM (passed)
- submission-deadlineMar 26, 2025, 11:39 PM (passed)
- closing-eventMar 26, 2025, 11:39 PM (passed)
- now — closed
- createdSep 23, 2024
- signup-opensSep 23, 2024, 2:26 PM (passed)
- voting-opensJan 1, 2025, 8:00 AM (passed)
- covering-beginsJan 10, 2025, 8:00 AM (passed)
- submission-deadlineMar 26, 2025, 11:39 PM (passed)
- closing-eventMar 26, 2025, 11:39 PM (passed)
- now — closed
- createdJul 10, 2024
- signup-opensJul 10, 2024, 2:09 PM (passed)
- voting-opensOct 5, 2024, 3:09 PM (passed)
- covering-beginsOct 17, 2024, 2:09 PM (passed)
- submission-deadlineDec 16, 2024, 3:09 PM (passed)
- closing-eventJan 8, 2025, 3:10 PM (passed)
- now — closed
- createdJul 10, 2024
- signup-opensJul 10, 2024, 2:09 PM (passed)
- voting-opensOct 5, 2024, 3:09 PM (passed)
- covering-beginsOct 17, 2024, 2:09 PM (passed)
- submission-deadlineDec 16, 2024, 3:09 PM (passed)
- closing-eventJan 8, 2025, 3:10 PM (passed)
- now — closed
- createdApr 2, 2024
- signup-opensApr 2, 2024, 2:45 PM (passed)
- voting-opensJul 1, 2024, 2:45 PM (passed)
- covering-beginsJul 11, 2024, 2:46 PM (passed)
- submission-deadlineSep 18, 2024, 2:46 PM (passed)
- closing-eventOct 2, 2024, 2:49 PM (passed)
- now — closed
- createdApr 2, 2024
- signup-opensApr 2, 2024, 2:45 PM (passed)
- voting-opensJul 1, 2024, 2:45 PM (passed)
- covering-beginsJul 11, 2024, 2:46 PM (passed)
- submission-deadlineSep 18, 2024, 2:46 PM (passed)
- closing-eventOct 2, 2024, 2:49 PM (passed)
- now — closed
- createdMar 18, 2024
- signup-opensApr 1, 2024, 2:07 PM (passed)
- voting-opensApr 11, 2024, 5:00 AM (passed)
- covering-beginsApr 21, 2024, 7:00 AM (passed)
- submission-deadlineJun 17, 2024, 2:11 PM (passed)
- closing-eventJul 2, 2024, 3:12 PM (passed)
- now — closed
- createdMar 18, 2024
- signup-opensApr 1, 2024, 2:07 PM (passed)
- voting-opensApr 11, 2024, 5:00 AM (passed)
- covering-beginsApr 21, 2024, 7:00 AM (passed)
- submission-deadlineJun 17, 2024, 2:11 PM (passed)
- closing-eventJul 2, 2024, 3:12 PM (passed)
- now — closed
- createdSep 28, 2023
- signup-opensDec 12, 2023, 8:00 AM (passed)
- voting-opensJan 1, 2024, 8:00 AM (passed)
- covering-beginsJan 8, 2024, 8:00 AM (passed)
- submission-deadlineMar 18, 2024, 7:00 AM (passed)
- closing-eventApr 3, 2024, 7:00 AM (passed)
- now — closed
- createdSep 28, 2023
- signup-opensDec 12, 2023, 8:00 AM (passed)
- voting-opensJan 1, 2024, 8:00 AM (passed)
- covering-beginsJan 8, 2024, 8:00 AM (passed)
- submission-deadlineMar 18, 2024, 7:00 AM (passed)
- closing-eventApr 3, 2024, 7:00 AM (passed)
- now — closed
- createdJul 12, 2023
- signup-opensSep 27, 2023, 7:00 AM (passed)
- voting-opensOct 15, 2023, 7:00 AM (passed)
- covering-beginsOct 23, 2023, 7:00 AM (passed)
- submission-deadlineDec 5, 2023, 8:00 AM (passed)
- closing-eventDec 14, 2023, 2:00 AM (passed)
- now — closed
- createdJul 12, 2023
- signup-opensSep 27, 2023, 7:00 AM (passed)
- voting-opensOct 15, 2023, 7:00 AM (passed)
- covering-beginsOct 23, 2023, 7:00 AM (passed)
- submission-deadlineDec 5, 2023, 8:00 AM (passed)
- closing-eventDec 14, 2023, 2:00 AM (passed)
- now — closed
- createdMay 19, 2020
- signup-opensMay 19, 2020, 7:00 AM (passed)
- voting-opensMay 26, 2020, 7:00 AM (passed)
- covering-beginsJun 8, 2020, 7:00 AM (passed)
- submission-deadlineJun 29, 2020, 7:00 AM (passed)
- closing-eventJul 8, 2020, 7:00 AM (passed)
- now — closed
- createdMay 19, 2020
- signup-opensMay 19, 2020, 7:00 AM (passed)
- voting-opensMay 26, 2020, 7:00 AM (passed)
- covering-beginsJun 8, 2020, 7:00 AM (passed)
- submission-deadlineJun 29, 2020, 7:00 AM (passed)
- closing-eventJul 8, 2020, 7:00 AM (passed)
- now — closed
- createdJul 11, 2023
- signup-opensJul 11, 2023, 7:00 AM (passed)
- voting-opensJul 28, 2023, 7:00 AM (passed)
- covering-beginsAug 5, 2023, 7:00 PM (passed)
- submission-deadlineSep 18, 2023, 7:00 AM (passed)
- closing-eventSep 27, 2023, 7:00 AM (passed)
- now — closed
- createdJul 11, 2023
- signup-opensJul 11, 2023, 7:00 AM (passed)
- voting-opensJul 28, 2023, 7:00 AM (passed)
- covering-beginsAug 5, 2023, 7:00 PM (passed)
- submission-deadlineSep 18, 2023, 7:00 AM (passed)
- closing-eventSep 27, 2023, 7:00 AM (passed)
- now — closed
- createdApr 25, 2023
- signup-opensApr 25, 2023, 7:00 AM (passed)
- voting-opensMay 13, 2023, 7:00 AM (passed)
- covering-beginsMay 19, 2023, 7:00 AM (passed)
- submission-deadlineJun 26, 2023, 7:00 AM (passed)
- closing-eventJul 11, 2023, 7:00 PM (passed)
- now — closed
- createdApr 25, 2023
- signup-opensApr 25, 2023, 7:00 AM (passed)
- voting-opensMay 13, 2023, 7:00 AM (passed)
- covering-beginsMay 19, 2023, 7:00 AM (passed)
- submission-deadlineJun 26, 2023, 7:00 AM (passed)
- closing-eventJul 11, 2023, 7:00 PM (passed)
- now — closed
- createdFeb 8, 2023
- signup-opensFeb 8, 2023, 8:00 AM (passed)
- voting-opensFeb 28, 2023, 8:00 AM (passed)
- covering-beginsMar 7, 2023, 2:00 AM (passed)
- submission-deadlineApr 11, 2023, 7:00 AM (passed)
- closing-eventApr 26, 2023, 7:00 AM (passed)
- now — closed
- createdFeb 8, 2023
- signup-opensFeb 8, 2023, 8:00 AM (passed)
- voting-opensFeb 28, 2023, 8:00 AM (passed)
- covering-beginsMar 7, 2023, 2:00 AM (passed)
- submission-deadlineApr 11, 2023, 7:00 AM (passed)
- closing-eventApr 26, 2023, 7:00 AM (passed)
- now — closed
- createdNov 1, 2022
- signup-opensNov 17, 2022, 4:37 PM (passed)
- voting-opensDec 6, 2022, 5:02 PM (passed)
- covering-beginsDec 17, 2022, 11:00 AM (passed)
- submission-deadlineJan 31, 2023, 11:00 AM (passed)
- closing-eventFeb 8, 2023, 8:00 AM (passed)
- now — closed
- createdNov 1, 2022
- signup-opensNov 17, 2022, 4:37 PM (passed)
- voting-opensDec 6, 2022, 5:02 PM (passed)
- covering-beginsDec 17, 2022, 11:00 AM (passed)
- submission-deadlineJan 31, 2023, 11:00 AM (passed)
- closing-eventFeb 8, 2023, 8:00 AM (passed)
- now — closed
- createdAug 25, 2022
- signup-opensAug 25, 2022, 7:00 AM (passed)
- voting-opensSep 13, 2022, 7:00 AM (passed)
- covering-beginsSep 26, 2022, 7:00 AM (passed)
- submission-deadlineOct 31, 2022, 7:00 AM (passed)
- closing-eventNov 16, 2022, 8:00 AM (passed)
- now — closed
- createdAug 25, 2022
- signup-opensAug 25, 2022, 7:00 AM (passed)
- voting-opensSep 13, 2022, 7:00 AM (passed)
- covering-beginsSep 26, 2022, 7:00 AM (passed)
- submission-deadlineOct 31, 2022, 7:00 AM (passed)
- closing-eventNov 16, 2022, 8:00 AM (passed)
- now — closed
- createdJun 3, 2022
- signup-opensJun 3, 2022, 7:00 AM (passed)
- voting-opensJun 20, 2022, 7:00 AM (passed)
- covering-beginsJul 5, 2022, 7:00 AM (passed)
- submission-deadlineAug 15, 2022, 7:00 AM (passed)
- closing-eventAug 24, 2022, 7:00 AM (passed)
- now — closed
- createdJun 3, 2022
- signup-opensJun 3, 2022, 7:00 AM (passed)
- voting-opensJun 20, 2022, 7:00 AM (passed)
- covering-beginsJul 5, 2022, 7:00 AM (passed)
- submission-deadlineAug 15, 2022, 7:00 AM (passed)
- closing-eventAug 24, 2022, 7:00 AM (passed)
- now — closed
- createdMar 13, 2022
- signup-opensMar 13, 2022, 8:00 AM (passed)
- voting-opensMar 29, 2022, 7:00 AM (passed)
- covering-beginsApr 8, 2022, 7:00 AM (passed)
- submission-deadlineMay 16, 2022, 7:00 AM (passed)
- closing-eventJun 3, 2022, 7:00 AM (passed)
- now — closed
- createdMar 13, 2022
- signup-opensMar 13, 2022, 8:00 AM (passed)
- voting-opensMar 29, 2022, 7:00 AM (passed)
- covering-beginsApr 8, 2022, 7:00 AM (passed)
- submission-deadlineMay 16, 2022, 7:00 AM (passed)
- closing-eventJun 3, 2022, 7:00 AM (passed)
- now — closed
- createdDec 18, 2021
- signup-opensDec 18, 2021, 8:00 AM (passed)
- voting-opensJan 11, 2022, 8:00 AM (passed)
- covering-beginsJan 22, 2022, 8:00 AM (passed)
- submission-deadlineFeb 28, 2022, 8:00 AM (passed)
- closing-eventMar 12, 2022, 8:00 AM (passed)
- now — closed
- createdDec 18, 2021
- signup-opensDec 18, 2021, 8:00 AM (passed)
- voting-opensJan 11, 2022, 8:00 AM (passed)
- covering-beginsJan 22, 2022, 8:00 AM (passed)
- submission-deadlineFeb 28, 2022, 8:00 AM (passed)
- closing-eventMar 12, 2022, 8:00 AM (passed)
- now — closed
- createdOct 6, 2021
- signup-opensOct 6, 2021, 7:00 AM (passed)
- voting-opensOct 19, 2021, 7:00 AM (passed)
- covering-beginsOct 25, 2021, 7:00 AM (passed)
- submission-deadlineDec 6, 2021, 8:00 AM (passed)
- closing-eventDec 17, 2021, 8:00 AM (passed)
- now — closed
- createdOct 6, 2021
- signup-opensOct 6, 2021, 7:00 AM (passed)
- voting-opensOct 19, 2021, 7:00 AM (passed)
- covering-beginsOct 25, 2021, 7:00 AM (passed)
- submission-deadlineDec 6, 2021, 8:00 AM (passed)
- closing-eventDec 17, 2021, 8:00 AM (passed)
- now — closed
- createdAug 11, 2021
- signup-opensAug 11, 2021, 7:00 AM (passed)
- voting-opensAug 26, 2021, 7:00 AM (passed)
- covering-beginsAug 30, 2021, 7:00 AM (passed)
- submission-deadlineSep 27, 2021, 7:00 AM (passed)
- closing-eventOct 5, 2021, 7:00 AM (passed)
- now — closed
- createdAug 11, 2021
- signup-opensAug 11, 2021, 7:00 AM (passed)
- voting-opensAug 26, 2021, 7:00 AM (passed)
- covering-beginsAug 30, 2021, 7:00 AM (passed)
- submission-deadlineSep 27, 2021, 7:00 AM (passed)
- closing-eventOct 5, 2021, 7:00 AM (passed)
- now — closed
- createdApr 1, 2020
- signup-opensApr 1, 2020, 7:00 AM (passed)
- voting-opensApr 20, 2020, 7:00 AM (passed)
- covering-beginsApr 27, 2020, 7:00 AM (passed)
- submission-deadlineMay 11, 2020, 7:00 AM (passed)
- closing-eventMay 19, 2020, 7:00 AM (passed)
- now — closed
- createdApr 1, 2020
- signup-opensApr 1, 2020, 7:00 AM (passed)
- voting-opensApr 20, 2020, 7:00 AM (passed)
- covering-beginsApr 27, 2020, 7:00 AM (passed)
- submission-deadlineMay 11, 2020, 7:00 AM (passed)
- closing-eventMay 19, 2020, 7:00 AM (passed)
- now — closed
- createdMay 27, 2026
- signup-opensOct 5, 2025, 3:12 AM (passed)
- voting-opensFeb 2, 2026, 8:00 AM (passed)
- covering-beginsFeb 9, 2026, 8:00 AM (passed)
- closing-eventApr 23, 2026, 6:59 AM (passed)
- now — open
- createdMay 27, 2026
- signup-opensOct 5, 2025, 3:12 AM (passed)
- voting-opensFeb 2, 2026, 8:00 AM (passed)
- covering-beginsFeb 9, 2026, 8:00 AM (passed)
- closing-eventApr 23, 2026, 6:59 AM (passed)
- now — open
Reads open — the timeline has no submission-deadline, so deriveState never closes it even though every milestone has passed: the documented “keep a submission-deadline” gotcha, captured live.
The life of a round
A round has no status field — its state is derived from where now falls among its milestones. Open before the signup deadline, in-progress between the deadlines, closed once submissions close. Same record shape; watch the red now dot sit in a different stretch of track in each.
- createdJun 3, 2026
- signup-deadlineMay 27, 2026, 3:10 AM (passed)
- submission-deadlineJun 2, 2026, 3:10 AM (passed)
- now — closed
- createdJun 3, 2026
- signup-deadlineMay 27, 2026, 3:10 AM (passed)
- submission-deadlineJun 2, 2026, 3:10 AM (passed)
- now — closed
- createdJun 3, 2026
- signup-deadlineJun 2, 2026, 3:10 AM (passed)
- submission-deadlineJul 3, 2026, 3:10 AM (passed)
- now — closed
- createdJun 3, 2026
- signup-deadlineJun 2, 2026, 3:10 AM (passed)
- submission-deadlineJul 3, 2026, 3:10 AM (passed)
- now — closed
- createdJun 3, 2026
- signup-deadlineJun 10, 2026, 3:10 AM (passed)
- submission-deadlineJul 3, 2026, 3:10 AM (passed)
- now — closed
- createdJun 3, 2026
- signup-deadlineJun 10, 2026, 3:10 AM (passed)
- submission-deadlineJul 3, 2026, 3:10 AM (passed)
- now — closed
Naming the phases
Milestones are an open list. Past the two standard deadlines you can add as many named phases as you like — each becomes another station, and deriveCurrentPhase reports which stretch now is in. The catch: state only closes on a submission-deadline, so a round built from custom labels alone reads OPEN forever.
- createdJun 3, 2026
- signup-opensMay 4, 2026, 3:10 AM (passed)
- voting-opensMay 14, 2026, 3:10 AM (passed)
- covering-beginsMay 24, 2026, 3:10 AM (passed)
- closing-eventJun 1, 2026, 3:10 AM (passed)
- now — open
- createdJun 3, 2026
- signup-opensMay 4, 2026, 3:10 AM (passed)
- voting-opensMay 14, 2026, 3:10 AM (passed)
- covering-beginsMay 24, 2026, 3:10 AM (passed)
- closing-eventJun 1, 2026, 3:10 AM (passed)
- now — open
Reads open — the timeline has no submission-deadline, so deriveState never closes it even though every milestone has passed: the documented “keep a submission-deadline” gotcha, captured live.
- createdJun 3, 2026
- signup-opensMay 24, 2026, 3:10 AM (passed)
- voting-opensMay 29, 2026, 3:10 AM (passed)
- covering-beginsJun 2, 2026, 3:10 AM (passed)
- submission-deadlineJun 23, 2026, 3:10 AM (passed)
- closing-eventJun 28, 2026, 3:10 AM (passed)
- now — closed
- createdJun 3, 2026
- signup-opensMay 24, 2026, 3:10 AM (passed)
- voting-opensMay 29, 2026, 3:10 AM (passed)
- covering-beginsJun 2, 2026, 3:10 AM (passed)
- submission-deadlineJun 23, 2026, 3:10 AM (passed)
- closing-eventJun 28, 2026, 3:10 AM (passed)
- now — closed
Who's allowed in
Three trust models, encoded by form rather than colour (colour is reserved for state). A signup cites the invitation that admitted it; a read-time validator then walks the chain and separates legitimate from spoofed — open any round to see the green / amber badges.
- open
- Anyone may sign up — no invitation needed.
- hosted
- The organizer must invite you directly.
- network
- Invitations chain, but every chain must root at the organizer.
- Network round — cycle attemptclosed
joinMode=network. test2 and test3 try to invite each other without ever rooting at the organizer (no organizer→test2 or organizer→test3 invitation exists). Both signups cite the other's invitation. Validator should detect the cycle and render both as INVALID with the 'cycle detected' reason.
- Network round — contributed gateclosed
joinMode=network, networkGate=contributed. Two inviters: • test2 has signup AND submission → her invitee (test3) is VALID • test4 has signup but NO submission → her invitee would be INVALID (test4 didn't invite anyone, but we set it up so validator's gate logic is visible per chain) Confirm the validator distinguishes inviters who've earned invitation rights from those who haven't.
- Network round — chainclosed
joinMode=network. Chain of invitations: organizer → test2 → test3, plus organizer → test4 directly. All three signups should render valid because every chain roots at the organizer.
- Hosted round — mixed validationclosed
joinMode=hosted. Three signups, three different validator outcomes: • test2 with valid invitation from organizer → VALID • test3 with no invitation field → INVALID • test4 with self-forged invitation → INVALID Hover the amber badges to see the failure reason.
What a round carries
A round stays generic on purpose. Domain specifics ride optional, $type-tagged extension points — a subject and a closingEvent — plus a list of accepted submission types. atjam never learns what your domain is.
- Round accepting multiple submission typesclosed
acceptedSubmissionTypes lists three NSIDs from different atproto apps. The 'Accepted submission types' section should render all three as pills.
- Round with subject + closingEventclosed
Both optional structured fields (subject and closingEvent) are populated with fake $type-discriminated objects. The page should render without crashing even if it doesn't display the structured fields directly.
The quiet baseline
A fresh round with nobody in it yet — proof the zero case is drawn as deliberately as the full one.