Skip to content

feat(sdk): start an embedded runtime from the main entry - #3843

Merged
thymikee merged 10 commits into
mainfrom
feat/host-entry-3757-v2
Oct 20, 2026
Merged

thymikee merged 10 commits into
mainfrom
feat/host-entry-3757-v2

Conversation

@thymikee

@thymikee thymikee commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Summary

Add startAgentDevice({ stateDir, plugins?, host? }) to the main agent-device entry (#3757, umbrella #3747).

import { startAgentDevice } from 'agent-device';
const host = await startAgentDevice({ stateDir: './.agent-state' });
const devices = await host.client.devices.list();
await host.close();

The runtime loads when called. clientConfig serializes the exact-instance pin; one attach flow applies normal compatibility checks before the pin predicate. The pin comes from the runtime controller's identity. Remove the host subpath and optional logging/disposal/inventory wrappers. Registry validation and runtime cleanup keep their existing owners. Amend ADR 0034 to this simplified contract.

29 files; scope includes the unanswered pinned-attach review and maintainer-requested simplification. No new dependency or gate approval row.

Validation

  • Head: 0eaa324c85d14397041a6c4ef31fc4cf5b61a0b0.
  • pnpm check:affected --run --head HEAD passed, exactCommit=true, clean unchanged checkout; receipt run-pnR5w1 (14:00:46Z). All 36 runnable gates passed, 25 explicit skips, 2 deduplicated. Related tests: 2,375 / 215 files; Node integrations: 146 pass / 12 opt-in skips.
  • Independent review of the three follow-up fixes: no findings. Added installed-signature coverage and restored refusal assertions.
  • Prior packed SDK live evidence remains attributed to 78ce25c6d1: iOS Settings snapshot, session close and clean shutdown. That head's CI passed, including coverage, integrations and native lanes. Follow-up changes affect diagnostics and optional registration metadata; current-head CI passed: 17 success, 1 skipped, 1 neutral, including Apple iOS/macOS, Android/Linux, coverage and integrations. Foreground watch exited 0; no rerun needed.
  • Prior eager-closure evidence: 249 modules; runtime remains lazy. No new eager value import in the follow-up.

thymikee and others added 5 commits October 20, 2026 11:15
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rage

Part of #3747. Refs #3757.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Use distinct host working directories and exercise disposal through the packed consumer. Keep the subprocess source with its integration test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thymikee

Copy link
Copy Markdown
Member Author

Exact-head local validation, independent review and live run for 7c2dfc79fc9fe38ca318b78be2c59eb2d72e4de9.

pnpm install --frozen-lockfile && pnpm build completed. pnpm check:affected --run --head HEAD passed with a clean checkout and exactCommit=true. Related unit suite: 1,948 files, 16,513 passed / 1 skipped. Node integrations: 146 passed / 12 opt-in skipped. R86, R78/R10, closure, export and packaging checks passed without a new suppression. Independent read-only review and follow-up found no remaining findings.

Validation receipt (run-RYwqUF)
{
  "status": "passed",
  "exitCode": 0,
  "refs": {
    "base": "origin/main",
    "head": "HEAD",
    "resolvedBase": "620228b8ca67a69a108fa4fc5041fdd88880b792",
    "resolvedHead": "7c2dfc79fc9fe38ca318b78be2c59eb2d72e4de9",
    "mergeBase": "620228b8ca67a69a108fa4fc5041fdd88880b792"
  },
  "checkoutChanged": false,
  "exactCommit": true,
  "startedAt": "2026-10-20T09:24:34.555Z",
  "finishedAt": "2026-10-20T09:31:08.480Z",
  "results": [
    {
      "id": "format",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "format:check"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/0.log",
      "exitCode": 0,
      "durationMs": 1391,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "lint",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "lint"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/1.log",
      "exitCode": 0,
      "durationMs": 2178,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "typecheck",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "typecheck"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/2.log",
      "exitCode": 0,
      "durationMs": 1175,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "test-app-typecheck",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Test App Build Cache / Resolve native fingerprint)"
    },
    {
      "id": "test-app-security",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Test App Build Cache / Resolve native fingerprint)"
    },
    {
      "id": "layering",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:layering"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/5.log",
      "exitCode": 0,
      "durationMs": 21854,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "di-seams",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:di-seams"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/6.log",
      "exitCode": 0,
      "durationMs": 1442,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "fallow",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:fallow",
        "--base",
        "620228b8ca67a69a108fa4fc5041fdd88880b792"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/7.log",
      "exitCode": 0,
      "durationMs": 7579,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "mcp-metadata",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:mcp-metadata"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/8.log",
      "exitCode": 0,
      "durationMs": 614,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "build",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "build"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/9.log",
      "exitCode": 0,
      "durationMs": 4811,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "package",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:package"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/10.log",
      "exitCode": 0,
      "durationMs": 7787,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "integration-node",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:integration:node"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/11.log",
      "exitCode": 0,
      "durationMs": 28692,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "macos-coverage",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:integration:macos-coverage"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/12.log",
      "exitCode": 0,
      "durationMs": 1134,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "ios-snapshot-differential",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "vitest-related",
      "status": "passed",
      "command": [
        "pnpm",
        "exec",
        "vitest",
        "related",
        "--run",
        "--passWithNoTests",
        ".changeset/host-entry.md",
        ".fallowrc.json",
        "examples/sdk/host-runtime.ts",
        "examples/sdk/tsconfig.json",
        "package.json",
        "packages/contracts/src/client-connection.ts",
        "packages/contracts/src/facades/client.ts",
        "packages/daemon/src/index.ts",
        "packages/daemon/src/server/http/daemon-runtime.ts",
        "scripts/layering/process-globals-policy.test.ts",
        "scripts/layering/process-globals-policy.ts",
        "scripts/layering/root-module-zones.ts",
        "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "src/agent-device-client.ts",
        "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "src/daemon-client/daemon-client-attach.ts",
        "src/daemon-client/daemon-client-binding.ts",
        "src/daemon-client/daemon-client-lifecycle.ts",
        "src/daemon-client/daemon-client.ts",
        "src/daemon-composition.ts",
        "src/host.test.ts",
        "src/host.ts",
        "src/provider-device-runtimes.ts",
        "test/integration/installed-package-metro.test.ts",
        "test/repo-guards/package-exports.test.ts",
        "tsdown.config.ts",
        "website/docs/docs/client-api.md"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/14.log",
      "exitCode": 0,
      "durationMs": 215181,
      "testReportPaths": [
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/14.tests.50037.json"
      ],
      "tests": [
        {
          "passed": 16513,
          "failed": 0,
          "skipped": 1,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        }
      ]
    },
    {
      "id": "unit",
      "status": "deduplicated",
      "reason": "covered by related tests"
    },
    {
      "id": "unit-ci",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage, Integration Tests)"
    },
    {
      "id": "coverage",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage)"
    },
    {
      "id": "coverage-crap",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage)"
    },
    {
      "id": "provider-integration",
      "status": "deduplicated",
      "reason": "covered by related tests"
    },
    {
      "id": "integration-progress",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:integration:progress:check"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/20.log",
      "exitCode": 0,
      "durationMs": 1704,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "swift-runner-ios",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Conformance Differential / iOS Conformance Differential, XCTest Nightly / iOS Runner Full XCTest Suite)"
    },
    {
      "id": "swift-runner-macos",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "android-helpers",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Android / Smoke Tests)"
    },
    {
      "id": "macos-helper",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "web-smoke",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Integration Tests, Lint, Typecheck & Package)"
    },
    {
      "id": "replay-compat",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:replay-compat"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/26.log",
      "exitCode": 0,
      "durationMs": 916,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "daemon-wire-compat",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:daemon-wire-compat"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/27.log",
      "exitCode": 0,
      "durationMs": 3019,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "affected-selector",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:affected:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/28.log",
      "exitCode": 0,
      "durationMs": 8047,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "gate-manifest",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:gate-manifest"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/29.log",
      "exitCode": 0,
      "durationMs": 1063,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "gate-manifest-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:gate-manifest:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/30.log",
      "exitCode": 0,
      "durationMs": 3341,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "depgraph",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "depgraph:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/31.log",
      "exitCode": 0,
      "durationMs": 12314,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "tmpdir-leaks",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:tmpdir-leaks"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/32.log",
      "exitCode": 0,
      "durationMs": 737,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "tmpdir-leaks-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:tmpdir-leaks:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/33.log",
      "exitCode": 0,
      "durationMs": 7032,
      "testReportPaths": [
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/33.tests.4503.json",
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/33.tests.4526.json"
      ],
      "tests": [
        {
          "passed": 1,
          "failed": 0,
          "skipped": 0,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        },
        {
          "passed": 1,
          "failed": 0,
          "skipped": 0,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        }
      ]
    },
    {
      "id": "coverage-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:coverage-changed:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/34.log",
      "exitCode": 0,
      "durationMs": 2525,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "coverage-crap-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:coverage-crap:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/35.log",
      "exitCode": 0,
      "durationMs": 14637,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "wire-compat-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:daemon-wire-compat:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/36.log",
      "exitCode": 0,
      "durationMs": 953,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "production-exports",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:production-exports"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/37.log",
      "exitCode": 0,
      "durationMs": 2329,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "bundle-owner-files",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:bundle-owner-files"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/38.log",
      "exitCode": 0,
      "durationMs": 723,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "freerange",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Repo Guards & Compatibility)"
    },
    {
      "id": "fixture-cache",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:fixture-cache"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/40.log",
      "exitCode": 0,
      "durationMs": 2073,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "fixture-fallback",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:fixture-fallback"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/41.log",
      "exitCode": 0,
      "durationMs": 6735,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "command-docs",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:command-docs"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/42.log",
      "exitCode": 0,
      "durationMs": 1221,
      "testReportPaths": [
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/42.tests.26067.json"
      ],
      "tests": [
        {
          "passed": 12,
          "failed": 0,
          "skipped": 0,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        }
      ]
    },
    {
      "id": "docs-links",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:doc-links"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/43.log",
      "exitCode": 0,
      "durationMs": 3184,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "docs-prose",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:doc-prose"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/44.log",
      "exitCode": 0,
      "durationMs": 1357,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "agent-guidance",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:agent-guidance"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/45.log",
      "exitCode": 0,
      "durationMs": 952,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "xctest-selection",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:xctest-selection"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/46.log",
      "exitCode": 0,
      "durationMs": 824,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "packaged-runner-swift",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:packaged-runner-swift"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/47.log",
      "exitCode": 0,
      "durationMs": 8586,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "maestro-conformance",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "maestro:conformance"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/48.log",
      "exitCode": 0,
      "durationMs": 2463,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "maestro-differential",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Conformance Differential / iOS Conformance Differential)"
    },
    {
      "id": "maestro-regenerate",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Conformance Regenerate Verify / Regenerate & Verify Fixtures)"
    },
    {
      "id": "fuzz-parsers",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Replay Nightly / Parser Fuzz Lane)"
    },
    {
      "id": "mutation",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Harness Canary / Mutants (${{ matrix.name }}), Mutation Weekly / Mutants (${{ matrix.name }}))"
    },
    {
      "id": "mutation-affected",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Harness Canary / Select harness validation kernels)"
    },
    {
      "id": "mutation-check",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Weekly / Mutation score report)"
    },
    {
      "id": "mutation-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "mutation:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-RYwqUF/55.log",
      "exitCode": 0,
      "durationMs": 12731,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "concurrency-torture",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Concurrency Torture Nightly / Session/lease/lock torture sweep, Integration Tests)"
    },
    {
      "id": "replay-ios",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
    },
    {
      "id": "replay-ios-device",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
    },
    {
      "id": "replay-macos",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "replay-linux",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
    },
    {
      "id": "linux-command-evidence",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
    },
    {
      "id": "replay-android",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / Android Full Emulator Suite)"
    }
  ]
}

