docs: Campaign CH closeout sweep — CODE-COMPLETE pending user gate

CH5: flip the campaign plan's status header from ACTIVE to CODE-COMPLETE,
correct the CH4 ledger row's suite count to its final 12,221 (was showing
the pre-review-fix 12,190) and fill in the CH5 row, and add a closeout
paragraph for the previously-undocumented 5d247d55 re-review round.
Register sweep found one drift: the TS section header claimed 42 active
rows against an actual recount of 40 (TS-66 is retired/struck-through and
was miscounted as active) — corrected. AP/AD/IA/UN section counts,
AP-175..183, AP-176 retirement, and UN-9's deletion all verified
consistent, no other changes. Cross-referenced issues #359-#363 to the
campaign doc. Extended CLAUDE.md's Current-state Campaign-status sentence
to record Campaign CH's CODE-COMPLETE status and carried tail. Added a
Campaign CH entry (plus a missing Campaign A entry) to the roadmap's
shipped-campaign summary block, matching the Campaign V/N/P paragraph
format.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-09 22:34:54 +02:00
parent 813cc51f9a
commit 38f0c0defc
5 changed files with 98 additions and 18 deletions

View file

@ -62,6 +62,30 @@ crowd, two-client remote/door/portal, and shallow-water behavior. The user
waived the general sweep and explicitly deferred the barred-house gate as
#274. The later exact-location #273 tight-gap gate is now fixed and accepted.
**Campaign A — audio retail parity (CODE-COMPLETE 2026-08-08):** ported
retail's CPU-side 2-D pan+gain audio model (animation-hook sounds, the
`0xF750` server sound channel, PhysicsScripts, the interface sound bank,
and the region ambient system); found and corrected three false claims in
the old E.2 row (no 3-D pool, gain-based eviction, weighted variant
picking) and deleted the music API (retail has none). Slices A1A6 landed;
open tail is #358 (Ctrl+M mute chord never fires) and the formal
plan-status flip. Plan:
[`2026-08-08-audio-parity-campaign.md`](2026-08-08-audio-parity-campaign.md).
**Campaign CH — chat & interface-text retail parity (CODE-COMPLETE
2026-08-09, pending the connected user gate):** four implementation
slices closing the chat surface's biggest retail-parity gaps ahead of the
friend-alpha: CH1 the complete 34-value `LogTextType` color table, CH2
the on-screen SpewBox interface text (jump-refusal class, WeenieError
routing table), CH3 side-channel membership/wire/echo parity (Turbine
rooms, the legacy family, self-echo), and CH4 command registry completion
(138 of 152 retail verbs now execute locally). Every slice landed a
dual-Opus review (retail faithfulness + architecture) before its gate;
full Release suite 12,221 passed / 4 skipped / 0 failed. Plan and ledger:
[`2026-08-09-chat-parity-campaign.md`](2026-08-09-chat-parity-campaign.md);
in-client acceptance script:
[`2026-08-09-campaign-ch-test-script.md`](../research/2026-08-09-campaign-ch-test-script.md).
**Remaining physics-divergence closeout (ACTIVE, checkpoint 2026-08-03):** the user then
authorized retirement of the remaining proven collision/placement gaps before
vendor work resumes. Nested retry, edge/StepDown/Path-6 ordering, exact cell

View file

