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
Omit runner uptime internals from interaction wire responses.
Filters currentUptimeMs alongside the existing runner timing/default tap-option noise while keeping the unsanitized result available to daemon history and recording telemetry. Extends the interaction response-shape contract with a noisy default tap result matching the Bluesky dogfood report.
pnpm --pm-on-fail=ignore exec vitest run --project interaction-contract test/integration/interaction-contract/interaction-response-shape.contract.test.ts
pnpm --pm-on-fail=ignore typecheck
pnpm --pm-on-fail=ignore lint
pnpm --pm-on-fail=ignore test:integration:provider (passed outside sandbox after sandbox listen EPERM)
pnpm --pm-on-fail=ignore test:coverage (passed outside sandbox after sandbox listen EPERM)
pnpm --pm-on-fail=ignore build
Live Bluesky iOS check: node bin/agent-device.mjs press @e18 --json --session issue-1077-bluesky --platform ios returned x, y, message, ref/selector metadata, and no gestureStartUptimeMs, gestureEndUptimeMs, currentUptimeMs, count, intervalMs, holdMs, jitterPx, or doubleTap.
Reviewed the diff — the fix is correct and consistent with the existing gestureStartUptimeMs/gestureEndUptimeMs handling: it strips currentUptimeMs from the wire copy while the unsanitized result keeps it, and recording still reads what it needs from the merged interaction result / record-start anchor (not this field). All 8 keys in NOISY_DEFAULT_TAP_RESULT filter cleanly, so assertExactKeys still sees exactly REF_KEYS. No correctness concerns.
Two actionable notes:
Fail-open denylist is the recurring root cause.shouldKeepWireBackendField defaults to return true, so every new runner backend field is client-facing until someone adds a case — this is the 2nd runner internal to leak this way (gesture uptimes, now currentUptimeMs). Worth considering inverting to an allowlist of known wire keys (fail-closed) so the next runner internal doesn't ship as noise by default. The tradeoff is enumerating legitimate passthrough keys across tap/type/longPress/scroll/etc.; if that's too broad to do here, tracking it as tech debt would still help close the class.
Noise stripping is only exercised on the runtime @ref path. The runner-payload branch (direct selector, assertCanonicalDirectSelector) calls the same sanitizeWireBackendData but is only fed a clean payload. Optional: feed a noisy result through one direct-selector test too, since it's a structurally separate call site and this suite's job is nailing the wire shape across every envelope.
Fallow is the remaining blocker on this PR. The failed job reports one complexity finding: src/daemon/handlers/interaction-touch-response.ts:182 shouldKeepWireBackendField (10 cyclomatic, 31.6 CRAP). Please simplify/split that helper and rerun pnpm check:fallow --base origin/main before requesting review.
Rechecked after the Fallow fix. The sanitizer simplification preserves the intended wire filtering, and the direct-selector path now also gets noisy backend data in the response-shape contract. Checks are green; no remaining blockers from this review pass.
Preview removed because the pull request was closed.
2026-07-07 14:54 UTC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ready-for-humanValid work that needs human implementation, judgment, or maintainer merge
1 participant
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Omit runner uptime internals from interaction wire responses.
Filters
currentUptimeMsalongside the existing runner timing/default tap-option noise while keeping the unsanitized result available to daemon history and recording telemetry. Extends the interaction response-shape contract with a noisy default tap result matching the Bluesky dogfood report.Closes #1077.
Validation
pnpm --pm-on-fail=ignore formatpnpm --pm-on-fail=ignore exec vitest run --project interaction-contract test/integration/interaction-contract/interaction-response-shape.contract.test.tspnpm --pm-on-fail=ignore typecheckpnpm --pm-on-fail=ignore lintpnpm --pm-on-fail=ignore test:integration:provider(passed outside sandbox after sandboxlisten EPERM)pnpm --pm-on-fail=ignore test:coverage(passed outside sandbox after sandboxlisten EPERM)pnpm --pm-on-fail=ignore buildnode bin/agent-device.mjs press @e18 --json --session issue-1077-bluesky --platform iosreturnedx,y,message, ref/selector metadata, and nogestureStartUptimeMs,gestureEndUptimeMs,currentUptimeMs,count,intervalMs,holdMs,jitterPx, ordoubleTap.