Skip to content

refactor: route boot through readiness runtime - #1747

Merged
thymikee merged 5 commits into
refactor/adr19-parametrized-cutover-gatefrom
refactor/adr19-boot-unit
Aug 12, 2026
Merged

refactor: route boot through readiness runtime#1747
thymikee merged 5 commits into
refactor/adr19-parametrized-cutover-gatefrom
refactor/adr19-boot-unit

Conversation

@thymikee

@thymikee thymikee commented Aug 11, 2026

Copy link
Copy Markdown
Member

Summary

Move boot onto ADR 0019's request-scoped device-runtime tier at exact head fcb2f35cc:

  • add side-effect-free, per-owner lazy inspectFacts; admission inspects once and a supported request binds exactly once through the discriminated bootTarget / bootTargetHeadless plan
  • preserve Android emulator boot, Apple simulator boot, and physical-device readiness; headless boot is a fact, not a flag-only admission check
  • move stopped-AVD placeholder resolution into Android inventory
  • move Apple and Android readiness sequencing into their owning private platform packages; inject only narrow command/process ports
  • make Apple automation keep-hot platform-internal and remove boot's daemon-threaded prewarm dependency
  • propagate request cancellation through Apple simulator/physical and Android emulator polling; clean up an emulator started by an aborted request
  • delete the root cross-family readiness semantic adapter and enforce its retirement
  • add the boot R20 row to the shared parameterized cutover gate

Evidence tier: request-scoped. No admission ledger, fence, durable descriptor, recovery adapter, or durable lifecycle state is added.

Legacy-parity denominator

Owner/cell Normal Headless Result
local Android emulator, including stopped AVD placeholder available available package-owned boot and polling
local Android physical device available unavailable shared physical readiness
local Apple iOS/iPadOS/tvOS/visionOS simulator available unavailable package-owned simulator readiness
local Apple iOS physical device, CoreDevice or XCTest available unavailable signal-aware narrow physical port
macOS host and watchOS sentinel unavailable unavailable explicit fail-closed facts; zero bind
HarmonyOS unavailable unavailable ensureReady remains the legacy no-op needed by later units; boot stays unavailable
Linux, Vega, web transport-composed unavailable unavailable explicit fail-closed facts
direct Limrun iOS simulator / Android emulator available unavailable provider-owned facts and operation
direct WebDriver iOS / Android available unavailable provider-owned facts and operation

Facts tests enumerate the local platform leaves and both provider owners. Handler regressions prove unavailable cells inspect once/bind zero, while supported cells inspect once/bind once. In-flight abort tests cover Apple simulator, Apple physical readiness, and a request-started Android emulator.

This PR changes 84 files (+1,803/-546) relative to its exact #1745 stack base. Scope expanded during review because the originally proposed root cross-family readiness adapter violated ADR 0019 ownership; the additional files move those same boot mechanics into Apple/Android packages and narrow the injected host ports. It remains one boot unit.

Validation

  • pnpm check:affected --run && git push passed at exact head fcb2f35cc
  • layering 170/170
  • planted gate violations cover the deleted root semantic adapter and lexical-owner singularity
  • live stopped iOS simulator iPhone 17 Pro booted successfully and was restored to stopped
  • live physical iOS thymikee-iphone completed readiness successfully
  • live stopped Android AVD Pixel_7_CI booted headless and normally through inventory placeholder resolution
  • Android emulator and iOS simulator were restored to stopped; the isolated daemon state was cleaned and no manual sessions remain

Docs/skills were not changed because the public CLI surface and workflow guidance are unchanged.

Stacked on #1745 after its final #1750 replay. Part of #1739.

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
JS raw 2.18 MB 2.19 MB +6.5 kB
JS gzip 713.3 kB 715.3 kB +2.1 kB
npm tarball 839.3 kB 841.2 kB +1.8 kB
npm unpacked 2.92 MB 2.93 MB +6.6 kB

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 27.0 ms 27.8 ms +0.9 ms
CLI --help 66.1 ms 67.6 ms +1.6 ms

Top changed chunks:

Chunk Raw diff Gzip diff
dist/src/runtime3.js +25.3 kB +7.5 kB
dist/src/runtime2.js +2.9 kB +974 B
dist/src/dispatch.js -788 B -242 B
dist/src/internal/daemon.js +890 B +212 B
dist/src/session.js -516 B -130 B

@thymikee

Copy link
Copy Markdown
Member Author

Reviewed exact head d48788c.

[P2] boot still chooses ensureReadyUse versus ensureReadyHeadlessUse by branching directly on flags.headless, while ADR 0019 §2 requires commands whose runtime use depends on normalized input to first produce a discriminated execution plan retaining the literal use type. Please add a DeviceReadinessRuntimePlan/resolver in contracts, have the descriptor expose the exhaustive plan-use set, make the handler consume plan.use/plan.kind, and cover the resolver with a non-vacuous regression/planted-red check.

The Apple/Android/provider fact and binding paths are otherwise coherent, and Web/Harmony/Linux/Vega fail closed as unavailable. All authoritative checks are green. This head is still not ready: dependencies #1740 and #1745 remain open (#1740 has a confirmed gate finding), the required parametrized cutover-gate boot row is absent pending #1745/rebase, and no live simulator/emulator/physical-device evidence was run. Fixture/provider lanes do not replace the real-device evidence required by docs/agents/pull-requests.md; please supply live coverage for the changed readiness paths before readiness.

@thymikee

Copy link
Copy Markdown
Member Author

