docs(quest): Campaigns QT and QJ closed user-accepted

The Journal panel is complete: contracts from the server, a per-character
notebook, and its searchable index.

The gate ledger is recorded rather than smoothed over, because the pattern is
the point — four rounds, and every defect was one mistake wearing different
clothes: an element bound as the wrong thing, or a binding never tested. One
reported failure was not a defect at all; the character was indoors, where
retail records nothing either.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-21 18:31:25 +02:00
parent eadedaea90
commit 57084b5372
2 changed files with 25 additions and 6 deletions

View file

@ -1,7 +1,7 @@
# Campaign QT — the contract tracker (H.3's client half)
**Status:** CODE-COMPLETE 2026-08-21. All six slices landed; the connected
user gate is owed.
**Status:** CLOSED USER-ACCEPTED 2026-08-21. All six slices landed and the
connected gate passed, together with Campaign QJ's two tabs.
**Why now.** M4's demo scenario is "talk to an NPC, accept a quest, ... complete
the quest." Everything in that sentence works today EXCEPT the player's ability

View file

@ -1,9 +1,28 @@
# Campaign QJ — the Journal and Page List tabs
**Status:** CODE-COMPLETE 2026-08-21. All five slices landed, plus the first
connected round's three fixes (button property `0x0D`, the location readout's
widget type, refresh-at-the-click). Abandon is now wired too — it turned out to
have a real wire action after all. The connected re-gate is owed. Completes the panel Campaign QT mounted: QT
**Status:** CLOSED USER-ACCEPTED 2026-08-21. All five slices landed and the
connected gate passed.
The gate took four rounds, and every defect it found was the same mistake in a
different place — an element bound as the wrong thing, or a binding never
tested:
1. **Button property `0x0D`** read as "starts disabled", which killed every
button on the panel (register QJ-2).
2. **The location readout** is authored EDITABLE, so it is a `UiField`; bound
as `UiText` it silently discarded every write — the value reached the model
and the file and never the screen.
3. **Handlers deferred their redraw** to the next frame's `Tick` where retail
redraws at the click.
4. **The timer's unit labels** stayed visible behind the running readout,
because retail's `ShowEditableTimer` toggles each box AND its label.
Round 3's "Record does nothing" turned out not to be a defect at all: the
character was indoors, where retail's own `gid_to_lcoord` fails and nothing is
recorded. Faithful, and now commented so it does not read as a gap.
The durable outcome is `JournalPanelLiveBindTests` — see
`claude-memory/feedback_test_the_binding_seam.md`. Completes the panel Campaign QT mounted: QT
shipped the Contracts tab and left the other two inert by design.
**Scope:** retail's `gmJournalUI` (element type `0x10000048`, page