[Backlog] Downtime activity tracking (PF2e first) #124

Closed
opened 2026-07-14 19:56:24 +00:00 by claude-bot · 2 comments
Collaborator

Context / Motivation

Research/product brief. Between sessions, PF2e (and many systems) let characters spend downtime days: craft, earn income, train, research, retrain. Groups track this in spreadsheets today. Quest Board's campaign/session structure gives natural boundaries ("downtime between session 12 and 13").

Spec (starting sketch)

Design adapter-minded, like the Foundry system adapters (issue #24's philosophy: all system-specific logic behind an adapter boundary, no system branches in routes/models): the core is a generic free-text activity log with no rules engine, and PF2e is just a preset vocabulary.

  • DowntimeEntry: id, campaign_id, member_id (FK campaign_members), activity (free-text), days_spent (numeric), outcome_notes (Text), between_session_id (nullable FK — the session this downtime follows), status: pending | approved (GM), created_at.
  • PF2e preset: a static activity list (Craft, Earn Income, Train, Research, Retrain, Buy/Sell, Recover) offered as suggestions in the activity field when the campaign's system is pf2e — data-only preset (JSON), not code; other systems get plain free-text. No dice, no DCs, no income tables.
  • Flow: player logs entries; GM approves (or edits + approves); totals per member between two sessions ("days used since last session") shown on the campaign page.

Out of scope

  • Rules automation (income calculation, level-gated activities, dice).
  • Foundry sync of downtime results.
  • Calendar math against in-world dates (see the in-world calendar backlog issue).

Open questions

  • Merge with Loot & XP? Should this ship as a third pane of the "Loot & XP" campaign tab (making it a "Between Sessions" tab) rather than its own surface? Leaning yes if the loot ledger lands first — decide when pulled.
  • Where does the per-member downtime-day budget come from (GM sets a pool per gap vs free entry)? Leaning free entry + GM approval.
  • Does between_session_id reference the completed session or the upcoming one? (Pick one and document.)

Acceptance criteria (for when this is pulled)

  • Player CRUD on own pending entries; GM approve/edit/delete on all.
  • PF2e campaigns see the preset suggestions; other systems get free text (no system branching outside the preset lookup).
  • Per-member totals between consecutive sessions are correct.

References

  • Issue #24 (Foundry adapter philosophy — system specificity stays behind adapters/presets)
  • webapp/backend/app/routers/campaigns.py:3172-3390 (campaign-scoped CRUD pattern)
  • webapp/backend/app/models/session_attendance.py (member-scoped model precedent)

Filed from the July 2026 full-project review.

## Context / Motivation Research/product brief. Between sessions, PF2e (and many systems) let characters spend downtime days: craft, earn income, train, research, retrain. Groups track this in spreadsheets today. Quest Board's campaign/session structure gives natural boundaries ("downtime between session 12 and 13"). ## Spec (starting sketch) **Design adapter-minded, like the Foundry system adapters** (issue #24's philosophy: all system-specific logic behind an adapter boundary, no system branches in routes/models): the core is a **generic free-text activity log with no rules engine**, and PF2e is just a preset vocabulary. - `DowntimeEntry`: `id`, `campaign_id`, `member_id` (FK campaign_members), `activity` (free-text), `days_spent` (numeric), `outcome_notes` (Text), `between_session_id` (nullable FK — the session this downtime follows), `status`: `pending` | `approved` (GM), `created_at`. - **PF2e preset**: a static activity list (Craft, Earn Income, Train, Research, Retrain, Buy/Sell, Recover) offered as suggestions in the activity field when the campaign's system is pf2e — data-only preset (JSON), not code; other systems get plain free-text. No dice, no DCs, no income tables. - **Flow**: player logs entries; GM approves (or edits + approves); totals per member between two sessions ("days used since last session") shown on the campaign page. ## Out of scope - Rules automation (income calculation, level-gated activities, dice). - Foundry sync of downtime results. - Calendar math against in-world dates (see the in-world calendar backlog issue). ## Open questions - **Merge with Loot & XP?** Should this ship as a third pane of the "Loot & XP" campaign tab (making it a "Between Sessions" tab) rather than its own surface? Leaning yes if the loot ledger lands first — decide when pulled. - Where does the per-member downtime-day budget come from (GM sets a pool per gap vs free entry)? Leaning free entry + GM approval. - Does `between_session_id` reference the completed session or the upcoming one? (Pick one and document.) ## Acceptance criteria (for when this is pulled) - Player CRUD on own pending entries; GM approve/edit/delete on all. - PF2e campaigns see the preset suggestions; other systems get free text (no system branching outside the preset lookup). - Per-member totals between consecutive sessions are correct. ## References - Issue #24 (Foundry adapter philosophy — system specificity stays behind adapters/presets) - `webapp/backend/app/routers/campaigns.py:3172-3390` (campaign-scoped CRUD pattern) - `webapp/backend/app/models/session_attendance.py` (member-scoped model precedent) _Filed from the July 2026 full-project review._
Author
Collaborator

Placement decided (owner, 2026-09-15; decision D3 in the surface catalogue, #659): downtime activity lives as a section on the party page (catalogue surface WIKI-12), beside "What we carry", rather than on the campaign page or a "Between Sessions" tab. It sits with loot & XP, which decision D6 also moves to the party page, so this issue's open question about merging with the loot tab resolves naturally there.

**Placement decided (owner, 2026-09-15; decision D3 in the surface catalogue, #659):** downtime activity lives as a **section on the party page** (catalogue surface WIKI-12), beside "What we carry", rather than on the campaign page or a "Between Sessions" tab. It sits with loot & XP, which decision D6 also moves to the party page, so this issue's open question about merging with the loot tab resolves naturally there.
Author
Collaborator

Done for 4.6.0 (PR #1210, merged 17 Oct). Downtime lives on the party page (D3, D6), with PF2e suggestions and free text elsewhere, logged by players and approved by the GM. The last gaps are closed: edit, delete with Undo, and Save and approve for the GM; edit and delete of a player's own pending entries; and Days since Session N per character. Totals now count approved days, with pending ones shown separately as (+N waiting).

Done for 4.6.0 (PR #1210, merged 17 Oct). Downtime lives on the party page (D3, D6), with PF2e suggestions and free text elsewhere, logged by players and approved by the GM. The last gaps are closed: edit, delete with Undo, and **Save and approve** for the GM; edit and delete of a player's own pending entries; and **Days since Session N** per character. Totals now count approved days, with pending ones shown separately as (+N waiting).
Sign in to join this conversation.
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#124
No description provided.