Prototype isolated Lua-owned controller interaction logic
Build a second opt-in prototype after the validated declarative routing slice. User explicitly prefers flexibility over perfect automation prevention. Preserve v1 and default UI/combat behavior. Use separate presentation and interaction Lua runtimes: interaction Lua owns controller navigation, radial selection/gesture state and layout-aware behavior; native host supplies real input, captured actions, bounded runtime and one command attempt per physical press/release gesture. Ordinary presentation callbacks cannot execute commands; interaction environment gets no combat-state APIs or timers. Permit bounded layout metadata crossing rather than building a full taint system. Reuse source capture, controller mapping/device selection and native Lua bridge. No copied ConsolePort implementation, commits or client launches. Keep checks short (focused behavior tests, build and native captures), no broad reviews/full suites. Acceptance: new mode launchable alongside retained v1, resizable grid navigation matches actual layout without duplicate native column configuration, Lua-authored radial interaction works, cancelled/consumed/invalid gesture cannot replay/substitute/chain commands, presentation has no action authority. User performs live controller/gameplay validation; report limits honestly. Implemented uncommitted on feature/lua-interaction-prototype (prior related v1 changes carried forward, no unrelated edits). PRK_LUA_ROUTING_SLICE=2 selects UI/Packages/InteractionPrototype; =1 retains the validated declarative slice. interaction.lua runs in a separate bounded LuaRuntime and owns inventory navigation, initial selection, toggle/hold/release, analog-angle wheel selection and radial positioning. main.lua runs in the ordinary LuaUiComponent and owns resizable presentation. Native LuaInteractionSession grants only interaction APIs, captures action sources on physical input, consumes one attempt across press/release (including unavailable attempts), and dispatches only after Lua returns successfully. Axis/layout/presentation cannot execute; layout cannot change selection. Cancellation invalidates held gesture authority. Interaction numeric output and native-measured width/height/actual grid columns cross intentionally; no full taint system or claim to prevent all automation. No combat facts, timers or ordinary-callback command authority are granted. Reuse: PrototypeActionSource and PrototypeInteractionProjection shared by both slices; shared controller adapter retains physical Xbox mapping/activity-based device selection and now forwards changed analog stick positions to an optional input interface. ui.reveal reuses native ancestor scrolling; existing combat-locked hosts refuse it. Existing native item/hotbar validation and captured-subject checks retained. Sources remain reopening snapshots; wheel still uses bar 1 slots 1–4. Physical input set remains the prototype adapter's supported controls. No production migration or issue-305 fix claimed. Verified: warning-as-error build passes with existing NU1903 exemption and prepared native font/audio package overrides. Final 15 focused tests pass, no skips (4 new real-runtime/native-layout behaviors, 3 v1 routing behaviors, 8 existing keyboard-feed). Budget test was demonstrated failing with consumption disabled and passing restored. Responsive native grid test measures actual rendered columns at 440 and 280 widths, confirms selection survives resize and subsequent down movement/activation follows new columns; analog wheel selects the right-hand entry. Other tests cover separate globals/capabilities, layout/axis/presentation authority denial, shared press/release budget, invalid/cancelled wheel release and handler-failure non-dispatch. Native Vulkan specimen screenshots at both widths and wheel inspected; footer clipping discovered and fixed before final captures. Captures: .dev-data/lua-interaction-slice. Logs: /tmp/lua-interaction-build.log, /tmp/lua-interaction-red.log, /tmp/lua-interaction-tests.log, /tmp/lua-interaction-final.log. API-generator self-test, both Lua syntax checks, XML parsing and git diff whitespace check pass. No broad review, full suites, game launch, commit or PR. Handoff: restart built client with PRK_LUA_ROUTING_SLICE=2 and usual args/environment. Controls Y/F6 inventory, D-pad/arrows navigation, A/Enter use, hold LB/F7 plus stick/directions then release for wheel, B/Escape cancel. Resize inventory, check selected identity/navigation/scrolling, test wheel/focus/device cancellation and combat on real controller. Live gameplay/hardware validation for v2 remains outstanding; v1 user confirmation does not establish v2 behavior.
Checklist
2 of 2 complete- Implement opt-in isolated interaction Lua runtime with reusable input/actions and Lua-owned responsive navigation and wheel behavior.
- Verify command-budget/isolation/cancellation behavior and responsive native Lua rendering with short focused checks; hand off live controller validation.
- Area
- Project Rubi-Ka
- Project
- engines
- Kind
- Feature
- Task ID
tsk_tdc7z726my- Updated