# Campaign QJ — the Journal and Page List tabs **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 `0x10000563`) and `gmPageListUI` (type `0x10000049`, page `0x10000564`). ## What this actually is A **per-character notebook**, entirely client-side. No wire, no server involvement, no dat content — the player writes the pages. Each page carries a label, a title, free-form notes, a recorded LOCATION, and a countdown TIMER. The Page List tab is a searchable index over those pages. Nothing about it depends on quests; it shares the panel with Contracts and nothing else. That it is called "Journal" while the panel is also called "Journal" is retail's own naming, not a mistake here. ## Measured ground truth ### The file format `gmJournalUI::SavePages @0x00497270` / `LoadPages @0x00496AC0`. A plain tagged text file, `fopen` mode `w+`. Both call sites pass the literal prefix `"Journal"`; the path template is `%s%s-%s-%s.txt`, i.e. `{dir}Journal-{server}-{character}.txt`. ``` begins a page (a file that does not open with one is refused) %d page number %s label (authored max length 16) %s title (32) %s notes (2048) %d timer days %d timer hours %d timer minutes %f recorded location %f