Confirmed cross-unit blocker for the apps unit:

  • At the stack base, APP_INVENTORY_CAPABILITY admits Apple simulator/device cells, including the macOS host device.
  • listIosApps has a real macOS implementation.
  • Legacy ensureDeviceReady returns successfully as a no-op for macOS, so apps remains supported there.
  • This PR correctly reports ensureReady unavailable for macOS to avoid admitting boot on a leaf that legacy boot did not behaviorally support.
  • Tracker refactor(daemon): platform-free daemon — broader migration waves (successor to #1696) #1739 nevertheless fixes the apps required use as ensureReady + listApps.

Therefore apps cannot both consume the declared use and preserve its macOS denominator without a readiness/boot contract decision in or immediately after #1747. Simply making ensureReady available on macOS would make boot admission too broad; dropping ensureReady from the macOS apps plan contradicts the recorded complete use. HarmonyOS is not the parity blocker: its legacy apps capability bucket rejected it.

Please resolve or explicitly sequence this before the apps PR final rebase. The apps worker is keeping facts honest and is not widening boot.

@thymikee

Copy link
Copy Markdown
Member Author

Review fixes are now pushed at exact head d54ab6e05.

  • Boot input is normalized by resolveDeviceReadinessRuntimePlan into a discriminated plan retaining the literal use; the descriptor exposes the exhaustive bootTarget / bootTargetHeadless use set, and the handler consumes plan.kind, plan.operation, and plan.use. The planted mutation collapsing headless into normal failed the resolver test as intended.
  • Generic downstream readiness is now distinct from boot admission. macOS and HarmonyOS expose ensureReady as the legacy no-op required by apps/appstate parity, while bootTarget remains unavailable, so boot is not widened. A macOS boot parity cell proves one inspect and zero binds.
  • Platform/provider facts and complete fixtures now declare both boot operations; focused runtime/contract suites are green.

Validation immediately before push: pnpm check:affected --run && git push; 557 files / 4,715 tests passed, changed-line coverage 129/142 (90.85%), changed-branch coverage 80/87 (91.95%), daemon wire surface unchanged.

Still draft: final rebase and the boot row in #1745's parametrized gate remain blocked on corrected #1740/#1745 heads; live simulator/emulator/physical evidence is still required before readiness.

@thymikee
thymikee force-pushed the refactor/adr19-boot-unit branch from d54ab6e to 0e59197 Compare August 11, 2026 20:05
@thymikee
thymikee changed the base branch from main to refactor/adr19-parametrized-cutover-gate August 11, 2026 20:05
@thymikee

Copy link
Copy Markdown
Member Author

Boot is now rebased onto the current parametrized-gate stack and published at exact head 0e591973c; PR #1747 now targets refactor/adr19-parametrized-cutover-gate.

The prior P2 is resolved in the current stack: admission uses the discriminated DeviceReadinessRuntimePlan, keeps boot-target admission separate from downstream ensureReady, and preserves macOS apps/appstate parity without widening boot. The full post-rebase pnpm check:affected --run passed before the force push (including 4,715 tests and wire compatibility).

This remains draft. Current GitHub checks are green except the iOS smoke lane still running. Prerequisite review blockers remain in #1740 and #1745, and live simulator/emulator/physical-device evidence is still outstanding.

@thymikee

Copy link
Copy Markdown
Member Author

Adversarial review correction is pushed at exact head 3ed473400: the required boot row now lives in the shared parametrized cutover table, the Apple legacy boot support closure and both stale parity references are deleted, and no fifth policy file was added. The full pnpm check:affected --run passed before push. The PR body now records the request-scoped tier, complete parity-cell denominator, exact baseline/stack-base size metrics, root/package footprint, and growth justification. Live-device evidence and prerequisite #1740/#1745 findings remain open; the PR stays draft.

@thymikee

Copy link
Copy Markdown
Member Author

Live boot evidence completed on exact head 3ed473400 after a fresh pnpm build, pnpm build:android, and daemon clean:

  • stopped iOS simulator iPhone 17 Pro (6044A251-23C2-4584-B7DB-87A16B787757) booted successfully through the migrated route
  • connected physical iOS device thymikee-iphone (00008150-001849640CF8401C) completed readiness successfully
  • stopped Android AVD Pixel_7_CI booted normally via inventory placeholder resolution, was shut down, then booted successfully with --headless

The Android and iOS simulator targets were restored to stopped, the isolated /private/tmp/adr19-boot-live daemon was cleaned, and no manual sessions remain. No Android physical device was connected; that leaf retains the shared readiness implementation and contract coverage.

@thymikee

Copy link
Copy Markdown
Member Author

Reviewed exact head 3ed4734. The discriminated readiness-plan fix is sound and consistently drives stopped-AVD recovery, fact selection, the binding use, and the exact normal/headless operation. Its regression is meaningful, and the remaining facts, ownership, and one-inspect/one-bind flow are coherent. The branch is CLEAN/MERGEABLE and all current CI is green.

This is still not ready:

No ready-for-human label yet.

@thymikee

Copy link
Copy Markdown
Member Author

Final CI refresh for exact head 3ed473400: all required GitHub checks are green, including the rerun iOS Smoke lane (17m49s). Code, tier evidence, size accounting, and live boot verification are clean. The PR remains draft only because prerequisite review blockers in #1740 and #1745 are unresolved.

@thymikee

Copy link
Copy Markdown
Member Author

Exact-head correction is complete at a20064506.

  • readiness semantics now live in the Apple/Android packages behind narrow command/process ports; the root cross-family semantic adapter is deleted and planted as a retirement violation
  • cancellation reaches simulator/physical/emulator work, including cleanup of an emulator started by an aborted request
  • boot now owns unique R20 in the shared parameterized gate
  • pnpm check:affected --run && git push passed (574 files / 4,765 tests; 82.43% changed-line and 77.55% changed-branch coverage)
  • exact-head live verification passed on stopped iOS simulator, physical iOS, and stopped Android AVD in headless and normal modes; targets were restored and isolated daemon state cleaned

The PR body now records the 84-file scope-expansion verdict, current size report, denominator, and exact-head evidence. No review threads remain. It stays draft only for the prerequisite stack and the final in-progress smoke lane.

@thymikee

Copy link
Copy Markdown
Member Author

Exact head a20064506 is now fully green on GitHub, including the iOS smoke lane. The architecture, cancellation, parity, shared R20 gate row, size/scope evidence, and exact-head live boot verification have all been re-reviewed with no remaining code or review-thread finding. This PR is technically ready relative to its current stack base; it remains draft only until prerequisite #1745 (and #1740 beneath it) merges and the final replay stays green.

@thymikee

Copy link
Copy Markdown
Member Author

Exact-head correction is complete at .\n\n- readiness semantics now live in the Apple/Android packages behind narrow command/process ports; the root cross-family semantic adapter is deleted and planted as a retirement violation\n- cancellation reaches simulator/physical/emulator work, including cleanup of an emulator started by an aborted request\n- boot now owns unique R20 in the shared parameterized gate\n- [WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
[WARN] Your node_modules are out of sync with your lockfile. The workspace structure has changed since last install
check:affected — diff origin/main...HEAD
Fail-open: selecting the full check set.
! scripts/layering/check.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/cutover-policy-ast.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/device-inventory-cutover-policy.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/device-inventory-cutover-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/logs-runtime-cutover-policy.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/logs-runtime-cutover-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/network-runtime-cutover-policy.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/network-runtime-cutover-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/record-runtime-cutover-policy.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/record-runtime-cutover-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/record-runtime-mechanics-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/record-runtime-policy-ast.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/record-runtime-registry-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/rule-ids.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-extensions.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-extensions.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-fixtures.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-model.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-policy.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-policy.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-table.test.ts [workflow-tooling] — workflow/tooling change can alter any gate
! scripts/layering/runtime-command-cutover-table.ts [workflow-tooling] — workflow/tooling change can alter any gate
Selected 21 check(s):

  • format: Formatting (oxfmt)
  • lint: Lint (oxlint)
  • typecheck: Typecheck (tsc)
  • test-app-typecheck: Expo test app typecheck (GitHub-authoritative; not run locally)
  • layering: Import-direction layering guard
  • fallow: Fallow code-quality audit
  • mcp-metadata: MCP registry metadata sync
  • build: Build (tsdown + declarations)
  • package: Published package (publint, attw, clean-install resolution)
  • integration-node: Node integration smoke
  • vitest-related: Tests related by Vitest module graph
  • unit: Unit + smoke suite
  • coverage: Affected LCOV + changed-line coverage
  • provider-integration: Provider-backed integration suite
  • integration-progress: Integration architecture-progress gate
  • swift-runner: Swift runner build (GitHub-authoritative; not run locally)
  • android-helpers: Android helper builds (GitHub-authoritative; not run locally)
  • macos-helper: macOS helper build (GitHub-authoritative; not run locally)
  • web-smoke: Live web platform smoke (GitHub-authoritative; not run locally)
  • replay-compat: Replay-compat corpus provenance (released blobs)
  • daemon-wire-compat: Daemon RPC wire surface vs. last released tag

[skip] test-app-typecheck — GitHub-authoritative (jobs: Resolve native fingerprint)

[skip] swift-runner — GitHub-authoritative (jobs: Swift Runner Unit Compile, iOS / Smoke Tests, macOS / Smoke Tests)

[skip] android-helpers — GitHub-authoritative (jobs: Android / Smoke Tests)

[skip] macos-helper — GitHub-authoritative (jobs: macOS / Smoke Tests)

[skip] web-smoke — GitHub-authoritative (jobs: Web Platform Smoke)

[run] format: pnpm run format:check
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
Checking formatting...

All matched files use the correct format.
Finished in 377ms on 2608 files using 12 threads.

[run] lint: pnpm run lint
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0

[run] typecheck: pnpm run typecheck
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0

[run] layering: pnpm run check:layering
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
✔ registryAliasTokens reads every alias property value out of the registry source (0.938084ms)
✔ registryAliasTokens is not fooled by an unrelated alias string elsewhere in the file (0.084667ms)
✔ importsAliasResolver is true only for a real VALUE import of the resolver (0.130167ms)
✔ importsAliasResolver is false for a type-only import (0.047875ms)
✔ importsAliasResolver is false when the import is missing or from the wrong module (0.071333ms)
✔ aliasResolverLocalName resolves the LOCAL binding, following an as alias (0.052791ms)
✔ aliasResolverLocalName is null when there is no matching value import (0.046708ms)
✔ helpTargetBindingName reads the binding resolveSimpleHelpTarget produces (0.12675ms)
✔ helpTargetBindingName is null when the fast path no longer produces one (0.06875ms)
✔ countLocalBindings counts value declarations only, not the import or type positions (0.218541ms)
✔ usageTextDelegationFailure accepts the real composition, by local name (0.318458ms)
✔ usageTextDelegationFailure rejects a raw call, with no wrapping resolver call (0.200417ms)
✔ usageTextDelegationFailure rejects a present-but-unused import (0.1675ms)
✔ usageTextDelegationFailure rejects an import used only unrelated to buildCommandUsageText (0.195291ms)
✔ usageTextDelegationFailure rejects a decoy wrapped call beside a raw shipped call (0.243833ms)
✔ usageTextDelegationFailure rejects the resolver applied to anything but the help target (0.141375ms)
✔ usageTextDelegationFailure rejects a local shadow of the imported resolver (0.101166ms)
✔ usageTextDelegationFailure rejects an ambiguous second help-target binding (1.062958ms)
✔ usageTextDelegationFailure reports a fast path that no longer builds usage text at all (0.173625ms)
✔ localAliasLiterals reports every requested token present as a string literal (0.14725ms)
✔ localAliasLiterals ignores tokens that only appear as identifiers, not string literals (0.063667ms)
✔ localAliasLiterals reports nothing when the fixed bin.ts delegates and holds no literals (0.050958ms)
✔ the real tree imports the resolver, calls it into buildCommandUsageText, holds no local alias literals, and passes R12 (5.299542ms)
✔ every catalogued rule is registered, and nothing else is (0.87825ms)
✔ every registered rule is callable, so no entry is a stale reference (0.117834ms)
✔ contracts rejects host process and timer mechanics (0.815833ms)
✔ contracts policy ignores type vocabulary, prose, tests, and capture-kit mechanics (0.352667ms)
✔ network traffic vocabulary cannot grow parser implementation inside contracts (0.235583ms)
✔ daemon modularity baseline records the measured R7 ownership pressure (0.367084ms)
✔ external daemon/types.ts importer membership changes require the baseline to change (0.700833ms)
✔ planned logical modules start with zero forbidden imports (0.125208ms)
✔ replay-test rejects request-global and engine-internal imports (0.471917ms)
✔ replay-test may still import its own files inside the package (0.085ms)
✔ replay-test carries no recorded migration imports (0.061834ms)
✔ internal trees reject deep imports globally, including from daemon (0.085667ms)
✔ R9 records zone ceilings and keeps engine files outside the largest component (0.130667ms)
✔ readNamedExports collects re-export and direct-declaration forms, resolving aliases (0.789459ms)
✔ readNamedExports never reports the original name behind an as alias (0.099958ms)
✔ readNamedExports resolves export * as ns to its one real bound name (0.056333ms)
✔ readNamedExports rejects a bare export * re-export (0.166916ms)
✔ readNamedExports rejects a default export (0.079458ms)
✔ readNamedExports reports export { default as x } as the named symbol x (0.050666ms)
✔ readNamedExports collects a local export { … } list with no from (0.057917ms)
✔ readNamedExports collects every declarator of a multi-declarator export (0.049625ms)
✔ parseImports distinguishes value, type-only, dynamic, and value re-export edges (1.128583ms)
✔ value cycles fail while type-only and dynamic cycles stay outside the graph (0.511917ms)
✔ back-edge identities follow the documented target spine (11.172166ms)
✔ neutral ownership zones reject value imports into higher layers (0.20075ms)
✔ type-only edges are ranked by R6 and ignored by R5, and vice versa (0.169875ms)
✔ ranked and unranked zones are disjoint and both non-empty (0.092958ms)
✔ classifyZone separates the ranked spine from intentionally-unranked zones (0.050708ms)
✔ every production zone is deliberately classified as ranked or unranked (552.653ms)
✔ listSourceFiles includes root-level src/.ts production files (279.563917ms)
✔ SessionState field names come from the declaration, not a hand-kept list (0.303625ms)
✔ session-state writes are found by field, and non-daemon or undeclared names are not (0.761292ms)
✔ every assignment form is a write, including the ones a regex forgets (0.238583ms)
✔ a computed session write is reported rather than silently unattributed (0.187ms)
✔ every declared session-state owner is a real file path under src/daemon (0.187ms)
✔ a zero-dep job is discovered from the workflow, and a dep-installing one is not (4.177417ms)
✔ install-deps: false counts whether YAML parsed it as a boolean or a string (0.968084ms)
✔ a job with no recognizable entry script is reported rather than exempted (0.616375ms)
✔ a bare pnpm script name resolves through package.json to its entry scripts (0.416583ms)
✔ a resolved script that itself runs a named script is expanded too (0.297958ms)
✔ an alias cycle does not hang, and still collects every non-cyclic entry (0.551375ms)
✔ a pnpm word that names no real package.json script resolves to nothing (0.266667ms)
✔ a package import anywhere in a zero-dep closure is rejected, builtins are not (0.357792ms)
✔ an import written inside a string is not a package import (0.091334ms)
✔ the repo's own zero-dep jobs resolve without node_modules (5.12775ms)
✔ a session write counts through an aliased binding, not only one named session (0.154583ms)
✔ every SessionState field is classified exactly once (0.27825ms)
✔ classification drift is reported in all three directions (0.134333ms)
✔ largestTypeCycleSize counts type-only cycles and ignores dynamic ones (0.189416ms)
✔ specifier sites carry 1-based lines for static and dynamic imports (2.014667ms)
✔ every workspace package façade names its exports explicitly (no bare export *) (300.454458ms)
✔ every façade re-exports its sources exhaustively (no silent narrowing) (281.909875ms)
✔ double-quoted and re-export routes into packages are not invisible to R11 (0.430583ms)
✔ a package file importing root src is a violation (0.104291ms)
✔ intra-package relative imports hold (0.06075ms)
✔ an exported package self-reference holds while a deep self-import fails (0.248375ms)
✔ a cross-package import needs a workspace:
declaration and an exported subpath (0.119042ms)
✔ a root src file tunnelling into packages//src relatively is a violation (0.137083ms)
✔ the R8 exception requires zero-dep closure membership AND an exports-named target (0.120459ms)
✔ root workspace specifiers need a root workspace:
entry and an exported subpath (0.154417ms)
✔ the real tree parses, declares, and passes R11 (473.288167ms)
✔ Node resolution enforces the exports map at runtime (2.421458ms)
✔ the inventory substrate has six private lazy packages and one exact composition root (31.294792ms)
✔ capture-kit and platform workspace packages are R11-owned unranked zones (0.107125ms)
✔ untracked production TypeScript makes committed-state evidence fail closed (0.742416ms)
✔ family packages are exact, private, and expose only their root facade (1.078708ms)
✔ composition policy does not pin local platform-module identifier spelling (0.4805ms)
✔ only src/platform-runtime.ts may import a concrete platform package (6.935541ms)
✔ contracts never depend on a concrete platform package in production or tests (2.787875ms)
✔ platform packages cannot escape to root, daemon, siblings, or raw process primitives (4.783875ms)
✔ platform packages may use capture-kit but no unrelated workspace implementation package (1.535833ms)
✔ package-owned tests may import their own public facade (0.443041ms)
✔ platform facades cannot evaluate mechanics eagerly (1.939125ms)
✔ composition policy does not infer host authority from function or class names (0.475667ms)
✔ composition keeps platform implementation loaders behind selected use (2.337416ms)
✔ implementation-loader detection ignores comments, strings, and deferred function bodies (1.033125ms)
✔ composition imports are category-based for future contracts and host adapters (0.82175ms)
✔ Node resolves only each platform package root facade (2.158833ms)
✔ committed-state discovery rejects untracked production and ignores untracked manifests (1406.174583ms)
✔ facade dynamic imports must be nested in deferred functions (0.785375ms)
✔ platform production cannot acquire ambient filesystem, OS, process, or network authority (0.421875ms)
✔ platform facades cannot probe injected host capabilities at module evaluation (0.087209ms)
✔ Apple production must route xcrun availability and execution through appleTools (0.1595ms)
✔ Apple xcrun routing guard ignores comments, strings, and non-xcrun generic commands (0.322584ms)
✔ syntax checks ignore comments and strings and allow deferred imports and host use (0.10875ms)
✔ R16 rejects native mechanics in the daemon record owner without scanning prose (3.671541ms)
✔ R16 rejects child termination and platform branching in daemon record owners (0.281708ms)
✔ R16 requires the real registry normalization path to assert the record use join (1.447041ms)
✔ the layering rules currently in tree carry no unallowed collision (2.903584ms)
✔ a collision nobody allowed fails, whichever order it lands in (0.145333ms)
✔ an allowance expires with the collision it allows (0.060792ms)
✔ reintroducing the transitional collision is rejected once the allowance is gone (0.061542ms)
✔ one rule declaring its id from several call sites is not a collision (0.047875ms)
✔ devices keeps one gateway-owned handler route through an aliased import (0.840625ms)
✔ devices rejects a missing handler module (0.098375ms)
✔ devices rejects a handler that imports but never calls the inventory gateway (0.0985ms)
✔ devices rejects a handler that never imports the inventory gateway (0.07ms)
✔ devices does not accept a call through a binding that shadows the imported alias (0.096417ms)
✔ session state scan catches planted app-log record construction outside its owner (0.339709ms)
✔ source-executed syntax scan rejects using declarations but ignores prose (0.226042ms)
✔ the parametrized gate goes red on a planted row across every generalized column (1.880416ms)
✔ the planted row is green once the command has exactly one execution path (0.138042ms)
✔ rows are independent: one command going red leaves the others alone (0.383833ms)
✔ planted red: an incomplete row fails instead of enforcing nothing (0.082542ms)
✔ planted red: a row that retires nothing is rejected (0.060916ms)
✔ planted red: an empty singular-execution claim is rejected (0.043042ms)
✔ planted red: a named-operation row that enforces no operation is rejected (0.049709ms)
✔ planted red: a named-operation row that enforces only some operations is rejected (0.06425ms)
✔ planted red: a row that enforces an operation it does not name is rejected (0.061875ms)
✔ planted red: duplicate operations on either side are rejected (0.080292ms)
✔ planted red: every named operation declares its lexical owner (0.049625ms)
✔ unrelated daemon calls neither satisfy nor duplicate an owner-scoped operation (0.176917ms)
✔ a pattern-only row may prove singularity through its route alone (0.049333ms)
✔ planted red: a durable row without a lifecycle proof is rejected (0.130917ms)
✔ planted red: a request-scoped row claiming durable machinery is rejected (0.111209ms)
✔ every shipped row states its claims (0.137042ms)
✔ R20 boot rejects the superseded root readiness adapter (3.754ms)
✔ R20 boot operation singularity is scoped to the session-state handler (0.459292ms)
✔ devices rejects an exact legacy inventory module path (1.010958ms)
✔ devices rejects executable legacy imports and identifiers (0.442833ms)
✔ devices rejects dynamic imports and re-exports of legacy inventory modules (0.560875ms)
✔ devices ignores comments, strings, and similarly named non-route modules (0.697084ms)
✔ legacy logs scan catches a planted provider route and plugin facet (0.751542ms)
✔ legacy logs scan ignores retired names in comments and string data (0.232667ms)
✔ legacy logs scan retains type-import and computed executable route coverage (0.321041ms)
✔ legacy logs scan catches planted capability and dual-admission routes (0.543041ms)
✔ legacy logs scan follows declaration roles after files move (0.757334ms)
✔ R14 violations retain their exact source line (0.184542ms)
✔ logs narrowing scan catches planted assertions, non-null repair, and bracket access (0.321708ms)
✔ logs keeps the broader non-null scan over every daemon runtime operation (0.159333ms)
✔ network cutover scan catches planted legacy execution and dual admission (0.6165ms)
✔ network cutover scan rejects a retired implementation by committed path (0.222208ms)
✔ network cutover scan ignores retired names in comments and string data (0.162666ms)
✔ network narrowing scan catches planted casts, non-null repair, and bracket access (0.2165ms)
✔ network route scan rejects planted neither and duplicate routes (0.19575ms)
✔ R16 catches a planted legacy recording backend, admission, and plugin facet (0.745667ms)
✔ R16 excludes trace-only mechanics from the record cutover scan (0.690666ms)
✔ R16 rejects the retired recording-provider scope while allowing the focused transport (0.321125ms)
✔ R16 rejects proof repair for a narrowed screen-recording operation (0.166667ms)
✔ every import form that reaches the engine is refused (0.782708ms)
✔ the owner holds the engine, and the root façade stays open to everyone (0.320625ms)
✔ a missing engine door fails the gate instead of silencing it (0.091791ms)
✔ the refusal names the owner and the entries that replace the bypass (0.136792ms)
✔ R2 commands-floor closes the four zones below the command surface, whatever the kind (0.669583ms)
✔ R3 platforms-seam closes static value imports and opens the three declared seam owners (0.130291ms)
✔ every policy carries a hint, and the lead names the kind it rejected (0.104708ms)
✔ a policy states its scope with exactly one of to or exceptTo (0.055292ms)
ℹ tests 170
ℹ suites 0
ℹ pass 170
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1654.811375
Layering guard: OK — 1228 source files satisfy R2-R3 and contain no value-import cycles (both checked globally); the ranked target spine contains no back-edges (only the composition root is unranked among src zones), and its type-only inversions match the R6 ratchet (7 remaining); all 33 SessionState fields are classified and every write is inside its declared owner (R7); every zero-dep CI job resolves without node_modules (R8); the largest type-level cycle is down to 46 files, under the R9 baseline of 47 — lower the daemon modularity zone ceilings when convenient; R10 pins R7 at 21 writer-owned fields / 25 owner claims, R9 at 47 files with zone ceilings, 2 external daemon/types.ts importers, and zero forbidden logical-module imports beyond 0 recorded migration import(s); R11 holds 17 workspace package(s) behind 40 exported subpath(s) with zero root back-imports; R13 holds six private implementation-lazy platform packages above capture-kit behind one composition root; each migrated command (boot, devices, logs, network, record) keeps exactly one platform-execution path; and bin.ts imports normalizeCliCommandAlias, actually passes it into buildCommandUsageText, and holds no local alias literals (R12).

[run] fallow: pnpm run check:fallow --base origin/main
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
■ Metrics: dead code 1 · complexity 0 · duplication 0
── Unused Code ─────────────────────────────────────

● Unused exports (1)
packages/contracts/src/facades/platform.ts
:44 runtimeUse (re-export)
Exported symbols with no known consumers — https://docs.fallow.tools/explanations/dead-code#unused-exports

[run] mcp-metadata: pnpm run check:mcp-metadata
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0

[run] build: pnpm run build
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
ℹ tsdown v0.22.4 powered by rolldown v1.1.4
ℹ config file: /private/tmp/agent-device-adr19-1747/tsdown.config.ts
ℹ entry: src/sdk/index.ts, src/sdk/io.ts, src/sdk/artifacts.ts, src/sdk/batch.ts, src/sdk/metro.ts, src/sdk/remote-config.ts, src/sdk/install-source.ts, src/sdk/android-adb.ts, src/sdk/limrun.ts, src/sdk/contracts.ts, src/sdk/selectors.ts, src/sdk/finders.ts, src/bin.ts, src/client/companion-tunnel.ts, src/daemon.ts, src/utils/png-worker.ts, src/utils/update-check-entry.ts
ℹ target: es2022
ℹ tsconfig: tsconfig.lib.json
ℹ Build start
ℹ Cleaning 207 files
ℹ dist/src/internal/daemon.js 336.84 kB │ gzip: 99.23 kB
ℹ dist/src/internal/companion-tunnel.js 8.38 kB │ gzip: 3.22 kB
ℹ dist/src/internal/bin.js 1.71 kB │ gzip: 0.74 kB
ℹ dist/src/android-adb.js 1.67 kB │ gzip: 0.74 kB
ℹ dist/src/internal/png-worker.js 1.08 kB │ gzip: 0.55 kB
ℹ dist/src/limrun.js 0.93 kB │ gzip: 0.35 kB
ℹ dist/src/selectors.js 0.33 kB │ gzip: 0.20 kB
ℹ dist/src/index.js 0.29 kB │ gzip: 0.18 kB
ℹ dist/src/metro.js 0.25 kB │ gzip: 0.17 kB
ℹ dist/src/install-source.js 0.15 kB │ gzip: 0.14 kB
ℹ dist/src/finders.js 0.13 kB │ gzip: 0.12 kB
ℹ dist/src/internal/update-check-entry.js 0.13 kB │ gzip: 0.13 kB
ℹ dist/src/contracts.js 0.12 kB │ gzip: 0.12 kB
ℹ dist/src/artifacts.js 0.08 kB │ gzip: 0.10 kB
ℹ dist/src/remote-config.js 0.08 kB │ gzip: 0.09 kB
ℹ dist/src/io.js 0.07 kB │ gzip: 0.09 kB
ℹ dist/src/batch.js 0.06 kB │ gzip: 0.08 kB
ℹ dist/src/session.js 237.94 kB │ gzip: 69.77 kB
ℹ dist/src/registry.js 147.32 kB │ gzip: 44.25 kB
ℹ dist/src/prepare-kind.js 89.91 kB │ gzip: 29.19 kB
ℹ dist/src/cli-help.js 87.04 kB │ gzip: 29.56 kB
ℹ dist/src/sdk-batch-runner.js 70.53 kB │ gzip: 18.65 kB
ℹ dist/src/runtime.js 69.77 kB │ gzip: 21.93 kB
ℹ dist/src/ime-lifecycle.js 62.15 kB │ gzip: 18.24 kB
ℹ dist/src/screenshot-result.js 59.63 kB │ gzip: 18.60 kB
ℹ dist/src/agent-device-client.js 55.25 kB │ gzip: 17.46 kB
ℹ dist/src/src3.js 44.64 kB │ gzip: 13.38 kB
ℹ dist/src/runner-disposal.js 42.51 kB │ gzip: 13.72 kB
ℹ dist/src/dispatch.js 40.65 kB │ gzip: 12.64 kB
ℹ dist/src/version.js 37.70 kB │ gzip: 12.11 kB
ℹ dist/src/png-worker-contract.js 30.58 kB │ gzip: 9.45 kB
ℹ dist/src/interaction.js 28.78 kB │ gzip: 8.90 kB
ℹ dist/src/runtime2.js 28.17 kB │ gzip: 8.56 kB
ℹ dist/src/cli.js 27.15 kB │ gzip: 8.98 kB
ℹ dist/src/runtime3.js 25.33 kB │ gzip: 7.54 kB
ℹ dist/src/selector-runtime.js 24.52 kB │ gzip: 7.87 kB
ℹ dist/src/server.js 24.36 kB │ gzip: 8.72 kB
ℹ dist/src/apps.js 24.11 kB │ gzip: 7.89 kB
ℹ dist/src/physical-device-control.js 23.62 kB │ gzip: 7.76 kB
ℹ dist/src/connection.js 23.02 kB │ gzip: 7.34 kB
ℹ dist/src/src2.js 22.40 kB │ gzip: 6.95 kB
ℹ dist/src/sdk-android-adb.js 21.73 kB │ gzip: 7.63 kB
ℹ dist/src/client-metro.js 20.18 kB │ gzip: 6.80 kB
ℹ dist/src/connection-runtime.js 19.36 kB │ gzip: 6.30 kB
ℹ dist/src/install-source2.js 18.61 kB │ gzip: 6.43 kB
ℹ dist/src/reporting.js 18.15 kB │ gzip: 6.30 kB
ℹ dist/src/src.js 18.10 kB │ gzip: 6.03 kB
ℹ dist/src/input-actions.js 17.04 kB │ gzip: 6.06 kB
ℹ dist/src/debug-symbols.js 14.25 kB │ gzip: 5.35 kB
ℹ dist/src/app-lifecycle.js 13.26 kB │ gzip: 4.65 kB
ℹ dist/src/android.js 9.38 kB │ gzip: 3.54 kB
ℹ dist/src/replay.js 9.17 kB │ gzip: 3.14 kB
ℹ dist/src/snapshot-runtime.js 9.17 kB │ gzip: 3.33 kB
ℹ dist/src/sdk-contracts.js 8.90 kB │ gzip: 3.80 kB
ℹ dist/src/interactor.js 8.84 kB │ gzip: 3.12 kB
ℹ dist/src/runtime4.js 8.79 kB │ gzip: 3.16 kB
ℹ dist/src/auth-session.js 8.50 kB │ gzip: 2.94 kB
ℹ dist/src/video.js 8.20 kB │ gzip: 3.37 kB
ℹ dist/src/proxy.js 7.80 kB │ gzip: 3.13 kB
ℹ dist/src/app-log-runtime.js 7.78 kB │ gzip: 2.86 kB
ℹ dist/src/runner-lease.js 7.21 kB │ gzip: 2.82 kB
ℹ dist/src/platform-runtime-operation-host.js 7.10 kB │ gzip: 2.56 kB
ℹ dist/src/command-schema.js 7.08 kB │ gzip: 2.77 kB
ℹ dist/src/agent-browser-tool.js 7.07 kB │ gzip: 2.84 kB
ℹ dist/src/inventory.js 7.01 kB │ gzip: 2.86 kB
ℹ dist/src/record-runtime.js 6.97 kB │ gzip: 2.48 kB
ℹ dist/src/find.js 6.44 kB │ gzip: 2.71 kB
ℹ dist/src/snapshot2.js 6.22 kB │ gzip: 2.24 kB
ℹ dist/src/boot-diagnostics.js 6.21 kB │ gzip: 2.33 kB
ℹ dist/src/platform-runtime-app-log-process.js 5.82 kB │ gzip: 2.30 kB
ℹ dist/src/app-resolution.js 5.70 kB │ gzip: 2.28 kB
ℹ dist/src/cli-config.js 5.21 kB │ gzip: 2.35 kB
ℹ dist/src/snapshot.js 5.03 kB │ gzip: 2.27 kB
ℹ dist/src/platform-runtime-screen-recording-apple-simulator-host.js 4.92 kB │ gzip: 1.95 kB
ℹ dist/src/inventory2.js 4.85 kB │ gzip: 1.98 kB
ℹ dist/src/sdk-device.js 4.72 kB │ gzip: 1.73 kB
ℹ dist/src/parser.js 4.69 kB │ gzip: 1.69 kB
ℹ dist/src/runtime7.js 4.64 kB │ gzip: 1.82 kB
ℹ dist/src/helper.js 4.48 kB │ gzip: 1.96 kB
ℹ dist/src/input-actions2.js 4.46 kB │ gzip: 1.92 kB
ℹ dist/src/tool-provider.js 4.35 kB │ gzip: 1.76 kB
ℹ dist/src/app-lifecycle2.js 4.20 kB │ gzip: 1.81 kB
ℹ dist/src/device-input-state.js 4.03 kB │ gzip: 1.66 kB
ℹ dist/src/input-actions3.js 3.96 kB │ gzip: 1.37 kB
ℹ dist/src/install-artifact.js 3.78 kB │ gzip: 1.65 kB
ℹ dist/src/platform-runtime-screen-recording-android-host.js 3.76 kB │ gzip: 1.50 kB
ℹ dist/src/device-claim-inspection.js 3.76 kB │ gzip: 1.54 kB
ℹ dist/src/manifest.js 3.64 kB │ gzip: 1.64 kB
ℹ dist/src/daemon.js 3.41 kB │ gzip: 1.39 kB
ℹ dist/src/tool-provider2.js 3.39 kB │ gzip: 1.25 kB
ℹ dist/src/install-artifact2.js 3.38 kB │ gzip: 1.40 kB
ℹ dist/src/react-native.js 3.31 kB │ gzip: 1.33 kB
ℹ dist/src/platform-runtime-screen-recording-finalizer-host.js 3.27 kB │ gzip: 1.41 kB
ℹ dist/src/simulator.js 3.21 kB │ gzip: 1.44 kB
ℹ dist/src/session-target-evidence.js 3.18 kB │ gzip: 1.28 kB
ℹ dist/src/interaction-runtime.js 2.98 kB │ gzip: 1.18 kB
ℹ dist/src/update-check.js 2.63 kB │ gzip: 1.25 kB
ℹ dist/src/sdk-remote-config.js 2.63 kB │ gzip: 0.85 kB
ℹ dist/src/snapshot-session.js 2.58 kB │ gzip: 1.10 kB
ℹ dist/src/runner-sequence.js 2.50 kB │ gzip: 1.08 kB
ℹ dist/src/host-process.js 2.41 kB │ gzip: 1.03 kB
ℹ dist/src/lease.js 2.40 kB │ gzip: 1.07 kB
ℹ dist/src/app-log-reconnect.js 2.40 kB │ gzip: 1.00 kB
ℹ dist/src/platform-runtime-screen-recording-apple-runner-transport.js 2.39 kB │ gzip: 0.99 kB
ℹ dist/src/harmonyos.js 2.32 kB │ gzip: 1.08 kB
ℹ dist/src/platform-runtime-screen-recording-apple-runner-host.js 2.27 kB │ gzip: 0.88 kB
ℹ dist/src/screenshot.js 2.26 kB │ gzip: 1.06 kB
ℹ dist/src/interaction-common.js 2.05 kB │ gzip: 0.97 kB
ℹ dist/src/limrun-runtime-dependencies.js 2.05 kB │ gzip: 0.84 kB
ℹ dist/src/device2.js 2.04 kB │ gzip: 0.90 kB
ℹ dist/src/interactor2.js 2.00 kB │ gzip: 0.84 kB
ℹ dist/src/platform-runtime-screen-recording-apple-host.js 1.95 kB │ gzip: 0.52 kB
ℹ dist/src/device.js 1.94 kB │ gzip: 0.84 kB
ℹ dist/src/platform-runtime.js 1.93 kB │ gzip: 0.89 kB
ℹ dist/src/linux.js 1.90 kB │ gzip: 0.83 kB
ℹ dist/src/record-trace.js 1.81 kB │ gzip: 0.82 kB
ℹ dist/src/inventory3.js 1.71 kB │ gzip: 0.91 kB
ℹ dist/src/remote-config2.js 1.65 kB │ gzip: 0.77 kB
ℹ dist/src/app-helpers.js 1.51 kB │ gzip: 0.74 kB
ℹ dist/src/sdk-io.js 1.48 kB │ gzip: 0.77 kB
ℹ dist/src/process-lock.js 1.44 kB │ gzip: 0.76 kB
ℹ dist/src/inventory5.js 1.40 kB │ gzip: 0.83 kB
ℹ dist/src/tool-provider3.js 1.34 kB │ gzip: 0.62 kB
ℹ dist/src/platform-runtime-host.js 1.34 kB │ gzip: 0.74 kB
ℹ dist/src/auth.js 1.29 kB │ gzip: 0.59 kB
ℹ dist/src/selector-vocabulary.js 1.24 kB │ gzip: 0.54 kB
ℹ dist/src/platform-runtime-app-log-android-transport.js 1.18 kB │ gzip: 0.66 kB
ℹ dist/src/platform-runtime-screen-recording-harmony-host.js 1.17 kB │ gzip: 0.53 kB
ℹ dist/src/url.js 1.14 kB │ gzip: 0.52 kB
ℹ dist/src/runtime-transport.js 1.13 kB │ gzip: 0.61 kB
ℹ dist/src/lease-context.js 1.12 kB │ gzip: 0.45 kB
ℹ dist/src/text-surface.js 1.12 kB │ gzip: 0.53 kB
ℹ dist/src/daemon-shutdown-report.js 1.04 kB │ gzip: 0.51 kB
ℹ dist/src/notifications.js 0.98 kB │ gzip: 0.55 kB
ℹ dist/src/device-inventory-context.js 0.94 kB │ gzip: 0.51 kB
ℹ dist/src/platform-runtime-toolchain-host.js 0.93 kB │ gzip: 0.44 kB
ℹ dist/src/generic.js 0.93 kB │ gzip: 0.51 kB
ℹ dist/src/generic-settle.js 0.89 kB │ gzip: 0.45 kB
ℹ dist/src/hdc.js 0.88 kB │ gzip: 0.54 kB
ℹ dist/src/web.js 0.87 kB │ gzip: 0.46 kB
ℹ dist/src/device-ready.js 0.84 kB │ gzip: 0.46 kB
ℹ dist/src/entities.js 0.82 kB │ gzip: 0.46 kB
ℹ dist/src/platform-runtime-screen-recording-apple-transport.js 0.77 kB │ gzip: 0.47 kB
ℹ dist/src/app-log-files.js 0.74 kB │ gzip: 0.48 kB
ℹ dist/src/recording-telemetry.js 0.69 kB │ gzip: 0.42 kB
ℹ dist/src/unsupported-interactor.js 0.69 kB │ gzip: 0.36 kB
ℹ dist/src/owner-identity.js 0.65 kB │ gzip: 0.36 kB
ℹ dist/src/audio-probe.js 0.60 kB │ gzip: 0.37 kB
ℹ dist/src/plist.js 0.57 kB │ gzip: 0.36 kB
ℹ dist/src/setting-state.js 0.56 kB │ gzip: 0.32 kB
ℹ dist/src/interaction-snapshot.js 0.54 kB │ gzip: 0.34 kB
ℹ dist/src/platform-runtime-network-web-transport.js 0.50 kB │ gzip: 0.32 kB
ℹ dist/src/logcat.js 0.45 kB │ gzip: 0.32 kB
ℹ dist/src/output-path.js 0.44 kB │ gzip: 0.28 kB
ℹ dist/src/command-metadata.js 0.37 kB │ gzip: 0.25 kB
ℹ dist/src/platform-runtime-screen-recording-web-host.js 0.37 kB │ gzip: 0.24 kB
ℹ dist/src/cli-runner.js 0.33 kB │ gzip: 0.21 kB
ℹ dist/src/path-resolution.js 0.30 kB │ gzip: 0.23 kB
ℹ dist/src/process-exit.js 0.30 kB │ gzip: 0.21 kB
ℹ dist/src/command-surface.js 0.26 kB │ gzip: 0.20 kB
ℹ dist/src/provider-webdriver.js 0.25 kB │ gzip: 0.20 kB
ℹ dist/src/platform-runtime-screen-recording-output-host.js 0.21 kB │ gzip: 0.18 kB
ℹ dist/src/inventory4.js 0.21 kB │ gzip: 0.18 kB
ℹ dist/src/plist-xml.js 0.20 kB │ gzip: 0.16 kB
ℹ dist/src/runtime5.js 0.20 kB │ gzip: 0.17 kB
ℹ dist/src/runtime6.js 0.19 kB │ gzip: 0.17 kB
ℹ dist/src/shared.js 0.19 kB │ gzip: 0.17 kB
ℹ dist/src/handler-utils.js 0.19 kB │ gzip: 0.15 kB
ℹ dist/src/process-entry.js 0.19 kB │ gzip: 0.16 kB
ℹ dist/src/timing-safe-equal.js 0.17 kB │ gzip: 0.14 kB
ℹ dist/src/cli-grammar.js 0.16 kB │ gzip: 0.15 kB
ℹ dist/src/method-scope.js 0.16 kB │ gzip: 0.14 kB
ℹ dist/src/metro2.js 0.15 kB │ gzip: 0.13 kB
ℹ dist/src/shell-quote.js 0.14 kB │ gzip: 0.14 kB
ℹ dist/src/cli-output.js 0.13 kB │ gzip: 0.13 kB
ℹ dist/src/sdk-finders.js 0.13 kB │ gzip: 0.13 kB
ℹ dist/src/sdk-selectors.js 0.11 kB │ gzip: 0.12 kB
ℹ dist/src/inventory6.js 0.11 kB │ gzip: 0.12 kB
ℹ dist/src/timeouts.js 0.07 kB │ gzip: 0.09 kB
ℹ dist/src/index.d.ts 55.94 kB │ gzip: 14.21 kB
ℹ dist/src/limrun.d.ts 9.83 kB │ gzip: 2.42 kB
ℹ dist/src/metro.d.ts 4.42 kB │ gzip: 1.23 kB
ℹ dist/src/android-adb.d.ts 2.32 kB │ gzip: 0.68 kB
ℹ dist/src/internal/png-worker.d.ts 1.39 kB │ gzip: 0.55 kB
ℹ dist/src/io.d.ts 0.63 kB │ gzip: 0.25 kB
ℹ dist/src/install-source.d.ts 0.62 kB │ gzip: 0.36 kB
ℹ dist/src/contracts.d.ts 0.56 kB │ gzip: 0.26 kB
ℹ dist/src/selectors.d.ts 0.50 kB │ gzip: 0.21 kB
ℹ dist/src/remote-config.d.ts 0.37 kB │ gzip: 0.18 kB
ℹ dist/src/artifacts.d.ts 0.20 kB │ gzip: 0.16 kB
ℹ dist/src/finders.d.ts 0.18 kB │ gzip: 0.13 kB
ℹ dist/src/batch.d.ts 0.07 kB │ gzip: 0.08 kB
ℹ dist/src/internal/bin.d.ts 0.01 kB │ gzip: 0.03 kB
ℹ dist/src/internal/companion-tunnel.d.ts 0.01 kB │ gzip: 0.03 kB
ℹ dist/src/internal/daemon.d.ts 0.01 kB │ gzip: 0.03 kB
ℹ dist/src/internal/update-check-entry.d.ts 0.01 kB │ gzip: 0.03 kB
ℹ dist/src/sdk-selectors.d.ts 22.61 kB │ gzip: 6.94 kB
ℹ dist/src/sdk-contracts.d.ts 13.96 kB │ gzip: 5.00 kB
ℹ dist/src/sdk-android-adb.d.ts 8.92 kB │ gzip: 2.70 kB
ℹ dist/src/sdk-remote-config.d.ts 6.72 kB │ gzip: 2.31 kB
ℹ dist/src/sdk-io.d.ts 2.30 kB │ gzip: 0.68 kB
ℹ dist/src/cloud-artifacts.d.ts 2.10 kB │ gzip: 0.75 kB
ℹ dist/src/sdk-batch-runner.d.ts 1.66 kB │ gzip: 0.73 kB
ℹ dist/src/device-input-state.d.ts 1.36 kB │ gzip: 0.49 kB
ℹ dist/src/sdk-finders.d.ts 1.11 kB │ gzip: 0.50 kB
ℹ dist/src/app-inventory.d.ts 0.14 kB │ gzip: 0.13 kB
ℹ 206 files, total: 2.33 MB
✔ Build complete in 1073ms

[run] package: pnpm run check:package
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
Packing and verifying agent-device in /private/var/folders/65/fz9_2bsj6fzgct46vx226s8c0000gn/T/agent-device-package-YV87Vb
Linted the tarball with publint and attw.
Verified the dependency closure: @limrun/api, ipaddr.js, tar-stream, undici, yaml, yauzl.
Imported all 12 published entry points from a clean install.
Ran the published CLI 0.20.8 on Node 26.1.0.
The package npm would publish is sound.

[run] integration-node: pnpm run test:integration:node
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0
✔ Android coverage report persists the manifest rollup and executed tier (1.653958ms)
✔ exitAfterFlush (the #1596 fix) delivers the full write before the process exits (73.446042ms)
✔ the CLI success entrypoint flushes a complete JSON envelope before exit 0 (88.316375ms)
✔ the real source CLI flushes a complete successful snapshot response before exit 0 (223.783541ms)
✔ recognizes known free names when TypeScript prints a relative snippet path (0.236875ms)
✔ every fenced ```ts snippet in client-api.md compiles against agent-device's real exports (1340.449583ms)
✔ rejects an unrecognized free identifier instead of silently stubbing it (e.g. a typo of client) (558.85425ms)
✔ daemon replace mid-command returns a structured, parseable error and exits normally (1596.704833ms)
✔ installed package exposes Node APIs and packaged companion tunnel entrypoint (2465.0695ms)
✔ a dead session (SESSION_NOT_FOUND) skips cleanup without error, on any step (0.231166ms)
✔ the known mic-permission appless response stops retrying immediately (0.06125ms)
✔ a different INVALID_ARGS still fails after exhausting retries (0.677334ms)
✔ a different INVALID_ARGS message on the mic-permission step still fails after retries (0.260958ms)
✔ sessionOpen=true, final sessionExists=false: cleanup is never invoked (0.113041ms)
✔ sessionOpen=true, final sessionExists=true: cleanup is invoked (the live path) (0.052375ms)
✔ compiled Limrun subpath preserves its downstream type surface (261.610334ms)
﹣ recording tap overlay on iOS simulator (0.054291ms) # set AGENT_DEVICE_RECORDING_E2E=1 to run live recording overlay tests
﹣ recording scroll overlay on iOS simulator (0.024792ms) # set AGENT_DEVICE_RECORDING_E2E=1 to run live recording overlay tests
﹣ recording back-swipe overlay on iOS simulator (0.041542ms) # set AGENT_DEVICE_RECORDING_E2E=1 to run live recording overlay tests
﹣ recording tap overlay on Android emulator (0.016125ms) # set AGENT_DEVICE_RECORDING_E2E=1 to run live recording overlay tests
﹣ recording scroll overlay on Android emulator (0.017917ms) # set AGENT_DEVICE_RECORDING_E2E=1 to run live recording overlay tests
✔ separate CLI processes do not adopt and overwrite the ambient remote session (481.269792ms)
✔ Android emulator coverage exhaustively classifies the public catalog (0.154042ms)
✔ Android coverage report summary accounts for every manifest classification (0.043291ms)
✔ Android live command ownership is structural and exhaustive (0.206375ms)
✔ Android app scenarios declare deterministic starting surfaces and IME modes (0.07125ms)
✔ Android permission recovery waits for the asynchronous native prompt (0.026125ms)
✔ Android emulator scenarios can be selected as an ordered subset (0.278708ms)
✔ Android emulator coverage completeness is scoped to the executed subset (0.799042ms)
✔ Android command-contract declarations are unique and exhaustive (0.064084ms)
✔ Android behavior patterns are owned by live fixture journeys (0.087792ms)
✔ Android emulator capability denial matches the public catalog (0.140542ms)
﹣ live Android emulator fixture E2E (0.02ms) # Set AGENT_DEVICE_ANDROID_E2E=1 with fixture APK path/id and emulator serial to run.
✔ clean-xcuitest ios removes only transient root entries and reports preserved cache entries (39.6415ms)
✔ clean-xcuitest ios reports a no-op when only preserved entries remain (31.783666ms)
✔ clean-xcuitest macos skips a missing derived directory (32.278083ms)
✔ clean-xcuitest macos removes the entire platform directory when present (32.303291ms)
✔ clean-xcuitest reports cleanup failures directly (33.778042ms)
✔ cli --help returns usage (346.823625ms)
✔ cli --version prints semver and exits 0 (62.42775ms)
✔ cli -V prints semver and exits 0 (63.113208ms)
✔ cli without command prints usage and exits 1 (169.206333ms)
✔ clean daemon script stops a live daemon before removing metadata (982.433ms)
✔ daemon HTTP transport starts from CLI and accepts a command RPC (741.7355ms)
✔ iOS runner status transport stays visible while command execution remains serial (307.141958ms)
✔ iOS simulator coverage exhaustively classifies the public catalog (0.334166ms)
✔ live command claims are owned by executable scenarios (0.989417ms)
✔ mobile behavior patterns are owned by live scenarios or executable workflows (0.37825ms)
✔ non-live owners name concrete executable repository evidence (0.994375ms)
✔ fixture identifier coverage rejects direct-selector drift (0.459541ms)
✔ live iOS scenarios reference fixture identifiers that exist (3.410209ms)
✔ capability classifications match executable simulator behavior (0.210125ms)
✔ fixture replay gestures fit the smallest supported iPhone viewport (2.917791ms)
✔ drag replay fixtures use parseable source and destination selectors (0.987375ms)
✔ fixture navigation uses edge-aware traversal without losing direct swipe evidence (0.147292ms)
✔ fixture navigation establishes the home route before selecting Catalog (0.104167ms)
✔ event timeline coverage follows cursors beyond the first page (0.191334ms)
✔ event timeline coverage rejects malformed and non-advancing pages (0.187542ms)
✔ event timeline coverage fails fast on runaway pagination (0.1825ms)
﹣ live iOS simulator fixture E2E (0.018583ms) # Set AGENT_DEVICE_IOS_E2E=1 with fixture path/id and simulator UDID to run.
✔ connect prepares Metro and open reuses bridged runtime for remote daemon (67.372292ms)
✔ built CLI provider flow closes active generated session before disconnect cleanup (394.868375ms)
﹣ live web platform e2e smoke (0.033041ms) # Set AGENT_DEVICE_WEB_E2E=1 to run the managed web backend smoke.
ℹ tests 63
ℹ suites 0
ℹ pass 55
ℹ fail 0
ℹ cancelled 0
ℹ skipped 8
ℹ todo 0
ℹ duration_ms 10620.378709

[dedupe] vitest-related — covered by affected LCOV or GitHub CI

[dedupe] unit — covered by affected LCOV or GitHub CI

[run] coverage: pnpm exec vitest related --run --passWithNoTests --maxWorkers=2 --coverage --coverage.reporter=lcov --coverage.thresholds.statements=0 --coverage.thresholds.lines=0 packages/capture-kit/src/app-log-pid-runtime.ts packages/capture-kit/src/index.ts packages/capture-kit/src/platform-runtime-unavailable.test.ts packages/capture-kit/src/platform-runtime-unavailable.ts packages/contracts/src/command-platform-execution.test.ts packages/contracts/src/command-platform-execution.ts packages/contracts/src/device-inventory.ts packages/contracts/src/device-readiness-runtime.ts packages/contracts/src/facades/platform.ts packages/contracts/src/platform-runtime-operations.test.ts packages/contracts/src/platform-runtime-operations.ts packages/contracts/src/platform-runtime.ts packages/kernel/src/device.ts packages/platform-android/src/inventory.test.ts packages/platform-android/src/inventory.ts packages/platform-android/src/network/runtime.test.ts packages/platform-android/src/readiness/runtime.test.ts packages/platform-android/src/readiness/runtime.ts packages/platform-android/src/runtime.test.ts packages/platform-android/src/runtime.ts packages/platform-apple/src/logs/runtime.ts packages/platform-apple/src/network/runtime.test.ts packages/platform-apple/src/readiness/runtime.test.ts packages/platform-apple/src/readiness/runtime.ts packages/platform-apple/src/runtime.fixtures.ts packages/platform-apple/src/runtime.test.ts packages/platform-apple/src/runtime.ts packages/platform-harmonyos/src/runtime.test.ts packages/platform-harmonyos/src/runtime.ts packages/platform-linux/src/runtime.test.ts packages/platform-vega/src/runtime.test.ts packages/platform-web/src/runtime.test.ts packages/platform-web/src/runtime.ts packages/provider-limrun/src/app-log-runtime.test.ts packages/provider-limrun/src/app-log-runtime.ts packages/provider-webdriver/src/platform-runtime.test.ts packages/provider-webdriver/src/platform-runtime.ts scripts/layering/check.ts scripts/layering/cutover-policy-ast.ts scripts/layering/device-inventory-cutover-policy.test.ts scripts/layering/device-inventory-cutover-policy.ts scripts/layering/logs-runtime-cutover-policy.test.ts scripts/layering/logs-runtime-cutover-policy.ts scripts/layering/network-runtime-cutover-policy.test.ts scripts/layering/network-runtime-cutover-policy.ts scripts/layering/record-runtime-cutover-policy.test.ts scripts/layering/record-runtime-cutover-policy.ts scripts/layering/record-runtime-mechanics-policy.ts scripts/layering/record-runtime-policy-ast.ts scripts/layering/record-runtime-registry-policy.ts scripts/layering/rule-ids.ts scripts/layering/runtime-command-cutover-extensions.test.ts scripts/layering/runtime-command-cutover-extensions.ts scripts/layering/runtime-command-cutover-fixtures.ts scripts/layering/runtime-command-cutover-model.ts scripts/layering/runtime-command-cutover-policy.test.ts scripts/layering/runtime-command-cutover-policy.ts scripts/layering/runtime-command-cutover-table.test.ts scripts/layering/runtime-command-cutover-table.ts src/tests/contracts/apple-os-capability-table-parity.test.ts src/cli.ts src/cli/injected-daemon-dispatch.ts src/core/tests/capabilities.test.ts src/core/tests/capability-plugin-routing-parity.test.ts src/core/command-descriptor/tests/boot-runtime-execution.test.ts src/core/command-descriptor/tests/parity.test.ts src/core/command-descriptor/tests/platform-execution-cli-route.test.ts src/core/command-descriptor/tests/platform-execution-entry.test.ts src/core/command-descriptor/platform-execution-entry.ts src/core/command-descriptor/registry.ts src/core/dispatch-resolve.ts src/daemon/tests/app-log-resource-recovery.test.ts src/daemon/tests/device-claim-reconciliation.test.ts src/daemon/tests/request-handler-catalog.test.ts src/daemon/tests/request-handler-chain-provider-scope.test.ts src/daemon/tests/request-handler-chain.test.ts src/daemon/tests/request-router-record-runtime-lock.test.ts src/daemon/tests/request-runtime-binding-router.test.ts src/daemon/tests/request-runtime-binding.test.ts src/daemon/tests/screen-recording-resource-recovery.test.ts src/daemon/tests/test-device-runtime-gateway.ts src/daemon/handlers/tests/network-runtime-harness.ts src/daemon/handlers/tests/record-runtime.fixtures.ts src/daemon/handlers/tests/session-boot-shutdown.test.ts src/daemon/handlers/tests/session-capabilities.test.ts src/daemon/handlers/tests/session-command-harness.ts src/daemon/handlers/tests/session-logs.test.ts src/daemon/handlers/tests/session-state-boot-warmup.test.ts src/daemon/handlers/tests/session-state.test.ts src/daemon/handlers/session-device-utils.ts src/daemon/handlers/session-inventory.ts src/daemon/handlers/session-state.ts src/daemon/handlers/session.ts src/daemon/request-execution-scope.ts src/daemon/request-handler-chain.ts src/daemon/request-router.ts src/daemon/request-runtime-binding.ts src/platform-runtime-android-emulator-host.ts src/platform-runtime-apple-automation-keep-hot.ts src/platform-runtime-apple-physical-readiness.ts src/platform-runtime-gateway.test.ts src/platform-runtime-gateway.ts src/platform-runtime-operation-host.ts src/platforms/apple/core/physical-device-control.ts src/platforms/apple/core/physical-device-coredevice.ts src/platforms/apple/plugin.ts src/utils/tests/device.test.ts test/integration/provider-scenarios/harness.ts test/integration/provider-scenarios/ios-alert-settings.test.ts test/integration/provider-scenarios/ios-world.ts
[WARN] This project is configured to use 11.17.0 of pnpm. Your current pnpm is v11.21.0

RUN v4.1.8 /private/tmp/agent-device-adr19-1747
Coverage enabled with v8

✓ |interaction-contract| test/integration/interaction-contract/interaction-response-shape.contract.test.ts (10 tests) 3416ms
✓ interaction response shape: press @ref uses the canonical ref envelope 541ms
✓ |interaction-contract| test/integration/interaction-contract/direct-ios-selector.contract.test.ts (11 tests) 3747ms
✓ direct-ios-selector responseConstruction: runner payload response carries the canonical selector field set 536ms
✓ |interaction-contract| test/integration/interaction-contract/coordinate.contract.test.ts (6 tests) 1054ms
✓ |interaction-contract| test/integration/interaction-contract/maestro-fallback.contract.test.ts (5 tests) 1658ms
✓ |interaction-contract| test/integration/interaction-contract/runtime-ref.contract.test.ts (11 tests) 431ms
✓ |interaction-contract| test/integration/interaction-contract/runtime-selector.contract.test.ts (14 tests) 430ms
✓ |interaction-contract| test/integration/interaction-contract/native-ref.contract.test.ts (8 tests) 37ms
✓ |interaction-contract| test/integration/interaction-contract/resolution-disclosure-mutation.contract.test.ts (2 tests) 5ms
✓ |interaction-contract| test/integration/interaction-contract/target-drag.contract.test.ts (6 tests) 398ms
✓ |output-economy| test/output-economy/output-economy.baseline.test.ts (14 tests) 5ms
✓ |output-economy| test/output-economy/routine-workflow.test.ts (7 tests) 3ms
✓ |output-economy| test/output-economy/owner-files-no-leak.test.ts (1 test) 1904ms
✓ does not leak into production bundles after a clean build 1903ms
✓ |provider-integration| test/integration/provider-scenarios/android-lifecycle.test.ts (12 tests) 7145ms
✓ Provider-backed integration Android Settings flow uses scripted ADB provider 5075ms
✓ Provider-backed integration Android text provider handles Unicode without shell input text 614ms
✓ |provider-integration| test/integration/provider-scenarios/cloud-webdriver-ios-text-entry.test.ts (4 tests) 4213ms
✓ cloud iOS fill refuses, without typing, when nothing takes focus 2010ms
✓ cloud iOS fill sends no keys when a keyboard-up tap misses the second field 2010ms
✓ |provider-integration| test/integration/provider-scenarios/android-test-suite.test.ts (7 tests) 12989ms
✓ Provider-backed integration Android replay test suite covers retries and fail-fast flags 637ms
✓ Provider-backed integration Android Maestro refreshes action geometry and preserves authored swipe points 1114ms
✓ Provider-backed integration Android Maestro replay test suite discovers YAML flows in directories 895ms
✓ Provider-backed integration Android Maestro types after tapOn inputText without trailing Enter 1023ms
✓ Provider-backed integration Android Maestro preserves authored inputText then pressKey Enter 1017ms
✓ Provider-backed integration Android Maestro executes runFlow conditions and retry batches at runtime 595ms
✓ Provider-backed integration Android Maestro optional tap misses without touching the device 7708ms
✓ |provider-integration| test/integration/provider-scenarios/record-trace-android-copy.test.ts (1 test) 2930ms
✓ Provider-backed integration Android record stop retries the pull until in-place moov finalization lands 2929ms
✓ |provider-integration| test/integration/provider-scenarios/active-session-script-publication.test.ts (7 tests) 5102ms
✓ provider route publishes and replays an open-to-destination script with a live handoff 508ms
✓ replaying a published script against a reshuffled screen fails closed instead of false-passing the guard 1850ms
✓ parameterized fill publishes only ${VAR} and replay resolves it immediately before fill 1687ms
✓ |provider-integration| test/integration/provider-scenarios/interaction-direct-selector-fallback.test.ts (6 tests) 2128ms
✓ |provider-integration| test/integration/provider-scenarios/settle-observation.test.ts (4 tests) 1744ms
✓ Provider-backed integration never-settled press --settle does not issue diff refs 614ms
✓ |provider-integration| test/integration/provider-scenarios/ios-lifecycle.test.ts (3 tests) 1639ms
✓ Provider-backed integration iOS Settings flow uses scripted simctl and runner providers 1221ms
✓ |provider-integration| test/integration/provider-scenarios/doctor.test.ts (9 tests) 3782ms
✓ Provider-backed integration doctor infers Android RN/Metro readiness through daemon route without resolving a default device 860ms
✓ Provider-backed integration doctor runs predictably for supported platform selectors 1160ms
✓ Provider-backed integration doctor probes Metro when runtime metadata exists outside an RN project 1147ms
✓ |provider-integration| test/integration/provider-scenarios/android-recording.test.ts (5 tests) 1620ms
✓ Provider-backed integration Android record start and stop use the composed scoped runtime 762ms
✓ Provider-backed integration Android record stop reattaches a matching durable descriptor 635ms
✓ |provider-integration| test/integration/provider-scenarios/apple-platform-output-guard.test.ts (3 tests) 2114ms
✓ macOS Apple session never emits the internal apple platform on the wire 746ms
✓ iOS-simulator Apple session never emits the internal apple platform on the wire 1366ms
✓ |provider-integration| test/integration/provider-scenarios/ios-record-trace.test.ts (2 tests) 1279ms
✓ Provider-backed integration iOS simulator recording flow uses the focused Apple transport 1205ms
✓ |provider-integration| test/integration/provider-scenarios/stale-ref-warning.test.ts (2 tests) 790ms
✓ |provider-integration| test/integration/provider-scenarios/cloud-webdriver-runtime.test.ts (6 tests) 1356ms
✓ |provider-integration| test/integration/provider-scenarios/tvos-remote.test.ts (1 test) 806ms
✓ Provider-backed integration tvOS remote flow maps navigation commands to runner remote presses 805ms
✓ |provider-integration| test/integration/provider-scenarios/android-find.test.ts (1 test) 615ms
✓ Provider-backed integration Android find flow covers refs, wait, ambiguity, and first/last selection 615ms
✓ |provider-integration| test/integration/provider-scenarios/web-desktop.test.ts (1 test) 629ms
✓ Provider-backed integration web desktop flow uses semantic web provider calls 628ms
✓ |provider-integration| test/integration/provider-scenarios/record-trace-android-liveness.test.ts (1 test) 686ms
✓ Provider-backed integration Android record stop finishes an artifact after a dead-pid reattach 685ms
✓ |provider-integration| test/integration/provider-scenarios/macos-recording.test.ts (1 test) 534ms
✓ Provider-backed integration macOS recording uses focused exact runner authority 533ms
✓ |provider-integration| test/integration/provider-scenarios/linux-desktop.test.ts (1 test) 567ms
✓ Provider-backed integration Linux desktop flow uses semantic desktop and input providers 567ms
✓ |provider-integration| test/integration/provider-scenarios/interaction-verify.test.ts (1 test) 409ms
✓ |provider-integration| test/integration/provider-scenarios/ios-alert-settings.test.ts (1 test) 470ms
✓ |provider-integration| test/integration/provider-scenarios/macos-desktop.test.ts (2 tests) 181ms
✓ |provider-integration| test/integration/provider-scenarios/versioned-refs.test.ts (1 test) 402ms
✓ |provider-integration| test/integration/provider-scenarios/replay-repair-abort-close.test.ts (1 test) 468ms
✓ |provider-integration| test/integration/provider-scenarios/replay-repair-record-exclusion.test.ts (1 test) 315ms
✓ |provider-integration| test/integration/provider-scenarios/cloud-webdriver-provider-regressions.test.ts (4 tests) 261ms
✓ |provider-integration| test/integration/provider-scenarios/no-record-recorder-routes.test.ts (1 test) 323ms
✓ |provider-integration| test/integration/provider-scenarios/provider-ios-selector-runtime.test.ts (1 test) 85ms
✓ |provider-integration| test/integration/provider-scenarios/provider-device-runtime.test.ts (4 tests) 279ms
✓ |provider-integration| test/integration/provider-scenarios/provider-ios-runner-transport.test.ts (3 tests) 86ms
✓ |provider-integration| test/integration/provider-scenarios/provider-failures.test.ts (1 test) 184ms
✓ |provider-integration| test/integration/provider-scenarios/web-provider.test.ts (1 test) 86ms
✓ |provider-integration| test/integration/provider-scenarios/daemon-command-policy.test.ts (1 test) 101ms
✓ |provider-integration| test/integration/provider-scenarios/network-runtime-provider.test.ts (1 test) 66ms
✓ |provider-integration| test/integration/provider-scenarios/vega-tv-remote.test.ts (1 test) 67ms
✓ |provider-integration| test/integration/provider-scenarios/daemon-http-server.test.ts (10 tests) 92ms
✓ |provider-integration| test/integration/provider-scenarios/apple-app-log-runtime-provider.test.ts (1 test) 74ms
✓ |provider-integration| test/integration/provider-scenarios/remote-daemon-client.test.ts (6 tests) 50ms
✓ |provider-integration| test/integration/provider-scenarios/batch-flags.test.ts (1 test) 55ms
✓ |provider-integration| test/integration/provider-scenarios/remote-proxy-artifact-tenant.test.ts (1 test) 34ms
✓ |provider-integration| test/integration/provider-scenarios/android-tv-remote.test.ts (1 test) 14ms
✓ |provider-integration| test/integration/provider-scenarios/cloud-webdriver-provider-adapters.test.ts (5 tests) 12ms
✓ |provider-integration| test/integration/provider-scenarios/provider-command-dispatch.test.ts (2 tests) 3ms
✓ |provider-integration| test/integration/provider-scenarios/android-recording-provider-fixtures.test.ts (1 test) 2ms
✓ |unit-core| src/platforms/apple/core/tests/perf.test.ts (24 tests) 4063ms
✓ sampleAppleFramePerf retries transient kperf lock failures 1507ms
✓ startAppleXctracePerfCapture attaches to an active iOS simulator app process 506ms
✓ startAppleXctracePerfCapture retries transient kperf lock failures 2010ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-maestro.test.ts (43 tests) 3559ms
✓ |unit-core| src/daemon/handlers/tests/snapshot-handler.test.ts (54 tests) 9474ms
✓ snapshot warns when Android freshness retries still return the previous route 1257ms
✓ diff snapshot carries stale-tree warnings for recent Android presses 1263ms
✓ captureSnapshot lazily retries pending no-change touch before returning fresh state 506ms
✓ captureSnapshot does not retry when a tap change appears after a short delay 503ms
✓ captureSnapshot retries pending tap outcome before post-gesture stabilization 705ms
✓ alert accept adds a scoped-snapshot hint after retrying alert-not-found failures 2112ms
✓ alert dismiss retries on "no alert" message 604ms
✓ |unit-core| scripts/tests/help-conformance-bench.test.ts (31 tests) 3167ms
✓ |unit-core| src/platforms/android/tests/input-actions-fill.test.ts (18 tests) 2181ms
✓ fillAndroid delegates target replacement to provider-native text injection 505ms
✓ fillAndroid returns target-bound unconfirmed evidence when an input mask reformats text 503ms
✓ fillAndroid waits for settled app text before reporting success 504ms
✓ fillAndroid accepts matching-length masked password verification 506ms
✓ |unit-core| src/daemon/tests/request-router-open.test.ts (12 tests) 2353ms
✓ open returns and creates the session state directory 511ms
✓ fresh open uses app-aware device selection for advisory locking and dispatch 618ms
✓ |unit-core| src/platforms/android/tests/snapshot.test.ts (47 tests) 2076ms
✓ snapshotAndroid does not start one-shot capture when session retirement is unconfirmed 2004ms
✓ |unit-core| src/platforms/android/tests/touch-helper-session.test.ts (9 tests) 2033ms
✓ touch helper does not run one-shot while snapshot retirement is unconfirmed 2014ms
✓ |unit-core| src/daemon/tests/request-router-screenshot.test.ts (18 tests) 1604ms
✓ iOS simulator screenshot omits logical density metadata after --scale downscale 583ms
✓ screenshot --pixel-density keeps overlay refs aligned to scaled iOS simulator output 546ms
✓ |unit-core| src/platforms/android/tests/input-actions.test.ts (14 tests) 1531ms
✓ fillAndroid uses chunk-safe shell input and retries when verification still fails 508ms
✓ fillAndroid keeps delayed typing in typed-input mode 507ms
✓ fillAndroid tolerates delayed React Native text verification 507ms
✓ |unit-core| src/platforms/apple/core/tests/runner-command-retry.test.ts (38 tests) 1720ms
✓ a request pays for at most one runner recycle, then fails fast with a preserved-session hint 695ms
✓ a failed replacement boot does not consume the request recycle budget 601ms
✓ |unit-core| src/core/tests/dispatch-trigger-app-event.test.ts (9 tests) 868ms
✓ |unit-core| src/daemon/tests/snapshot-custom-actions-platform-guard.test.ts (7 tests) 1294ms
✓ --actions is not refused on an iOS simulator 1265ms
✓ |unit-core| src/tests/daemon-entrypoint.test.ts (5 tests) 788ms
✓ |unit-core| src/tests/cli-diagnostics.test.ts (13 tests) 860ms
✓ cli debug log tail starts at the current daemon log end 510ms
✓ |unit-core| src/platforms/android/tests/perf.test.ts (19 tests) 779ms
✓ |unit-core| src/platform-runtime-screen-recording-apple-simulator-host.test.ts (10 tests) 735ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime.test.ts (20 tests) 638ms
✓ |unit-core| src/daemon/handlers/tests/find.test.ts (28 tests) 630ms
✓ |unit-core| src/daemon/handlers/tests/wait-landmark-recording.test.ts (4 tests) 612ms
✓ a replayed wait with a landmark guard refuses at the deadline when only impostors matched 602ms
✓ |unit-core| src/platforms/apple/core/tests/runner-session.test.ts (73 tests) 555ms
✓ |unit-core| src/core/tests/dispatch-tv-remote.test.ts (4 tests) 530ms
✓ |unit-core| src/platforms/android/tests/app-lifecycle-open.test.ts (21 tests) 565ms
✓ |unit-core| src/daemon/handlers/tests/session-observability.test.ts (17 tests) 520ms
✓ |unit-core| packages/platform-android/src/recording/runtime.test.ts (7 tests) 523ms
✓ |unit-core| src/daemon/handlers/tests/system-surface-disclosure.test.ts (8 tests) 514ms
✓ |unit-core| src/platforms/tests/install-source.test.ts (20 tests) 3098ms
✓ prepareIosInstallArtifact cleans URL materialization when IPA payload resolution fails 1319ms
✓ |unit-core| packages/platform-android/src/recording/chunks.test.ts (8 tests) 522ms
✓ waits for equal nonzero remote sizes after exit before pulling 511ms
✓ |unit-core| packages/platform-android/src/recording/recovery.test.ts (5 tests) 512ms
✓ |unit-core| src/utils/tests/daemon-client.test.ts (36 tests) 451ms
✓ |unit-core| src/platforms/android/tests/input-actions-test-ime.test.ts (2 tests) 510ms
✓ fillAndroid clears then commits non-ASCII text through the test IME and verifies it 507ms
✓ |unit-core| src/core/tests/dispatch-keyboard.test.ts (6 tests) 233ms
✓ |unit-core| src/daemon/tests/request-router-lock-policy.test.ts (8 tests) 388ms
✓ |unit-core| src/platforms/android/tests/device-input-state.test.ts (14 tests) 382ms
✓ |unit-core| src/daemon/handlers/tests/session-close-shutdown.test.ts (30 tests) 659ms
✓ |unit-core| src/commands/tests/command-explain.test.ts (25 tests) 189ms
✓ |unit-core| src/daemon/tests/request-router-android-snapshot-helper.test.ts (2 tests) 344ms
✓ |unit-core| src/tests/cli-diff.test.ts (13 tests) 113ms
✓ |unit-core| src/provider-webdriver.test.ts (1 test) 361ms
✓ |unit-core| src/tests/cli-config.test.ts (28 tests) 186ms
✓ |unit-core| src/core/tests/dispatch-orientation.test.ts (3 tests) 230ms
✓ |unit-core| src/core/tests/dispatch-back.test.ts (1 test) 228ms
✓ |unit-core| src/core/tests/dispatch-push.test.ts (3 tests) 209ms
✓ |unit-core| src/platforms/android/tests/app-helpers.test.ts (3 tests) 344ms
✓ |unit-core| packages/platform-android/src/recording/finalize.test.ts (1 test) 256ms
✓ |unit-core| src/commands/interaction/runtime/selector-read.test.ts (25 tests) 251ms
✓ |unit-core| src/tests/client-companion-tunnel-worker.test.ts (7 tests) 241ms
✓ |unit-core| packages/provider-limrun/src/device-session.test.ts (3 tests) 260ms
✓ |unit-core| src/commands/interaction/runtime/selector-wait-stable.test.ts (11 tests) 260ms
✓ |unit-core| src/daemon/handlers/tests/interaction.test.ts (17 tests) 222ms
✓ |unit-core| src/platform-runtime-app-log-process.test.ts (15 tests) 213ms
✓ |unit-core| src/sdk/limrun-runtime-dependencies.test.ts (1 test) 111ms
❯ |unit-core| src/platforms/apple/core/tests/runner-client.test.ts (63 tests | 1 failed) 6494ms
✓ resolveRunnerDestination uses simulator destination for simulators 1ms
✓ runner protocol fixtures cover every runner command with JSON-safe samples 1ms
✓ withRunnerCommandId replaces blank command ids 0ms
✓ withRunnerCommandId preserves existing command ids 0ms
✓ scroll is a mutating, command-id-tracked runner command 0ms
✓ desktopScroll is a mutating, command-id-tracked runner command 0ms
✓ withRunnerCommandId does not add command ids to status probes 0ms
✓ resolveRunnerDestination uses device destination for physical devices 0ms
✓ resolveRunnerBuildDestination uses generic iOS destination for physical devices 0ms
✓ resolveRunnerDestination uses tvOS simulator destination for tvOS simulators 0ms
✓ resolveRunnerDestination uses tvOS destination for tvOS devices 0ms
✓ resolveRunnerBuildDestination uses tvOS destinations for tvOS devices and simulators 0ms
✓ resolveRunnerMaxConcurrentDestinationsFlag uses simulator flag for simulators 0ms
✓ resolveRunnerMaxConcurrentDestinationsFlag uses device flag for physical devices 0ms
✓ resolveRunnerMaxConcurrentDestinationsFlag uses device flag for macOS desktop 0ms
✓ resolveRunnerSigningBuildSettings returns empty args without env overrides 0ms
✓ resolveRunnerSigningBuildSettings disables signing for macOS desktop builds 0ms
✓ resolveRunnerSigningBuildSettings enables automatic signing for device builds without forcing identity 0ms
✓ resolveRunnerSigningBuildSettings ignores device signing overrides for simulator builds 0ms
✓ resolveRunnerSigningBuildSettings applies optional overrides when provided 0ms
✓ resolveRunnerPerformanceBuildSettings disables indexing and code coverage 0ms
✓ resolveRunnerSandboxBuildArgs disables nested Xcode and Swift sandboxing 0ms
✓ resolveRunnerSandboxBuildArgs includes Swift runner unit tests only when requested 0ms
✓ resolveRunnerBundleBuildSettings returns default bundle identifiers 0ms
✓ resolveRunnerBundleBuildSettings uses AGENT_DEVICE_IOS_BUNDLE_ID when provided 0ms
✓ assertSafeDerivedCleanup allows cleaning when no override is set 0ms
✓ assertSafeDerivedCleanup rejects cleaning override path by default 0ms
✓ assertSafeDerivedCleanup allows cleaning override path under project .tmp 0ms
✓ resolveRunnerEarlyExitHint surfaces busy-connecting guidance 0ms
✓ resolveRunnerEarlyExitHint falls back to runner connect timeout hint 0ms
✓ resolveRunnerBuildFailureHint suggests cache cleanup for non-signing failures 0ms
✓ shouldRetryRunnerConnectError does not retry xcodebuild early-exit errors 0ms
✓ shouldRetryRunnerConnectError retries transient connect errors 0ms
✓ parseRunnerResponse preserves runner unsupported-operation codes 2ms
✓ parseRunnerResponse surfaces the keyboard-dismiss hint to press the next target directly 0ms
✓ parseRunnerResponse preserves iOS AX snapshot failure code and hint 0ms
✓ parseRunnerResponse preserves XCTest recorded failure code and hint 0ms
✓ parseRunnerResponse maps RUNNER_BUSY to retriable command failure 0ms
✓ parseRunnerResponse preserves RUNNER_WEDGED as a fatal runner code 0ms
✓ parseRunnerResponse classifies target app AXRuntime CoreText font crashes from runner log tail 1ms
✓ parseRunnerResponse classifies explicit target app crashes from runner log tail 1ms
✓ parseRunnerResponse does not classify incidental XCTest crash text as target app crash 1ms
✓ parseRunnerResponse hints when XCTest main-thread execution times out 1ms
✓ parseRunnerResponse emits diagnostics for runner gesture fallbacks 2ms
✓ isRetryableRunnerError does not retry xcodebuild early-exit errors 0ms
✓ isRetryableRunnerError does not retry busy-connecting errors 0ms
✓ xctestrunReferencesProjectRoot rejects stale worktree artifacts 1ms
✓ resolveRunnerDerivedPath keys default cache by runner metadata 10ms
✓ resolveRunnerDerivedPath reuses cache path for identical runner source fingerprints 4ms
✓ acquireRunnerXctestrunCacheLock serializes cache access across acquirers 3ms
✓ ensureXctestrunArtifact reuses matching manifest artifacts from another project root 5ms
✓ ensureXctestrunArtifact rebuilds foreign artifacts when metadata does not match 221ms
✓ ensureXctestrunArtifact ignores manifest artifacts outside the cache root 105ms
× ensureXctestrunArtifact aborts only the disconnected request build and preserves concurrent unrelated builds 5131ms
✓ ensureXctestrunArtifact rebuilds after cached macOS runner repair failure 215ms
✓ ensureXctestrunArtifact prefers validated cache manifest over recursive scan 42ms
✓ ensureXctestrunArtifact falls back to scan when cache manifest is stale 121ms
✓ ensureXctestrunArtifact rebuilds cached runner when Swift build flags mismatch 206ms
✓ ensureXctestrunArtifact passes sandbox-disabling settings to xcodebuild 100ms
✓ ensureXctestrunArtifact emits build progress on cache miss 105ms
✓ ensureXctestrunArtifact stress-recovers after a bad restored artifact 107ms
✓ ensureXctestrunArtifact rethrows unexpected cached macOS runner repair errors 104ms
✓ shouldDeleteRunnerDerivedRootEntry only removes known xcode transient entries 0ms
✓ |unit-core| src/daemon/tests/generic-settle.test.ts (7 tests) 142ms
Installed: com.example.demo
Installed: com.example.demo
Installed: com.example.demo
Installed: com.example.demo
/tmp/screenshot.png
Opened: MenuBarApp
Opened: Agent Device Tester
✓ |unit-core| src/daemon/tests/request-save-script-transports.test.ts (8 tests) 104ms
✓ |unit-core| src/tests/cli-client-commands.test.ts (29 tests) 129ms
✓ |unit-core| src/core/tests/dispatch-scroll.test.ts (10 tests) 92ms
✓ |unit-core| src/tests/provider-device-runtimes.test.ts (2 tests) 118ms
✓ |unit-core| src/utils/tests/daemon-client-lifecycle.test.ts (22 tests) 152ms
✓ |unit-core| src/daemon/handlers/tests/interaction-settle.test.ts (9 tests) 184ms
✓ |unit-core| src/daemon/handlers/tests/session-open-runtime.test.ts (11 tests) 1448ms
✓ |unit-core| src/daemon/handlers/tests/record-runtime-stop-recovery.test.ts (5 tests) 233ms
✓ |unit-core| src/daemon/handlers/tests/session-logs.test.ts (15 tests) 273ms
{
"success": true,
"data": {
"connected": true,
"session": "adc-status-metro",
"tenant": "acme",
"runId": "run-123",
"leaseAllocated": false,
"leaseBackend": "android-instance",
"platform": "android",
"remoteConfig": "/tmp/agent-device-test-run-68832-0CfyWO/agent-device-connection-status-metro-wWFMer/remote.json",
"remoteConfigHash": "77632ad36bdd9d19beb42d20f7dff559cb880fd4597afc3bfaf57d2f4f0b967d",
"daemonBaseUrlFingerprint": "cd7ab9656667",
"liveSession": {
"status": "not-created"
},
"verification": {
"status": "configured",
"service": "remote provider",
"message": "Remote connection profile loaded. Access is checked by the first remote command."
},
"nextSteps": [
"agent-device open --relaunch --session adc-status-metro"
],
"metro": {
"prepared": false
},
"leasePreparation": {
"status": "deferred",
"nextSteps": [
"agent-device install-from-source --platform ios|android --session adc-status-metro",
"agent-device open --relaunch --session adc-status-metro",
"agent-device snapshot -i --session adc-status-metro",
"agent-device devices --session adc-status-metro"
],
"message": "No live device session has been created. Run a device command when ready to allocate or refresh the lease."
},
"runtimePreparation": {
"status": "deferred",
"nextStep": "agent-device metro prepare --remote-config /tmp/agent-device-test-run-68832-0CfyWO/agent-device-connection-status-metro-wWFMer/remote.json --session adc-status-metro",
"message": "Metro runtime is not prepared yet; it will be prepared automatically on first open, or run "agent-device metro prepare --remote-config /tmp/agent-device-test-run-68832-0CfyWO/agent-device-connection-status-metro-wWFMer/remote.json --session adc-status-metro" to inspect it before launch."
},
"connectedAt": "2026-08-12T07:38:05.999Z",
"updatedAt": "2026-08-12T07:38:05.999Z"
}
}
✓ |unit-core| src/tests/remote-connection.test.ts (50 tests) 121ms
✓ |unit-core| src/daemon/tests/request-router-typed-error.test.ts (6 tests) 80ms
✓ |unit-core| src/daemon/tests/request-handler-chain.test.ts (9 tests) 67ms
✓ |unit-core| src/daemon/tests/request-handler-catalog.test.ts (6 tests) 82ms
✓ |unit-core| src/daemon/tests/app-log-session-resource.test.ts (9 tests) 167ms
✓ |unit-core| src/daemon/tests/request-runtime-binding-router.test.ts (2 tests) 77ms
✓ |unit-core| src/platforms/web/agent-browser-provider.test.ts (12 tests) 163ms
✓ |unit-core| src/daemon/tests/app-log-resource-recovery.test.ts (9 tests) 151ms
✓ |unit-core| src/tests/cli-help.test.ts (28 tests) 70ms
✓ |unit-core| src/tests/cli-network.test.ts (21 tests) 68ms
✓ |unit-core| packages/provider-limrun/src/app-log-poller.test.ts (6 tests) 159ms
✓ |unit-core| src/daemon/tests/request-router-events.test.ts (6 tests) 66ms
✓ |unit-core| src/daemon/tests/request-router-replay-scope.test.ts (4 tests) 69ms
✓ |unit-core| src/core/tests/dispatch-type.test.ts (1 test) 68ms
✓ |unit-core| src/daemon/tests/request-router-replay-env.test.ts (2 tests) 78ms
✓ |unit-core| src/daemon/tests/request-router-record-runtime-lock.test.ts (3 tests) 131ms
✓ |unit-core| src/daemon/tests/request-router-repair-expired.test.ts (5 tests) 68ms
✓ |unit-core| src/daemon/tests/durable-capture-resource.test.ts (5 tests) 112ms
✓ |unit-core| src/tests/android-adb-public.test.ts (1 test) 73ms
✓ |unit-core| src/daemon/tests/request-router-android-perf.test.ts (1 test) 62ms
✓ |unit-core| src/daemon/selector-runtime-backend.test.ts (1 test) 58ms
✓ |unit-core| src/daemon/tests/device-claim-prune.test.ts (3 tests) 115ms
✓ |unit-core| src/daemon/handlers/tests/install-source.test.ts (3 tests) 444ms
✓ |unit-core| src/daemon/handlers/tests/session-open-url-prewarm.test.ts (16 tests) 100ms
✓ |unit-core| src/utils/tests/interactors.test.ts (13 tests) 73ms
✓ |unit-core| src/daemon/tests/durable-capture-resource-transitions.test.ts (3 tests) 99ms
✓ |unit-core| src/commands/capture/runtime/diff-screenshot.test.ts (5 tests) 79ms
✓ |unit-core| packages/capture-kit/src/app-log-pid-process.test.ts (4 tests) 108ms
✓ |unit-core| src/tests/cli-config-trust.test.ts (19 tests) 69ms
✓ |unit-core| src/core/tests/dispatch-snapshot-preferred-backend.test.ts (2 tests) 54ms
✓ |unit-core| src/daemon/tests/request-router-record-flags.test.ts (2 tests) 36ms
✓ |unit-core| src/commands/management/output.test.ts (11 tests) 53ms
✓ |unit-core| src/core/tests/dispatch-interactions.test.ts (14 tests) 47ms
✓ |unit-core| src/daemon/handlers/tests/session-test-suite.test.ts (16 tests) 72ms
✓ |unit-core| src/daemon/handlers/tests/session-test-runner.test.ts (9 tests) 161ms
✓ |unit-core| src/daemon/tests/http-server-artifacts.test.ts (6 tests) 261ms
✓ |unit-core| src/tests/cli-exit-paths.test.ts (5 tests) 40ms
✓ |unit-core| src/tests/cloud-connect-profile.test.ts (19 tests) 65ms
✓ |unit-core| src/cli/parser/tests/cli-help-overview.test.ts (3 tests) 40ms
✓ |unit-core| packages/platform-android/src/runtime-facade.test.ts (1 test) 24ms
✓ |unit-core| src/daemon/tests/request-router-recording-health.test.ts (2 tests) 40ms
✓ |unit-core| src/platforms/apple/core/tests/runner-adoption.test.ts (14 tests) 60ms
✓ |unit-core| src/cli/parser/tests/cli-help-command-usage.test.ts (42 tests) 32ms
✓ |unit-core| src/platforms/apple/core/tests/runner-xctestrun.test.ts (18 tests) 56ms
✓ |unit-core| src/daemon/server/daemon-runtime-recording-teardown.test.ts (2 tests) 49ms
✓ |unit-core| src/daemon/tests/request-router-custom-action-flags.test.ts (3 tests) 40ms
✓ |unit-core| src/mcp/tests/router.test.ts (13 tests) 36ms
✓ |unit-core| src/daemon/tests/request-execution-scope.test.ts (24 tests) 65ms
✓ |unit-core| src/utils/tests/perf-args.test.ts (2 tests) 29ms
✓ |unit-core| src/tests/cli-perf.test.ts (22 tests) 33ms
✓ |unit-core| src/daemon/tests/screen-recording-session-resource.test.ts (1 test) 43ms
✓ |unit-core| src/daemon/tests/request-runtime-binding.test.ts (9 tests) 58ms
✓ |unit-core| src/tests/daemon-proxy.test.ts (5 tests) 39ms
✓ |unit-core| src/daemon/server/daemon-runtime-idle-reap.test.ts (2 tests) 41ms
✓ |unit-core| src/daemon/tests/session-target-evidence.test.ts (17 tests) 35ms
✓ |unit-core| src/platforms/apple/core/tests/screenshot.test.ts (17 tests) 17ms
✓ |unit-core| src/daemon/tests/durable-capture-recovery-authority.test.ts (3 tests) 58ms
✓ |unit-core| packages/platform-android/src/readiness/runtime.test.ts (1 test) 54ms
✓ |unit-core| src/core/tests/dispatch-open.test.ts (8 tests) 26ms
✓ |unit-core| src/daemon/tests/durable-capture-resource-store.test.ts (3 tests) 48ms
✓ |unit-core| src/core/command-descriptor/tests/platform-execution-cli-route.test.ts (15 tests) 31ms
✓ |unit-core| packages/platform-apple/src/readiness/runtime.test.ts (2 tests) 56ms
✓ |unit-core| src/daemon/tests/durable-capture-resource-adoption.test.ts (2 tests) 47ms
✓ |unit-core| src/cli/parser/tests/cli-help-topics.test.ts (23 tests) 34ms
✓ |unit-core| src/daemon/tests/session-store.test.ts (31 tests) 29ms
✓ |unit-core| src/platforms/apple/core/tests/runner-request-cancellation.test.ts (3 tests) 40ms
✓ |unit-core| src/daemon/handlers/tests/record-runtime-start.test.ts (4 tests) 54ms
✓ |unit-core| src/daemon/handlers/tests/session-relaunch-close.test.ts (19 tests) 32ms
✓ |unit-core| src/core/interaction-touch-point.test.ts (11 tests) 23ms
✓ |unit-core| src/daemon/tests/durable-capture-resource-fence.test.ts (2 tests) 48ms
✓ |unit-core| src/daemon/tests/app-log-resource-store.test.ts (6 tests) 39ms
✓ |unit-core| src/daemon/tests/screen-recording-resource-recovery.test.ts (1 test) 44ms
✓ |unit-core| src/daemon/tests/device-claim-reconciliation.test.ts (2 tests) 42ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-target-verification-runtime.test.ts (26 tests) 44ms
✓ |unit-core| src/tests/cli-debug-symbols.test.ts (3 tests) 19ms
✓ |unit-core| src/commands/interaction/runtime/gestures.test.ts (15 tests) 40ms
✓ |unit-core| src/platforms/android/tests/ime-lifecycle.test.ts (12 tests) 15ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-repair-transaction.test.ts (17 tests) 38ms
✓ |unit-core| src/daemon/tests/durable-capture-resource-recovery.test.ts (1 test) 40ms
✓ |unit-core| src/commands/interaction/runtime/interactions.test.ts (25 tests) 40ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-failure.test.ts (10 tests) 28ms
✓ |unit-core| src/daemon/tests/session-script-writer.test.ts (31 tests) 29ms
✓ |unit-core| src/platforms/apple/core/tests/runner-cache-probe.test.ts (2 tests) 132ms
✓ |unit-core| src/tests/cli-device-status.test.ts (4 tests) 25ms
✓ |unit-core| src/commands/batch/cli.test.ts (18 tests) 30ms
✓ |unit-core| src/platforms/apple/core/tests/runner-recovery-wiring.test.ts (4 tests) 33ms
✓ |unit-core| src/tests/limrun-runtime.test.ts (15 tests) 22ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-plan.test.ts (13 tests) 29ms
✓ |unit-core| src/daemon/handlers/tests/session-devices-batch-runtime.test.ts (13 tests) 20ms
✓ |unit-core| src/platforms/apple/core/tests/runner-command-recovery.test.ts (7 tests) 30ms
✓ |unit-core| src/daemon/handlers/tests/session-device-claims.test.ts (9 tests) 28ms
✓ |unit-core| src/daemon/tests/app-log-start-preflight.test.ts (3 tests) 22ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-repair-loop.test.ts (15 tests) 28ms
✓ |unit-core| src/commands/interaction/runtime/settle.test.ts (30 tests) 23ms
✓ |unit-core| src/daemon/handlers/tests/interaction-ios-tap-outcome.test.ts (16 tests) 27ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-divergence.test.ts (15 tests) 21ms
✓ |unit-core| src/daemon/tests/post-gesture-stabilization.test.ts (18 tests) 14ms
✓ |unit-core| test/replay-compat/corpus.test.ts (55 tests) 16ms
✓ |unit-core| src/daemon/handlers/tests/session-test-reporter-values.test.ts (4 tests) 23ms
✓ |unit-core| src/platforms/apple/core/tests/simulator-booted-memo.test.ts (6 tests) 4ms
✓ |unit-core| src/daemon/tests/daemon-runtime-app-log.test.ts (3 tests) 50ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-repair-empty-tail.test.ts (6 tests) 25ms
✓ |unit-core| src/daemon/tests/device-claims.test.ts (14 tests) 26ms
✓ |unit-core| src/daemon/tests/http-server-rpc-validation.test.ts (3 tests) 26ms
✓ |unit-core| src/daemon/handlers/tests/session-test-source-discovery.test.ts (9 tests) 23ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-maestro-failure.test.ts (9 tests) 26ms
✓ |unit-core| src/daemon/handlers/tests/session-open-launch-url.test.ts (8 tests) 21ms
✓ |unit-core| src/daemon/handlers/tests/session-test-reporter-values-maestro.test.ts (2 tests) 22ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-repair-record-exclusion.test.ts (4 tests) 22ms
✓ |unit-core| src/platforms/android/tests/ui-hierarchy.test.ts (29 tests) 13ms
✓ |unit-core| src/daemon/handlers/tests/session-replay.test.ts (12 tests) 15ms
✓ |unit-core| src/daemon/handlers/tests/snapshot-capture.test.ts (16 tests) 19ms
✓ |unit-core| src/daemon/tests/durable-capture-start-preflight.test.ts (1 test) 30ms
✓ |unit-core| src/daemon/tests/post-gesture-no-effect-claim.test.ts (7 tests) 13ms
✓ |unit-core| src/daemon/handlers/tests/interaction-target-evidence.test.ts (9 tests) 21ms
✓ |unit-core| src/daemon/handlers/tests/session-appstate-input-perf.test.ts (17 tests) 16ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-response.test.ts (6 tests) 15ms
✓ |unit-core| src/tests/client.test.ts (47 tests) 15ms
✓ |unit-core| src/mcp/tests/command-tools.test.ts (46 tests) 13ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-dispatch-selector-miss.test.ts (5 tests) 17ms
✓ |unit-core| src/platforms/vega/tests/plugin.test.ts (2 tests) 12ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-press-admission.test.ts (13 tests) 19ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-repair-acceptance.test.ts (1 test) 16ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-binding.test.ts (2 tests) 14ms
✓ |unit-core| src/daemon/handlers/tests/session-close-script.test.ts (5 tests) 12ms
✓ |unit-core| src/daemon/handlers/tests/session-open-existing.test.ts (9 tests) 16ms
✓ |unit-core| src/daemon/handlers/tests/session-audio.test.ts (9 tests) 11ms
✓ |unit-core| src/daemon/tests/snapshot-quality-latch.test.ts (9 tests) 11ms
✓ |unit-core| src/platforms/android/tests/touch-helper.test.ts (16 tests) 10ms
✓ |unit-core| src/daemon/tests/provider-lease-expiry.test.ts (4 tests) 9ms
✓ |unit-core| src/tests/cli-record-flag-delivery.test.ts (4 tests) 11ms
✓ |unit-core| src/platforms/apple/core/tests/runner-transport.test.ts (14 tests) 12ms
✓ |unit-core| src/replay/tests/ad-script-round-trip.test.ts (1 test) 11ms
✓ |unit-core| packages/ad-script/src/internal/tests/vars.test.ts (21 tests) 13ms
✓ |unit-core| packages/provider-webdriver/src/webdriver-interactor.test.ts (14 tests) 9ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-direct-ios-eligibility.test.ts (4 tests) 13ms
✓ |unit-core| src/platforms/apple/core/tests/app-launch-close.test.ts (5 tests) 11ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-android-readiness.test.ts (7 tests) 13ms
✓ |unit-core| src/tests/cli-react-devtools-session.test.ts (2 tests) 11ms
✓ |unit-core| src/tests/cli-close.test.ts (6 tests) 14ms
✓ |unit-core| src/daemon/tests/request-router-cost.test.ts (6 tests) 11ms
✓ |unit-core| src/daemon/tests/snapshot-diff.test.ts (7 tests) 13ms
✓ |unit-core| src/tests/cloud-connect-auth.test.ts (2 tests) 14ms
✓ |unit-core| src/tests/cli-auth-diagnostics.test.ts (1 test) 10ms
✓ |unit-core| src/tests/cli-session-state-dir.test.ts (2 tests) 9ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-payload.test.ts (7 tests) 12ms
✓ |unit-core| src/platform-runtime.test.ts (3 tests) 13ms
✓ |unit-core| src/daemon/tests/request-router-response-level.test.ts (6 tests) 11ms
✓ |unit-core| src/daemon/handlers/tests/session-test-fail-fast.test.ts (1 test) 11ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-direct-ios.test.ts (6 tests) 14ms
✓ |unit-core| packages/provider-webdriver/src/connection-verification.test.ts (7 tests) 14ms
✓ |unit-core| src/daemon/handlers/tests/interaction-common.test.ts (5 tests) 16ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch.test.ts (4 tests) 12ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-runtime.test.ts (5 tests) 12ms
✓ |unit-core| src/daemon/handlers/tests/react-native.test.ts (14 tests) 12ms
✓ |unit-core| src/platforms/apple/core/tests/interactions.test.ts (17 tests) 7ms
✓ |unit-core| src/daemon/tests/deferred-interaction-outcome.test.ts (10 tests) 11ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-android-freshness.test.ts (4 tests) 11ms
✓ |unit-core| src/daemon/tests/request-router-android-modal.test.ts (3 tests) 12ms
✓ |unit-core| src/daemon/handlers/tests/snapshot-scoped-refs.test.ts (3 tests) 10ms
✓ |unit-core| src/cli-schema/command-schema-guards.test.ts (5 tests) 9ms
✓ |unit-core| src/cli/commands/tests/replay-maestro-export.test.ts (5 tests) 12ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-press.test.ts (8 tests) 12ms
✓ |unit-core| src/commands/management/app.test.ts (7 tests) 9ms
✓ |unit-core| packages/provider-webdriver/src/runtime.test.ts (1 test) 12ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-target-classification.test.ts (15 tests) 7ms
✓ |unit-core| src/tests/cli-clipboard.test.ts (2 tests) 8ms
✓ |unit-core| src/cli/parser/tests/command-suggestions.test.ts (22 tests) 8ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-failure-response.test.ts (6 tests) 12ms
✓ |unit-core| src/core/tests/gesture-plan-viewport.test.ts (17 tests) 9ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-artifact-ledger.test.ts (2 tests) 7ms
✓ |unit-core| src/daemon/server/daemon-session-lease-finalizer.test.ts (3 tests) 8ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-fill.test.ts (6 tests) 12ms
✓ |unit-core| src/platforms/android/tests/settings.test.ts (15 tests) 5ms
✓ |unit-core| src/cli/parser/tests/maestro-support-matrix.test.ts (3 tests) 9ms
✓ |unit-core| src/daemon/server/daemon-idle-reap.test.ts (17 tests) 10ms
✓ |unit-core| src/daemon/handlers/tests/interaction-touch-targets.test.ts (11 tests) 4ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-divergence-publication.test.ts (11 tests) 10ms
✓ |unit-core| src/daemon/handlers/tests/session-command-replay.test.ts (5 tests) 9ms
✓ |unit-core| src/tests/runtime-public.test.ts (8 tests) 6ms
✓ |unit-core| packages/ad-script/src/internal/tests/script.test.ts (44 tests) 8ms
✓ |unit-core| src/daemon/handlers/tests/interaction-gesture-drag.test.ts (2 tests) 11ms
✓ |unit-core| src/commands/management/session.test.ts (6 tests) 6ms
✓ |unit-core| src/daemon/tests/device-ready.test.ts (7 tests) 8ms
✓ |unit-core| src/platform-runtime-network-host.test.ts (3 tests) 9ms
✓ |unit-core| src/daemon/handlers/tests/session-script-publication.test.ts (9 tests) 10ms
✓ |unit-core| src/daemon/handlers/tests/session-capabilities.test.ts (4 tests) 6ms
✓ |unit-core| src/platforms/apple/core/tests/physical-device-control.test.ts (5 tests) 6ms
✓ |unit-core| src/core/command-descriptor/tests/parity.test.ts (13 tests) 9ms
✓ |unit-core| src/tests/cli-logs.test.ts (1 test) 7ms
✓ |unit-core| src/daemon/handlers/tests/session-reinstall.test.ts (7 tests) 9ms
✓ |unit-core| src/tests/provider-device-runtime.test.ts (5 tests) 3ms
✓ |unit-core| src/core/tests/dispatch-resolve.test.ts (23 tests) 6ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-runtime-keep-session.test.ts (6 tests) 9ms
✓ |unit-core| packages/platform-harmonyos/src/recording/runtime.test.ts (16 tests) 8ms
✓ |unit-core| src/commands/interaction/runtime/resolution.test.ts (21 tests) 9ms
✓ |unit-core| src/daemon/handlers/tests/session-state.test.ts (3 tests) 5ms
✓ |unit-core| packages/platform-android/src/logs/runtime.test.ts (8 tests) 6ms
✓ |unit-core| src/daemon/tests/session-event-action.test.ts (11 tests) 3ms
✓ |unit-core| src/tests/cli-agent-cdp-session.test.ts (1 test) 9ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-selector-routes.test.ts (1 test) 8ms
✓ |unit-core| src/platform-runtime-screen-recording-apple-runner-transport.test.ts (4 tests) 4ms
✓ |unit-core| src/daemon/handlers/tests/trace-runtime.test.ts (3 tests) 8ms
✓ |unit-core| src/mcp/tests/command-tools-parity.test.ts (3 tests) 7ms
✓ |unit-core| src/daemon/tests/selector-runtime.test.ts (5 tests) 3ms
✓ |unit-core| src/daemon/handlers/tests/session-doctor-toolchain.test.ts (7 tests) 4ms
✓ |unit-core| src/cli/parser/tests/args-parse-session.test.ts (47 tests) 7ms
✓ |unit-core| src/daemon/handlers/tests/session-network-runtime-parity.test.ts (13 tests) 8ms
✓ |unit-core| src/daemon/tests/request-platform-providers.test.ts (8 tests) 6ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-target-guard.test.ts (7 tests) 7ms
✓ |unit-core| src/commands/interaction/runtime/offscreen-double-check.test.ts (4 tests) 5ms
✓ |unit-core| packages/platform-android/src/recording/launch.test.ts (7 tests) 6ms
✓ |unit-core| src/daemon/tests/internal-observation.test.ts (11 tests) 4ms
✓ |unit-core| src/commands/tests/command-surface-metadata.test.ts (13 tests) 6ms
✓ |unit-core| packages/provider-webdriver/src/webdriver-orientation.test.ts (11 tests) 3ms
✓ |unit-core| packages/platform-apple/src/network/runtime.test.ts (3 tests) 5ms
✓ |unit-core| packages/platform-apple/src/runtime.test.ts (10 tests) 6ms
✓ |unit-core| src/platforms/apple/core/tests/runner-disposal.test.ts (5 tests) 6ms
✓ |unit-core| src/commands/capture/runtime/snapshot.test.ts (22 tests) 7ms
✓ |unit-core| packages/platform-android/src/network/runtime.test.ts (4 tests) 5ms
✓ |unit-core| src/tests/kernel/snapshot-ref-grammar.test.ts (7 tests) 7ms
✓ |unit-core| src/daemon/handlers/tests/session-trigger.test.ts (1 test) 2ms
✓ |unit-core| src/daemon/tests/session-script-active-publication.test.ts (12 tests) 5ms
✓ |unit-core| src/commands/observability/index.test.ts (9 tests) 4ms
✓ |unit-core| src/platform-runtime-gateway.test.ts (12 tests) 6ms
✓ |unit-core| src/daemon/tests/interaction-outcome-policy.test.ts (18 tests) 4ms
✓ |unit-core| src/core/press-retarget.test.ts (12 tests) 4ms
✓ |unit-core| packages/platform-apple/src/recording/runtime.test.ts (7 tests) 6ms
✓ |unit-core| src/daemon/handlers/tests/session-boot-shutdown.test.ts (14 tests) 7ms
✓ |unit-core| packages/provider-limrun/src/app-log-runtime.test.ts (8 tests) 6ms
✓ |unit-core| src/commands/interaction/runtime/selector-wait.test.ts (8 tests) 6ms
✓ |unit-core| src/commands/observability/runtime/diagnostics-router.test.ts (2 tests) 3ms
✓ |unit-core| src/platform-runtime-device-inventory.test.ts (8 tests) 6ms
✓ |unit-core| packages/platform-apple/src/logs/runtime.test.ts (14 tests) 7ms
✓ |unit-core| src/core/interaction-targeting.test.ts (12 tests) 6ms
✓ |unit-core| src/cli/parser/tests/args-validation.test.ts (19 tests) 5ms
✓ |unit-core| src/daemon/tests/selector-capture-runtime.test.ts (4 tests) 6ms
✓ |unit-core| src/commands/system/index.test.ts (18 tests) 5ms
✓ |unit-core| src/daemon/handlers/tests/snapshot.test.ts (26 tests) 3ms
✓ |unit-core| packages/platform-web/src/recording/runtime.test.ts (11 tests) 10ms
✓ |unit-core| packages/platform-harmonyos/src/logs/runtime.test.ts (7 tests) 7ms
✓ |unit-core| src/mcp/tests/tool-ref-pins.test.ts (23 tests) 4ms
✓ |unit-core| src/cli/commands/tests/daemon.test.ts (3 tests) 4ms
✓ |unit-core| scripts/tests/help-conformance-sample-outputs.test.ts (14 tests) 8ms
✓ |unit-core| src/daemon/ios-app-session-hint.test.ts (17 tests) 5ms
✓ |unit-core| src/commands/tests/command-flags.test.ts (1 test) 2ms
✓ |unit-core| src/remote/tests/remote-connection-state.test.ts (3 tests) 6ms
✓ |unit-core| src/tests/remote-config-public.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/tests/session-routing.test.ts (3 tests) 4ms
✓ |unit-core| src/daemon/handlers/tests/session-inventory-harmonyos.test.ts (2 tests) 4ms
✓ |unit-core| src/daemon/tests/selector-recording.test.ts (4 tests) 5ms
✓ |unit-core| src/platforms/apple/core/tests/app-resolution.test.ts (10 tests) 3ms
✓ |unit-core| src/tests/command-doc-coverage.test.ts (11 tests) 5ms
✓ |unit-core| packages/platform-android/src/recording/recovery-cleanup.test.ts (6 tests) 6ms
✓ |unit-core| src/platforms/apple/tests/interactor-runner-provider.test.ts (8 tests) 5ms
✓ |unit-core| src/daemon/handlers/tests/session-open-foreground.test.ts (16 tests) 5ms
✓ |unit-core| src/commands/interaction/runtime/tests/resolution-policy-parity.test.ts (11 tests) 4ms
✓ |unit-core| src/platforms/android/tests/touch-executor.test.ts (3 tests) 3ms
✓ |unit-core| src/commands/replay/index.test.ts (17 tests) 5ms
✓ |unit-core| src/daemon/handlers/tests/session-push.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/handlers/tests/session-device-utils.test.ts (5 tests) 3ms
✓ |unit-core| src/tests/contracts-schema-public.test.ts (7 tests) 3ms
✓ |unit-core| src/cli/commands/tests/screenshot.test.ts (2 tests) 4ms
✓ |unit-core| src/daemon/tests/lease-lifecycle.test.ts (6 tests) 6ms
✓ |unit-core| packages/contracts/src/command-platform-execution.test.ts (17 tests) 3ms
✓ |unit-core| src/daemon/handlers/tests/session-relaunch-guards.test.ts (9 tests) 7ms
✓ |unit-core| src/commands/interaction/runtime/tests/selector-read-policy.test.ts (11 tests) 6ms
✓ |unit-core| packages/provider-webdriver/src/platform-runtime.test.ts (3 tests) 4ms
✓ |unit-core| packages/platform-android/src/recording/start-reconciliation.test.ts (10 tests) 6ms
✓ |unit-core| packages/platform-android/src/inventory.test.ts (5 tests) 4ms
✓ |unit-core| src/core/tests/capability-plugin-routing-parity.test.ts (8 tests) 5ms
✓ |unit-core| src/daemon/handlers/tests/session-perf-xctrace-lifecycle.test.ts (3 tests) 5ms
✓ |unit-core| src/platforms/apple/core/tests/screenshot-status-bar.test.ts (3 tests) 3ms
✓ |unit-core| src/commands/react-native/index.test.ts (5 tests) 4ms
✓ |unit-core| src/core/selector-pipeline.test.ts (11 tests) 4ms
✓ |unit-core| src/platforms/apple/core/tests/screenshot-density.test.ts (1 test) 5ms
✓ |unit-core| src/cli/parser/tests/args-parse-interaction.test.ts (33 tests) 5ms
✓ |unit-core| src/daemon/server/daemon-runtime-web-cleanup.test.ts (2 tests) 4ms
✓ |unit-core| src/platforms/android/tests/touch-plan.test.ts (6 tests) 3ms
✓ |unit-core| src/daemon/tests/direct-ios-selector.test.ts (10 tests) 3ms
✓ |unit-core| src/cli/parser/tests/cli-help-alias-fast-path.test.ts (3 tests) 3ms
✓ |unit-core| packages/platform-android/src/runtime.test.ts (2 tests) 4ms
✓ |unit-core| src/commands/capture/index.test.ts (12 tests) 6ms
✓ |unit-core| src/daemon/tests/session-action-recorder.test.ts (14 tests) 5ms
✓ |unit-core| src/daemon/tests/session-event-request.test.ts (11 tests) 3ms
✓ |unit-core| src/daemon/tests/durable-capture-admission-ledger.test.ts (3 tests) 4ms
✓ |unit-core| src/daemon/tests/recording-gestures.test.ts (14 tests) 5ms
✓ |unit-core| packages/contracts/src/platform-runtime.test.ts (4 tests) 3ms
✓ |unit-core| src/platforms/android/tests/snapshot-content-recovery.test.ts (13 tests) 5ms
✓ |unit-core| src/daemon/handlers/tests/session-doctor-device.test.ts (1 test) 4ms
✓ |unit-core| src/commands/capture/output.test.ts (3 tests) 3ms
✓ |unit-core| src/platform-runtime-screen-recording-apple-transport.test.ts (1 test) 3ms
✓ |unit-core| src/core/tests/batch.test.ts (7 tests) 3ms
✓ |unit-core| src/cli/commands/connection-context.test.ts (2 tests) 4ms
✓ |unit-core| src/daemon/tests/daemon-command-registry.test.ts (7 tests) 3ms
✓ |unit-core| src/tests/selectors-build.test.ts (5 tests) 3ms
✓ |unit-core| src/daemon/tests/request-handler-chain-provider-scope.test.ts (2 tests) 2ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-action-runtime.test.ts (2 tests) 4ms
✓ |unit-core| src/core/tests/snapshot-chrome-android-statusbar.test.ts (5 tests) 5ms
✓ |unit-core| src/platforms/apple/core/tests/simulator.test.ts (9 tests) 4ms
✓ |unit-core| packages/ad-replay/src/internal/tests/target-verification.test.ts (12 tests) 3ms
✓ |unit-core| src/commands/interaction/runtime/resolution-touch-point.test.ts (1 test) 5ms
✓ |unit-core| src/daemon/handlers/tests/session-open-target.test.ts (15 tests) 4ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-repair-hint.test.ts (23 tests) 3ms
✓ |unit-core| src/daemon/handlers/tests/session-state-boot-warmup.test.ts (1 test) 3ms
✓ |unit-core| packages/selectors/src/index.test.ts (7 tests) 5ms
✓ |unit-core| packages/platform-harmonyos/src/runtime.test.ts (1 test) 3ms
✓ |unit-core| src/tests/contracts/apple-os-capability-table-parity.test.ts (4 tests) 3ms
✓ |unit-core| src/tests/cli-grammar.test.ts (10 tests) 4ms
✓ |unit-core| packages/capture-kit/src/durable-resource-envelope.test.ts (9 tests) 3ms
✓ |unit-core| src/daemon/tests/snapshot-runtime-cancellation.test.ts (2 tests) 4ms
✓ |unit-core| src/daemon/handlers/tests/find-args.test.ts (11 tests) 4ms
✓ |unit-core| src/daemon/handlers/tests/session-doctor-warmup.test.ts (5 tests) 5ms
✓ |unit-core| packages/capture-kit/src/app-log-runtime.test.ts (9 tests) 4ms
✓ |unit-core| src/daemon/tests/request-save-script-policy.test.ts (10 tests) 4ms
✓ |unit-core| src/daemon/tests/post-gesture-stabilization-verdict.test.ts (7 tests) 3ms
✓ |unit-core| src/daemon/tests/app-log-admission-ledger.test.ts (5 tests) 4ms
✓ |unit-core| packages/capture-kit/src/app-log-pid-runtime.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/tests/is-predicates.test.ts (8 tests) 2ms
✓ |unit-core| packages/platform-android/src/recording/cleanup.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/tests/android-snapshot-freshness.test.ts (14 tests) 4ms
✓ |unit-core| src/utils/tests/device.test.ts (19 tests) 3ms
✓ |unit-core| packages/platform-apple/src/recording/recovery.test.ts (4 tests) 5ms
✓ |unit-core| src/daemon/handlers/tests/session-network.test.ts (2 tests) 3ms
✓ |unit-core| packages/platform-apple/src/logs/start.test.ts (1 test) 4ms
✓ |unit-core| src/platforms/apple/core/tests/apple-runner-platform.test.ts (7 tests) 3ms
✓ |unit-core| src/platform-runtime-screen-recording-apple-runner-host.test.ts (2 tests) 3ms
✓ |unit-core| packages/platform-web/src/runtime.test.ts (4 tests) 4ms
✓ |unit-core| packages/platform-apple/src/recording/completion.test.ts (1 test) 2ms
✓ |unit-core| packages/platform-apple/src/simulator-inventory.test.ts (3 tests) 3ms
✓ |unit-core| src/commands/interaction/runtime/index.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/server/daemon-runtime-device-claims.test.ts (2 tests) 5ms
✓ |unit-core| src/daemon/tests/session-selector.test.ts (12 tests) 3ms
✓ |unit-core| src/platform-runtime-screen-recording-apple-host.test.ts (2 tests) 3ms
✓ |unit-core| src/daemon/tests/android-system-dialog-ref-frame.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/tests/replay-device-selection.test.ts (3 tests) 4ms
✓ |unit-core| src/commands/interaction/interactions.test.ts (3 tests) 3ms
✓ |unit-core| src/core/interaction-positionals.test.ts (8 tests) 3ms
✓ |unit-core| src/platforms/apple/core/tests/physical-device-coredevice.test.ts (4 tests) 2ms
✓ |unit-core| packages/contracts/src/network-runtime-plan.test.ts (3 tests) 2ms
✓ |unit-core| src/tests/is-argument-surface-parity.test.ts (2 tests) 2ms
✓ |unit-core| src/commands/management/runtime/admin-router.test.ts (3 tests) 3ms
✓ |unit-core| src/utils/result-serialization.test.ts (7 tests) 3ms
✓ |unit-core| src/daemon/tests/request-lock-policy.test.ts (13 tests) 3ms
✓ |unit-core| src/daemon/handlers/tests/interaction-read.test.ts (5 tests) 3ms
✓ |unit-core| src/daemon/handlers/tests/session-inventory-appleos.test.ts (4 tests) 4ms
✓ |unit-core| src/core/command-descriptor/tests/network-runtime-execution.test.ts (1 test) 2ms
✓ |unit-core| src/mcp/tests/server-validation.test.ts (8 tests) 3ms
✓ |unit-core| src/core/tests/snapshot-chrome.test.ts (3 tests) 3ms
✓ |unit-core| src/commands/recording/index.test.ts (6 tests) 3ms
✓ |unit-core| packages/platform-apple/src/inventory.test.ts (5 tests) 5ms
✓ |unit-core| packages/platform-harmonyos/src/recording/recovery.test.ts (2 tests) 4ms
✓ |unit-core| src/tests/test-utils/device-inventory-gateways.test.ts (1 test) 3ms
✓ |unit-core| src/platforms/apple/core/tests/app-launch-url.test.ts (1 test) 2ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-cancellation.test.ts (5 tests) 2ms
✓ |unit-core| src/core/tests/app-events.test.ts (1 test) 2ms
✓ |unit-core| src/daemon/handlers/tests/record-runtime-request.test.ts (2 tests) 3ms
✓ |unit-core| src/commands/system/runtime/system.test.ts (3 tests) 3ms
✓ |unit-core| src/daemon/tests/request-recording-health.test.ts (1 test) 3ms
✓ |unit-core| packages/platform-apple/src/logs/doctor.test.ts (2 tests) 4ms
✓ |unit-core| src/cli/commands/tests/generic.test.ts (1 test) 3ms
✓ |unit-core| packages/provider-limrun/src/app-log-reconnect.test.ts (3 tests) 4ms
✓ |unit-core| scripts/tests/help-conformance-error-recovery-coverage.test.ts (9 tests) 3ms
✓ |unit-core| src/daemon/tests/providers-plugin-routing-parity.test.ts (3 tests) 4ms
✓ |unit-core| src/platforms/android/tests/input-ownership.test.ts (4 tests) 2ms
✓ |unit-core| src/commands/interaction/runtime/wait-polling.test.ts (2 tests) 3ms
✓ |unit-core| src/core/tests/web-interactor.test.ts (2 tests) 3ms
✓ |unit-core| packages/platform-android/src/recording/manifest.test.ts (3 tests) 3ms
✓ |unit-core| src/platform-runtime-screen-recording-web-host.test.ts (1 test) 2ms
✓ |unit-core| packages/platform-linux/src/runtime.test.ts (1 test) 2ms
✓ |unit-core| src/core/command-descriptor/tests/owner-files.test.ts (3 tests) 3ms
✓ |unit-core| src/platforms/apple/core/tests/launch-diagnostics.test.ts (13 tests) 2ms
✓ |unit-core| src/core/tests/interaction-response-data-transform.test.ts (6 tests) 2ms
✓ |unit-core| src/daemon/tests/offscreen-target-probe.test.ts (6 tests) 3ms
✓ |unit-core| packages/contracts/src/platform-runtime-operations.test.ts (3 tests) 2ms
✓ |unit-core| src/commands/interaction/selectors.test.ts (2 tests) 3ms
✓ |unit-core| src/commands/management/runtime/apps.test.ts (5 tests) 4ms
✓ |unit-core| packages/provider-limrun/src/runtime-dependencies.test.ts (1 test) 3ms
✓ |unit-core| src/commands/interaction/runtime/selector-wait-cancellation.test.ts (2 tests) 2ms
✓ |unit-core| packages/capture-kit/src/screen-recording-live-handle.test.ts (3 tests) 3ms
✓ |unit-core| src/daemon/tests/interaction-surface-baseline-evidence.test.ts (7 tests) 3ms
✓ |unit-core| packages/replay-test/src/internal/tests/session-test-discovery.test.ts (6 tests) 3ms
✓ |unit-core| src/tests/agent-device-client-auth.test.ts (1 test) 2ms
✓ |unit-core| src/core/command-descriptor/tests/platform-execution.test.ts (2 tests) 2ms
✓ |unit-core| src/commands/interaction/gesture.test.ts (4 tests) 3ms
✓ |unit-core| src/utils/video-webm.test.ts (6 tests) 3ms
✓ |unit-core| src/daemon/tests/target-shutdown.test.ts (3 tests) 3ms
✓ |unit-core| src/commands/interaction/runtime/selector-action-resolution.test.ts (2 tests) 3ms
✓ |unit-core| src/platforms/apple/core/tests/runner-provider.test.ts (1 test) 2ms
✓ |unit-core| src/tests/proxy-command.test.ts (2 tests) 2ms
✓ |unit-core| src/commands/perf/index.test.ts (4 tests) 3ms
✓ |unit-core| src/commands/recording/runtime/recording.test.ts (3 tests) 3ms
✓ |unit-core| src/core/command-descriptor/tests/timeout-policy.test.ts (7 tests) 3ms
✓ |unit-core| src/cli-schema/option-schema.test.ts (8 tests) 3ms
✓ |unit-core| packages/kernel/src/device-identity.test.ts (8 tests) 3ms
✓ |unit-core| packages/ad-replay/src/internal/tests/step-loop.test.ts (6 tests) 3ms
✓ |unit-core| src/tests/kernel/platform-collapse-parity.test.ts (8 tests) 3ms
✓ |unit-core| src/commands/cli-grammar/flag-registry.test.ts (2 tests) 2ms
✓ |unit-core| src/core/tests/dispatch-series.test.ts (10 tests) 3ms
✓ |unit-core| src/snapshot/tests/android-input-method-overlays.test.ts (1 test) 2ms
✓ |unit-core| src/commands/metro/index.test.ts (4 tests) 3ms
✓ |unit-core| src/platform-runtime-host.test.ts (1 test) 3ms
✓ |unit-core| src/utils/video.test.ts (2 tests) 3ms
✓ |unit-core| src/platforms/apple/core/tests/runner-client-relaunch.test.ts (2 tests) 3ms
✓ |unit-core| src/daemon/tests/device-claim-conflict.test.ts (4 tests) 2ms
✓ |unit-core| src/platforms/apple/tests/watchos-sentinel.test.ts (2 tests) 2ms
✓ |unit-core| src/platforms/apple/tests/screenshot-backend.test.ts (1 test) 3ms
✓ |unit-core| src/tests/client-normalizers.test.ts (8 tests) 3ms
✓ |unit-core| src/core/tests/capabilities.test.ts (12 tests) 3ms
✓ |unit-core| packages/platform-vega/src/runtime.test.ts (1 test) 2ms
✓ |unit-core| packages/contracts/src/network-runtime.test.ts (1 test) 2ms
✓ |unit-core| src/daemon/handlers/tests/session-open-surface.test.ts (5 tests) 2ms
✓ |unit-core| src/core/command-descriptor/tests/platform-execution-entry.test.ts (6 tests) 3ms
✓ |unit-core| packages/platform-apple/src/logs/descriptor.test.ts (9 tests) 3ms
✓ |unit-core| packages/capture-kit/src/platform-runtime-unavailable.test.ts (3 tests) 3ms
✓ |unit-core| src/platforms/android/tests/perf-legacy-cpu.test.ts (1 test) 3ms
✓ |unit-core| src/daemon/tests/runtime-policy.test.ts (1 test) 2ms
✓ |unit-core| src/core/tests/gesture-capabilities.test.ts (4 tests) 3ms
✓ |unit-core| src/compat/tests/replay-input.test.ts (2 tests) 3ms
✓ |unit-core| src/platforms/apple/core/tests/simctl.test.ts (3 tests) 2ms
✓ |unit-core| src/daemon/handlers/tests/session-doctor-android.test.ts (4 tests) 2ms
✓ |unit-core| src/tests/contracts/platform-plugin-parity.test.ts (7 tests) 2ms
✓ |unit-core| src/core/command-descriptor/tests/record-runtime-execution.test.ts (1 test) 2ms
✓ |unit-core| packages/contracts/src/record-runtime-cutover.test.ts (3 tests) 2ms
✓ |unit-core| src/commands/debugging/index.test.ts (3 tests) 3ms
✓ |unit-core| src/daemon/wait-current-surface.test.ts (2 tests) 2ms
✓ |unit-core| src/commands/batch/public.test.ts (1 test) 2ms
✓ |unit-core| src/tests/finders-public.test.ts (1 test) 2ms
✓ |unit-core| packages/contracts/src/platform-module.test.ts (3 tests) 2ms
✓ |unit-core| src/core/command-descriptor/tests/post-action-observation.test.ts (3 tests) 2ms
✓ |unit-core| src/platform-runtime-operation-host.test.ts (1 test) 2ms
✓ |unit-core| packages/platform-android/src/recording/manifest-validation.test.ts (2 tests) 2ms
✓ |unit-core| src/platforms/android/tests/notifications.test.ts (2 tests) 3ms
✓ |unit-core| packages/contracts/src/screen-recording-runtime-plan.test.ts (5 tests) 3ms
✓ |unit-core| src/platform-runtime-screen-recording-host.test.ts (1 test) 2ms
✓ |unit-core| packages/contracts/src/device-inventory.test.ts (3 tests) 2ms
✓ |unit-core| packages/contracts/src/logs-runtime-plan.test.ts (3 tests) 2ms
✓ |unit-core| src/daemon/handlers/tests/session-replay-target-token.test.ts (6 tests) 2ms
✓ |unit-core| src/core/command-descriptor/tests/boot-runtime-execution.test.ts (1 test) 2ms
✓ |unit-core| packages/contracts/src/logs-runtime-cutover.test.ts (4 tests) 2ms
✓ |unit-core| scripts/tests/help-conformance-topic-coverage.test.ts (4 tests) 2ms
✓ |unit-core| src/platforms/apple/core/tests/physical-device-screenshot.test.ts (2 tests) 2ms
✓ |unit-core| src/core/command-descriptor/tests/ref-frame-effect.test.ts (6 tests) 2ms
✓ |unit-core| src/daemon/handlers/tests/interaction-flags.test.ts (1 test) 2ms
✓ |unit-core| src/core/command-descriptor/tests/logs-runtime-execution.test.ts (1 test) 2ms
✓ |unit-core| packages/platform-web/src/inventory.test.ts (1 test) 2ms
✓ |unit-core| src/daemon/tests/perf-plugin-routing-parity.test.ts (2 tests) 2ms
✓ |unit-core| src/core/tests/dispatch-target.test.ts (1 test) 2ms
✓ |unit-core| src/cli/commands/tests/client-backed.test.ts (1 test) 2ms
✓ |subprocess-stub| src/tests/client-metro.test.ts (20 tests) 5597ms
✓ prepareMetroRuntime starts Metro, bridges through proxy, and writes runtime file when requested 588ms
✓ prepareMetroRuntime starts Re.Pack with rspack-start for rspack.config.ts 568ms
✓ prepareMetroRuntime starts Re.Pack with webpack-start for webpack.config.js 576ms
✓ prepareMetroRuntime maps kind=expo to the virtual-metro-entry bundle URL 578ms
✓ prepareMetroRuntime keeps index.bundle for non-expo kinds 568ms
✓ prepareMetroRuntime detects the package manager from an ancestor lockfile in a monorepo 866ms
✓ metro reload targets the dev server bound by metro prepare in the same session 573ms
✓ metro prepare --kind expo keeps a prefixed public base URL for session reload 570ms
✓ |subprocess-stub| src/daemon/tests/runtime-hints.test.ts (15 tests) 2310ms
✓ |subprocess-stub| scripts/fuzz/corpus-replay.test.ts (9 tests) 904ms
✓ |subprocess-stub| src/platforms/apple/core/tests/apps.test.ts (54 tests) 1409ms
✓ |subprocess-stub| src/platforms/android/tests/app-lifecycle-install.test.ts (13 tests) 933ms

Test Files 1 failed | 573 passed (574)
Tests 1 failed | 4764 passed (4765)
Start at 09:36:37
Duration 157.88s (transform 4.60s, setup 4.24s, import 68.18s, tests 153.60s, environment 26ms)

[ELIFECYCLE] Command failed with exit code 1. passed (574 files / 4,765 tests; 82.43% changed-line and 77.55% changed-branch coverage)\n- exact-head live verification passed on stopped iOS simulator, physical iOS, and stopped Android AVD in headless and normal modes; targets were restored and isolated daemon state cleaned\n\nThe PR body now records the 84-file scope-expansion verdict, current size report, denominator, and exact-head evidence. No review threads remain. It stays draft only for the prerequisite stack and the final in-progress smoke lane.

@thymikee

Copy link
Copy Markdown
Member Author

Re-reviewed exact head a2006450. The prior local architecture and cancellation findings are fixed: the root cross-family readiness host is deleted, Apple/Android readiness sequencing now lives in platform packages, long-running simctl/adb/physical/poll/sleep paths receive the request AbortSignal, and an emulator started by an aborted request is cleaned up. The discriminated facts/one-inspect-one-bind route remains coherent; boot is allocated R20 with lexical operation ownership and root-host retirement. All authoritative checks are green and the branch is CLEAN/MERGEABLE. Live evidence now covers a stopped iOS simulator, physical iOS, and a stopped Android AVD in both headless and normal modes, with restoration/cleanup. Readiness remains blocked by the inherited #1740/#1745/#1750 stack issues and allocation integration (downstream #1758 currently overlaps R20–R23). Residual device evidence still lacks Android-physical and live provider-owned boot parity. No new local code finding; no readiness label.

@thymikee
thymikee force-pushed the refactor/adr19-boot-unit branch from a200645 to c7b5a24 Compare August 12, 2026 08:49
@thymikee
thymikee force-pushed the refactor/adr19-boot-unit branch from c7b5a24 to fcb2f35 Compare August 12, 2026 09:34
@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Aug 12, 2026
@thymikee

Copy link
Copy Markdown
Member Author

Exact-head coordinator update at fcb2f35: final replay onto #1745 is complete and code review is clean. Boot remains a single request-scoped unit with package-owned Apple/Android readiness, one inspect/one bind, cancellation propagation, cleanup on aborted Android startup, and R20 cutover ownership. pnpm check:affected --run passed: 574 files / 4,770 tests, layering 170/170, changed-line coverage 182/224 (81.25%), unchanged daemon wire surface. The GitHub stack is now #1750#1745#1747#1756. Fresh exact-head CI is running; prior live simulator/emulator/physical-iOS evidence remains applicable.

@thymikee
thymikee force-pushed the refactor/adr19-boot-unit branch from fcb2f35 to 9d2337f Compare August 12, 2026 09:42
@thymikee
thymikee marked this pull request as ready for review August 12, 2026 09:49
@thymikee
thymikee merged commit b13c063 into main Aug 12, 2026
30 of 31 checks passed
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