You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit eb2ea11
Browse filesBrowse the repository at this point in the historyBrowse files
P1: structured JSON/Node snapshot results now retain the response-level
refsGeneration. It was declared on the daemon response but dropped by the
public CaptureSnapshotResult type, the serializer, and the Node normalizer,
so default `snapshot -i --json` emitted refs with no generation to pin
against. Added to the type, serializer, normalizer, plus CLI/Node tests.
P2: Android dialog-recovery abort now reuses the SHARED admission rejection
(refMutationAdmissionResponse) instead of a bespoke error, so the failure
carries the full typed context (reason, ref, currentGeneration, scope,
mintedGeneration) identical to every other expired-frame rejection across
platforms. Removes the now-unused AppError/refFrameState imports. Adds a
regression proving recovery aborts the outstanding ref action before any
press dispatch.
Also adds the relaunch failure-boundary regression (existing-session close
fails after dispatch → old frame stays expired), and corrects the ADR
implementation-status note so Android blocking-dialog recovery and a real
provider-backed interaction/lifecycle are recorded as unexercised release
blockers rather than confirmed enablement.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BmnraQhvxzEFEUoUiqRpJa
The daemon registry exposes a named resolver. Every daemon command is classified, but the
@@ -223,12 +221,12 @@ resolver rather than pretending all subcommands behave alike.
223
221
The registry is the exhaustive source of truth. The following table is non-exhaustive guidance for
224
222
classifying representative actions; it must not become a second prose registry:
225
223
226
-
| Effect | Commands/actions |
227
-
| --- | --- |
228
-
|`may-invalidate`| press, click, fill, longpress, type, focus, scroll, swipe, gesture, back, home, `tv-remote`, rotate, open/relaunch, trigger/push delivery, settings changes, install/reinstall, React Native overlay dismissal, and lifecycle operations that can replace the visible surface |
229
-
| Conditional resolver | keyboard status preserves while dismiss/return/input invalidate; alert get/wait preserve while accept/dismiss invalidate; find reads preserve while click/fill/focus/type delegate to their leaf mutation |
230
-
|`delegated`| batch, replay, and test/suite orchestrators; each nested leaf owns its transition |
231
-
|`preserve`| snapshots and other observation, assertion, screenshot, recording, trace, logs, events, network inspection, performance, inventory, capability, lease, and transport-management operations unless a selected subaction directly manipulates the visible surface |
|`may-invalidate`| press, click, fill, longpress, type, focus, scroll, swipe, gesture, back, home, `tv-remote`, rotate, open/relaunch, trigger/push delivery, settings changes, install/reinstall, React Native overlay dismissal, and lifecycle operations that can replace the visible surface |
227
+
| Conditional resolver | keyboard status preserves while dismiss/return/input invalidate; alert get/wait preserve while accept/dismiss invalidate; find reads preserve while click/fill/focus/type delegate to their leaf mutation |
228
+
|`delegated`| batch, replay, and test/suite orchestrators; each nested leaf owns its transition|
229
+
|`preserve`| snapshots and other observation, assertion, screenshot, recording, trace, logs, events, network inspection, performance, inventory, capability, lease, and transport-management operations unless a selected subaction directly manipulates the visible surface|
232
230
233
231
Clipboard reads and writes preserve the frame because pasteboard state alone does not change element
234
232
identity. A later paste/type action is independently invalidating.
@@ -444,9 +442,14 @@ complete daemon classification and gate (2), the pre-side-effect seam at every l
444
442
complete/partial publication with bounded scope, MCP pin retention, and pinned partial CLI text (4),
445
443
Android freshness decoupled from positional ref authorization (5), the cross-platform contract and
446
444
provider evidence (6), and fail-closed admission enforcement across platforms with typed reasons (7).
447
-
Per-platform enablement is confirmed by the live-evidence runs required above; step 8's removal of the
448
-
superseded coarse `snapshotRefsStale` marker follows that confirmation so read-only warnings are not
449
-
disturbed before enforcement is proven on hardware.
445
+
Fresh live evidence has exercised most production seams — Apple runtime-ref, direct/native selector,
446
+
generation-pin, generic, and lifecycle paths, plus Android helper freshness (including proven
447
+
non-retarget) and Android existing-session relaunch. Two seams remain UNEXERCISED and are therefore
448
+
explicit release blockers, not confirmed enablement: Android blocking-dialog recovery, and a real
449
+
provider-backed interaction plus provider-backed lifecycle operation. Enforcement stays enabled in
450
+
code, but those two seams are not claimed as verified until their live runs exist. Step 8's removal of
451
+
the superseded coarse `snapshotRefsStale` marker follows full confirmation, so read-only warnings are
452
+
not disturbed before every enabled seam is proven on hardware.
450
453
451
454
PR #1241 landed independently as a compatible transitional fix. It rejects a known iOS stale-marker
452
455
case before this full lifecycle is implemented; it does not own the architecture migration.
0 commit comments