Skip to content

fix(srt): preserve hotkeys and player bindings - #196

Merged
Microck merged 1 commit into
mainfrom
fix/srt-hotkeys
Oct 1, 2026
Merged

Microck merged 1 commit into
mainfrom
fix/srt-hotkeys

Conversation

@Microck

@Microck Microck commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Summary

having akron enabled blocked all speedrun tool hotkeys, even with the overlay closed. beta 83 kept a diagnostics text handler registered, which SRT treats as active typing. akron also silently removed SRT's Tab bind on level entry.

this keeps the text handler registered only while a diagnostics field has focus and releases it on close, scene changes, overlay input reset, and render failure. SRT bindings are left alone. previously erased Tab binds need to be reassigned once in SRT's options.

Verification

  • scoped to the two input bugs
  • matching player docs and changelog updated
  • focused tests added to the existing overlay suite
  • no feature classification changes
  • live game evidence included below and in the verification report
  • no secrets, private paths, local config, or captures committed
  • submitted at the maintainer's request under the contribution license
  • human review/testing: none reported; agent testing is disclosed below

Checks run

dotnet build Akron.sln --configuration Release --no-restore --nologo -p:ContinuousIntegrationBuild=true
dotnet test tests/akron-tests.csproj --configuration Release --no-build --nologo
make format-check

release build passed with 0 warnings/errors. all 1,982 tests passed, none skipped. package integrity and the packaged DLL were also checked.

Live verification

  • map: Celeste/1-ForsakenCity, transient debug save, normal mode
  • environment: Linux Mint 22.3/X11, jc141 Wine launcher, Celeste 1.4.0.0, Everest 6418 stable, SRT 3.27.20
  • baseline: reproduced beta 83's permanent text subscription, blocked keyboard/controller callbacks, and removal of Tab on level entry
  • fixed build: keyboard F7/F8/F4 and SDL virtual controller X/B/Y invoked real save/load/clear actions; RightShoulder changed the room timer
  • focus: one subscriber while typing; SRT save/room-timer callbacks stayed blocked; Cancel, Escape, controller cancel, scene changes, confirmation/result screens, and overlay hide released it
  • restart: Tab remained saved and keyboard save/load/clear plus controller save worked after a fresh launch
  • cleanup: original mod and all 250 backed-up save/settings files restored byte for byte; observer mod removed

controller testing used SDL virtual input, not a physical controller. supplementary emoji still become a replacement character in the existing native pipeline; accented/Greek text works. no reports were sent to the live support service.

focused diagnostics field during the live input check

AI assistance disclosure

  • agent_name: OpenAI Codex
  • agent_version: codex-cli 0.159.2, as reported by the installed CLI
  • model_used: model_not_exposed; the session identifies GPT-6 but does not expose the exact provider routing identifier
  • human_testing: none reported. the agent ran the automated checks and remote game verification. the maintainer requested this ready-for-review PR; no human testing or approval is claimed.
  • contribution_summary: fixed SRT hotkey suppression and automatic Tab removal, with focused tests, player docs, changelog, and live verification.

@Microck
Microck deployed to release-build September 30, 2026 22:27 — with GitHub Actions Active
@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Advanced

Run ID: fc2b1d0f-aa2b-4a1f-8caf-16bdd36663a2

📥 Commits

Reviewing files that changed from the base of the PR and between c2360b0 and ab3a23d.

📒 Files selected for processing (9)
  • CHANGELOG.md
  • Source/Interop/akron-interop.cs
  • Source/Module/AkronModule.cs
  • Source/Overlay/akron-diagnostics-menu.cs
  • Source/Overlay/akron-imgui-renderer.cs
  • docs/feature-guide/interface.mdx
  • docs/player-guide/interop.mdx
  • docs/srt-hotkey-verification.md
  • tests/overlay-tests.cs
💤 Files with no reviewable changes (2)
  • Source/Module/AkronModule.cs
  • Source/Interop/akron-interop.cs

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.


This PR limits diagnostics text input to active fields and leaves Speedrun Tool bindings unchanged.

  • Akron releases text input when the diagnostics form closes or stops accepting input, so SRT hotkeys can work outside active fields.
  • Akron no longer removes SRT’s Tab binding; users may need to restore a binding cleared by an older Akron version.
  • Tests cover text-input subscription and session cleanup. The supplied summary reports successful tests and format checks; reviewer findings and approval status are unavailable.

Walkthrough

The renderer now subscribes to text-input events only when the diagnostics form accepts input, ImGui requests it, and game-window input is active. The menu ends the input session on confirmation, upload, or close. Akron also removes the startup logic that changed Speedrun Tool’s Tab binding. Tests and documentation cover these changes.

Sequence Diagram(s)

sequenceDiagram
  participant AkronDiagnosticsMenu
  participant AkronImGuiRenderer
  participant ImGui
  participant EverestTextInput
  AkronImGuiRenderer->>AkronDiagnosticsMenu: Check AcceptsTextInput
  AkronImGuiRenderer->>ImGui: Check whether text input is wanted
  AkronImGuiRenderer->>EverestTextInput: Subscribe when input conditions are active
  EverestTextInput->>AkronImGuiRenderer: Deliver text-input events while subscribed
  AkronDiagnosticsMenu->>AkronImGuiRenderer: End input session on confirmation, upload, or close
  AkronImGuiRenderer->>EverestTextInput: Unsubscribe and clear pending characters
Loading

Priority: ➖ Normal

Merge Risk: ⚪ Minimal · up to ab3a2

The change limits Akron's text-input handling to focused diagnostics fields and stops modifying Speedrun Tool's Tab binding. No concrete merge-blocking risk was found. Native event dispatch was verified only through the author's reported live testing.

Security Architecture Review

Security architecture risk: ⚪ Minimal · up to ab3a2

The change limits text capture to active diagnostics fields and stops rewriting player hotkeys. No material security risk was identified in the assessed change.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The demonstrated exposure is the local game process's shared input handling, player-owned SRT binding state and the existing diagnostics submission path. The changes narrow input registration and remove foreign configuration mutation rather than increasing the authority exercised over those resources.

Security Findings and Attack Paths

  • inferred — No introduced attack path was established from local text input to an unguarded diagnostics upload. Capturing characters remains separate from sending a report, and the assessed send changes add cleanup without removing submission checks or introducing another sink.

Trust Boundaries and Controls

  • observed — The diagnostics form describes the submitted information and warns that user text is sent as written. Endpoint validation requires HTTPS without embedded credentials, query or fragment. These are existing submission controls; this PR's added boundary control is narrower text-input eligibility.

Resilience and Maintainability Implications

  • observed — The cleanup design releases the shared event subscription and discards pending text across session termination and rendering failure. This prevents the assessed failure paths from retaining renderer-owned text capture into recovery or a subsequent session.
🚥 Pre-merge checks | ✅ 1
✅ Passed checks (1 passed)
Check name Status Explanation
Documentation Impact ✅ Passed The pull request changes two visible input contracts: diagnostics text input is active only for editable fields, and Akron no longer clears Speedrun Tool’s Tab binding. Matching documentation is prese…
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Microck

Microck commented Sep 30, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@Microck
Microck merged commit b01ab2e into main Oct 1, 2026
2 checks passed

This branch was successfully deployed

1 active deployment
release-build — ab3a23da Deployed Sep 30, 2026 by Microck via Build and test #846
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant