Repository navigation
Cycle 8 research gate: build an evidence-backed controller improvement DAG #57
Description
Goal
Select a buildable, evidence-backed Cycle 8 wave for OpenController’s AI and gaming controller workflows. Convert the selected work into small issues with measurable acceptance criteria, named package/file ownership, and an explicit dependency DAG; defer upstream or untestable host work.
Research coverage (2026-10-05)
The Luna research swarm searched recent public GitHub issues/discussions, OpenAI Developer Community, Hacker News, SDL, Steam for Linux, Proton, Godot, Unity/Unity MCP, Linux gaming projects, controller tooling, and accessibility-oriented projects. Source findings are observations about the linked authors, not OpenController incidents or prevalence claims.
Fresh signals
| Source | Observed report and workaround | Fit/confidence |
|---|---|---|
| Asahi-map #6, 2026-09-29 | A systemd service opens /dev/uinput before udev applies access, exits after roughly 80 ms, and misses a later permission change. The thread suggests a static node, module preload, or bounded retry. |
Strong Linux helper fit; moderate evidence (one detailed report). OpenController already emits a static-node udev rule; first-open retry remains a distinct candidate. |
| Omarchy #8373, 2026-08-26 | Steam sees a virtual pad while games receive no input because /dev/uinput remains root-owned mode 0600. The report suggests a systemd-tmpfiles permission rule. |
Good Linux diagnostics/docs fit; one report. A retry cannot fix persistent denial, so permission ownership must remain an explicit administrator choice. |
| Godot #105047, 2025-04-05; SDL #13177, 2025-06-05 with 2026 follow-up | Reports describe stale axes/buttons after device loss/reconnect; workarounds include reconnecting or rebooting, and later Godot comments report a fix. | Possible opt-in stale-control lease in core; medium repository fit and low-to-medium evidence because failures belong to input consumers/drivers. API and cleanup semantics need review. |
| Accessible-Chess #5, 2026-08-14; OpenAI game-development thread, 2026-02-16 | One app requested user-owned aliases, conflict warnings, and keyboard recovery; a separate game demo added arrow/space bindings after a player could only use WASD. | Possible user-configurable semantic action-map example/docs; low-to-medium evidence, good API fit. This SDK does not capture physical input or own a consuming app’s settings UI. |
| libvirtualhid #140, 2026-09-11 | After Windows sleep/resume, a VHF device stopped working while its broker remained running; the author reports reboot was required. | Exploratory Windows diagnostic opportunity; low confidence and not ready to build because OpenController’s VHF driver is a generated kit without a maintained signed test installation. |
| Quasar #348, 2026-09-23 | A Steam app-container report describes swapped face buttons despite a standard browser mapping. | Already tracked under existing OpenController issue #21; do not create a duplicate. Existing #9 tests OpenController report encoding but do not prove Steam/SDL consumer identity. |
Related signals not selected for new issues
- Steam for Linux #13665 is already in the Cycle 7 source log; Steam #11623 overlaps deferred helper readiness Wait for native helper readiness acknowledgement #46.
- Maida #5 reports WebKitGTK without
Gamepad.vibrationActuator; existing HID/native docs already say platform translation is conditional. Revisit only if a concrete docs gap remains after audit. - OpenAI forum game-player request, browser-use #4939, Unity MCP #1283, and HN computer-use latency reports mainly concern perception, screenshots, or model timing outside this SDK boundary.
- macOS DriverKit approval limits are already stated in the doctor and setup docs. SDL/Steam physical-device mapping and haptics issues belong upstream unless OpenController-specific behavior is isolated.
Coverage gaps
Reddit requests returned HTTP 403. Some search-engine, official documentation, and accessibility-community endpoints also returned 403; Hacker News search had few directly actionable controller reports; Steam Community search was sparse; GitHub search rate-limited some follow-up queries. No first-party OpenController telemetry or user survey is available. Counts and replies in the reviewed issues are not prevalence estimates.
Gate checklist
- Search multiple AI, gaming, platform, controller, and accessibility sources; record direct links and dates.
- Separate observed user reports from interpretation and note workarounds, project fit, confidence, and coverage gaps.
- Audit promising signals against existing issues Add a profile-to-report conformance matrix for gamepad outputs #9, Track tested and unverified host and game compatibility #21, Align native adapter capabilities with configured bridge outputs #33, Design the DualSense adaptive-trigger protocol and ownership boundary #44, and Wait for native helper readiness acknowledgement #46 and the current repository.
- Rank the new opportunities by user value, evidence, fit, cost, and risk; select bounded implementation lanes.
- Create/refresh candidate issues with acceptance criteria, scope limits, and file ownership; set native issue dependencies.
- Record the selected DAG and deferred work in
docs/roadmap/ai-gaming-opportunities.mdthrough a reviewable decision PR, then close this gate to unblock selected lanes.
Initial candidate shortlist
- Linux uinput first-open retry and persistent permission diagnostics (highest fit; split transient retry from administrator-owned permission changes if needed).
- Optional expiry lease for persistent controller state (safety value, but requires careful API and timer-race design).
- User-configurable semantic action-map example and boundaries (good SDK fit, limited external recurrence evidence).
- Windows VHF post-resume diagnostics (defer pending a maintained installed driver and host test path).
DAG and tracking
This gate belongs to Cycle 8 milestone 7. Candidate issues created from the review are blocked by this issue until the decision PR closes it. The recurring research/build/review/merge loop is tracked in #55. Project V2 creation remains blocked by missing integration Projects write access; use milestone 7, cycle-8 labels, and GitHub issue dependencies meanwhile.
Cycle 8 decision (2026-10-05)
Ranked build backlog
| Rank | Issue | Decision | User value, evidence, repository fit | Cost and risk |
|---|---|---|---|---|
| 1 | #58 bounded Linux uinput first-open retry | Selected | Helps Linux users whose helper starts before /dev/uinput access settles. Two recent, detailed external reports describe distinct startup/access failures; one is transient. Direct fit in the C helper. |
Low/medium; bounded retry, deterministic helper coverage, no permission mutation. |
| 2 | #59 persistent uinput permission guidance | Selected | Helps users diagnose existing root-owned/restrictive device nodes. Same two reports, but the persistent case needs a separate remedy. Direct fit in doctor/docs. | Low/medium; user-reviewed guidance only, no privileged writes. Independent of #58. |
| 3 | #61 semantic action-map example | Selected | Helps app/agent developers define alternative caller-owned input bindings for stable semantic actions. Two adjacent examples, with low-to-medium recurrence confidence. High API fit and a cheap, hardware-free runnable example. | Low; no new API, input capture, settings UI, or host/game claims. |
| 4 | #60 opt-in persistent-state expiry lease | Deferred | Could limit stale persistent output, but cited reports concern consumer/driver disconnect state and later report an upstream fix; they do not demonstrate an OpenController failure or that an in-process lease solves it. | Medium/high due timer, queue, cleanup, and error-precedence semantics. Revisit with a reproducible SDK-specific case or stronger product evidence. |
| 5 | #62 Windows post-resume health | Deferred | One VHF report was closed after the upstream project reported a fix. OpenController lacks a maintained installed-driver test path. | Not currently buildable or verifiable; first establish driver/test ownership. |
Selected DAG and build goal
The gate and DAG decision are recorded in roadmap PR #63. Once #63 merges and closes this gate, three implementation lanes may run in parallel:
flowchart TD
G[Cycle 8 gate #57] --> D[Decision and ranking PR #63]
D --> L[#58 bounded uinput retry]
D --> P[#59 permission diagnosis and guidance]
D --> A[#61 semantic action-map example]
L --> R[Independent exact-head review and required checks]
P --> R
A --> R
R --> M[Merge each ready PR; update roadmap and issue DAG]
M --> N[Open Cycle 9 research gate]
G -. deferred .-> X[#60 state expiry lease]
G -. deferred .-> W[#62 Windows VHF health]
The selected implementation issues are intentionally parallel: their owned files and behavior do not depend on one another. Stack PRs only when a real code or file dependency exists. The decision PR is the shared prerequisite for all three lanes.
Gate checklist update
- Rank opportunities by value, evidence, fit, cost, and risk; select bounded lanes and record deferrals.
- Create evidence-backed issues with acceptance criteria, file ownership, labels, and milestone placement.
- Set native blocked-by edges from this gate to the selected issues.
- Record the selected DAG in the roadmap decision PR before implementation starts.
The public-web source log and coverage limits above remain the evidence record. These reports are examples, not prevalence estimates or OpenController incident reports.
Activity