docs(D.5.1): toolbar phase-1 implementation plan (+ spec wiring-delta note)

12-task TDD plan: register D.5.1 -> CreateObject IconId capture -> ItemRepository.EnrichItem -> spawn-event icon wiring -> persist shortcuts -> IconComposer (CPU composite) -> UiItemSlot -> UiItemList + factory branch -> ToolbarController -> GameWindow mount -> visual gate -> bookkeeping. Concrete call sites pinned (WorldSession.cs:701 EntitySpawned, GameEventWiring.WireAll, GameWindow Items@598, BuildUse 0x0036). Synced the spec's CreateObject section with the wider-than-expected wiring found during planning.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-16 21:27:49 +02:00
parent 0b5e849325
commit 44fabd350e
2 changed files with 1111 additions and 0 deletions

File diff suppressed because it is too large Load diff

View file

@ -156,6 +156,13 @@ mirrors the shipped vitals/chat re-drive exactly: dat `LayoutDesc` → `LayoutIm
- **Change:** in `CreateObject.TryParse`, capture the `IconId` (currently discarded at
`CreateObject.cs:516`) — and the underlay/overlay/effect ids if present in the same block —
onto the parsed object so `ItemRepository` stores them on `ItemInstance` (fields already exist).
- **Planning delta (see the plan):** fact-gathering found this is wider than "just capture IconId."
acdream has NO `CreateObject``ItemRepository` wiring at all (the repo is populated only from
`PlayerDescription` with stub `ItemInstance`s), and `Parsed.Shortcuts` is parsed then discarded
in `GameEventWiring`. So the plan adds three small wiring pieces: capture IconId (Task 1), enrich
the repo from the `WorldSession.EntitySpawned` event (Tasks 23, `ItemRepository.EnrichItem`),
and persist the shortcut list (Task 4). The icon source is CONFIRMED to be `CreateObject` for
contained pack items (ACE `WorldObject_Networking.cs:79` writes IconId unconditionally).
- **Step 0 verification:** confirm against **ACE source** (`WorldObject.SerializeCreateObject`
/ the weenie property serialization) that a *contained* pack item's `CreateObject` actually
carries `IconId` (synthesis risk #3 — LIKELY, not yet byte-traced). Reading ACE is sufficient;