Tracking issue: #20
| Item | Value |
|---|---|
| Runtime baseline commit | be09b042d8386083cc49ecba88828a658e6d4257 |
| Experiment branch base | performance-baseline-v1 |
| Release helper SHA-256 | 8ce79405bf59aa2afd516f1f6e0426887609993cd29d842bcba2fe03abff5a2b |
| Release helper bytes | 432552 |
| Architecture | arm64 |
| Swift | Apple Swift 6.3.2, Swift 5.9 package mode |
All isolated feature branches in this series start from the
performance-baseline-v1 tag, which includes the measurement infrastructure.
Worker comparisons use the runtime baseline values above because issue #20 did
not change the release helper. Runtime candidates are not merged to main
until their isolated reports are complete.
| Issue | Branch | Performance report | Isolated status | Interaction status |
|---|---|---|---|---|
| #21 | fix/reset-interrupted-gesture |
reset-interrupted-gesture.md |
accept | gesture interaction accepted |
| #22 | fix/use-cgevent-movement-deltas |
cgevent-movement-deltas.md |
reject | not applicable |
| #23 | fix/abort-stale-gesture-holds |
stale-gesture-hold.md |
accept | gesture interaction accepted |
| #24 | perf/reset-scroll-smoothing-state |
reset-scroll-smoothing-state.md |
accept | clean-idle and single-device physical checks passed; active performance pending |
| #25 | fix/preserve-scroll-delta-fields |
preserve-scroll-delta-fields.md |
accept | clean-idle and single-device physical checks passed; active performance pending |
| #26 | refactor/standardize-config-defaults |
standardize-config-defaults.md |
accept | not applicable |
| #27 | release/public-distribution-readiness |
public-distribution-readiness.md |
accept | not applicable |
Valid isolated states are pending, accept, redesign, and reject.
| Group | Candidates | Reason | Status |
|---|---|---|---|
| Gesture recovery | #21 + #23 | Both cancel or reset held-gesture state | accept |
| Gesture movement | #22 + #23 | Both execute on active movement paths | not applicable; #22 rejected |
| Scroll processing | #24 + #25 | Both change the transformed scroll callback | clean-idle and single-device physical checks passed; active performance pending |
| Runtime set | All isolated runtime candidates marked accept |
Detect cumulative or nonlinear cost | clean-idle and single-device physical checks passed; active performance pending |
| Branch | Runtime commit | Helper bytes | __TEXT bytes |
Status |
|---|---|---|---|---|
release/final-feature-candidate |
727060f |
433528 | 212992 | static, packaging, clean-idle, and single-device physical checks complete; owner gates remain |
The complete candidate combines #26 and #27 with the optimized runtime set
without changing the runtime-only helper size or text layout. Use
final-feature-candidate.md for the final delegated validation record.
| Gate | Status | Evidence or remaining scope |
|---|---|---|
| Integrated clean-idle measurement | pass | One controlled 150.086-second run at measured commit 727060f |
| CPU and wakeup stability | pass | Zero CPU-time, package-idle wakeup, interrupt-wakeup, context-switch, and syscall growth in that run |
| Thread and memory stability | pass | Two stable threads; RSS flat at 10,600,448 bytes and physical footprint flat at 3,375,584 bytes |
| Network, normal logging, and stop lifecycle | pass | Zero sockets, zero normal log files, and no worker remaining afterward |
| Physical MX Master behavior | pass | Maintainer reported gestures, one action per hold, stale cancellation, side buttons, ratchet/free-spin, direction reversal, and pause recovery all worked |
| MacBook trackpad behavior | pass | Maintainer reported vertical/horizontal scrolling and trackpad gestures remained normal with MX-only smoothing enabled |
| Mouse power cycle and disconnect/reconnect | pass | Maintainer reported gestures, scrolling, and side buttons worked after both recovery paths; transport was not separately recorded |
| Mac sleep and wake | pass | Maintainer reported worker and mouse behavior recovered and all mapped controls worked after wake |
| Controlled active-input performance | pending | Functional active use passed, but CPU and latency were not measured under a fixed combined workload |
| Publication-owner gates | unchanged | Developer ID, notarization, clean-machine Gatekeeper checks, repository visibility, license, and signed-out release links remain owner-controlled |
The physical result was reported by the maintainer on 2026-07-27 from one MX Master 3S on macOS 26.5.1. It does not establish compatibility with every MX Master model, connection transport, Mac, or macOS release.
- Create temporary
perf/candidate-integrationfromperformance-baseline-v1. - Apply accepted candidates one at a time without merge commits.
- Rebuild and rerun strict idle after every addition.
- Run each feature-specific active workload.
- Compare the cumulative result with the baseline and individual deltas.
- Investigate any combined cost that exceeds expected measurement noise.
- Record the final accept, redesign, or reject decision here.
- Delete the temporary branch when the decision is complete.
This branch changes documentation, source-archive exclusions, CI packaging checks, and development-only measurement tools. It does not change Swift worker or app sources.
| Check | Result |
|---|---|
| Release helper byte-identical to baseline | pass: 432552 bytes, identical SHA-256 |
| Strict idle measurement | 150.085 s; 0.001569152 s CPU; 0.001046% of one core |
| Idle wakeups | pass: 0 package-idle and 0 interrupt wakeup growth |
| Worker threads | pass: 2 minimum and maximum after 10 s warm-up |
| RSS | 7.547-8.812 MiB; exceeds the 8 MiB target transiently |
| Physical footprint | 3.141-3.157 MiB with no sustained growth |
| Leak result | pass: 0 leaks, 0 leaked bytes |
| No network socket | pass |
| No normal log file | pass |
| Lifecycle | pass: 25 start/duplicate-start/status/stop cycles |
| Development probes absent from sharing ZIP | pass |
| Tests absent from release helper and sharing ZIP | pass |
| App archive size | 438594-byte fresh baseline; 438631-byte candidate (+37 bytes, +0.0084%) |
| Local tests | blocked: selected Command Line Tools do not provide XCTest |
| GitHub Actions tests | pass: unit tests, release build, linkage check, and archive verification |
| Decision | accept |
- MacBook Pro
Mac16,8, Apple Silicon - macOS 26.5.1 (25F80)
- Apple Swift 6.3.2
- 10-second untimed warm-up, then six samples at 30-second intervals
- normal worker mode with debug disabled
- no matching MX Master was detected during this run
- raw evidence remained under
/tmpand was not committed
No app-bundle input changed on this branch. A fresh baseline build was 504 bytes larger when uncompressed despite producing a 37-byte smaller ZIP, so the archive difference is build/signing/compression variation rather than an added runtime artifact.
The current unchanged baseline does not satisfy a literal RSS ceiling of 8 MiB on every sample. Future candidate decisions therefore retain 8 MiB as the optimization target while requiring repeated, baseline-relative RSS and physical-footprint comparisons. No branch may claim zero impact by selecting only a favorable sample.