A quest's facts, objectives and the GM's quest editor (D242, #925) #929

Merged
claude-bot merged 2 commits from build/925-quest-editor into main 2026-09-29 10:09:57 +00:00
Collaborator

Closes #925.

Server

  • GET/PATCH /api/campaigns/{cid}/lore/{eid}/quest: status, main/side, giver (a page) and giver note, reward, started/ended sessions, objectives (each with its own audience — a GM-only objective is sent to GMs alone).
  • Changing the status appends a line to the page's timeline (IS-104) and records an "updated" wiki-feed event.
  • quest_service: get_details, set_status, replace_objectives, objective_audience.

Front end

  • QuestFacts.jsx: the quest's facts panel on its wiki page, and the GM's Edit the quest modal. Hidden while "See it as".
  • Quest pages are labelled "Wiki · Quest".
  • Quest log: a GM's rumours carry Confirm as quest (sets active) and Not canon (confirm modal; deletes the page, recoverable from Deleted articles) — IS-155, D242.

Tests

  • tests/wiki/test_quest_details_api.py (8). The full backend suite passed locally: 5873 passed, 13 skipped.
  • QuestFacts.test.jsx; the wiki front-end tests pass (175).

Changelog: changelog.d/925-quest-editor.added.md.

🤖 Generated with Claude Code

Closes #925. **Server** - `GET/PATCH /api/campaigns/{cid}/lore/{eid}/quest`: status, main/side, giver (a page) and giver note, reward, started/ended sessions, objectives (each with its own audience — a GM-only objective is sent to GMs alone). - Changing the status appends a line to the page's timeline (IS-104) and records an "updated" wiki-feed event. - `quest_service`: `get_details`, `set_status`, `replace_objectives`, `objective_audience`. **Front end** - `QuestFacts.jsx`: the quest's facts panel on its wiki page, and the GM's **Edit the quest** modal. Hidden while "See it as". - Quest pages are labelled "Wiki · Quest". - Quest log: a GM's rumours carry **Confirm as quest** (sets active) and **Not canon** (confirm modal; deletes the page, recoverable from Deleted articles) — IS-155, D242. **Tests** - `tests/wiki/test_quest_details_api.py` (8). The full backend suite passed locally: 5873 passed, 13 skipped. - `QuestFacts.test.jsx`; the wiki front-end tests pass (175). Changelog: `changelog.d/925-quest-editor.added.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
GET /lore/{id}/quest reads a quest page's own facts for anyone who may
read the page: status, main or side, who gave it (only if they may see
that page), the reward, the sessions it started and ended in, and the
objectives they may see (a GM-only objective is never sent to a player).
PATCH (GM only) changes any of them and replaces the objectives, each
with its own audience. A status change adds a line to the page's timeline
and an 'updated' wiki event (IS-104). Sessions and the giver must be this
campaign's.

On the page, QuestFacts shows them, with Edit the quest for a GM. The
quest log gives a GM's rumours Confirm as quest (status active) and Not
canon (asks, then deletes the page; it waits in Deleted articles; IS-155).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(webapp): a quest's page says "Wiki · Quest" (#925)
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m5s
CI / Backend lint (ruff) (pull_request) Successful in 1m27s
CI / Bot/backend version sync (pull_request) Successful in 30s
CI / Does this change touch the recording path? (pull_request) Successful in 25s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Feedback site tests (pull_request) Successful in 2m7s
CI / Docker image build (pull_request) Successful in 1m8s
CI / Bot tests and audit (pull_request) Successful in 4m25s
CI / Backend migration, tests, and audit (pull_request) Successful in 20m6s
CI / Frontend tests, audit, and build (pull_request) Successful in 22m5s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Successful in 18m44s
c9bb4d3e7a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign in to join this conversation.
No description provided.