First track of the alpha-release program. Four deliverables: exact BuildChatColorLookupTable colors, working side channels vs ACE, retail's on-screen interface text, complete / and @ command registry. Model split per user direction: Opus research, Fable planning, Sonnet implementation, dual-lens Opus review per slice. Slices finalize when the four research lanes land. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
106 lines
5.2 KiB
Markdown
106 lines
5.2 KiB
Markdown
# Campaign CH — chat & interface-text retail parity
|
||
|
||
**Status:** ACTIVE 2026-08-09 — research lanes running; slices finalize when
|
||
they land.
|
||
|
||
**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:
|
||
|
||
1. **Exact chat colors.** The 2026-06-16 cdb session pinned the retail
|
||
`RGBAColor` constants (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 conforms
|
||
`ChatWindowController.RetailChatColor` to it.
|
||
2. **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.
|
||
3. **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.
|
||
4. **Complete `/` and `@` command registry.** Every command the retail
|
||
client parses, audited against `RetailClientCommandCatalog` (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; `RetailChatColor` corrected; 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 build` green, 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 | — | — | — | — |
|
||
| CH1 colors | — | — | — | — |
|
||
| CH2 interface text | — | — | — | — |
|
||
| CH3 side channels | — | — | — | — |
|
||
| CH4 commands | — | — | — | — |
|
||
| CH5 closeout | — | — | — | — |
|