callstack / callstack/agent-device

refactor(ios): prune converged snapshot paths and close release gates

Open
#2,199 2 comments 0 reactions 0 assignees View on GitHub
needs-triage refactor
Dominant language
TypeScript
Stars
4.6k
Forks
299
Avg merge
10h 17m
Merged PRs (30d)
515

Description

Parent: #2188

Blocked by: #2195, #2198

## Outcome

Delete the compatibility and backend-name policy that remains solely for the migrated iOS snapshot
implementation, enforce no-regrowth at the owning seams, and run the final package-size,
conformance, provider, Simulator, proxy, and affected release evidence.

This is a deletion and enforcement issue, not a place to finish incomplete behavior from blockers.
Each owning migration must already have removed its obvious local duplication; this issue audits and
closes the cross-cutting remainder.

## Prune audit

Delete when equivalent engine-interface coverage is already proven:

- `shouldPresentIosInteractiveSnapshot` from `src/core/snapshot-state.ts`;
- `backendScopesAfterWire` and remaining backend-name scope planning;
- direct `presentIosInteractiveSnapshot` orchestration from `buildSnapshotState`;
- remaining provider-specific post-wire scope/option branches;
- remaining synthesized WebDriver hittability;
- old iOS semantic-compaction locations after `capture-kit` owns the implementation;
- runner-local Swift geometric-presentation copies after the runner and harness use the shared source;
- simulator observation dependencies on runner readiness and repeated bridge retries after the
generation circuit opens;
- tests whose only purpose was to assert removed producer-name branches, after equivalent behavior is
covered through the engine interface.

Move matching path-keyed fallow baselines rather than regenerating unrelated baselines. Stage new
structural modules before trusting the layering scan.

## Do not delete

- XCTest tree, query-sweep, or private-AX capture backends.
- Apple runner manager/cache, `.xctestrun` preparation, or interaction protocol.
- Swift geometric presentation or TypeScript iOS semantic compaction.
- Generic scope/normalization, refs, quality, occlusion, Android policy, provider acquisition
adapters, golden fixtures, fuzz harnesses, live smokes, or physical-device code.
- Proxy routes, device leases, authentication, artifact transfer, or RPC compatibility machinery.

If deletion appears possible only by weakening another consumer, stop and report the remaining owner
rather than adding a compatibility re-export or fallback.

## No-regrowth enforcement

- Add or update structural ownership tests so producer adapters cannot import presentation behavior,
contracts cannot own algorithms, and root orchestration cannot reconstruct engine policy.
- Reject old path recreation, backend-name scope/presentation branching, or direct iOS presenter
invocation outside the engine.
- Plant each new forbidden direction/path and record the named red failure before returning green.
- Do not add allowlists for unclassified paths; fix the declaration or ownership seam.

## Final evidence

- Compare packed, clean-installed, and bundled npm sizes with #2189. Report exact deltas; do not use
source-line estimates. The compiled bridge cache remains outside the npm artifact.
- Run the independent Swift/TypeScript golden corpus, bounded differential fuzz, properties, and
structural gate with reproducible artifacts.
- Run Appium and Limrun provider contracts on the exact head.
- Run local Simulator cold-cold, cold, warm, relaunch, bridge crash/timeout/cancellation, stale
generation, fallback, and first-runner-interaction evidence.
- Run direct/proxy semantic parity, controlled-RTT performance, lease isolation/expiry, cancellation,
and supported version-skew evidence.
- Run `pnpm check:affected --run`; GitHub remains authoritative for native, provider, coverage, and
full macOS/Simulator lanes.
- Update CLI help/user docs only if observable behavior changed. Do not document internal producer
selection. Keep physical-iPhone behavior explicitly unchanged and separately owned.

## Acceptance

- No compatibility surface remains solely for the migrated implementation.
- Old paths and forbidden dependency directions have observed planted-red no-regrowth proof.
- All child acceptance evidence is linked from #2188 and corresponds to exact implementation heads.
- No open blocker is represented as passing through fixture-only or stale evidence.
- The size delta is within the maintainer-accepted budget and the remote/local performance targets are
met without wrong-tree, stale-tree, lease, or interaction regressions.

## Worker stop conditions

- Stop if #2195 or #2198 is incomplete; do not finish their semantics here.
- Stop if deletion changes another platform/provider/physical-device contract.
- Stop if a baseline would need bulk regeneration or a structural allowlist.
- Do not close #2188 until every child issue and exact-head evidence set is verified.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.