Repository navigation
Cotabby for Windows v0.3.1-doubletap-test — double-tap Tab acceptance (test build)
Pre-release
Pre-release
Cotabby for Windows — double-tap Tab acceptance (test build)
This is a test build for owner validation, not a stable release. It is a
prerelease and does not replace v0.3.0 as the latest stable download.
Source
- Commit:
39a300ca8b82e0a42a9d061ae4bcb1b8782079ad(branchcodex/upstream-double-tap, draft PR #4) - Ports upstream FuJacob/cotabby #840 double-tap acceptance.
- Zip sha256:
02425a7573ed82c1dc7d1de10651c1b1b79f73ea89243ad2ca83e3e59a68a3fc
What is new
- Opt-in double-tap Tab: Settings → Shortcuts → Accept Entire Suggestion → Double-tap Tab.
The first Tab accepts a word or phrase immediately; a second distinct Tab within 300 ms
accepts the remainder of the same suggestion, once. Repeats stay word-by-word, and moving
the pair is retired by any intervening key, session change, focus change or settings change. - Shift+Tab stays navigation (upstream matches the accept key by keycode plus the whole
modifier set), so a reverse-navigation key press reaches the app instead of being eaten. - Acceptance is serialized and honest. A queued second press is resolved against the live
suggestion instead of being discarded; the 300 ms window is measured from the physical key
events; a word boundary is derived from confirmed insertions rather than a lagging
accessibility read; and an insertion that landed but could not be committed is reported as
such instead of as a refusal. - Failed insertions do not advance or arm the suggestion, the acceptance queue recovers
from a processor fault, and disposal completes every captured key exactly once. - Field identity now uses the UI Automation runtime id, and a field whose provider exposes
none is treated as unproven rather than unowned, so double-tap still works there.
Verified
- 274 portable tests pass; Windows CI run
38570074952 on this exact
commit passed tests, compilation and packaging. - Windows CI also runs the real keyboard hook and UI Automation against WPF fixtures: 9/9 cases
(double tap, held key, unowned Tab, Shift+Tab, cross-process and same-process focus change, held
dispatcher, stale snapshot). - Credential-field privacy proof (real UIA) and native CPU runtime load passed; every packaged byte
is hashed inPACKAGE-MANIFEST.json, and the extracted ZIP was verified member by member.
About this publication
- Published as a prerelease from the branch commit above (draft PR #4), not from
main; it does not
replace v0.3.0 as the latest stable download. No merge and no stable tag were performed. - The repository's tag-triggered Release Windows build workflow is intentionally not used for this
test tag: it requires theVERSIONfile to equal the tag, which a-testtag cannot satisfy. The asset
here is the artifact of the green verification run on this exact commit, byte-verified before upload.
Known limits — please read before testing
- A Tab captured by the accept path whose insertion is then refused is NOT replayed. That key
press is reported, not re-delivered: the app may miss it. This is deliberate; a safe replay path
does not exist yet. - The synthetic hook proof uses a fixture-directed insertion adapter and injected keys. It is not
proof for the productionSendInputinserter or for physically held keys. - Live model suggestions, GPU behaviour and real host applications are not verified by
automation and need owner testing. - Global opt-in on the Tab key only: no per-app shortcut overrides, no typing-history collection.
Selecting Double-tap Tab replaces the previous full-accept key choice rather than keeping it dormant.
How to test
- Extract the complete ZIP into a new folder and keep
runtimes\win-x64besideCotabby.exe. - Run
Cotabby.exeas a standard user (no .NET install needed); your existing settings and model
cache are used. - Settings → Shortcuts → choose Double-tap Tab, then in a normal text field try: one Tab, two
quick Tabs, holding Tab, two slow Tabs, and Shift+Tab. - Check
C:\tmp\cotabby-live.logfor model load and a constrained decode. Do not share the raw log —
it can contain your typed text.