From a2f096a4a295d4e51db108093123448673e1287c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 23 Aug 2026 17:39:23 +0000 Subject: [PATCH] refactor(recording): move gesture telemetry out of the daemon zone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `recording-telemetry.ts` imports only `node:fs`, `node:path` and `@agent-device/contracts/platform` — it has no daemon dependency and is recording-domain file serialization, not daemon behavior. Sitting under `src/daemon/` made the platform-runtime composition root reach up into daemon-server (rank 4) for it. Move it to `src/recording/telemetry.ts`, alongside `output-path.ts` and `overlay.ts`, which share its shape (node builtins plus contracts/kernel). Pure rename: the module body is unchanged and the three import sites are retargeted. This removes one of the composition root's four upward value edges — the only one reaching rank 4. Confirmed with `pnpm depgraph`: those edges drop from 4 to 3 and the daemon-server target is gone, with cycle, back-edge and type-inversion counts unchanged. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01WWLBCBDBpdR8z1aCmDerXS --- src/daemon/handlers/record-runtime-response.ts | 2 +- src/platform-runtime-screen-recording-finalizer-host.test.ts | 2 +- src/platform-runtime-screen-recording-finalizer-host.ts | 2 +- src/{daemon/recording-telemetry.ts => recording/telemetry.ts} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename src/{daemon/recording-telemetry.ts => recording/telemetry.ts} (100%) diff --git a/src/daemon/handlers/record-runtime-response.ts b/src/daemon/handlers/record-runtime-response.ts index 2b8b68286..a585ab818 100644 --- a/src/daemon/handlers/record-runtime-response.ts +++ b/src/daemon/handlers/record-runtime-response.ts @@ -6,7 +6,7 @@ import type { RuntimeOperationUnavailability, } from '@agent-device/contracts/platform'; import type { DaemonArtifact, DaemonResponse } from '../types.ts'; -import { deriveRecordingTelemetryPath } from '../recording-telemetry.ts'; +import { deriveRecordingTelemetryPath } from '../../recording/telemetry.ts'; export function buildRecordingStartResponse( snapshot: ScreenRecordingLiveSnapshot, diff --git a/src/platform-runtime-screen-recording-finalizer-host.test.ts b/src/platform-runtime-screen-recording-finalizer-host.test.ts index 99fb58a7f..d28288371 100644 --- a/src/platform-runtime-screen-recording-finalizer-host.test.ts +++ b/src/platform-runtime-screen-recording-finalizer-host.test.ts @@ -12,7 +12,7 @@ vi.mock('./utils/video.ts', () => ({ waitForPlayableVideo: video.playable, isPlayableVideo: video.isPlayable, })); -vi.mock('./daemon/recording-telemetry.ts', () => ({ persistRecordingTelemetry: telemetry })); +vi.mock('./recording/telemetry.ts', () => ({ persistRecordingTelemetry: telemetry })); vi.mock('./recording/overlay.ts', () => ({ getRecordingOverlaySupportWarning: () => undefined, overlayRecordingTouches: vi.fn(async () => {}), diff --git a/src/platform-runtime-screen-recording-finalizer-host.ts b/src/platform-runtime-screen-recording-finalizer-host.ts index 5a0e37c09..5d358cc30 100644 --- a/src/platform-runtime-screen-recording-finalizer-host.ts +++ b/src/platform-runtime-screen-recording-finalizer-host.ts @@ -4,7 +4,7 @@ import { overlayRecordingTouches, trimRecordingStart, } from './recording/overlay.ts'; -import { persistRecordingTelemetry } from './daemon/recording-telemetry.ts'; +import { persistRecordingTelemetry } from './recording/telemetry.ts'; import { isPlayableVideo, waitForPlayableVideo, waitForStableFile } from './utils/video.ts'; export function createScreenRecordingFinalizer(): ScreenRecordingRuntimeHost['finalize'] { diff --git a/src/daemon/recording-telemetry.ts b/src/recording/telemetry.ts similarity index 100% rename from src/daemon/recording-telemetry.ts rename to src/recording/telemetry.ts