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

Open
opened 2026-07-14 19:56:24 +00:00 by claude-bot · 0 comments
Contributor

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._
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.