5.6 KiB
Campaign CH — chat & interface-text retail parity
Status: ACTIVE 2026-08-09 — CH1 complete (implementation 172c6f9a +
review fixes 34d8a3c0); CH2 code-complete (77c8296e), pending the
in-client user gate (jump-in-air / jump-loaded refusals showing on-screen,
not in chat).
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.
Scope
Four deliverables, one campaign:
- Exact chat colors. The 2026-06-16 cdb session pinned the retail
RGBAColorconstants (0x81c4a8+), but only 4 of ~13 kinds were mapped with confidence; the type→color lookup table (ChatInterface::BuildChatColorLookupTable @ 0x4f31c0) was never decompiled. This campaign pins the COMPLETE table and conformsChatWindowController.RetailChatColorto it. - Working side channels vs local ACE. Turbine rooms (General / Trade / LFG / Roleplay / Society) and the legacy family (/f /a /m /p /v /cv), inbound and outbound. The 26-day-old "ACE doesn't run a TurbineChat server" claim is under verification — the research lane reads current ACE source rather than trusting it.
- Retail's on-screen interface text. The transient yellow top-of-viewport messages (jump-while-airborne being the canonical example) that retail does NOT put in the chat window. Routing table (on-screen vs chat vs both), presentation (color/duration/fade as far as acclient-side data allows — the draw itself lives in keystone.dll), and the client-raised local errors.
- Complete
/and@command registry. Every command the retail client parses, audited againstRetailClientCommandCatalog(the 2026-07-13 family port is the baseline, not a restart). Missing commands implemented; non-retail verbs remain ACE server-passthrough per the command ownership rule (2026-07-13).
Out of scope: retail's secondary/floating chat windows and per-window filter masks (post-alpha polish unless a slice lands it for free); chat color user-configurability (we ship retail defaults); TurbineChat server emulation (ACE-side).
Method
Per CLAUDE.md: grep docs/research/named-retail/ first; cdb only where
static decomp is insufficient; cross-check ACE + holtburger; conformance
tests pin every table (colors, routing, command catalog); divergence
register rows land in the same commits; build + full Release suite green
per commit.
Model split (user-directed 2026-08-09): research on Opus; planning by the main loop (Fable); implementation slices on Sonnet; every slice gets a dual-lens Opus review — retail faithfulness AND architecture — before its gate.
Research lanes (all Opus, parallel, read-only)
| Lane | Output doc | Question |
|---|---|---|
| R1 command registry | docs/research/2026-08-09-chat-retail-command-registry.md |
Complete retail verb/alias/handler table + acdream audit |
| R2 interface text | docs/research/2026-08-09-chat-retail-interface-text.md |
What draws the yellow text, the routing table, client-raised errors |
| R3 color table | docs/research/2026-08-09-chat-retail-color-table.md |
Full BuildChatColorLookupTable decompile + wire→type→color trace |
| R4 side channels | docs/research/2026-08-09-chat-side-channels-vs-ace.md |
Per-family defect diagnosis vs current ACE source |
Slices (provisional — finalized when research lands)
Ordering rationale: colors first (small, immediately visible, zero wire
risk), then interface text (new presentation subsystem), then side
channels (wire work, needs the connected gate), then command breadth,
then closeout. Slices touching shared chat files run serially — one
implementer per slice against a pinned contract (per
feedback_dont_parallelize_coupled_plan_slices).
- CH1 — exact color table. Conformance test pins every enum entry to
its retail RGBA;
RetailChatColorcorrected; register rows for any kind we cannot yet receive on the wire. - CH2 — on-screen interface text. New presentation owner (App layer, retained-UI or TextRenderer HUD path per research recommendation); routing per retail's table; client-raised local errors ported at their retail raise sites; keystone-owned presentation unknowns get register rows.
- CH3 — side channels. Fix list from R4; connected two-way gate
against local ACE (send + receive per family); self-echo semantics per
ChatChannelInfo.IsSelfEchoChannel. - CH4 — command registry completion. Catalog conformance test pins acdream's table against the retail registry enumeration; missing commands implemented family-by-family.
- CH5 — closeout. Register sweep, ledger flip, ISSUES updates, in-client test script for the user gate.
Gates
- Per slice:
dotnet buildgreen, full Release suite green, conformance tests, register rows same-commit, Opus dual review resolved. - Campaign: user in-client gate — colors side-by-side vs the retail client, each side channel spoken + heard, on-screen text provoked live (jump in air), command spot-checks. Test script delivered at CH5.
Ledger
| Slice | Commit | Suite | Review | User gate |
|---|---|---|---|---|
| R1–R4 research | see docs/research/2026-08-09-chat-retail-* |
— | — | — |
| CH1 colors | 172c6f9a |
11,835 passed / 4 skipped / 0 failed | APPROVE-WITH-FIXES; fixed 34d8a3c0 |
pending |
| CH2 interface text | 77c8296e |
11,890 passed / 4 skipped / 0 failed | REJECT (docs/research/2026-08-09-ch2-review-findings.md); rework in progress |
pending |
| CH3 side channels | — | — | — | — |
| CH4 commands | — | — | — | — |
| CH5 closeout | — | — | — | — |