@ -1,19 +1,24 @@
# Campaign CH — chat & interface-text retail parity
**Status:** ACTIVE 2026-08-09 — CH1 complete (implementation `172c6f9a` +
review fixes `34d8a3c0`); CH2 CODE-COMPLETE and CLOSED pending the user
gate (`77c8296e`, REJECT-reviewed at
`docs/research/2026-08-09-ch2-review-findings.md`, reworked `e0e78883`,
re-reviewed APPROVE-WITH-FIXES with nits applied this commit) — the sole
outstanding item is the in-client user gate (jump-in-air / jump-loaded
refusals showing on-screen, not in chat). CH3 (side channels)
CODE-COMPLETE, pending the connected user gate — see the CH3 row below and
`docs/research/2026-08-09-chat-side-channels-vs-ace.md`. CH4 (command
registry completion) CODE-COMPLETE — see the CH4 closeout below; 138 of
152 registry verbs now execute locally, 5 are deliberately deferred
(issues #360/#361/#362, register rows TS-68/TS-69/TS-70), and 9 are
retail's own null-handler help-only nodes. Pending the in-client user
gate (command spot-checks per the campaign's overall gate list).
**Status:** CODE-COMPLETE 2026-08-09 — all four implementation slices
landed and dual-Opus-reviewed; pending the connected user gate (test
script: `docs/research/2026-08-09-campaign-ch-test-script.md`). CH1
complete (implementation `172c6f9a` + review fixes `34d8a3c0`); CH2
CODE-COMPLETE and CLOSED pending the user gate (`77c8296e`,
REJECT-reviewed at `docs/research/2026-08-09-ch2-review-findings.md`,
reworked `e0e78883`, re-reviewed APPROVE-WITH-FIXES with nits applied at
`233c30d1`) — the sole outstanding item is the in-client user gate
(jump-in-air / jump-loaded refusals showing on-screen, not in chat). CH3
(side channels) CODE-COMPLETE, pending the connected user gate — see the
CH3 row below and `docs/research/2026-08-09-chat-side-channels-vs-ace.md`.
CH4 (command registry completion) CODE-COMPLETE, closed at `5d247d55`
see the CH4 closeout below; 138 of 152 registry verbs now execute
locally, 5 are deliberately deferred (issues #360/#361/#362, register
rows TS-68/TS-69/TS-70), and 9 are retail's own null-handler help-only
nodes. CH5 (this closeout sweep) is COMPLETE — plan/register/ISSUES/
CLAUDE.md/roadmap ledger flip plus the chat memory digest. Pending the
in-client user gate (colors, side channels, on-screen text, command
spot-checks per the test script).
**Why now:** first track of the alpha-release program (chat is the most
visible daily surface for the friend-alpha). User-directed 2026-08-09.
@ -114,8 +119,8 @@ implementer per slice against a pinned contract (per
| CH1 colors | `172c6f9a` | 11,835 passed / 4 skipped / 0 failed | APPROVE-WITH-FIXES; fixed `34d8a3c0` | pending |
| CH2 interface text | `77c8296e`, reworked `e0e78883` | 11,916 passed / 4 skipped / 0 failed | REJECT → reworked `e0e78883` → re-review APPROVE-WITH-FIXES → nits `233c30d1` | pending |
| CH3 side channels | `614a1e05` | 11,964 passed / 4 skipped / 0 failed | APPROVE-WITH-FIXES; fixed `e07fba57` | pending (connected gate — see handoff below) |
| CH4 commands | `090825e7` | 12,190 passed / 4 skipped / 0 failed | REJECT; fixed `724ef2d3`; re-review APPROVE-WITH-FIXES; closed `5d247d55` | pending |
| CH5 closeout | — | — | — | — |
| CH4 commands | `090825e7` | 12,221 passed / 4 skipped / 0 failed | REJECT; fixed `724ef2d3`; re-review APPROVE-WITH-FIXES; closed `5d247d55` | pending |
| CH5 closeout | (this commit) | — (docs/memory only, no build) | — | pending (connected gate — see test script) |
### CH4 closeout (2026-08-09)
@ -295,6 +300,36 @@ Suite: 12,216 passed / 4 skipped / 0 failed (Release), up from CH4's
`RuntimeCharacterStateTests`, and `TurbineChatMembershipGateTests`; no
tests removed, several renamed/retargeted in place).
### CH4 re-review fixes — closed at `5d247d55` (2026-08-09)
A second, smaller review round found three more should-fixes after
`724ef2d3` landed: (1) `RetailDialogFactory.CloseDialog`'s queued branch
ran `DialogDone` — whose callback can synchronously reopen a new dialog
under the SAME queue key, exactly what the two-stage house-abandon
confirmation does — then called `OpenNextDialog`, which did an
unconditional `Dictionary.Add` on a key the reentrant dialog had already
re-occupied; retail's `HashTable::add` tolerates the duplicate, `Dictionary`
throws. `OpenNextDialog` now returns early when the queue key is already
active. (2) `@join`/`@leave` wrote the local `RuntimeCharacterOptionsState`
bit before sending, but the Settings Chat toggles reached a second binding
(`SendSingleCharacterOption`) that only sent the wire message, leaving the
Turbine membership gate stale until the next `PlayerDescription`;
`LiveSessionRuntimeFactory.CreateCommandBindings` now shares one local
function for both entrances. (3) TS-68/#360's wording was corrected again —
retail's `DoAllegiance` dispatcher table EXECUTES the nine
boot/ban/officer/title/motd/name/lock/house/chat/broadcast subcommands
locally through their own handlers; acdream shows the unrecognized-
subcommand refusal for all nine pending the #360 port. What matches
retail is the ownership rule (the verb never reaches
`DoChannelCommand`/the server), not the subcommand behavior itself — the
inaccurate "now matches this" claims were removed from both the register
row and the issue.
Suite: 12,221 passed / 4 skipped / 0 failed (Release), up from CH4's
12,216/4/0 — net +5 tests, no removals. This is the CH4 slice's final
number; the ledger row above and CLAUDE.md's Current Suite baseline both
carry it.
### CH3 closeout handoff (2026-08-09)
All nine steps of the research doc's §6 fix list landed: