Skip to content

Cycle 6 research gate: select and ship one bounded reliability improvement #35

Description

@SYMBaiEX

Goal

Run Cycle 6 as a bounded research/build/merge loop: use fresh AI-agent and gaming reports, audit current OpenController behavior, select one supported code slice, build it in an isolated worktree, stack only when there is a real dependency, independently review the integrated diff, pass checks, merge, update the roadmap, and open the next research gate.

Cycle 5 closeout PR #36 merged at f44fe79, closing gate #29 and milestone 4. Selected issue #20 merged in PR #38 at f20aab9 and closed. This gate closed through Cycle 6 roadmap closeout PR #43 at 66eed51. Cycle 7 research gate #37 is open in milestone 6 and is now unblocked.

Cycle 6 source log (2026-10-04)

Source/date Direct observation Fit and evidence limit
Codex #34316, 2026-07-20 User says key-down and key-up arrive back-to-back, so a ZX Spectrum emulator that polls the key matrix often misses input; requests held input or a duration. Supports clearer hold and release behavior. One user report about keyboard input in another product.
Codex #44074, 2026-09-09 A user measured 1.2–3.8 ms key taps that did not move a browser game and requests bounded holds plus release on cancellation/failure. A second report in the same issue says Unity missed a held drag across frames and requests a 2–3 frame hold. Concrete reports in one thread; measurements are session-specific and not independent prevalence evidence.
Codex #35510, 2026-07-26 Pygame did not receive Return although the input tool reported success; a commenter reports similar missing events in Satisfactory. Shows a tool/target delivery gap in another product, not an OpenController defect.
Unity MCP #1408, 2026-09-21 Feature request says an agent can observe Play Mode but cannot press a key or click controls. Request rather than a failure report; keyboard/mouse injection is outside OpenController's current controller SDK.
SDL #16434, 2026-10-03 A GameSir T3s Switch-mode device is detected on Linux but SDL rejects a calibration response; the Linux joystick interface still works. Reproducible upstream protocol issue for one device; not SDK-owned.
SDL #16237, 2026-09-03 A Betop controller emits motion events but SDL reports NaN/Inf sensor values; a commenter reproduces related data on another model sharing the driver identity. Useful sensor-path example within one vendor/driver thread; no general prevalence claim.
Moonlight #2017, 2026-09-20 An 8BitDo device is missing in Moonlight on macOS/SDL; reporter's SDL_JOYSTICK_MFI=0 workaround restores it in a minimal SDL program. Strong single-reporter reproduction, upstream SDL/MFi path.
Sunshine #5759, 2026-09-19 A Windows streaming host blocks input for about five seconds while retrying a missing virtual-device broker; installing the broker reduced the delay. Detailed host startup report; outside OpenController's CLI.
Ebitengine #3854, 2026-10-03; Steam for Linux #13601, 2026-09-10 Ebitengine developer requests a rumble-availability query; Steam user reports working controls but no rumble through one SteamOS path. Adjacent evidence for truthful capability discovery; neither proves an OpenController issue.
Defold #13278, 2026-09-21 Xbox Series Start/Back actions are absent with Defold's default gamepad database while raw buttons remain visible; disabling that database restores the actions in the tested setup. Detailed engine mapping issue with a workaround; outside this SDK's game-consumer layer.
Steam for Linux #13343, 2026-06-25 A player reports that controls/layout stop working during long sessions in two games; restart is the only workaround found. One reporter plus one similar report; cause remains uncertain.

These are public examples, not a prevalence study. The Codex key-duration reports are evidence about Computer Use surfaces, not proof of a missing OpenController timed-input feature. OpenController already has timed press, persistent setButton, explicit release, safety limits, and adapter capability metadata. Its duration promises adapter sequencing, not frame-observed or game-acknowledged timing.

Coverage limits

  • GitHub issue bodies and targeted APIs were reachable. Reddit endpoints continued returning HTTP 403; SDL Discourse and Godot forum searches also returned 403; Anthropic community search was unreachable through the network tunnel.
  • Steam Community search was reachable, but relevant results were mostly old (2022–2024). HN/OpenAI forum sources were reachable; they did not add a stronger current controller-SDK issue in this harvest.
  • Search focused on Steam/Deck/Linux, SDL, Moonlight/Sunshine, Ebitengine, Godot, Defold, Unity MCP, and AI computer-use reports. It was targeted, not exhaustive. Reactions and comments are attention signals, not affected-user counts. Accessibility coverage remains incomplete.

Repository audit and ranking

Audit basis: current main e6d576987c9085a3377ce0e10791f56ce1994ada; the selected CLI and bridge paths are unchanged from the audit snapshot c0b1a2f.

Decision Candidate Repository fit and evidence Cost/risk
Selected #20 native test failure cleanup nativeTestCommand creates a controller, runs press/move/trigger/neutral sequentially, then disconnects only on the happy path. CLI tests cover plan construction but not failures after connection. Codex #44074 asks for release on failure/cancellation in an adjacent input product; it does not prove this defect caused a user report. Low/medium, about 1–2 days. Preserve the primary action error if neutral/disconnect cleanup also fails.
Deferred #33 configured adapter capability metadata Bridge adapters can advertise touchpad/gyro/profile-HID output even when options suppress those payloads. This is a separate owner/test surface from #20; adjacent Ebitengine/Steam/SDL reports do not show the OpenController mismatch caused those failures. Low/medium. Keep adapter output capability distinct from OS/game support.
Deferred #34 negative action durations Safety rejects over-limit durations but not negative ones; negative timed presses skip auto-release. Zero-duration persistent input is intentional and must remain supported. No source directly reports this edge case. Low. Preserve zero and positive behavior while rejecting values below zero.
Deferred #21 host/game compatibility matrix Overlaps existing encoder conformance docs and native doctor; collecting meaningful host/game rows requires hardware and consumer environments. Medium/high; avoid a matrix of untested claims.

Decision and DAG

Select #20 only. Keep its scope to making opencontroller native test clean up after a connected controller even when an action fails, preserving the primary error if cleanup also fails, and reporting success only after cleanup. Do not fold bridge capability metadata, duration validation, OS/game compatibility, keyboard/mouse injection, or host fixes into this slice.

flowchart TD
  A[Cycle 5 gate #29 and closeout] --> B[Cycle 6 gate #35]
  B --> C[Implement selected native-test cleanup #20]
  C --> D[Independent review and required checks]
  D --> E[Merge implementation PR]
  E --> F[Roadmap closeout and Cycle 7 research gate]
  F --> G[Close Cycle 6 gate #35]
Loading

The issue dependency graph must encode both #29 blocks #35 and #20 blocks #35. Deferred issues #33 and #34 remain outside the active milestone.

Checklist

Acceptance

Closeout (2026-10-05)

Cycle 6 selected #20 only; candidates #21, #33, and #34 remain deferred outside milestone 5. The CLI cleanup behavior and its user-visible combined error details are documented in the merged implementation. External research reports remain context only and are not described as OpenController incidents. Project V2 creation remains blocked by GitHub integration permissions; the ongoing DAG uses milestones, labels, and issue dependencies.

Metadata

Metadata

Assignees

No one assigned

    Labels

    cycle-6Tracked work for OpenController AI and Gaming Improvement Cycle 6cycle-6-researchCycle 6 evidence review and selection gate

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions