feat(ui): double-click-to-buy (AP-171, user-approved) + #353 toolbar text fixes — authored right-justify and two-line name wrap (Fable)
Some checks are pending
Headless portability / portable-headless (ubuntu-latest) (push) Waiting to run
Headless portability / portable-headless (windows-latest) (push) Waiting to run
Headless portability / linux-graphical (push) Waiting to run
Headless portability / linux-vulkan (push) Waiting to run

Double-clicking a vendor shop item now buys through the Buy button's
exact quantity/price path — retail has NO double-click-to-buy (the
named table sweep's negative evidence stands); the user chose the
addition explicitly and AP-171 records it.

#353 (pre-existing, user-reported): the stack-count entry is AUTHORED
HJustify=2 — right-justified flush against the slider on its own row —
and UiField already supported RightAligned; nobody had honored the
authored value. The name element is AUTHORED two lines tall (H=31,
W=140): long names now word-wrap at the authored pixel width onto a
second centered row via two stacked one-line labels reusing the
existing centered draw path (WrapNameTwoLines: greedy word break, no
hyphenation, second row clips like retail).

Ten SelectedObjectController structure tests updated from
single-label to first-label access. Lesson re-learned the hard way:
the first "green" run used a stale TEST assembly (only the App
project had been rebuilt) — the clean-room caught it, per
feedback_stale_build_artifacts. Full App 4,329/3 and Core 4,381/1
verified green on properly rebuilt assemblies; the one transient
Core Release failure did not reproduce and is noted on #351.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-08 17:42:02 +02:00
parent 1688863366
commit d674b99f56
5 changed files with 113 additions and 28 deletions

View file

@ -24,6 +24,21 @@ 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.
## #353 — Toolbar selected-object text: count field ignores authored HJustify; name field does not wrap to its authored two lines
**Status:** FIXED 2026-08-08 pending the user's look (RightAligned on the authored HJustify=2 entry; two stacked centered one-line labels wrapping at the authored 140 px via WrapNameTwoLines).
User gate findings (pre-existing, not vendor-introduced). The authored
toolbar layout 0x21000016 is decisive: the stack-count entry 0x100001A3
is X=0 Y=13 W=50 H=14 **HJustify=2 (right)** — flush against the slider
0x100001A4 at X=50 Y=13 W=90 H=14, same row — but `UiField` has no
justify support, so the number renders at the left edge (the user's
screenshot). The name field 0x100001A2 is W=140 **H=31 (two lines)**;
`UiField` already has WrappedLine machinery but the name widget renders
one line, so long names overflow instead of breaking at the authored
140 px. Fix: honor HJustify in UiField (right-justify the text run) and
engage two-line wrap for the name element per its authored extent —
wrap threshold is the authored PIXEL width, not a character count.
## #352 — Vendor range-watcher cylinder metric: discriminating unit test deferred
**Status:** OPEN (filed 2026-08-08). The EnforceRange cylinder-gap fix