Built-package live smoke used an isolated temp stateDir and session host-3757-live on iPhone 18 Pro / iOS 27.0, UDID BDA9B772-A0A9-46A4-AC91-C9107FAE0277. It imports the built package through agent-device/host, lists devices, opens Settings, snapshots, closes its session and prints ShutdownReport. The session and runner closed; the simulator was shut down after verification.

Node smoke script and full output
import { mkdtemp } from 'node:fs/promises';
import os from 'node:os';
import path from 'node:path';
import { startAgentDevice } from 'agent-device/host';
const stateDir = await mkdtemp(path.join(os.tmpdir(), 'agent-device-3757-live-'));
const target = { platform: 'ios', udid: 'BDA9B772-A0A9-46A4-AC91-C9107FAE0277', session: 'host-3757-live' };
const host = await startAgentDevice({ stateDir });
console.log(JSON.stringify({ stateDir, entry: 'agent-device/host', ownership: 'embedded' }));
try {
  const devices = await host.client.devices.list(target);
  console.log(JSON.stringify({ devices: devices.map(({ id, name, platform }) => ({ id, name, platform })) }));
  const opened = await host.client.apps.open({ ...target, app: 'com.apple.Preferences' });
  console.log(JSON.stringify({ opened }));
  const snapshot = await host.client.capture.snapshot({ ...target, interactive: true });
  console.log(JSON.stringify({ snapshot }));
  console.log(JSON.stringify({ sessionClosed: await host.client.sessions.close(target) }));
} finally {
  console.log(JSON.stringify({ shutdownReport: await host.close() }));
}
{"stateDir":"/var/folders/pn/0s6xww5x5tj2brz0nrvlx96w0000gn/T/agent-device-3757-live-1cN66N","entry":"agent-device/host","ownership":"embedded"}
{"devices":[{"id":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277","name":"iPhone 18 Pro","platform":"ios"},{"id":"B83CF61F-1CEA-452A-8750-B77C14C74F98","name":"apex-2758-rn","platform":"ios"},{"id":"A149E1A0-1BBE-4F0E-B981-7E261206D043","name":"bench-golden-v1","platform":"ios"},{"id":"7E76ECA9-D40C-4833-A711-F870F8CE9363","name":"bench-golden-v2","platform":"ios"},{"id":"0E0FCBDC-88E2-4CB6-A1DA-E148F77743F4","name":"iPhone 17","platform":"ios"},{"id":"BC54AC11-CD86-4C10-8C4E-5101C773FFEB","name":"iPhone 17 Pro","platform":"ios"},{"id":"DBEA214F-555F-4DDA-B62B-E34285CE63DB","name":"iPhone 17 Pro Max","platform":"ios"},{"id":"F25C7515-D67E-4838-BEAC-0AD08DB056EC","name":"iPhone 17e","platform":"ios"},{"id":"1C2C9FD4-B720-4160-BAEB-7D4724D7B5F3","name":"iPhone 18 Pro Max","platform":"ios"},{"id":"1B89356B-961C-4993-B0BE-4C0F3917D995","name":"iPhone Air","platform":"ios"},{"id":"4F879835-4AB3-4046-B033-5AB769209DD4","name":"iPhone Duo","platform":"ios"},{"id":"9542F4F5-51D1-4F5D-B3C9-02D78A69F0D9","name":"iPhone Duo","platform":"ios"},{"id":"79AC7886-EA61-4F02-9090-78285ACB2BA4","name":"pr3825-live-ad4","platform":"ios"},{"id":"A14201BD-0C41-4ECB-94D9-1E6F152BCD40","name":"iPad (A16)","platform":"ios"},{"id":"26CA145D-29F1-40A8-873D-8EE69BCFCA71","name":"iPad Air 11-inch (M4)","platform":"ios"},{"id":"88A96121-4ED4-423C-973D-38B60D5BBF17","name":"iPad Air 13-inch (M4)","platform":"ios"},{"id":"3913B067-2886-40C7-9504-21412FCA2A94","name":"iPad mini (A17 Pro)","platform":"ios"},{"id":"9D075F91-A796-49ED-8C83-947137E611B6","name":"iPad Pro 11-inch (M5)","platform":"ios"},{"id":"94E640D3-5ED2-456F-A408-2622CE3E1A35","name":"iPad Pro 13-inch (M5)","platform":"ios"}]}
{"opened":{"session":"host-3757-live","sessionStateDir":"/var/folders/pn/0s6xww5x5tj2brz0nrvlx96w0000gn/T/agent-device-3757-live-1cN66N/sessions/host-3757-live","runnerLogPath":"/var/folders/pn/0s6xww5x5tj2brz0nrvlx96w0000gn/T/agent-device-3757-live-1cN66N/sessions/host-3757-live/runner.log","requestLogPath":"/var/folders/pn/0s6xww5x5tj2brz0nrvlx96w0000gn/T/agent-device-3757-live-1cN66N/sessions/host-3757-live/requests/7ec1c33be597662f.ndjson","eventLogPath":"/var/folders/pn/0s6xww5x5tj2brz0nrvlx96w0000gn/T/agent-device-3757-live-1cN66N/sessions/host-3757-live/events.ndjson","appName":"com.apple.Preferences","appBundleId":"com.apple.Preferences","appId":"com.apple.Preferences","selection":{"reason":"explicit-selector","source":"local","candidateCount":1,"bootOccurred":false},"startup":{"durationMs":6955,"measuredAt":"2026-10-20T09:19:25.105Z","method":"open-command-roundtrip","appTarget":"com.apple.Preferences","appBundleId":"com.apple.Preferences"},"device":{"platform":"ios","target":"mobile","id":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277","name":"iPhone 18 Pro","identifiers":{"deviceId":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277","deviceName":"iPhone 18 Pro","udid":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277"},"ios":{"udid":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277","simulatorSetPath":null}},"identifiers":{"session":"host-3757-live","deviceId":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277","deviceName":"iPhone 18 Pro","udid":"BDA9B772-A0A9-46A4-AC91-C9107FAE0277","appId":"com.apple.Preferences","appBundleId":"com.apple.Preferences"}}}
{"snapshot":{"nodes":[{"index":0,"rect":{"x":0,"y":0,"width":402,"height":874},"label":"Settings","depth":0,"type":"Application","hittable":false,"enabled":true,"ref":"e1","kind":"application"},{"index":1,"rect":{"x":0,"y":0,"width":402,"height":874},"label":"Toolbar","depth":1,"type":"Other","hittable":true,"parentIndex":0,"enabled":true,"ref":"e2","kind":"other"},{"index":2,"rect":{"x":0,"y":0,"width":402,"height":874},"label":"Settings","depth":2,"type":"Other","hittable":true,"parentIndex":1,"enabled":true,"ref":"e3","kind":"other"},{"index":3,"identifier":"Settings","rect":{"x":0,"y":62,"width":402,"height":106},"label":"Settings","depth":3,"type":"NavigationBar","hittable":true,"parentIndex":2,"enabled":true,"ref":"e4","kind":"navigation-bar"},{"index":4,"rect":{"x":16,"y":119.66666666666667,"width":133,"height":40.66666666666667},"label":"Settings","depth":4,"type":"StaticText","hittable":true,"parentIndex":3,"enabled":true,"ref":"e5","kind":"text"},{"index":5,"rect":{"x":0,"y":0,"width":402,"height":874},"label":"Vertical scroll bar, 2 pages","depth":3,"type":"Other","hittable":true,"parentIndex":2,"enabled":true,"ref":"e6","kind":"other"},{"index":6,"identifier":"com.apple.settings.sidebar.collectionView","rect":{"x":0,"y":0,"width":402,"height":874},"label":"Vertical scroll bar, 2 pages","depth":4,"type":"CollectionView","hittable":true,"parentIndex":5,"enabled":true,"ref":"e7","kind":"collection"},{"index":7,"rect":{"x":16,"y":168,"width":370,"height":90.33333333333331},"label":"Apple Account, Sign in to access your iCloud data, the App Store, Apple services, and more.","depth":5,"type":"Cell","hittable":true,"parentIndex":6,"enabled":true,"ref":"e8","kind":"cell"},{"index":8,"rect":{"x":16,"y":168,"width":370,"height":90.33333333333331},"label":"Apple Account, Sign in to access your iCloud data, the App Store, Apple services, and more.","depth":6,"type":"Other","hittable":true,"parentIndex":7,"enabled":true,"ref":"e9","kind":"other"},{"index":9,"identifier":"com.apple.settings.primaryAppleAccount","rect":{"x":16,"y":168,"width":370,"height":90.33333333333331},"label":"Apple Account, Sign in to access your iCloud data, the App Store, Apple services, and more.","depth":7,"type":"Button","hittable":true,"parentIndex":8,"enabled":true,"ref":"e10","kind":"button"},{"index":10,"identifier":"apple.id","rect":{"x":32,"y":183,"width":60,"height":60.333333333333314},"label":"apple.id","depth":8,"type":"Image","hittable":true,"parentIndex":9,"enabled":true,"ref":"e11","kind":"image"},{"index":11,"rect":{"x":100,"y":183,"width":138.33333333333331,"height":24},"label":"Apple Account","depth":8,"type":"StaticText","hittable":true,"parentIndex":9,"enabled":true,"ref":"e12","kind":"text"},{"index":12,"rect":{"x":100,"y":209.66666666666666,"width":236,"height":33.66666666666666},"label":"Sign in to access your iCloud data, the App Store, Apple services, and more.","depth":8,"type":"StaticText","hittable":true,"parentIndex":9,"enabled":true,"ref":"e13","kind":"text"},{"index":13,"identifier":"chevron.forward","rect":{"x":360.6666666666667,"y":207,"width":7,"height":12},"depth":8,"type":"Image","hittable":true,"parentIndex":9,"enabled":true,"ref":"e14","kind":"image"},{"index":14,"rect":{"x":16,"y":293.3333333333333,"width":370,"height":52},"label":"General","depth":5,"type":"Cell","hittable":true,"parentIndex":6,"enabled":true,"ref":"e15","kind":"cell"},{"index":15,"rect":{"x":16,"y":293.3333333333333,"width":370,"height":52},"label":"General","depth":6,"type":"Other","hittable":true,"parentIndex":14,"enabled":true,"ref":"e16","kind":"other"},{"index":16,"identifier":"com.apple.settings.general","rect":{"x":16,"y":293.3333333333333,"width":370,"height":52},"label":"General","depth":7,"type":"Button","hittable":true,"parentIndex":15,"enabled":true,"ref":"e17","kind":"button"},{"index":17,"rect":{"x":30,"y":305.3333435058594,"width":101.33332824707031,"height":28},"label":"General","depth":8,"type":"StaticText","hittable":true,"parentIndex":16,"enabled":true,"ref":"e18","kind":"text"},{"index":18,"identifier":"chevron.forward","rect":{"x":360.6666666666667,"y":313.3333333333333,"width":7,"height":12},"depth":8,"type":"Image","hittable":true,"parentIndex":16,"enabled":true,"ref":"e19","kind":"image"},{"index":19,"rect":{"x":16,"y":345.33333333333337,"width":370,"height":52},"label":"Accessibility","depth":5,"type":"Cell","hittable":true,"parentIndex":6,"enabled":true,"ref":"e20","kind":"cell"},{"depth":6,"label":"Accessibility","rect":{"x":16,"y":345.33333333333337,"width":370,"height":52},"hittable":true,"index":20,"enabled":true,"type":"Other","parentIndex":19,"ref":"e21","kind":"other"},{"depth":7,"label":"Accessibility","identifier":"com.apple.settings.accessibility","rect":{"x":16,"y":345.33333333333337,"width":370,"height":52},"hittable":true,"enabled":true,"index":21,"type":"Button","parentIndex":20,"ref":"e22","kind":"button"},{"depth":8,"label":"Accessibility","rect":{"x":30,"y":357.3333435058594,"width":136.66665649414062,"height":28},"hittable":true,"index":22,"enabled":true,"type":"StaticText","parentIndex":21,"ref":"e23","kind":"text"},{"depth":8,"identifier":"chevron.forward","rect":{"x":360.6666666666667,"y":365.33333333333337,"width":7,"height":12},"hittable":true,"index":23,"enabled":true,"type":"Image","parentIndex":21,"ref":"e24","kind":"image"},{"depth":5,"label":"Action Button","rect":{"x":16,"y":397.33333333333337,"width":370,"height":52},"hittable":true,"index":24,"enabled":true,"type":"Cell","parentIndex":6,"ref":"e25","kind":"cell"},{"depth":6,"label":"Action Button","rect":{"x":16,"y":397.33333333333337,"width":370,"height":52},"hittable":true,"index":25,"enabled":true,"type":"Other","parentIndex":24,"ref":"e26","kind":"other"},{"depth":7,"label":"Action Button","identifier":"com.apple.settings.actionButton","rect":{"x":16,"y":397.33333333333337,"width":370,"height":52},"hittable":true,"enabled":true,"index":26,"type":"Button","parentIndex":25,"ref":"e27","kind":"button"},{"depth":8,"label":"Action Button","rect":{"x":30,"y":409.3333435058594,"width":145.66665649414062,"height":28},"hittable":true,"index":27,"enabled":true,"type":"StaticText","parentIndex":26,"ref":"e28","kind":"text"},{"depth":8,"identifier":"chevron.forward","rect":{"x":360.6666666666667,"y":417.33333333333337,"width":7,"height":12},"hittable":true,"index":28,"enabled":true,"type":"Image","parentIndex":26,"ref":"e29","kind":"image"},{"depth":5,"label":"Appearance","rect":{"x":16,"y":449.3333333333333,"width":370,"height":52},"hittable":true,"index":29,"enabled":true,"type":"Cell","parentIndex":6,"ref":"e30","kind":"cell"},{"depth":6,"label":"Appearance","rect":{"x":16,"y":449.3333333333333,"width":370,"height":52},"hittable":true,"index":30,"enabled":true,"type":"Other","parentIndex":29,"ref":"e31","kind":"other"},{"depth":7,"label":"Appearance","identifier":"com.apple.settings.appearance","rect":{"x":16,"y":449.3333333333333,"width":370,"height":52},"hittable":true,"enabled":true,"index":31,"type":"Button","parentIndex":30,"ref":"e32","kind":"button"},{"depth":8,"label":"Appearance","rect":{"x":30,"y":461.3333435058594,"width":134,"height":28},"hittable":true,"index":32,"enabled":true,"type":"StaticText","parentIndex":31,"ref":"e33","kind":"text"},{"depth":8,"identifier":"chevron.forward","rect":{"x":360.6666666666667,"y":469.3333333333333,"width":7,"height":12},"hittable":true,"index":33,"enabled":true,"type":"Image","parentIndex":31,"ref":"e34","kind":"image"},{"depth":5,"label":"Camera","rect":{"y":501.3333333333333,"width":370,"height":51.99999999999994,"x":16},"hittable":true,"index":34,"enabled":true,"type":"Cell","parentIndex":6,"ref":"e35","kind":"cell"},{"depth":6,"label":"Camera","rect":{"y":501.3333333333333,"width":370,"height":51.99999999999994,"x":16},"hittable":true,"index":35,"enabled":true,"type":"Other","parentIndex":34,"ref":"e36","kind":"other"},{"depth":7,"identifier":"com.apple.settings.camera","label":"Camera","rect":{"y":501.3333333333333,"width":370,"height":51.99999999999994,"x":16},"hittable":true,"index":36,"enabled":true,"type":"Button","parentIndex":35,"ref":"e37","kind":"button"},{"depth":8,"label":"Camera","rect":{"y":513.3333129882812,"width":101.33332824707031,"height":28,"x":30},"hittable":true,"index":37,"enabled":true,"type":"StaticText","parentIndex":36,"ref":"e38","kind":"text"},{"depth":8,"identifier":"chevron.forward","rect":{"y":521.3333333333333,"width":7,"height":12,"x":360.6666666666667},"hittable":true,"index":38,"enabled":true,"type":"Image","parentIndex":36,"ref":"e39","kind":"image"},{"depth":5,"label":"Home Screen & App Library","rect":{"y":553.3333333333333,"width":370,"height":52,"x":16},"hittable":true,"index":39,"enabled":true,"type":"Cell","parentIndex":6,"ref":"e40","kind":"cell"},{"depth":6,"label":"Home Screen & App Library","rect":{"y":553.3333333333333,"width":370,"height":52,"x":16},"hittable":true,"index":40,"enabled":true,"type":"Other","parentIndex":39,"ref":"e41","kind":"other"},{"index":41,"parentIndex":40,"type":"Button","identifier":"com.apple.settings.homeScreen","hittable":true,"rect":{"y":553.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Home Screen & App Library","depth":7,"ref":"e42","kind":"button"},{"index":42,"parentIndex":41,"hittable":true,"type":"StaticText","rect":{"y":565.3333129882812,"width":253.66668701171875,"height":28,"x":30},"enabled":true,"label":"Home Screen & App Library","depth":8,"ref":"e43","kind":"text"},{"index":43,"parentIndex":41,"type":"Image","identifier":"chevron.forward","hittable":true,"rect":{"y":573.3333333333333,"width":7,"height":12,"x":360.6666666666667},"enabled":true,"depth":8,"ref":"e44","kind":"image"},{"index":44,"parentIndex":6,"hittable":true,"type":"Cell","rect":{"y":605.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Search","depth":5,"ref":"e45","kind":"cell"},{"index":45,"parentIndex":44,"hittable":true,"type":"Other","rect":{"y":605.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Search","depth":6,"ref":"e46","kind":"other"},{"index":46,"parentIndex":45,"type":"Button","identifier":"com.apple.settings.search","hittable":true,"rect":{"y":605.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Search","depth":7,"ref":"e47","kind":"button"},{"index":47,"parentIndex":46,"hittable":true,"type":"StaticText","rect":{"y":617.3333129882812,"width":95.33332824707031,"height":28,"x":30},"enabled":true,"label":"Search","depth":8,"ref":"e48","kind":"text"},{"index":48,"parentIndex":46,"type":"Image","identifier":"chevron.forward","hittable":true,"rect":{"y":625.3333333333333,"width":7,"height":12,"x":360.6666666666667},"enabled":true,"depth":8,"ref":"e49","kind":"image"},{"index":49,"parentIndex":6,"hittable":true,"type":"Cell","rect":{"y":657.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Siri","depth":5,"ref":"e50","kind":"cell"},{"index":50,"parentIndex":49,"hittable":true,"type":"Other","rect":{"y":657.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Siri","depth":6,"ref":"e51","kind":"other"},{"index":51,"parentIndex":50,"type":"Button","identifier":"com.apple.settings.siri","hittable":true,"rect":{"y":657.3333333333333,"width":370,"height":52,"x":16},"enabled":true,"label":"Siri","depth":7,"ref":"e52","kind":"button"},{"index":52,"parentIndex":51,"hittable":true,"type":"StaticText","rect":{"y":669.3333129882812,"width":66,"height":28,"x":30},"enabled":true,"label":"Siri","depth":8,"ref":"e53","kind":"text"},{"index":53,"parentIndex":51,"type":"Image","identifier":"chevron.forward","hittable":true,"rect":{"y":677.3333333333333,"width":7,"height":12,"x":360.6666666666667},"enabled":true,"depth":8,"ref":"e54","kind":"image"},{"index":54,"parentIndex":6,"hittable":true,"type":"Cell","rect":{"y":709.3333333333334,"width":370,"height":52,"x":16},"enabled":true,"label":"StandBy","depth":5,"ref":"e55","kind":"cell"},{"index":55,"parentIndex":54,"hittable":true,"type":"Other","rect":{"y":709.3333333333334,"width":370,"height":52,"x":16},"enabled":true,"label":"StandBy","depth":6,"ref":"e56","kind":"other"},{"index":56,"parentIndex":55,"type":"Button","identifier":"com.apple.settings.standBy","hittable":true,"rect":{"y":709.3333333333334,"width":370,"height":52,"x":16},"enabled":true,"label":"StandBy","depth":7,"ref":"e57","kind":"button"},{"index":57,"parentIndex":56,"hittable":true,"type":"StaticText","rect":{"y":721.3333129882812,"width":106.33334350585938,"height":28,"x":30},"enabled":true,"label":"StandBy","depth":8,"ref":"e58","kind":"text"},{"index":58,"parentIndex":56,"type":"Image","identifier":"chevron.forward","hittable":true,"rect":{"y":729.3333333333334,"width":7,"height":12,"x":360.6666666666667},"enabled":true,"depth":8,"ref":"e59","kind":"image"},{"index":59,"parentIndex":6,"hittable":true,"type":"Cell","rect":{"y":796.3333333333334,"width":370,"height":52,"x":16},"enabled":true,"label":"Screen Time","depth":5,"ref":"e60","kind":"cell"},{"index":60,"parentIndex":59,"hittable":true,"type":"Other","rect":{"y":796.3333333333334,"width":370,"height":52,"x":16},"enabled":true,"label":"Screen Time","depth":6,"ref":"e61","kind":"other"},{"index":61,"parentIndex":60,"type":"Button","identifier":"com.apple.settings.screenTime","hittable":true,"rect":{"y":796.3333333333334,"width":370,"height":52,"x":16},"enabled":true,"label":"Screen Time","depth":7,"ref":"e62","kind":"button"},{"index":62,"hittable":true,"depth":8,"type":"StaticText","rect":{"y":808.3333129882812,"width":137.33334350585938,"height":28,"x":30},"parentIndex":61,"enabled":true,"label":"Screen Time","ref":"e63","kind":"text"},{"index":63,"hittable":true,"depth":8,"type":"Image","rect":{"y":816.3333333333334,"width":7,"height":12,"x":360.6666666666667},"parentIndex":61,"enabled":true,"identifier":"chevron.forward","ref":"e64","kind":"image"},{"index":64,"hittable":true,"depth":5,"type":"Other","rect":{"y":116,"width":30,"height":696,"x":369},"parentIndex":6,"enabled":true,"label":"Vertical scroll bar, 2 pages","value":"0%","ref":"e65","kind":"other"},{"index":65,"hittable":true,"depth":3,"type":"Toolbar","rect":{"y":0,"width":402,"height":874,"x":0},"parentIndex":2,"enabled":true,"label":"Toolbar","identifier":"Toolbar","ref":"e66","kind":"toolbar"},{"index":66,"hittable":false,"depth":4,"type":"Other","rect":{"y":62,"width":0,"height":0,"x":0},"parentIndex":65,"enabled":true,"label":"Search","ref":"e67","kind":"other"},{"index":67,"hittable":true,"depth":5,"type":"Other","rect":{"y":798,"width":346,"height":48,"x":28},"parentIndex":66,"enabled":true,"label":"Search","ref":"e68","kind":"other"},{"index":68,"hittable":true,"depth":6,"type":"Other","rect":{"y":808,"height":28,"x":28,"width":346},"parentIndex":67,"enabled":true,"label":"Search","ref":"e69","kind":"other"},{"index":69,"placeholder":"Search","hittable":true,"depth":7,"type":"SearchField","rect":{"x":28,"y":808,"width":346,"height":28},"parentIndex":68,"enabled":true,"label":"Search","password":false,"editable":true,"ref":"e70","kind":"search"},{"index":70,"hittable":true,"depth":8,"type":"Button","rect":{"x":341.6666666666667,"width":17.333333333333314,"y":811,"height":22},"parentIndex":69,"enabled":true,"label":"Dictate","identifier":"Dictate","ref":"e71","kind":"button"},{"index":71,"hittable":true,"depth":8,"type":"Image","rect":{"x":40,"width":20.66666666666667,"y":812,"height":19.33333333333337},"parentIndex":69,"enabled":true,"label":"Search","identifier":"magnifyingglass","ref":"e72","kind":"image"}],"truncated":false,"appName":"com.apple.Preferences","appBundleId":"com.apple.Preferences","keyboard":{"kind":"absent"},"viewport":{"width":402,"height":874},"presentedSurface":"unknown","visibility":{"partial":true,"visibleNodeCount":72,"totalNodeCount":72,"reasons":["scroll-hidden-below"]},"snapshotQuality":{"state":"healthy","backend":"tree","timing":{"acquisitionMs":237.25104331970215,"presentationMs":0.33402442932128906}},"warnings":["Simulator AX snapshot unavailable (circuit-disabled); used XCTest for this app generation."],"snapshotDiagnostics":{"stats":{"count":2,"p50Ms":648,"p95Ms":35174,"maxMs":35174,"slowThresholdMs":1500,"platform":"ios","backends":{"xctest":2}}},"refsGeneration":293614,"identifiers":{"session":"host-3757-live","appId":"com.apple.Preferences","appBundleId":"com.apple.Preferences"}}}
{"sessionClosed":{"session":"host-3757-live","identifiers":{"session":"host-3757-live"}}}
{"shutdownReport":{"providerReleases":{"completed":[],"pending":[],"unknown":[]},"requests":{"drained":0,"abandoned":0},"platformOwners":"closed","runners":{"stopped":["BDA9B772-A0A9-46A4-AC91-C9107FAE0277"],"handedOff":[]},"sessions":{"closed":0,"failed":0},"plugins":{"disposed":["browserstack","aws-device-farm"],"failed":[],"pending":[]}}}

Compared with the prior two unpushed commits: use main’s single record reader and centralized retirement, retain main’s direct-close completion and entered runtime store, pass an explicit captured host to client construction, publish the required LogEntry, HostEnvironment and ShutdownReport names, clear ambient daemon URLs in returned config, and add packed lifecycle/race/rollback coverage. The final diff is 27 files, +1505/-23. 0.21 defaults remain intact. The imported Limrun collision stays governed by built-in-first ordering; no override was added.

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-10-20 14:35 UTC

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Size Report

Metric Base Current Diff
Installed (including dependencies) 5.45 MB 5.46 MB +12.2 kB
Package (unpacked) 5.45 MB 5.46 MB +12.2 kB
Package (download) 1.65 MB 1.66 MB +4.3 kB

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 40.1 ms 41.0 ms +0.9 ms
CLI --help 80.5 ms 82.0 ms +1.5 ms

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thymikee

Copy link
Copy Markdown
Member Author

Current head: d7ece9964d8b07e5e929671977729432fffb3b69.

The packed consumer now imports its fixture plugin from a standalone module inside the installed consumer. Independent review of this test-only delta found no findings. Production code is identical to the live-run source posted above.

pnpm check:affected --run --head HEAD passed again with exactCommit=true: 1,948 related test files, 16,513 passed / 1 skipped; Node integration 146 passed / 12 opt-in skips. No gate suppression was added. Receipt: run-tjWLf4.

CI size review of the unchanged production code: +17.9 kB unpacked / +6.1 kB download. The independent reviewer found no material design reduction needed: the host reuses runtime/registration/shutdown/registry owners, adds no dependency or parallel lifecycle framework, and the host entry itself is 2,893 bytes.

Current exact-head receipt
{
  "status": "passed",
  "exitCode": 0,
  "refs": {
    "base": "origin/main",
    "head": "HEAD",
    "resolvedBase": "620228b8ca67a69a108fa4fc5041fdd88880b792",
    "resolvedHead": "d7ece9964d8b07e5e929671977729432fffb3b69",
    "mergeBase": "620228b8ca67a69a108fa4fc5041fdd88880b792"
  },
  "checkoutChanged": false,
  "exactCommit": true,
  "startedAt": "2026-10-20T09:35:57.892Z",
  "finishedAt": "2026-10-20T09:42:21.277Z",
  "checks": [
    {
      "id": "format",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "lint",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "typecheck",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "test-app-typecheck",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Test App Build Cache / Resolve native fingerprint)"
    },
    {
      "id": "test-app-security",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Test App Build Cache / Resolve native fingerprint)"
    },
    {
      "id": "layering",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "di-seams",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "fallow",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "mcp-metadata",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "build",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "package",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "integration-node",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "macos-coverage",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "ios-snapshot-differential",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "vitest-related",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "unit",
      "status": "deduplicated",
      "reason": "covered by related tests"
    },
    {
      "id": "unit-ci",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage, Integration Tests)"
    },
    {
      "id": "coverage",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage)"
    },
    {
      "id": "coverage-crap",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage)"
    },
    {
      "id": "provider-integration",
      "status": "deduplicated",
      "reason": "covered by related tests"
    },
    {
      "id": "integration-progress",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "swift-runner-ios",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Conformance Differential / iOS Conformance Differential, XCTest Nightly / iOS Runner Full XCTest Suite)"
    },
    {
      "id": "swift-runner-macos",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "android-helpers",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Android / Smoke Tests)"
    },
    {
      "id": "macos-helper",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "web-smoke",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Integration Tests, Lint, Typecheck & Package)"
    },
    {
      "id": "replay-compat",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "daemon-wire-compat",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "affected-selector",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "gate-manifest",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "gate-manifest-model",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "depgraph",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "tmpdir-leaks",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "tmpdir-leaks-model",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "coverage-model",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "coverage-crap-model",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "wire-compat-model",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "production-exports",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "bundle-owner-files",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "freerange",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Repo Guards & Compatibility)"
    },
    {
      "id": "fixture-cache",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "fixture-fallback",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "command-docs",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "docs-links",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "docs-prose",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "agent-guidance",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "xctest-selection",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "packaged-runner-swift",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "maestro-conformance",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "maestro-differential",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Conformance Differential / iOS Conformance Differential)"
    },
    {
      "id": "maestro-regenerate",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Conformance Regenerate Verify / Regenerate & Verify Fixtures)"
    },
    {
      "id": "fuzz-parsers",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Replay Nightly / Parser Fuzz Lane)"
    },
    {
      "id": "mutation",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Harness Canary / Mutants (${{ matrix.name }}), Mutation Weekly / Mutants (${{ matrix.name }}))"
    },
    {
      "id": "mutation-affected",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Harness Canary / Select harness validation kernels)"
    },
    {
      "id": "mutation-check",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Weekly / Mutation score report)"
    },
    {
      "id": "mutation-model",
      "status": "passed",
      "exitCode": 0
    },
    {
      "id": "concurrency-torture",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Concurrency Torture Nightly / Session/lease/lock torture sweep, Integration Tests)"
    },
    {
      "id": "replay-ios",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
    },
    {
      "id": "replay-ios-device",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
    },
    {
      "id": "replay-macos",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "replay-linux",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
    },
    {
      "id": "linux-command-evidence",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
    },
    {
      "id": "replay-android",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / Android Full Emulator Suite)"
    }
  ]
}

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thymikee

Copy link
Copy Markdown
Member Author

At d7ece99, the pinned attach path has a gap that needs a fix before merge. attachBoundDaemon (daemon-client-attach.ts#L15) accepts any record whose auth value, pid and start time match the pin. It skips the observeLocalDaemon/resolveDaemonTakeover check (version, code origin and signature, lock) that attachLocalDaemon runs. The host's clientConfig sets daemonLifecycle: 'attach' together with daemonBinding, so the binding branch now replaces the attach check. I found no client-version check in packages/daemon/src, so a worker built from another agent-device version or build, such as an e2e worker that resolves agent-device from its own node_modules, would send requests to a daemon of another version. Before this PR, an attach client got daemon-incompatible here, and cli-help.ts still promises that for attach. The rule should be: a pinned client accepts only a daemon that matches its pin and that the attach check would reuse. Could the pin comparison move inside attachLocalDaemon, after observeLocalDaemon returns a reuse decision, with a pin mismatch mapped to daemon-binding-mismatch and the separate attachBoundDaemon branch removed? Please add a test that writes a matching pinned record with version 0.0.0-stale and expects daemon-incompatible with zero dispatched requests.

I did not run the version-skew case. This finding comes from reading the code.

Not blocking, and you can take or leave these: isPluginLike in src/host.ts copies part of validateAgentDevicePlugin, so a wrong apiVersion gets a different refusal than a non-object; "binding implies attach" is encoded in three places (resolveTimeoutRecovery, ownedStateDir, connectToDaemon) and could be normalized once in resolveClientSettings; the pin's pid and start time come from a second readCurrentOwnerIdentity() call instead of the identity the runtime publishes; the token: binding.token override in daemon-client-attach.ts cannot change anything after the equality check; and the operator-stop test in src/host.test.ts asserts only toBeDefined() on host.close().

Does the pin fit as a predicate inside attachLocalDaemon, with the binding normalized to attach in resolveClientSettings, plugin validation owned by validateAgentDevicePlugin or the registry inventory, and the published identity exposed on DaemonRuntimeController? That would keep host.ts a thin delegate. It would also let you trim the doc comments in host.ts and daemon-client-binding.ts, which helps with the +17.9 kB npm growth over the 3 kB threshold. Nothing needs to change first.

The failed iOS smoke check looks unrelated to this change. smoke:automation-input failed at click id="automation-open-sheet" with selector_not_found, and no request was dispatched. The CLI reached the daemon and got a typed answer, and the other 20 iOS tests passed on the same daemon. The diff does not touch selector resolution, snapshot capture or the iOS runner. I did not inspect that run's artifacts or check main for the same failure. macOS passed. There are no conflicts.

The live iOS host run is the author's, posted for 7c2dfc7. I only checked that production code is unchanged up to d7ece99, and I did not re-run the size assessment or the affected-check receipts. Before merge, a pinned client must also pass the attach compatibility check and refuse a stale daemon with daemon-incompatible, with the stale-version regression test above.

@thymikee

Copy link
Copy Markdown
Member Author

CI follow-up at c59deb41049a4fe52359702e3e7fbeb3e730e0db:

The previous Apple run failed in the TypeScript iOS fixture scenario at automation-open-sheet (selector_not_found); Swift XCTest and the macOS phase passed. The subsequent failure snapshot showed the button visible. The scenario waited for the route title, then clicked a separate control without waiting for that control.

Added the existing bounded assertWaitSelector for id="automation-open-sheet" visible=true before the unchanged click. No retry, allowlist, or failure suppression. Independent review of the two-line delta found no findings.

Attribution limits: the same pre-fix navigation/click sequence passed 10/10 on exact base 620228b8ca67a69a108fa4fc5041fdd88880b792 and 10/10 on prior head d7ece9964d8b07e5e929671977729432fffb3b69, sequentially on the same local iOS 27 simulator and fixture. This does not establish an unchanged-base CI failure (CI uses iOS 26.2).

The checked-in full smoke entry point on the new head passed 22/22, zero skips, including all seven live scenarios:

AGENT_DEVICE_FIXTURE_APP_ID=com.callstack.agentdevicelab \
AGENT_DEVICE_FIXTURE_APP_PATH=<repacked Release fixture.app> \
AGENT_DEVICE_IOS_E2E=1 AGENT_DEVICE_IOS_E2E_TIER=smoke \
AGENT_DEVICE_IOS_UDID=BDA9B772-A0A9-46A4-AC91-C9107FAE0277 \
AGENT_DEVICE_STATE_DIR=<isolated stateDir> \
node --experimental-strip-types scripts/node-test-tmpdir.ts --test \
  test/integration/smoke-ios-simulator-coverage.test.ts \
  test/integration/smoke-ios-simulator.test.ts
smoke:inventory-install PASS
smoke:automation-input PASS
smoke:form-input PASS
smoke:regular-visible-depth-frontier PASS
smoke:webview-remote-content PASS
smoke:deep-link-navigation PASS
smoke:capture-close PASS
tests 22; pass 22; fail 0; skipped 0

The simulator keyboard preference was restored; owned sessions/daemon were closed. The disposable base checkout was removed. The built host-entry live evidence above is unchanged (this delta changes test readiness only).

pnpm check:affected --run --head HEAD passed at this exact head: 16,513 unit passes / 1 skip, 146 Node integration passes / 12 opt-in skips. All runnable gates passed.

Exact-head receipt run-4abtUk
{
  "version": 1,
  "cwd": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry",
  "startedAt": "2026-10-20T10:36:00.516Z",
  "status": "passed",
  "exitCode": 0,
  "refs": {
    "base": "origin/main",
    "head": "HEAD",
    "resolvedBase": "620228b8ca67a69a108fa4fc5041fdd88880b792",
    "resolvedHead": "c59deb41049a4fe52359702e3e7fbeb3e730e0db",
    "mergeBase": "620228b8ca67a69a108fa4fc5041fdd88880b792"
  },
  "checkoutChanged": false,
  "exactCommit": true,
  "results": [
    {
      "id": "format",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "format:check"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/0.log",
      "exitCode": 0,
      "durationMs": 1367,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "lint",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "lint"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/1.log",
      "exitCode": 0,
      "durationMs": 2193,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "typecheck",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "typecheck"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/2.log",
      "exitCode": 0,
      "durationMs": 1398,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "test-app-typecheck",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Test App Build Cache / Resolve native fingerprint)"
    },
    {
      "id": "test-app-security",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Test App Build Cache / Resolve native fingerprint)"
    },
    {
      "id": "layering",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:layering"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/5.log",
      "exitCode": 0,
      "durationMs": 22772,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "di-seams",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:di-seams"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/6.log",
      "exitCode": 0,
      "durationMs": 1360,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "fallow",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:fallow",
        "--base",
        "620228b8ca67a69a108fa4fc5041fdd88880b792"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/7.log",
      "exitCode": 0,
      "durationMs": 7464,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "mcp-metadata",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:mcp-metadata"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/8.log",
      "exitCode": 0,
      "durationMs": 605,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "build",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "build"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/9.log",
      "exitCode": 0,
      "durationMs": 4982,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "package",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:package"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/10.log",
      "exitCode": 0,
      "durationMs": 6681,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "integration-node",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:integration:node"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/11.log",
      "exitCode": 0,
      "durationMs": 26461,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "macos-coverage",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:integration:macos-coverage"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/12.log",
      "exitCode": 0,
      "durationMs": 1057,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "ios-snapshot-differential",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "vitest-related",
      "status": "passed",
      "command": [
        "pnpm",
        "exec",
        "vitest",
        "related",
        "--run",
        "--passWithNoTests",
        ".changeset/host-entry.md",
        ".fallowrc.json",
        "examples/sdk/host-runtime.ts",
        "examples/sdk/tsconfig.json",
        "package.json",
        "packages/contracts/src/client-connection.ts",
        "packages/contracts/src/facades/client.ts",
        "packages/daemon/src/index.ts",
        "packages/daemon/src/server/http/daemon-runtime.ts",
        "scripts/layering/process-globals-policy.test.ts",
        "scripts/layering/process-globals-policy.ts",
        "scripts/layering/root-module-zones.ts",
        "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "src/agent-device-client.ts",
        "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "src/daemon-client/daemon-client-attach.ts",
        "src/daemon-client/daemon-client-binding.ts",
        "src/daemon-client/daemon-client-lifecycle.ts",
        "src/daemon-client/daemon-client.ts",
        "src/daemon-composition.ts",
        "src/host.test.ts",
        "src/host.ts",
        "src/provider-device-runtimes.ts",
        "test/integration/installed-package-metro.test.ts",
        "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "test/repo-guards/package-exports.test.ts",
        "tsdown.config.ts",
        "website/docs/docs/client-api.md"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/14.log",
      "exitCode": 0,
      "durationMs": 210006,
      "testReportPaths": [
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/14.tests.89700.json"
      ],
      "tests": [
        {
          "passed": 16513,
          "failed": 0,
          "skipped": 1,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        }
      ]
    },
    {
      "id": "unit",
      "status": "deduplicated",
      "reason": "covered by related tests"
    },
    {
      "id": "unit-ci",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage, Integration Tests)"
    },
    {
      "id": "coverage",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage)"
    },
    {
      "id": "coverage-crap",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Coverage)"
    },
    {
      "id": "provider-integration",
      "status": "deduplicated",
      "reason": "covered by related tests"
    },
    {
      "id": "integration-progress",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:integration:progress:check"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/20.log",
      "exitCode": 0,
      "durationMs": 1706,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "swift-runner-ios",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Conformance Differential / iOS Conformance Differential, XCTest Nightly / iOS Runner Full XCTest Suite)"
    },
    {
      "id": "swift-runner-macos",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "android-helpers",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Android / Smoke Tests)"
    },
    {
      "id": "macos-helper",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "web-smoke",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests, Integration Tests, Lint, Typecheck & Package)"
    },
    {
      "id": "replay-compat",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:replay-compat"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/26.log",
      "exitCode": 0,
      "durationMs": 932,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "daemon-wire-compat",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:daemon-wire-compat"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/27.log",
      "exitCode": 0,
      "durationMs": 3026,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "affected-selector",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:affected:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/28.log",
      "exitCode": 0,
      "durationMs": 8114,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "gate-manifest",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:gate-manifest"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/29.log",
      "exitCode": 0,
      "durationMs": 1031,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "gate-manifest-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:gate-manifest:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/30.log",
      "exitCode": 0,
      "durationMs": 3115,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "depgraph",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "depgraph:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/31.log",
      "exitCode": 0,
      "durationMs": 10800,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "tmpdir-leaks",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:tmpdir-leaks"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/32.log",
      "exitCode": 0,
      "durationMs": 733,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "tmpdir-leaks-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:tmpdir-leaks:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/33.log",
      "exitCode": 0,
      "durationMs": 7148,
      "testReportPaths": [
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/33.tests.59451.json",
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/33.tests.59475.json"
      ],
      "tests": [
        {
          "passed": 1,
          "failed": 0,
          "skipped": 0,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        },
        {
          "passed": 1,
          "failed": 0,
          "skipped": 0,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        }
      ]
    },
    {
      "id": "coverage-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:coverage-changed:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/34.log",
      "exitCode": 0,
      "durationMs": 2525,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "coverage-crap-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:coverage-crap:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/35.log",
      "exitCode": 0,
      "durationMs": 14399,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "wire-compat-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:daemon-wire-compat:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/36.log",
      "exitCode": 0,
      "durationMs": 948,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "production-exports",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:production-exports"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/37.log",
      "exitCode": 0,
      "durationMs": 2313,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "bundle-owner-files",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:bundle-owner-files"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/38.log",
      "exitCode": 0,
      "durationMs": 726,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "freerange",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Repo Guards & Compatibility)"
    },
    {
      "id": "fixture-cache",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:fixture-cache"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/40.log",
      "exitCode": 0,
      "durationMs": 2025,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "fixture-fallback",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "test:fixture-fallback"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/41.log",
      "exitCode": 0,
      "durationMs": 6227,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "command-docs",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:command-docs"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/42.log",
      "exitCode": 0,
      "durationMs": 1183,
      "testReportPaths": [
        "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/42.tests.80868.json"
      ],
      "tests": [
        {
          "passed": 12,
          "failed": 0,
          "skipped": 0,
          "pending": 0,
          "failedModules": 0,
          "unhandledErrors": 0,
          "failures": [],
          "omittedFailures": 0
        }
      ]
    },
    {
      "id": "docs-links",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:doc-links"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/43.log",
      "exitCode": 0,
      "durationMs": 2468,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "docs-prose",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:doc-prose"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/44.log",
      "exitCode": 0,
      "durationMs": 1118,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "agent-guidance",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:agent-guidance"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/45.log",
      "exitCode": 0,
      "durationMs": 970,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "xctest-selection",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:xctest-selection"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/46.log",
      "exitCode": 0,
      "durationMs": 914,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "packaged-runner-swift",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "check:packaged-runner-swift"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/47.log",
      "exitCode": 0,
      "durationMs": 8485,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "maestro-conformance",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "maestro:conformance"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/48.log",
      "exitCode": 0,
      "durationMs": 1611,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "maestro-differential",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Conformance Differential / iOS Conformance Differential)"
    },
    {
      "id": "maestro-regenerate",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Conformance Regenerate Verify / Regenerate & Verify Fixtures)"
    },
    {
      "id": "fuzz-parsers",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Replay Nightly / Parser Fuzz Lane)"
    },
    {
      "id": "mutation",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Harness Canary / Mutants (${{ matrix.name }}), Mutation Weekly / Mutants (${{ matrix.name }}))"
    },
    {
      "id": "mutation-affected",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Harness Canary / Select harness validation kernels)"
    },
    {
      "id": "mutation-check",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Mutation Weekly / Mutation score report)"
    },
    {
      "id": "mutation-model",
      "status": "passed",
      "command": [
        "pnpm",
        "run",
        "mutation:test"
      ],
      "logPath": "/Users/michal/.t3/worktrees/agent-device/feat-agent-device-host-entry/.tmp/validation/run-4abtUk/55.log",
      "exitCode": 0,
      "durationMs": 10952,
      "testReportPaths": [],
      "tests": []
    },
    {
      "id": "concurrency-torture",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Concurrency Torture Nightly / Session/lease/lock torture sweep, Integration Tests)"
    },
    {
      "id": "replay-ios",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
    },
    {
      "id": "replay-ios-device",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / iOS Replay Suite)"
    },
    {
      "id": "replay-macos",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Apple / Smoke Tests)"
    },
    {
      "id": "replay-linux",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
    },
    {
      "id": "linux-command-evidence",
      "status": "skipped",
      "reason": "GitHub-authoritative (jobs: Linux / Smoke Tests)"
    },
    {
      "id": "replay-android",
      "status": "skipped",
      "reason": "parked, workflow_dispatch only (Replay Manual / Android Full Emulator Suite)"
    }
  ],
  "initial": {
    "head": "c59deb41049a4fe52359702e3e7fbeb3e730e0db",
    "status": "",
    "fingerprint": "6397c7390806f47106a90b860a46ac4711e2a3be5573ca8964d48a43561f6a71"
  },
  "changedFiles": [
    ".changeset/host-entry.md",
    ".fallowrc.json",
    "examples/sdk/host-runtime.ts",
    "examples/sdk/tsconfig.json",
    "package.json",
    "packages/contracts/src/client-connection.ts",
    "packages/contracts/src/facades/client.ts",
    "packages/daemon/src/index.ts",
    "packages/daemon/src/server/http/daemon-runtime.ts",
    "scripts/layering/process-globals-policy.test.ts",
    "scripts/layering/process-globals-policy.ts",
    "scripts/layering/root-module-zones.ts",
    "src/__tests__/agent-device-client-daemon-binding.test.ts",
    "src/agent-device-client.ts",
    "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
    "src/daemon-client/daemon-client-attach.ts",
    "src/daemon-client/daemon-client-binding.ts",
    "src/daemon-client/daemon-client-lifecycle.ts",
    "src/daemon-client/daemon-client.ts",
    "src/daemon-composition.ts",
    "src/host.test.ts",
    "src/host.ts",
    "src/provider-device-runtimes.ts",
    "test/integration/installed-package-metro.test.ts",
    "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
    "test/repo-guards/package-exports.test.ts",
    "tsdown.config.ts",
    "website/docs/docs/client-api.md"
  ],
  "plan": {
    "failOpen": true,
    "checks": [
      "format",
      "lint",
      "typecheck",
      "test-app-typecheck",
      "test-app-security",
      "layering",
      "di-seams",
      "fallow",
      "mcp-metadata",
      "build",
      "package",
      "integration-node",
      "macos-coverage",
      "ios-snapshot-differential",
      "vitest-related",
      "unit",
      "unit-ci",
      "coverage",
      "coverage-crap",
      "provider-integration",
      "integration-progress",
      "swift-runner-ios",
      "swift-runner-macos",
      "android-helpers",
      "macos-helper",
      "web-smoke",
      "replay-compat",
      "daemon-wire-compat",
      "affected-selector",
      "gate-manifest",
      "gate-manifest-model",
      "depgraph",
      "tmpdir-leaks",
      "tmpdir-leaks-model",
      "coverage-model",
      "coverage-crap-model",
      "wire-compat-model",
      "production-exports",
      "bundle-owner-files",
      "freerange",
      "fixture-cache",
      "fixture-fallback",
      "command-docs",
      "docs-links",
      "docs-prose",
      "agent-guidance",
      "xctest-selection",
      "packaged-runner-swift",
      "maestro-conformance",
      "maestro-differential",
      "maestro-regenerate",
      "fuzz-parsers",
      "mutation",
      "mutation-affected",
      "mutation-check",
      "mutation-model",
      "concurrency-torture",
      "replay-ios",
      "replay-ios-device",
      "replay-macos",
      "replay-linux",
      "linux-command-evidence",
      "replay-android"
    ],
    "reasons": [
      {
        "check": "format",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers packages/"
      },
      {
        "check": "lint",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers packages/"
      },
      {
        "check": "typecheck",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes packages/"
      },
      {
        "check": "fallow",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "package-src",
        "detail": "layering R11 guards workspace package boundaries"
      },
      {
        "check": "vitest-related",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "build",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "package-src",
        "detail": "package source is bundled into the published artifact"
      },
      {
        "check": "replay-ios",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "packages/contracts/src/client-connection.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers packages/"
      },
      {
        "check": "lint",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers packages/"
      },
      {
        "check": "typecheck",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes packages/"
      },
      {
        "check": "fallow",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "package-src",
        "detail": "layering R11 guards workspace package boundaries"
      },
      {
        "check": "vitest-related",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "build",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "package-src",
        "detail": "package source is bundled into the published artifact"
      },
      {
        "check": "replay-ios",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "packages/contracts/src/facades/client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "packages/daemon/src/index.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers packages/"
      },
      {
        "check": "lint",
        "path": "packages/daemon/src/index.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers packages/"
      },
      {
        "check": "typecheck",
        "path": "packages/daemon/src/index.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes packages/"
      },
      {
        "check": "fallow",
        "path": "packages/daemon/src/index.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "packages/daemon/src/index.ts",
        "rule": "package-src",
        "detail": "layering R11 guards workspace package boundaries"
      },
      {
        "check": "vitest-related",
        "path": "packages/daemon/src/index.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "build",
        "path": "packages/daemon/src/index.ts",
        "rule": "package-src",
        "detail": "package source is bundled into the published artifact"
      },
      {
        "check": "replay-ios",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "packages/daemon/src/index.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers packages/"
      },
      {
        "check": "lint",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers packages/"
      },
      {
        "check": "typecheck",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes packages/"
      },
      {
        "check": "fallow",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "package-src",
        "detail": "layering R11 guards workspace package boundaries"
      },
      {
        "check": "vitest-related",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "build",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "package-src",
        "detail": "package source is bundled into the published artifact"
      },
      {
        "check": "replay-ios",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "packages/daemon/src/server/http/daemon-runtime.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "vitest-related",
        "path": "src/__tests__/agent-device-client-daemon-binding.test.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "format",
        "path": "src/agent-device-client.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/agent-device-client.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/agent-device-client.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/agent-device-client.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/agent-device-client.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/agent-device-client.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/agent-device-client.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/agent-device-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "vitest-related",
        "path": "src/daemon-client/__tests__/daemon-client-embedded-lifecycle.test.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "format",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/daemon-client/daemon-client-attach.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/daemon-client/daemon-client-binding.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/daemon-client/daemon-client-lifecycle.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/daemon-client/daemon-client.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/daemon-composition.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/daemon-composition.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/daemon-composition.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/daemon-composition.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/daemon-composition.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/daemon-composition.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/daemon-composition.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/daemon-composition.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/host.test.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/host.test.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/host.test.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/host.test.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "vitest-related",
        "path": "src/host.test.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "format",
        "path": "src/host.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/host.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/host.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/host.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/host.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/host.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/host.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "build",
        "path": "src/host.ts",
        "rule": "own:public-surface",
        "detail": "public package entry affects declarations"
      },
      {
        "check": "package",
        "path": "src/host.ts",
        "rule": "own:public-surface",
        "detail": "a public entry must still resolve from a clean install"
      },
      {
        "check": "replay-ios",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/host.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "src/provider-device-runtimes.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "src/provider-device-runtimes.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "src/provider-device-runtimes.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "src/provider-device-runtimes.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "layering",
        "path": "src/provider-device-runtimes.ts",
        "rule": "gate:layering",
        "detail": "layering guard reads production src/ modules"
      },
      {
        "check": "build",
        "path": "src/provider-device-runtimes.ts",
        "rule": "src-prod",
        "detail": "production source is compiled by the build"
      },
      {
        "check": "vitest-related",
        "path": "src/provider-device-runtimes.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "src/provider-device-runtimes.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "integration-node",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "node-integration",
        "detail": "node --test integration smoke"
      },
      {
        "check": "replay-ios",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-ios-device",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-macos",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-android",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "replay-linux",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "linux-command-evidence",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "web-smoke",
        "path": "test/integration/installed-package-metro.test.ts",
        "rule": "own:device-lane:shared",
        "detail": "shared runtime surface: every device lane drives the CLI and daemon through it"
      },
      {
        "check": "format",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "vitest-related",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "replay-ios",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "own:device-lane:ios",
        "detail": "ios-owned tree: only the ios device lanes execute it"
      },
      {
        "check": "replay-ios-device",
        "path": "test/integration/ios-simulator-e2e/live-automation-scenario.ts",
        "rule": "own:device-lane:ios",
        "detail": "ios-owned tree: only the ios device lanes execute it"
      },
      {
        "check": "format",
        "path": "test/repo-guards/package-exports.test.ts",
        "rule": "gate:format",
        "detail": "oxfmt covers src/ and test/"
      },
      {
        "check": "lint",
        "path": "test/repo-guards/package-exports.test.ts",
        "rule": "gate:lint",
        "detail": "oxlint covers the source tree"
      },
      {
        "check": "typecheck",
        "path": "test/repo-guards/package-exports.test.ts",
        "rule": "gate:typecheck",
        "detail": "tsc includes src/ and test/"
      },
      {
        "check": "fallow",
        "path": "test/repo-guards/package-exports.test.ts",
        "rule": "gate:fallow",
        "detail": "fallow audits changed TypeScript for dead code"
      },
      {
        "check": "vitest-related",
        "path": "test/repo-guards/package-exports.test.ts",
        "rule": "vitest:related",
        "detail": "Vitest resolves affected tests through its static module graph"
      },
      {
        "check": "docs-links",
        "path": "website/docs/docs/client-api.md",
        "rule": "own:docs-links",
        "detail": "internal docs links must land on an existing page and heading"
      },
      {
        "check": "docs-prose",
        "path": "website/docs/docs/client-api.md",
        "rule": "own:docs-prose",
        "detail": "user docs avoid filler, marketing, and time-relative words"
      }
    ],
    "failOpenReasons": [
      {
        "path": ".fallowrc.json",
        "rule": "workflow-tooling",
        "detail": "workflow/tooling change can alter any gate"
      },
      {
        "path": "examples/sdk/host-runtime.ts",
        "rule": "unknown-path",
        "detail": "path has no derivable owner; run the full set to stay safe"
      },
      {
        "path": "examples/sdk/tsconfig.json",
        "rule": "unknown-path",
        "detail": "path has no derivable owner; run the full set to stay safe"
      },
      {
        "path": "package.json",
        "rule": "workflow-tooling",
        "detail": "workflow/tooling change can alter any gate"
      },
      {
        "path": "scripts/layering/process-globals-policy.test.ts",
        "rule": "workflow-tooling",
        "detail": "workflow/tooling change can alter any gate"
      },
      {
        "path": "scripts/layering/process-globals-policy.ts",
        "rule": "workflow-tooling",
        "detail": "workflow/tooling change can alter any gate"
      },
      {
        "path": "scripts/layering/root-module-zones.ts",
        "rule": "workflow-tooling",
        "detail": "workflow/tooling change can alter any gate"
      },
      {
        "path": "tsdown.config.ts",
        "rule": "workflow-tooling",
        "detail": "workflow/tooling change can alter any gate"
      }
    ],
    "docsOnlyPaths": [
      ".changeset/host-entry.md"
    ]
  },
  "final": {
    "head": "c59deb41049a4fe52359702e3e7fbeb3e730e0db",
    "status": "",
    "fingerprint": "6397c7390806f47106a90b860a46ac4711e2a3be5573ca8964d48a43561f6a71"
  },
  "finishedAt": "2026-10-20T10:42:20.859Z"
}

@thymikee

thymikee commented Oct 20, 2026 •

Copy link
Copy Markdown
Member Author

Final CI at c59deb41049a4fe52359702e3e7fbeb3e730e0db: all checks passed or were non-blocking (20 success, 2 skipped, 1 neutral).

Apple run passed, including iOS fixture E2E, Swift XCTest, and macOS smoke. No Swift retry was needed. Android/Linux smoke, coverage, integration, package, repository guards, security, docs, size, and affected mutation checks also passed.

The foreground gh pr checks --watch completed successfully. The exact-head affected gate receipt and full local iOS smoke evidence are in the preceding comment. No merge or label change was performed.

@thymikee

Copy link
Copy Markdown
Member Author

The changes since d7ece99 fix CI: the iOS smoke failure at automation-open-sheet was a readiness race in the test, and the new selector wait in that scenario does not touch the host or daemon-client code. All 23 checks pass or are non-blocking at c59deb4. One code problem from the earlier review (#3843 (comment)) is still open at that commit, because the delta does not change it.

connectToDaemon sends any client with settings.daemonBinding to attachBoundDaemon (daemon-client-attach.ts, L55-59). That function checks only that the record's token, pid and processStartTime match the pin, then returns the record. It never runs observeLocalDaemon or resolveDaemonTakeover, so version, code origin, signature and lock are never checked. host.ts L143-153 always emits daemonLifecycle: 'attach' with daemonBinding, so every host clientConfig takes this route. A worker that loads clientConfig with a different agent-device build, for example its own node_modules copy, will send requests to the host daemon. The old attach path refused that daemon with daemon-incompatible, and cli-help still promises that refusal to attach clients. The rule: a pinned client accepts only a daemon that matches its pin and also gets a reuse decision from observeLocalDaemon. Enforce both in attachLocalDaemon: check the pin there, after observeLocalDaemon returns 'reuse', and map a mismatch to daemonBindingMismatchError. Then delete attachBoundDaemon. To validate, add a test in daemon-client-embedded-lifecycle.test.ts that writes a pin-matching record with version 0.0.0-stale and expects daemon-incompatible with daemon.rpcCommands empty. The existing 0.0.0-stale tests there run only managed clients, so they do not cover this route.

Could resolveClientSettings instead normalize a binding to daemonLifecycle: 'attach', and apply the pin as a predicate inside attachLocalDaemon after the 'reuse' decision? That would let you delete attachBoundDaemon and the redundant token override, leave plugin validation to validateAgentDevicePlugin, and take the pin's pid and start time from the identity DaemonRuntimeController publishes. host.ts would become a thin delegate with one attach path. I asked this at d7ece99 and have not seen an answer.

I did not run the version-skew case. This finding comes from reading the code at head, as before. I did not open the Apple CI run artifacts, so the CI state comes from the check list and the author's comment. There are no conflicts. Before merge, the pin check must move into attachLocalDaemon after the reuse decision, attachBoundDaemon must go, and the pinned 0.0.0-stale test must pass.

thymikee and others added 2 commits October 20, 2026 14:05
Route pinned clients through attach compatibility before checking their instance pin. Publish the embedded runtime's package code identity rather than the host application's entry identity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep src/host.ts as the actual capture boundary behind the SDK's lazy factory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thymikee thymikee changed the title feat(host): own an embedded runtime with agent-device/host feat(sdk): start an embedded runtime from the main entry Oct 20, 2026
@thymikee

thymikee commented Oct 20, 2026 •

Copy link
Copy Markdown
Member Author

Round 2 at 78ce25c6d15c5a5bd41bbfd4e371e7b4d8bbe41c addresses the d7ece99 review and the 11:31Z follow-up, plus the relayed maintainer simplification.

  • One attach flow: both attachBoundDaemon and attachLocalDaemon are gone. connectToDaemon observes the daemon, requires reuse, then compares the pin as an inline predicate. Compatibility and lock checks cannot be bypassed.
  • One lifecycle decision: resolveClientSettings normalizes binding to attach. The separate binding branches in timeout recovery and private-state-dir selection are gone.
  • No token override: dispatch uses the observed record only after its token, PID and start time match the pin.
  • One runtime identity: the pin uses DaemonRuntimeController.identity; the host no longer reads its own process identity separately.
  • One plugin validator: remove isPluginLike and invalid_embedder_plugin. The registry's validateAgentDevicePlugin reports malformed objects and incompatible API versions in the published inventory. The packed consumer covers both.
  • No host inventory copy: remove host.plugins and the controller inventory field. daemon.json / daemon status remain the inventory owner.
  • No logging option: remove log, LogEntry, stream splitting and log-sink recovery. Runtime console output is silent; existing artifact diagnostics remain.
  • No disposal protocol: remove Symbol.asyncDispose; use explicit close().
  • Minimal new public types: keep StartAgentDeviceOptions and AgentDeviceHost. Remove HostClientConfig and the extra HostEnvironment / ShutdownReport root reexports. Existing AgentDeviceClientConfig describes the serializable config.
  • No host ownership-error aliases: propagate daemon_registration_refused and its existing status instead of reconstructing busy/unproven ownership. Remove state-dir-in-use and state-dir-ownership-unproven.
  • No extra mismatch categories: one daemon-binding-mismatch refuses absent, unreadable or replaced registrations without another record read. Keep identity details without credentials. Remove the unnecessary state_dir_required reason; missing input remains INVALID_ARGS.
  • Minimal cleanup: runtime startup owns rollback. The host only closes an already-started runtime if pin/client construction fails. close() directly returns the runtime's existing shutdown report.
  • Normal code compatibility: embedded startup supplies the daemon package's code identity, not the embedding application's entry-file fingerprint. Defaults are normalized once at runtime construction.
  • Stronger operator-stop assertion: assert the clean shutdown report and repeat-close equality rather than toBeDefined().
  • Main entry only: remove the host package/build subpath. The main factory dynamically loads its implementation; public types have their SDK owner. R86 still names the actual src/host.ts process-capture boundary.
  • Amended ADR 0034: remove the former explicit-start target and host-subpath/control requirements. Existing managed/attach lifecycle semantics remain. No other ADR needed a change.
  • Earlier iOS finding: retain c59deb4's selector readiness fix. This round changes no Swift.

Physical production lines against c59deb4: direct src/daemon-client/*.ts files (19, excluding tests) 5,180 → 5,099; host implementation 255 → 80, or 103 including its new type file. Across all seven production modules changed this round: 1,944 → 1,728 (−216). This counts the extracted declarations, rather than treating relocation as a reduction.

Exact-head local validation: pnpm check:affected --run --head HEAD passed with exactCommit=true and an unchanged clean checkout (receipt run-Dos0MN, 2026-10-20T12:05:44Z–12:09:50Z). All 36 runnable gates passed; 25 GitHub-owned or parked checks were explicitly skipped. Related suite: 2,226 passes / 200 files. Node integration: 146 passes / 12 opt-in skips. Independent review: no findings. No gate approval row or suppression was added.

ADR 0027's eager-closure walker, run directly on src/sdk/index.ts, reports 249 modules at merge base 620228b8ca, c59deb4, and this head. The host implementation, daemon composition, and daemon package are absent from all three eager closures.

The built tarball was installed into a separate consumer with npm. Its script imports startAgentDevice from agent-device, lists devices, opens Settings on my iPhone 18 Pro Max simulator (1C2C9FD4-B720-4160-BAEB-7D4724D7B5F3, iOS 27.0), takes one snapshot, closes the session, and closes the host:

devices: 21
opened: com.apple.Preferences
snapshot: com.apple.Preferences (66 nodes)
session close: {"session":"t3-9d1427164f02e5b3e613f8cb","identifiers":{"session":"t3-9d1427164f02e5b3e613f8cb"}}
host close: {"providerReleases":{"completed":[],"pending":[],"unknown":[]},"requests":{"drained":0,"abandoned":0},"platformOwners":"closed","runners":{"stopped":[],"handedOff":[]},"sessions":{"closed":0,"failed":0},"plugins":{"disposed":["browserstack","aws-device-farm"],"failed":[],"pending":[]}}

Size/startup baseline at c59deb4: +17.9 kB unpacked, +6.1 kB download; CLI --version +0.9 ms (35.7 → 36.6 ms, seven-run medians). New same-runner CI report: +12.1 kB unpacked, +4.3 kB download; CLI --version −1.7 ms (35.2 → 33.5 ms, seven-run medians). CLI --help: +0.8 ms (65.4 → 66.3 ms), previously +2.2 ms. The small timing differences are observational noise, not a performance claim.

Absolute package bytes, c59deb4 → this head: unpacked 5,469,895 → 5,464,066 (−5,829); download 1,658,064 → 1,656,215 (−1,849). Final CI at this exact head: 17 success, 1 skipped, 1 neutral; no pending or failed checks. Apple passed iOS and macOS smoke. Android/Linux, coverage, integrations, repository guards, package, security, docs and size checks passed. gh pr checks --watch completed with exit 0. No retry was needed. No merge or label change was performed.

@thymikee

Copy link
Copy Markdown
Member Author

The code looks good at 78ce25c. The earlier evidence gap from c59deb4 is closed: the author reports the packed-tarball iOS run (a 66-node Settings snapshot with a clean shutdown report), and the 249-module claim rests on the CI no-growth gate. I did not rerun that iOS run or the module walker, and I did not run tests locally. CI shows 19 checks with 0 not passing, and no conflicts. Nothing else blocks human review. Not blocking, and fine to take or leave: the missing-stateDir refusal in src/host.ts#L15 lost its typed reason and hint, so it could get a reason back; DaemonRuntimeOptions.codeIdentity in packages/daemon/src/server/http/daemon-runtime.ts#L232 re-declares the origin union, so it could use DaemonCodeOrigin from host-kit instead of filling codeSignature with 'unknown'; and the new hint in src/daemon-client/daemon-client-binding.ts#L20 could keep shellQuoteIfNeeded around the daemon.json path.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Oct 20, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@thymikee

thymikee commented Oct 20, 2026 •

Copy link
Copy Markdown
Member Author

Applied all three 13:40Z notes in 0eaa324:

  • Missing stateDir: restore host_state_dir_required and its actionable hint.
  • Code identity: use host-kit DaemonCodeOrigin; preserve an absent installed signature through registration instead of inventing unknown.
  • Binding hint: quote the full daemon.json path with shellQuoteIfNeeded.

Exact-head pnpm check:affected --run --head HEAD passed (exactCommit=true, receipt run-pnR5w1): 36 runnable gates, 2,375 related tests and 146 Node integrations passed; 12 opt-in integration skips. Independent follow-up review: no findings. Final CI: 17 success, 1 skipped, 1 neutral; no pending or failed checks. Apple iOS/macOS, Android/Linux, coverage and integrations passed. Foreground gh pr checks --watch exited 0; no rerun was needed. No merge or label change.

@thymikee
thymikee merged commit b425b03 into main Oct 20, 2026
19 checks passed
@thymikee
thymikee deleted the feat/host-entry-3757-v2 branch October 20, 2026 14:34
@thymikee

Copy link
Copy Markdown
Member Author

The code looks good at 0eaa324. The three notes from the 78ce25c review are applied, and the delta adds no new problems.

Not blocking, and fine to take or leave: DaemonRuntimeOptions.codeIdentity in https://github.com/callstack/agent-device/blob/0eaa324/packages/daemon/src/server/http/daemon-runtime.ts#L233 accepts { origin: 'checkout' } with no signature, but its only producer, LocalDaemonCodeIdentity in https://github.com/callstack/agent-device/blob/0eaa324/src/daemon-client/daemon-launch-spec.ts#L73-L75, cannot make that shape. You could move that union next to DaemonCodeOrigin in @agent-device/host-kit/code-signature and type codeIdentity with it.

All 19 checks pass at this head. I read the code only and did not run tests here, so the exact-head check:affected receipt is the author's report. No conflicts. Nothing blocks human review.

thymikee added a commit to jipeng6036-del/agent-device that referenced this pull request Oct 20, 2026
* origin/main: (28 commits)
  feat(gesture): add gesture tap with 2 to 5 simultaneous contacts (callstack#3847)
  chore: mark 0.21.29 as released
  chore(diagnostics): trace Apple prepare phases and subprocess lifecycle (callstack#3846)
  feat(sdk): start an embedded runtime from the main entry (callstack#3843)
  fix(alert): align local Apple and Limrun button choices (callstack#3825)
  docs(adr): drop the withdrawn host allocator design from ADR 0021 (callstack#3845)
  feat(screenshot): support selector crops on CoreDevice iPhones (callstack#3839)
  feat(scroll): support explicit budgets for long target searches (callstack#3837)
  fix(apple): key the toolchain fingerprint memo on the resolved xcode-select dir (callstack#3726)
  feat(android): hand rotation back to the sensor with orientation auto (callstack#3822)
  fix(sdk): scope released entries and deferred provider calls (callstack#3833)
  test(android): prepare the snapshot helper before landmark waits (callstack#3834)
  perf(ci): overlap iOS simulator boot with the native build (callstack#3836)
  docs(ios): record SpringBoard sessions as verified on a physical iPhone (callstack#3840)
  feat(apple): admit two-finger gestures on physical iOS devices (callstack#3838)
  perf(android): bound target readiness and confirm moved clears (callstack#3815)
  perf(android): reuse live helper for input and capture (callstack#3811)
  chore(gates): forbid process globals outside declared entry points (callstack#3753) (callstack#3823)
  refactor(commands): resolve command inputs and output from the caller host (callstack#3753) (callstack#3829)
  refactor(runtime): use the owning host environment at process boundaries (callstack#3753) (callstack#3828)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant