Milestone campaigns: the GM marks a level as waiting, and the player levels up (Q127 / L13) #1007

Closed
opened 2026-10-01 20:37:51 +00:00 by claude-bot · 1 comment
Collaborator

The owner's answer to Q127 (L13), 2026-10-01: (b), over the recommendation. To be recorded as D255.

What was built (lane 11 PR 16, #987): in a milestone campaign only a GM can level a character. A player has no Level up, and there is no way to hand "Level 7 is waiting" to them.

What changes: in a milestone campaign a GM marks a character's next level as waiting. The player then sees "Level N is waiting" exactly as an XP campaign's player does at the threshold, and does the level-up themselves. Finishing it clears the mark. The GM can still level the character directly, and can take the mark back.

Approach:

  • A flag on the sheet for "a level is waiting" (set and cleared by a GM; cleared by a completed level-up). A migration on the current head.
  • advancement / access.can_level / level_why honour it, so the server refuses a player's level-up in a milestone campaign unless the mark is set.
  • A GM lock on Level still stops the player (Q128 / L14, confirmed as built).
  • The GM's control sits where the GM levels a character today; a "mark for everyone in the party" is out of scope unless it falls out for free.
  • Demo seed: one Hollow & Ash (milestone) character with a level waiting.
  • Catalogue row, tests, changelog fragment.

Part of #737's follow-ups.

**The owner's answer to Q127 (L13), 2026-10-01: (b)**, over the recommendation. To be recorded as D255. **What was built (lane 11 PR 16, #987):** in a milestone campaign only a GM can level a character. A player has no Level up, and there is no way to hand "Level 7 is waiting" to them. **What changes:** in a milestone campaign a GM marks a character's next level as waiting. The player then sees "Level N is waiting" exactly as an XP campaign's player does at the threshold, and does the level-up themselves. Finishing it clears the mark. The GM can still level the character directly, and can take the mark back. **Approach:** - A flag on the sheet for "a level is waiting" (set and cleared by a GM; cleared by a completed level-up). A migration on the current head. - `advancement` / `access.can_level` / `level_why` honour it, so the server refuses a player's level-up in a milestone campaign unless the mark is set. - A GM lock on Level still stops the player (Q128 / L14, confirmed as built). - The GM's control sits where the GM levels a character today; a "mark for everyone in the party" is out of scope unless it falls out for free. - Demo seed: one Hollow & Ash (milestone) character with a level waiting. - Catalogue row, tests, changelog fragment. Part of #737's follow-ups.
Author
Collaborator

Done: PR #1019 merged (main 13f16533, CI green on e3d80423). Recorded as D255.

In a milestone campaign a GM marks a character's next level as waiting ("Let Priya level up" → "Level 4 is waiting for Priya", "Take it back"); the player then sees "Level 4 is waiting", Level up and Not yet, and levels up themselves. Finishing clears the mark, as does the GM levelling the character. A GM lock on Level still stops the player (D256). The player's bell says so once: one row per player and character however often it is said; bell only, no email or Discord.

  • Migration c1007a1b2c3d on b680d1e2f3a4 (three nullable columns on character_sheets; the notification kind check widened). webapp/CLAUDE.md's migration head needs updating by the owner.
  • PUT / DELETE /api/campaigns/{cid}/sheets/{sid}/level-waiting, GM only.
  • The demo seed makes Hollow & Ash a milestone campaign, with Tam Ridley's Level 4 waiting, so its sheet headers stop showing XP after the next re-seed.
  • Catalogue rows IS-467 and IS-468.

For the owner to weigh: the notification is bell-only rather than following the notification grid; and on dev the GM's side can't be seen from the owner's account (a player in Hollow & Ash).

Not on dev until the next deploy.

**Done: PR #1019 merged** (main `13f16533`, CI green on `e3d80423`). Recorded as D255. In a milestone campaign a GM marks a character's next level as waiting ("Let Priya level up" → "Level 4 is waiting for Priya", "Take it back"); the player then sees "Level 4 is waiting", Level up and Not yet, and levels up themselves. Finishing clears the mark, as does the GM levelling the character. A GM lock on Level still stops the player (D256). The player's bell says so once: one row per player and character however often it is said; bell only, no email or Discord. - Migration `c1007a1b2c3d` on `b680d1e2f3a4` (three nullable columns on `character_sheets`; the notification kind check widened). **`webapp/CLAUDE.md`'s migration head needs updating by the owner.** - `PUT` / `DELETE /api/campaigns/{cid}/sheets/{sid}/level-waiting`, GM only. - The demo seed makes Hollow & Ash a milestone campaign, with Tam Ridley's Level 4 waiting, so its sheet headers stop showing XP after the next re-seed. - Catalogue rows IS-467 and IS-468. **For the owner to weigh:** the notification is bell-only rather than following the notification grid; and on dev the GM's side can't be seen from the owner's account (a player in Hollow & Ash). Not on dev until the next deploy.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#1007
No description provided.