You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Field bug (second laptop, diagnosed from power-debug logs 2026-07-16): the
MultitouchSupport stream died 2026-07-15 with NO system sleep afterwards, so
v0.3.0's wake-only recovery never fired and gestures stayed dead until relaunch
while permissions showed green (input side dead, not policy — route() logged
nothing). The specific killer is unconfirmed (owner: probably no display
change), so recovery now detects death by evidence instead of one cause:
- StreamHealthPolicy (TilerCore, TDD, 15 tests): device-drift set-compare +
silence self-heal gates (silent ≥ 10 min, pointer/scroll HID ≤ 60 s old,
unlocked, ≥ 10 min cooldown — external-mouse churn capped).
- TouchStream: optional MTDeviceGetDeviceID symbol (probe-verified present,
IDs stable), attachedSignature captured at start, currentSignature() fresh
enumeration (count-only fallback if the symbol ever vanishes), frame
liveness clock stamped by the C callback (NSLock-guarded).
- AppDelegate guardian: shared rebuildTouchStream(reason:) — wake path folded
in; debounced display-reconfiguration rebuild; unlock drift check; 60 s
watchdog (drift, then self-heal policy); screen-lock tracking.
- Diagnostics (owner: "не жалей отладки"): stream start/rebuild lines with
device IDs and reasons, drift old→new, display-change screen counts,
self-heal evidence; healthy ticks log nothing; NSLog mirrors rebuilds.
Specs: app-shell "Gesture recovery after system wake" broadened to "Gesture
stream recovery" (4 triggers, no-false-positive rule); power diagnostic
logging gains the stream lifecycle. Change archived as
2026-07-16-fix-touch-stream-resilience; version 0.3.0 → 0.3.1.
Verified: 162 non-AX tests green; power-acceptance + run-acceptance (signed
.app) ALL PASS; smoke on the signed build — launch v0.3.1 + device-ID line
logged, zero spurious rebuilds across a watchdog tick. Field verification of
the original death happens on the second laptop after this release.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0 commit comments