docs: record the Slice 0.9 quest system and its deviations

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Bastian Wagner
2026-08-22 23:36:42 +02:00
parent 3a84fd5371
commit 70ee207f1f
2 changed files with 172 additions and 12 deletions

View File

@@ -314,9 +314,85 @@ Hide Capacity: 5
- [ ] Quest grants no XP.
- [ ] All dialogue/UI text is English.
### Verification status
Every criterion above is covered by automated tests: the quest chain in
`quest-state.spec.ts` and `quest.service.spec.ts`, the content in
`vertical-slice.seed.spec.ts`, the markers in `npc.service.spec.ts`, and the
three UI requirements of §12 in the web specs for the journal, the NPC screen
and the location hotspots.
The boxes stay unticked because two things have not been run: the migration and
seed against a real PostgreSQL database, and a hand-played pass through the
chain in the running app. Neither was possible in the environment this slice was
built in — no database was reachable. Do both before ticking, following the
walkthrough in the implementation plan
(`docs/superpowers/plans/2026-08-22-first-quest-and-bag-tutorial.md`, Task 13).
---
## 15. Out of Scope
## 15. Implementation Decisions
Recorded here rather than only in the implementation plan, so the next slice
reads them from the specification.
### D1 — The Basic Hide Bag is granted, not sold
§6 has Borin say "Take this" while also describing the Slice 0.8.5 offer, which
costs 35 Silver. A player standing at that step has close to none, so the
purchase path alone would stall the chain.
Borin's quest step therefore hands the bag over directly and idempotently. The
referral flag is still written to the character's Borin state, so the 0.8.5
`bypassConditions` gate opens the offer as well — a visible consequence, and a
way back to a bag that is somehow lost. Nothing about reputation changes.
### D2 — No World Renown milestone
§9 lists one as optional. The demo character sits at Renown 1 and the first
trade-in takes them to 2; a quest milestone would reach 3 and unlock Borin's
Bandit Blade, which Slice 0.8.5 deliberately placed out of reach until Slice
0.11. The quest pays regional reputation instead: **+10 Border Watch**.
### D3 — No Silver reward
§9 warns against a Silver reward that undermines the merchant trade loop, and
names the bag and system knowledge as the point of the chain. `rewardSilver` is
a content column set to 0, so retuning it later is a seed change.
### D4 — Quest steps use their own endpoints
NPC spec §40 asked Slice 0.9 to also wire the `START_QUEST` / `COMPLETE_QUEST`
dialogue actions. There is no dialogue-response endpoint at all, and building
one plus an action executor is the branching narrative engine §10 rules out.
Steps run through `POST /api/npcs/:npcKey/quests/:questKey/{accept,advance}`.
Neither takes a body — which step is current, what it grants and what it
consumes are the server's to decide. The line an NPC speaks for a step is
content on the objective. Recorded as Abweichung 4 in the NPC specification.
### D5 — The demo character starts with no loot bag
The vertical-slice seed handed over a free Basic Hide Bag as a stopgap between
Slices 0.8.5 and 0.9, with a note to remove it once a quest could grant one.
That is done: the bagless HIDE capacity of 1 is the whole premise of §4. The
migration also clears that one row for the demo character on databases seeded
before this change.
### Addition — a hint for the second pelt hunt
Not in the specification, but the same courtesy §4 asks for. The Hide Bag holds
five of *any* hide, so Tough Hides can crowd out the fifth Ashen Pelt. That step
must not give up the way the first one does — it is meant to be finished (§7) —
so it carries a hint instead:
```text
Your hide bag is full of other goods. Trade some to Borin to make room for pelts.
```
---
## 16. Out of Scope
Do not implement: