Skip to content

fix: make public claims precisely true, plus three small fixes - #13

Merged
LucaGerlich merged 8 commits into
mainfrom
fix/claims-and-quick-fixes
Oct 11, 2026
Merged

LucaGerlich merged 8 commits into
mainfrom
fix/claims-and-quick-fixes

Conversation

@LucaGerlich

Copy link
Copy Markdown
Owner

First PR from the post-launch audit (2026-10-11). Corrects every public claim the code contradicts and fixes three small bugs. No feature changes.

Claims (the product's pitch is precision about Input Monitoring)

  • Structured data on the site still said "never key codes" — the exact sentence corrected in August. The app reads the HID usage code to detect modifiers, then discards it.
  • "Nothing leaves your Mac" on the Welcome screen ignored Sparkle's automatic daily update check. Welcome, README, site and SECURITY.md now describe the update check and update downloads.
  • "⌘-Tab never changes your layout" was false: Tab is not a modifier. Now: a lone modifier is ignored; any other key counts as typing.
  • "Right the moment you start typing" → it switches about 0.4 s after typing starts, so the first character or two can land in the old layout.
  • SECURITY.md: the usage code is a local constant; the storage list is complete (only mapped keyboards are stored, plus Sparkle's bookkeeping); redaction runs when an entry is recorded; Sparkle checks a valid code signature, not notarization.
  • CHANGELOG: only update archives are signed, not the appcast itself (that changes in a later PR).
  • The comparison FAQ now names Keychange, the closest alternative.
  • The historical pre-release audit gets a correction note and no longer names a work account's team ID.

Fixes

  • Debug log flood: while the HID monitor could not start, the same error was appended every second until the 200-entry log held nothing else. Each distinct failure is now logged once; a different failure is still logged.
  • F6 treated as a modifier: usage 0x3F is F6 on the HID keyboard page (it is Fn only as a Carbon virtual keycode), so a lone F6 never triggered a switch.
  • An always-true test assertion (String != nil) now checks the actual warning text.
  • README gains the Homebrew install section that was stranded on docs/public-polish.

Test plan

  • RED first: the F6 test and the log-flood test failed against the old code for the expected reasons (usage 63 → modifier; 5 identical error entries).
  • 38 unit tests + 2 UI tests pass locally.
  • No compiler warnings in app or test sources.
  • JSON-LD parses; all 7 FAQ questions and answers are identical between JSON-LD and the visible page.
  • Independent review of every changed claim against the code.
  • CI green.
  • After merge: check the live site (GitHub Pages, ~1 min).

- Structured data on the site still said the app never reads key codes;
  it reads the usage code to detect modifiers, then discards it.
- "Nothing leaves your Mac" ignored Sparkle's automatic daily update
  check; the welcome text, README, site and SECURITY.md now say so.
- Tab is not a modifier, so the claim that Cmd-Tab never changes the
  layout was false. Describe what is actually ignored.
- The layout switches within half a second of the first key press, not
  "the moment you start typing".
- SECURITY.md: the usage code is a local constant, the storage list is
  complete, redaction runs on record rather than export, and Sparkle
  checks a code signature rather than notarization.
- CHANGELOG: only update archives are signed, not the appcast itself.
- Name Keychange, the closest alternative, in the comparison FAQ.
- Note the corrected network claim in the pre-release audit and drop the
  work account's team ID from the published page.
The previous assertion compared a non-optional String to nil, so it could
never fail.
The permission poll retries the HID monitor every second. While it cannot
start, the same error was appended to the debug log on every tick, so
within about 200 seconds the 200-entry log - the one users are asked to
attach to bug reports - held nothing else. Log each distinct failure once,
together with the existing de-duplicated failure record.
Usage 0x3F was meant to be Fn, but 0x3F is Fn only as a Carbon virtual
keycode. On the HID keyboard page it is F6, so a lone F6 press never
triggered a switch. The real Fn/Globe key arrives on Apple's vendor page
and is already filtered out before the modifier check.
- README and the Settings footer still implied Cmd-Tab is ignored; say
  that only a lone modifier is, and include Control.
- Only keyboards with a mapping or fallback are stored, not every
  keyboard you have used.
- Network traffic also includes downloading an update you accept.
- The layout switches about 0.4 s after typing starts on the other
  keyboard, so the first characters can still land in the old layout.
- Sparkle verifies a valid code signature; do not claim a team check.
- Phrase the macOS 13 and fallback points as InputPilot features rather
  than as gaps in Keychange.
- Drop a link to a page that is not published yet.
Deduplicating repeated failures must not swallow a different one.
@LucaGerlich
LucaGerlich merged commit 0b91858 into main Oct 11, 2026
1 check passed
@LucaGerlich
LucaGerlich deleted the fix/claims-and-quick-fixes branch October 11, 2026 00:32
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