Document verified unified release input and paired consumption

Replace stale pending validation with the completed Windows SDL2/SDL3
matrix, ordered controller-source/mouse precedence, and exact pin
consumption guidance. Keep physical behavior and hosted CI unclaimed.
This commit is contained in:
Beman
2026-10-08 10:39:50 +10:00
parent 986348858c
commit bbde12bb1c
2 changed files with 54 additions and 51 deletions
+47 -47
View File
@@ -62,53 +62,53 @@ one P1 policy; physical device locking and P2 mouse controls are out of scope.
## Validation status and targets
Earlier private source validation passed six focused gesture/context/policy
and activation tests, three host-fold tests on each SDL backend, six native SIO
checks and five registered game tests after a full SDL3 Release link. Those
runs used an explicit framework root at feature head
`12d98c220216a671f41cea6dccecd68c8dfa7042`, while the public game gitlink
still pointed to its two-commit ancestor `50ec9191`. They do not establish
checkout/build/CI validation of this newly reconciled private pin. Earlier
isolated candidates had boot smoke evidence; actual LEFT-held gadget feel,
capture/focus/menu/restore/rewind interruptions and this final pair remain
pending. The non-Windows missed-LEFT-release/focus-regain fix and subsequent
SDL2/SDL3 focus-arm cleanup are present in the reviewed feature head; the
non-Windows path has not been compiled or exercised on a physical device.
`local_mouse_policy_test` supplies a deterministic fake backend and
covers capture, neutral acquisition, releases, host/guest gates, bad times,
stalls, conflicting hold, failure fallback and registration validation.
`mouse_binding_suppression_test` folds the real keybind code with a controlled
mouse poll, covering primary/alternate/button/axis consumption through release
and independent controller/P2 actions. `keyboard_pad_chord_test` includes
captured-Escape suppression and fresh native re-presses.
It also checks repeated Turbo=Escape polls and the independent P2 report.
This release backport retains the original mouse policy and the maintainer's
missed-LEFT-release/focus-regain correction. It adopts the ordered external-input
layer from [psxrecomp #510](https://github.com/RetroPortingToolKit/psxrecomp/pull/510)
and only its required offline controller-source dependency from #495:
Run these and the existing controller presentation, stick mapping, netplay
pad codec and SIO tests with both supported SDL backends. Compile the actual
adapter/main path with debug tools enabled and disabled. Observe relative
capture/focus/menu/removal and normal report delivery in a private game copy;
pure policy tests do not exercise the OS or game dispatcher.
1. Capture the physical/local pad.
2. Resolve an attached offline controller source and the controller presentation
policy. Physical and source buttons combine as active-low input.
3. Apply the mouse policy once to the resolved P1 right axes. A source cannot
capture the mouse and then discard its result. A deflected native/source
right stick takes over as a whole vector; a digital source or Start disables
capture under the existing eligibility rules.
The reviewed implementation base is release framework commit
065888f50f9131839bcbbc8814debf58b4624b16, also the canonical
`release/ape-v0.5.0-hle-support` branch. The private companion game's
gitlink and `framework_pins.txt` identify this exact private framework
revision; its feature code is unchanged from PR502's reviewed head
`12d98c220216a671f41cea6dccecd68c8dfa7042`. The only new framework change
is this documentation correction. The unpublished documentation commit
needs reviewed upstream availability before an ordinary configured checkout
can use the final pin. A PR ref is an interim development reference, not a
stable final merge pin. Repeat final checkout/build/tests and inspect actual
CI after the final dependency becomes available. Historical release binary
provenance remains at 065888f5 and is not rewritten for this feature pair.
Detach/reset release frames, input guards and device absence reset capture.
Declined/invalid sources remain neutral and do not suppress physical buttons.
P2, pad type, buttons and left axes retain their ordinary delivery. Registration
is restricted to the main thread and validates the ABI structure size.
The release visibility and `HOST_KEYMAP_CAPTURE_MARK` guards are retained.
There is no master-range merge, game-specific runtime address or new gesture API.
Current master has different mod/input interfaces and needs a separate port.
The older maintainer port at 67e30808 omits current `g_hidden_window` and
`HOST_KEYMAP_CAPTURE_MARK` handling. Future integration must preserve their
visibility/host-keymap behavior and apply one mouse hook to the final local
P1 report after native controller-source resolution, preserving whole-vector
native takeover and all reset boundaries. The separate PR495 path overwrites
RX/RY after `capture_pad_slot`; merging it unchanged is not verified here.
No master-range merge, new arbitration policy or compatibility claim is made.
Physical interruption checks and hosted CI remain separate pending gates;
this is not a public-quality or merge-readiness claim.
The matched release pair passed a fresh Windows x64 matrix with MSVC 19.50,
CMake 4.1.2 and Ninja 1.12.1: 34 operations, 32 test executions, 18 unique names,
eight CTest inventories and both unchanged native BIOS fingerprints.
- Six game-focused tests cover reducer geometry/timing, guest eligibility,
capture lifecycle, activation, stick response and the preloaded catalog.
- Three controller-source/resolver tests cover registration, neutralization,
attach/decline/detach/reset, precedence, routing and eligibility gates.
- Host keymap, keyboard chord and mouse suppression tests pass separately on
SDL3 3.4.10 and SDL2 2.32.10, with debug tools enabled and disabled. The real
main, mouse adapter and game plugin translation units compile in all four
configurations.
- Six native SIO protocol/boundary/IRQ checks pass with active assertions.
- A full offline SDL3 Release game/runtime build links and its five selected
game tests pass. Fatal BIOS fingerprint validation remains enabled.
`local_mouse_policy_test` uses a deterministic fake capture backend; the source
bridge and host-fold tests use controlled input. Automated results do not prove
physical relative capture, controller feel, live gadget use or gameplay.
Non-Windows capture behavior has not been exercised on a physical device.
Hosted CI results must be read separately from local results.
The runtime PR targets `release/ape-v0.5.0-hle-support` at
`065888f50f9131839bcbbc8814debf58b4624b16`. The companion
[Ape Escape PR #21](https://github.com/mstan/ApeEscapeRecomp/pull/21) deliberately
updates both its `psxrecomp-v4` gitlink and `framework_pins.txt` to the same
runtime commit. Consume the runtime PR first and keep that exact commit
reachable when merging the game pin. Runtime-only changes need a rebuild,
not BIOS or game C regeneration. Release packaging metadata records the
historical v0.5.0 binary and is unchanged.
@@ -1,9 +1,12 @@
# Offline plugin controller sources: source and validation
The records below are historical upstream evidence. This private release
backport selects the controller-source dependency and unified resolver on
`c18a055`; its fresh regression/build request is pending. These earlier results
do not certify the private backport.
The records below preserve historical upstream evidence. The release backport
selects the controller-source dependency from `5a1264b7` and the unified resolver
from [6f9bdd94](https://github.com/RetroPortingToolKit/psxrecomp/commit/6f9bdd94f24f417f2b47affba707512c7846f786)
on `c18a055`, without the duplicated mouse commits or unrelated master changes.
Its matched Ape Escape SDL3 Release build and 32-execution automated matrix
passed on Windows x64. See [the release input validation](../../LOCAL_MOUSE_POLICY.md#validation-status-and-targets);
the historical game/headset observations below are not validation of this pair.
Reconstructed from [FractalEngineer/psxrecomp](https://github.com/FractalEngineer/psxrecomp), developed on
`vr-dev` at `9976567eb8e95510ca7eeeeccd9af3a260885de5`.