Two consumer-side fixes for ADR-0054 §3 (Item-Visual-Identity).
1) default_icon_resolver tries icon_atlas + icon_uv.* first; falls
back to sprite_atlas + sprite_uv.* when the override is absent.
Items inherit their world-render sprite as the UI icon for free
(TC_Basics-style object sprites work directly as icons); dedicated
low-res UI-icons can later land via icon_atlas without API churn.
2) Render path scales the icon uniformly to fit a (row_height - 4)
box, centered. The world-sprite-as-icon path (300×300 native) no
longer overflows the row; pre-baked small icons stay sharp because
the scale is applied around the visual center of the UV rect, not
the texture origin.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Engine resolver does exact strcmp on dep versions, so consumer manifests
must pin the new lib-core.panel 0.4.0 to keep load-time resolution green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Track lib-core.panel v0.2.0 (multi-active panels with layout-slots).
No behavioral change in this consumer — the v0.1.1 call sites remain
compatible via the panel framework's bw-compat shim.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The default label_resolver now reads the optional player-facing `name`
property from the item-template; modules with named templates get pretty
row labels without registering an override. Falls back to "Item" when
`name` is absent or empty.
README documents the player-facing item-template convention: name,
description, weight, volume, composition.<material> — all optional,
all with documented defaults. Skill-gated description reveals stay on
the separate hints lib (designed, not yet implemented).
5 public functions (create, register_action, unregister_action,
set_label_resolver, set_icon_resolver) plus 2 test backdoors
(_test_get_rows, _test_resolve_icon). Reads lib-core.inventory-list
contents each render frame; right-click rows open context-menu via
panel.show_context_menu. Default action-set is empty.