Two defects the owner found at the CA5 drive, one shared theme: the data was right and the presentation seam was dead. #430 (tooltips): the TS-85 Batch-B port set runtime TooltipText on the runtime-built attribute/vital/skill rows but never gave them a popup locator, and RetailTooltipPresenter.OnTooltipShow refuses any widget with AuthoredTooltipRootElementId == 0 — the tooltip could never mount, on any row, ever. (The register's 'live-verified on the Character tab' was the OPTIONS panel's Character tab — authored elements with authored locators; a different surface.) Rows now carry the shared popup skin 0x10000395/0x21000041 — live-DAT probed as the ONLY locator pair the character layout references, and the same inference UiItemSlot already ships for runtime-built widgets. TS-85's row carries the dated correction. #440 (train row stuck): training a skill debited credits on screen but left the row in the untrained section until the NEXT click — because the sheet-changed subscription only refreshed the captured sheet, and row STRUCTURE rebuilt exclusively in click handlers (the raise 'completed' callback runs after SEND, before the server answers; the owner's second click was simply the first rebuild after the record landed, and ACE's rejection of that second train — 'Failed to train', no credit change — matches the owner's report exactly). The same gap kept CA4's awaiting-ghost from visually releasing. CharacterStatController.Bind now returns the data-changed refresh and MountCharacter invokes it on every authoritative sheet change, mirroring retail's quality-change broadcast (InfoRegion::OnQualityChanged @ 0x004F0EB0). Pinned by DataChangedRefresh_MovesATrainedSkillToItsSection_WithoutAClick and Rows_CarryTheSharedTooltipPopupLocatorAndDescriptionText. Owner visual re-check owed next session (hover-dwell a row; train a skill and watch it move immediately). Full hermetic suite 15,329 passed / 0 failed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
bd943849b1
commit
bce17b3cfb
5 changed files with 177 additions and 7 deletions
|
|
@ -24,6 +24,34 @@ What does NOT go here:
|
|||
- Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending.
|
||||
- Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed.
|
||||
|
||||
## #440 — CLOSED: Trained skill did not move to its section (and raise buttons never visually un-ghosted) until the next click
|
||||
|
||||
**Status:** CLOSED 2026-08-24, found by the owner during the CA5 drive.
|
||||
**Component:** character panel / row refresh
|
||||
|
||||
**Symptom (owner):** training an untrained skill consumed credits (visible
|
||||
immediately) and the confirmation text appeared, but the skill stayed in
|
||||
the untrained section; clicking Train AGAIN (which the server rejects —
|
||||
"Failed to train", no credit change) made it move.
|
||||
|
||||
**Root cause:** the panel's sheet-changed subscription only refreshed the
|
||||
captured `currentSheet` — per-frame text pulls (credits, values) updated,
|
||||
but the ROW STRUCTURE (section buckets, selection, raise-button states)
|
||||
rebuilt only on clicks (`RefreshAfterRaise` ran as the raise's `completed`
|
||||
callback — synchronously after SEND, before the server's answer). The
|
||||
second click was simply the first row rebuild after the record landed.
|
||||
The same gap kept CA4's awaiting-ghost from visually releasing.
|
||||
|
||||
**Fix:** `CharacterStatController.Bind` now returns the data-changed
|
||||
refresh (`RefreshAfterRaise(null)` — rebuild + reselect + re-evaluate
|
||||
buttons), and `RetailUiRuntime.MountCharacter`'s subscription invokes it on
|
||||
every authoritative sheet change — mirroring retail's quality-change
|
||||
broadcast (`InfoRegion::OnQualityChanged @ 0x004F0EB0` →
|
||||
`ListenToElementMessage @ 0x004EFBE0`). Pinned by
|
||||
`DataChangedRefresh_MovesATrainedSkillToItsSection_WithoutAClick`.
|
||||
|
||||
---
|
||||
|
||||
## #439 — Flake candidate: LossySession_FivePercentSeeded_ZeroMessageLoss_Headroom256 fails under full parallel suite load
|
||||
|
||||
**Status:** OPEN (observation filed; do NOT chase individually per docs/release-gate.md)
|
||||
|
|
@ -419,9 +447,21 @@ immediately (F2 overlay shows guids).
|
|||
|
||||
---
|
||||
|
||||
## #430 — No tooltips on skills and attributes in the character panel
|
||||
## #430 — CLOSED: No tooltips on skills and attributes in the character panel
|
||||
|
||||
**Status:** OPEN
|
||||
**Status:** CLOSED 2026-08-24 (found during the CA5 gate follow-up).
|
||||
Root cause: the TS-85 Batch-B port set runtime `TooltipText` on the
|
||||
runtime-built rows but never gave them a popup locator, and
|
||||
`RetailTooltipPresenter.OnTooltipShow` refuses any widget with
|
||||
`AuthoredTooltipRootElementId == 0` — the tooltip could NEVER mount.
|
||||
(TS-85's "live-verified on the Character tab" was the OPTIONS panel's
|
||||
Character tab — authored elements with authored locators.) Fix: rows now
|
||||
carry the shared popup skin `0x10000395`/`0x21000041` — live-DAT probed as
|
||||
the ONLY locator pair layout `0x2100002E` references, and the same
|
||||
inference `UiItemSlot` already ships for runtime-built widgets. Pinned by
|
||||
`Rows_CarryTheSharedTooltipPopupLocatorAndDescriptionText`. Owner visual
|
||||
re-check owed at the next session (hover a row, hold the mouse still for
|
||||
the 0.25 s dwell).
|
||||
**Severity:** LOW (information affordance missing)
|
||||
**Filed:** 2026-08-23 (owner report)
|
||||
**Component:** retail UI / character panel
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue