Support controller-oriented UI hosts and an installable full-screen inventory provider
Decouple scripted gameplay presentation from desktop window chrome and provide an installable full-screen inventory package, preserving the built-in desktop provider. Reuse provider discovery, native inventory facts/item interaction backend, isolated input runtime, renderer, and persistence; keep physical-input provenance and validated commands native. Generic hosts should allow optional frame controls and non-draggable viewport-sized presentation; expose responsive layout and explicit package-authored focus/navigation metadata as needed, with geometry fallback. Deliver readable XML/Lua package sources and installation instructions rather than enabling a replacement by default. Inventory role covers main inventory, bags, banks and loot; retain their native closure, search, credits and item semantics. Inventory and equipment are separate native roles: do not invent shared gameplay authority or a second backend to force composite screens. No copied stock-client code, commits, pushes or game launch authorized. Implementation is on feature/controller-ui-packages, branched from the user's initially clean feature/opengl-renderer checkout; no base/history changes. Generic XML desktop/anchored/viewport hosts, optional controls, native user-back policy, post-layout callbacks and explicit navigation metadata are implemented. User-directed revision: restore the bundled Inventory package exactly to its pre-extraction Lua/XML structure. Inventory-specific presentation must not live in Core or become a required shared inventory library. The controller example should own its own implementation, with duplication acceptable for an example; providers use native contracts and choose their own presentation. UI/Examples/ControllerInventory supplies a selectable prk.inventory provider, 72-pixel cells, focus details, responsive layout and group navigation, retaining search/credits and server container policy. Scope deliberately does not merge equipment's independent role into inventory or add an on-screen keyboard. Do not migrate native Window rendering or change the generic host/navigation architecture in this revision. Follow-up completed in the PR worktree and mirrored back to the original checkout only after checking each destination against the prior committed contents. User authorized pushing this revision. Committed only the 13 intended correction paths (11 files after rename detection) as 27c78b595, refactor: Keep inventory presentation out of Core, and pushed normally to origin/feature/controller-ui-hosts. No history rewrite. PR #3032 now points to that commit, and its description was updated to explain the self-contained example and unchanged bundled Inventory structure. Preserved the user's existing draft state and WIP title. Dedicated PR worktree is clean. Existing successful full-suite, build and pixel-equivalence validation above applies to the committed content; no tests rerun solely for pushing. Remote develop advanced to d95d7f74c; no merge/rebase or conflict-resolution scope was added. Gitea currently reports mergeable=false; no mergeability approval claimed. Bundled Inventory/main.lua, window.xml, slot.xml and README.md match the pre-extraction revision byte-for-byte. Removed Core/item_container.lua, Core/inventory_content.xml, Core/inventory_slot.xml and their Core manifest entry. The controller example now owns main.lua and content.xml, directly implements the native inventory entrypoints, and only reuses generic Core grid/navigation helpers. No replacement inventory library was introduced, no native host/window migration or API changes. Documentation now describes provider-owned presentation rather than shared inventory.view. Verification: removing the Core inventory module first made eight controller cases fail, establishing the old dependency. Self-contained version passes all controller/container checks. Extended real bank search and credit deposit/confirmation/cancel cases to both providers; disabling the example's credit action binding made only the controller deposit case fail, then restored it and verified green. Complete develop-based client suite: 4,672 passed, 216 explicit environment skips, 0 failures. Generator self-test, all package/example Lua syntax checks, 155 XML parses and whitespace checks pass. Local Debug build succeeds with warnings as errors, 0 warnings/errors. Five new native Vulkan captures (100/125/150%, small viewport and scrolled last slot) are pixel-identical to the prior reviewed captures; normal/scrolled results visually inspected again. Existing hardware/live-server/platform limitations unchanged. Updated and verified all seven local Debug addon files after confirming no user edits; removed only byte-matched obsolete generated Core inventory assets. Rebuilt ZIP at .dev-data/controller-ui/ControllerInventory.zip and checked its integrity. Captures: .dev-data/controller-ui/independent-captures. Logs: /tmp/prk-inventory-independence-red.log, /tmp/prk-inventory-credit-binding-control.log, /tmp/prk-inventory-own-full-client.log, /tmp/prk-inventory-own-captures.log and /tmp/prk-inventory-own-local-build.log. No client launch. Acceptance: external package installs through the production catalog and can be selected for inventory; full-screen presentation has no desktop title tabs/drag/resize assumptions, responds to viewport/scale changes, and supports explicit controller focus/back behavior. Desktop provider remains compatible, input/closure/persistence/failure handling remain coherent, meaningful regression tests demonstrate behavior red then green, relevant build/tests/API generation pass, and actual native-rendered captures are inspected. Hardware-controller/live gameplay and platform limitations must be explicit. Initial validation: new host regression failed before ui.window.host existed; full-screen regression failed before package delivery. Both pass now. Production catalog selects the example; native item pick/place, viewport/scales, explicit focus, saved-desktop-geometry preservation and combat bag/bank user-close paths pass focused tests. Full client suite 4,666 passed / 216 explicit environment skips / zero failures; renderer 746 passed / one explicit install-data skip / zero failures. API generator self-test and Lua syntax pass. Four native Vulkan captures rendered with installed GUI artwork and synthetic specimen item icons at 100/125/150% and 640x360. Initial visual review found underlying UI faintly visible through 98% opacity; changed the screen background to opaque and will regenerate/review final captures. Review findings were reproduced red and fixed: remembered non-desktop hosts now persist visibility independently without overwriting desktop geometry/pin values or inventing rectangles; viewport descendants measure with viewport dimensions before wrapping. Grid edge/scroll and reopen-focus regressions were also reproduced red then fixed. Synthetic focus initialization has no action authority. A remaining usability gap was identified before completion: separate full-screen containers need switching without closing the carried item's source. Added a generic input-budgeted interaction.switch_host capability limited to a native-only navigation scope shared by inventory-container adapters; no arbitrary window ids or package discovery. Provider Y/PageDown and PageUp cycle open containers while keeping native source leases alive, with remembered focus. A native inventory-to-bag combat transfer regression failed before support and now passes. Implementation and validation complete, uncommitted. The host-switch extension passes native inventory-to-bag transfer in combat while excluding an unrelated native window and retaining source carry. Follow-up static review identified unhandled PageUp/PageDown gestures swallowing alternating ordinary bindings; both key regressions were demonstrated red and fixed by retiring unclaimed runtime gestures. No security findings were reported by either patch-scoped static review; this is not a hardware/live security approval. Final validation: production Release build with warnings as errors and existing NU1903 exemption succeeds with 0 warnings/errors; client suite 4,672 passed, 216 explicit environment skips, 0 failures (4,888 total); renderer suite 747 passed, one explicit install-data skip, 0 failures (748 total). Focused controller/security/container run 63 passed with no skips. Generator self-test passes; all 85 package/example Lua files pass luac syntax, all 154 XML files parse, and git diff whitespace check passes. Actual published source-linked Native AOT UI acceptance executable passes; it exercises shared host/runtime and existing linked roles, not dedicated Inventory provider acceptance. Full production-client Native AOT publication, new provider execution under AOT, OpenGL rendering, live server gameplay, physical controller and Windows/macOS execution are not claimed. Five final native Vulkan captures with installed GUI artwork (synthetic specimen item icons) were regenerated and visually inspected: 1280x720 at 100%, 1600x900 at 125%, 1920x1080 at 150%, 640x360 initial and 640x360 scrolled to the final native slot. Opaque screen background, footer accessibility, focused-cell reveal and scaling checked. No game/session launch or visible desktop test windows; isolated Xvfb/offscreen test rendering only. Installable artifact: /home/mathias/Projects/engines/.dev-data/controller-ui/ControllerInventory.zip, ZIP integrity verified; contains one top-level ControllerInventory directory. Canonical package sources/documentation: PRK.Client/PRK.Client/UI/Examples/ControllerInventory. Extract into client UI/Addons or per-user ProjectRubiKa/ui-packages, restart and select Controller Inventory for Inventory containers under Options, then enter a new character session. Requires the updated client, remains optional, desktop provider unchanged by default. No equipment-role merger or on-screen keyboard. Final logs /tmp/prk-controller-complete-{client,renderer,release,aot}.log and /tmp/prk-controller-done-focused.log. All checklist outcomes verified. User subsequently authorized branch preparation, staging, committing, pushing and opening a PR through /open-pr. PR preparation: original feature/controller-ui-packages inherited seven unrelated OpenGL commits (387-file base diff), so preserved that checkout and its installed Debug client unchanged. Created isolated worktree /home/mathias/Projects/worktrees/engines-controller-ui-pr on feature/controller-ui-hosts from freshly fetched origin/develop e045d9471. Carried only the 41 intended session paths, compared their contents with the original checkout, and committed as 08187542f (feature: Support controller UI hosts and full-screen inventory). Final branch contains exactly one session commit and 39 changed files after rename detection; no OpenGL commits or private artifacts. Pushed origin/feature/controller-ui-hosts with its own upstream, no force push or history rewrite. Isolated worktree clean. Fresh validation on the actual develop-based PR branch: warning-as-error client build/test run 4,670 passed, 216 explicit skips, zero failures; renderer 743 passed, one explicit install-data skip, zero failures. Generator self-test and diff whitespace checks pass. Prior native AOT/capture checks were on the original implementation baseline; not rerun on the isolated base. Gitea authentication resolved through the user's updated gt configuration. Removed the temporary /home/mathias/.local/bin/tea executable at the user's request and verified its absence; existing authentication configuration was not edited, migrated or replaced. The gt-backed gitea tool successfully listed open PRs, found no duplicate for this branch, and created PR #3032: https://git.project-rk.com/prk/engines/pulls/3032. Title feature: Support controller UI hosts and full-screen inventory; repository prk/engines; head feature/controller-ui-hosts at 08187542f; base develop; open, non-draft, mergeable at creation. Dedicated PR worktree is clean; original checkout and Debug installation remain intact. Existing verified validation and limitations above apply; no new tests or CI outcome claimed from PR creation. Completion state unchanged.
Checklist
4 of 4 complete- Deliver an installable full-screen inventory provider using native inventory/container capabilities, with installation and control documentation.
- Verify regressions, builds, Lua/API validation and native rendering; record remaining live/hardware/platform limits.
- Implement presentation-neutral viewport hosts and explicit navigation while retaining desktop/input/persistence behavior.
- Restore bundled Inventory Lua/XML to its pre-extraction contents, remove inventory code/assets from Core, and verify the self-contained controller example against native inventory contracts.
- Area
- Project Rubi-Ka
- Project
- engines
- Kind
- Feature
- Task ID
tsk_w5r29j64pm- Updated