addedOutput schema / oneOf
Added value: +[
+ {
+ "not": {
+ "properties": {},
+ "required": [
+ "verification"
+ ],
+ "type": "object"
+ },
+ "properties": {
+ "cost": {
+ "properties": {
+ "nodeCount": {
+ "description": "Number of nodes in the original node tree when the response carries one.",
+ "type": "number"
+ },
+ "runnerRoundTrips": {
+ "description": "Number of real runner round-trips made while serving the request.",
+ "type": "number"
+ },
+ "wallClockMs": {
+ "description": "Total wall-clock time for the request in milliseconds.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "wallClockMs",
+ "runnerRoundTrips"
+ ],
+ "type": "object"
+ },
+ "delayMs": {
+ "description": "Delay between typed characters in milliseconds.",
+ "type": "number"
+ },
+ "evidence": {
+ "properties": {
+ "changedFromBefore": {
+ "description": "Whether the post-action digest differs from the pre-action capture digest. false is evidence, not failure.",
+ "type": "boolean"
+ },
+ "digest": {
+ "description": "Order-independent digest of the post-action node multiset.",
+ "type": "string"
+ },
+ "foregroundApp": {
+ "description": "Foreground app bundle id or name, when the capture carries it.",
+ "type": "string"
+ },
+ "interactiveNodeCount": {
+ "description": "Subset of nodeCount the platform reports as hittable.",
+ "type": "number"
+ },
+ "nodeCount": {
+ "description": "Node count in the post-action interactive-only capture.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "nodeCount",
+ "interactiveNodeCount",
+ "digest",
+ "changedFromBefore"
+ ],
+ "type": "object"
+ },
+ "hint": {
+ "type": "string"
+ },
+ "maestroFallbackReason": {
+ "const": "non-hittable-coordinate",
+ "type": "string"
+ },
+ "maestroNonHittableCoordinateFallbackAllowed": {
+ "description": "Whether the direct iOS Maestro coordinate fallback was allowed for this selector.",
+ "type": "boolean"
+ },
+ "maestroNonHittableCoordinateFallbackUsed": {
+ "description": "Whether the direct iOS Maestro coordinate fallback was actually used.",
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "ref": {
+ "description": "Snapshot ref without the @ prefix when the target was an @ref.",
+ "type": "string"
+ },
+ "refLabel": {
+ "type": "string"
+ },
+ "referenceHeight": {
+ "description": "Reference frame height for visualizing the interaction point.",
+ "type": "number"
+ },
+ "referenceWidth": {
+ "description": "Reference frame width for visualizing the interaction point.",
+ "type": "number"
+ },
+ "resolution": {
+ "description": "Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path.",
+ "oneOf": [
+ {
+ "properties": {
+ "kind": {
+ "const": "unique",
+ "type": "string"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "runtime",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "alternatives": {
+ "description": "At most 5 losing candidates, document order. Present at default/full response levels and omitted in digest. The winner is never included.",
+ "items": {
+ "properties": {
+ "diagnosticRef": {
+ "description": "Opaque non-@ diagnostic token. Never a snapshot ref: not issued via refsGeneration and cannot be pinned or reused as an @ref target. UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "label": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "role": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "diagnosticRef"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "kind": {
+ "const": "disambiguated",
+ "type": "string"
+ },
+ "matchCount": {
+ "description": "Total matches resolveSelectorChain found before disambiguation.",
+ "type": "number"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "runtime",
+ "type": "string"
+ },
+ "tiebreak": {
+ "description": "The comparison that decided the winner.",
+ "enum": [
+ "visible",
+ "deepest",
+ "smallest-area",
+ "structural-equivalence"
+ ],
+ "type": "string"
+ },
+ "winnerDiagnostic": {
+ "properties": {
+ "diagnosticRef": {
+ "description": "Opaque non-@ diagnostic token. Never a snapshot ref: not issued via refsGeneration and cannot be pinned or reused as an @ref target. UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "label": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "role": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "diagnosticRef"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind",
+ "matchCount",
+ "winnerDiagnostic",
+ "tiebreak"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "kind": {
+ "const": "exact",
+ "type": "string"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "ref",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "kind": {
+ "const": "label-fallback",
+ "type": "string"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "ref",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "kind": {
+ "const": "not-observed",
+ "type": "string"
+ },
+ "source": {
+ "const": "direct-ios",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "kind"
+ ],
+ "type": "object"
+ }
+ ],
+ "type": "object"
+ },
+ "selector": {
+ "description": "Selector expression when the target was a selector.",
+ "type": "string"
+ },
+ "selectorChain": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "settle": {
+ "properties": {
+ "captures": {
+ "type": "number"
+ },
+ "diff": {
+ "description": "Settled diff vs the pre-action tree (changed lines only).",
+ "properties": {
+ "lines": {
+ "items": {
+ "properties": {
+ "kind": {
+ "enum": [
+ "added",
+ "removed"
+ ],
+ "type": "string"
+ },
+ "ref": {
+ "description": "Plain ref body (e12) for added lines.",
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "summary": {
+ "properties": {
+ "additions": {
+ "type": "number"
+ },
+ "removals": {
+ "type": "number"
+ },
+ "unchanged": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "additions",
+ "removals",
+ "unchanged"
+ ],
+ "type": "object"
+ },
+ "truncated": {
+ "description": "Lines were capped to the response bound.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "summary",
+ "lines"
+ ],
+ "type": "object"
+ },
+ "hint": {
+ "type": "string"
+ },
+ "quietMs": {
+ "type": "number"
+ },
+ "refs": {
+ "items": {
+ "properties": {
+ "ref": {
+ "description": "Plain ref body (e12) minted from the stored settled tree.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "ref"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "refsGeneration": {
+ "description": "Snapshot generation of the stored settled tree; refs on added diff lines were minted from it.",
+ "type": "number"
+ },
+ "settled": {
+ "description": "Whether the UI held the quiet window before the deadline. false is advisory, not failure.",
+ "type": "boolean"
+ },
+ "tail": {
+ "description": "Unchanged interactive refs tail: still-present, actionable elements from the settled tree, attached only when diff carries zero added-line refs (a modal-dismiss/toast-only diff).",
+ "items": {
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "ref": {
+ "description": "Plain ref body (e12) minted from the stored settled tree.",
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ref",
+ "role"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "tailTruncated": {
+ "description": "Present (true) when tail candidates exceeded the response cap.",
+ "type": "boolean"
+ },
+ "timeoutMs": {
+ "type": "number"
+ },
+ "waitedMs": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "settled",
+ "waitedMs",
+ "captures",
+ "quietMs",
+ "timeoutMs"
+ ],
+ "type": "object"
+ },
+ "targetHittable": {
+ "type": "boolean"
+ },
+ "targetKind": {
+ "description": "Resolved interaction target kind.",
+ "enum": [
+ "point",
+ "ref",
+ "selector"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "Text submitted to the field.",
+ "type": "string"
+ },
+ "warning": {
+ "type": "string"
+ },
+ "x": {
+ "description": "Resolved interaction x coordinate when available.",
+ "type": "number"
+ },
+ "y": {
+ "description": "Resolved interaction y coordinate when available.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "targetKind",
+ "text"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "after": {
+ "description": "Raw target text captured after the fill.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "before": {
+ "description": "Raw target text captured before the fill.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "cost": {
+ "properties": {
+ "nodeCount": {
+ "description": "Number of nodes in the original node tree when the response carries one.",
+ "type": "number"
+ },
+ "runnerRoundTrips": {
+ "description": "Number of real runner round-trips made while serving the request.",
+ "type": "number"
+ },
+ "wallClockMs": {
+ "description": "Total wall-clock time for the request in milliseconds.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "wallClockMs",
+ "runnerRoundTrips"
+ ],
+ "type": "object"
+ },
+ "delayMs": {
+ "description": "Delay between typed characters in milliseconds.",
+ "type": "number"
+ },
+ "evidence": {
+ "properties": {
+ "changedFromBefore": {
+ "description": "Whether the post-action digest differs from the pre-action capture digest. false is evidence, not failure.",
+ "type": "boolean"
+ },
+ "digest": {
+ "description": "Order-independent digest of the post-action node multiset.",
+ "type": "string"
+ },
+ "foregroundApp": {
+ "description": "Foreground app bundle id or name, when the capture carries it.",
+ "type": "string"
+ },
+ "interactiveNodeCount": {
+ "description": "Subset of nodeCount the platform reports as hittable.",
+ "type": "number"
+ },
+ "nodeCount": {
+ "description": "Node count in the post-action interactive-only capture.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "nodeCount",
+ "interactiveNodeCount",
+ "digest",
+ "changedFromBefore"
+ ],
+ "type": "object"
+ },
+ "hint": {
+ "type": "string"
+ },
+ "maestroFallbackReason": {
+ "const": "non-hittable-coordinate",
+ "type": "string"
+ },
+ "maestroNonHittableCoordinateFallbackAllowed": {
+ "description": "Whether the direct iOS Maestro coordinate fallback was allowed for this selector.",
+ "type": "boolean"
+ },
+ "maestroNonHittableCoordinateFallbackUsed": {
+ "description": "Whether the direct iOS Maestro coordinate fallback was actually used.",
+ "type": "boolean"
+ },
+ "message": {
+ "type": "string"
+ },
+ "ref": {
+ "description": "Snapshot ref without the @ prefix when the target was an @ref.",
+ "type": "string"
+ },
+ "refLabel": {
+ "type": "string"
+ },
+ "referenceHeight": {
+ "description": "Reference frame height for visualizing the interaction point.",
+ "type": "number"
+ },
+ "referenceWidth": {
+ "description": "Reference frame width for visualizing the interaction point.",
+ "type": "number"
+ },
+ "requested": {
+ "description": "Literal text requested by the fill command.",
+ "type": "string"
+ },
+ "resolution": {
+ "description": "Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path.",
+ "oneOf": [
+ {
+ "properties": {
+ "kind": {
+ "const": "unique",
+ "type": "string"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "runtime",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "alternatives": {
+ "description": "At most 5 losing candidates, document order. Present at default/full response levels and omitted in digest. The winner is never included.",
+ "items": {
+ "properties": {
+ "diagnosticRef": {
+ "description": "Opaque non-@ diagnostic token. Never a snapshot ref: not issued via refsGeneration and cannot be pinned or reused as an @ref target. UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "label": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "role": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "diagnosticRef"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "kind": {
+ "const": "disambiguated",
+ "type": "string"
+ },
+ "matchCount": {
+ "description": "Total matches resolveSelectorChain found before disambiguation.",
+ "type": "number"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "runtime",
+ "type": "string"
+ },
+ "tiebreak": {
+ "description": "The comparison that decided the winner.",
+ "enum": [
+ "visible",
+ "deepest",
+ "smallest-area",
+ "structural-equivalence"
+ ],
+ "type": "string"
+ },
+ "winnerDiagnostic": {
+ "properties": {
+ "diagnosticRef": {
+ "description": "Opaque non-@ diagnostic token. Never a snapshot ref: not issued via refsGeneration and cannot be pinned or reused as an @ref target. UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "label": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ },
+ "role": {
+ "description": "UTF-8 truncated to 256 bytes.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "diagnosticRef"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind",
+ "matchCount",
+ "winnerDiagnostic",
+ "tiebreak"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "kind": {
+ "const": "exact",
+ "type": "string"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "ref",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "kind": {
+ "const": "label-fallback",
+ "type": "string"
+ },
+ "phase": {
+ "const": "pre-action",
+ "type": "string"
+ },
+ "source": {
+ "const": "ref",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "phase",
+ "kind"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "kind": {
+ "const": "not-observed",
+ "type": "string"
+ },
+ "source": {
+ "const": "direct-ios",
+ "type": "string"
+ }
+ },
+ "required": [
+ "source",
+ "kind"
+ ],
+ "type": "object"
+ }
+ ],
+ "type": "object"
+ },
+ "selector": {
+ "description": "Selector expression when the target was a selector.",
+ "type": "string"
+ },
+ "selectorChain": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "settle": {
+ "properties": {
+ "captures": {
+ "type": "number"
+ },
+ "diff": {
+ "description": "Settled diff vs the pre-action tree (changed lines only).",
+ "properties": {
+ "lines": {
+ "items": {
+ "properties": {
+ "kind": {
+ "enum": [
+ "added",
+ "removed"
+ ],
+ "type": "string"
+ },
+ "ref": {
+ "description": "Plain ref body (e12) for added lines.",
+ "type": "string"
+ },
+ "text": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "text"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "summary": {
+ "properties": {
+ "additions": {
+ "type": "number"
+ },
+ "removals": {
+ "type": "number"
+ },
+ "unchanged": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "additions",
+ "removals",
+ "unchanged"
+ ],
+ "type": "object"
+ },
+ "truncated": {
+ "description": "Lines were capped to the response bound.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "summary",
+ "lines"
+ ],
+ "type": "object"
+ },
+ "hint": {
+ "type": "string"
+ },
+ "quietMs": {
+ "type": "number"
+ },
+ "refs": {
+ "items": {
+ "properties": {
+ "ref": {
+ "description": "Plain ref body (e12) minted from the stored settled tree.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "ref"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "refsGeneration": {
+ "description": "Snapshot generation of the stored settled tree; refs on added diff lines were minted from it.",
+ "type": "number"
+ },
+ "settled": {
+ "description": "Whether the UI held the quiet window before the deadline. false is advisory, not failure.",
+ "type": "boolean"
+ },
+ "tail": {
+ "description": "Unchanged interactive refs tail: still-present, actionable elements from the settled tree, attached only when diff carries zero added-line refs (a modal-dismiss/toast-only diff).",
+ "items": {
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "ref": {
+ "description": "Plain ref body (e12) minted from the stored settled tree.",
+ "type": "string"
+ },
+ "role": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ref",
+ "role"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "tailTruncated": {
+ "description": "Present (true) when tail candidates exceeded the response cap.",
+ "type": "boolean"
+ },
+ "timeoutMs": {
+ "type": "number"
+ },
+ "waitedMs": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "settled",
+ "waitedMs",
+ "captures",
+ "quietMs",
+ "timeoutMs"
+ ],
+ "type": "object"
+ },
+ "target": {
+ "description": "Target identity captured before fill and matched after fill.",
+ "properties": {
+ "className": {
+ "description": "Android class name of the exact field that changed.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "packageName": {
+ "description": "Android package name that owns the exact field.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "rect": {
+ "description": "Screen-space rectangle of the exact field that changed.",
+ "properties": {
+ "height": {
+ "type": "number"
+ },
+ "width": {
+ "type": "number"
+ },
+ "x": {
+ "type": "number"
+ },
+ "y": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "x",
+ "y",
+ "width",
+ "height"
+ ],
+ "type": "object"
+ },
+ "resourceId": {
+ "description": "Android resource id of the exact field that changed.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "resourceId",
+ "className",
+ "packageName",
+ "rect"
+ ],
+ "type": "object"
+ },
+ "targetHittable": {
+ "type": "boolean"
+ },
+ "targetKind": {
+ "description": "Resolved interaction target kind.",
+ "enum": [
+ "point",
+ "ref",
+ "selector"
+ ],
+ "type": "string"
+ },
+ "text": {
+ "description": "Text submitted to the field.",
+ "type": "string"
+ },
+ "verification": {
+ "const": "unconfirmed",
+ "type": "string"
+ },
+ "warning": {
+ "type": "string"
+ },
+ "x": {
+ "description": "Resolved interaction x coordinate when available.",
+ "type": "number"
+ },
+ "y": {
+ "description": "Resolved interaction y coordinate when available.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "targetKind",
+ "text",
+ "verification",
+ "requested",
+ "before",
+ "after",
+ "target"
+ ],
+ "type": "object"
+ }
+]
removedOutput schema / properties
Removed value: -{
- "cost": {
- "properties": {
- "nodeCount": {
- "description": "Number of nodes in the original node tree when the response carries one.",
- "type": "number"
- },
- "runnerRoundTrips": {
- "description": "Number of real runner round-trips made while serving the request.",
- "type": "number"
- },
- "wallClockMs": {
- "description": "Total wall-clock time for the request in milliseconds.",
- "type": "number"
- }
- },
- "required": [
- "wallClockMs",
- "runnerRoundTrips"
- ],
- "type": "object"
- },
- "delayMs": {
- "description": "Delay between typed characters in milliseconds.",
- "type": "number"
- },
- "evidence": {
- "properties": {
- "changedFromBefore": {
- "description": "Whether the post-action digest differs from the pre-action capture digest. false is evidence, not failure.",
- "type": "boolean"
- },
- "digest": {
- "description": "Order-independent digest of the post-action node multiset.",
- "type": "string"
- },
- "foregroundApp": {
- "description": "Foreground app bundle id or name, when the capture carries it.",
- "type": "string"
- },
- "interactiveNodeCount": {
- "description": "Subset of nodeCount the platform reports as hittable.",
- "type": "number"
- },
- "nodeCount": {
- "description": "Node count in the post-action interactive-only capture.",
- "type": "number"
- }
- },
- "required": [
- "nodeCount",
- "interactiveNodeCount",
- "digest",
- "changedFromBefore"
- ],
- "type": "object"
- },
- "hint": {
- "type": "string"
- },
- "maestroFallbackReason": {
- "const": "non-hittable-coordinate",
- "type": "string"
- },
- "maestroNonHittableCoordinateFallbackAllowed": {
- "description": "Whether the direct iOS Maestro coordinate fallback was allowed for this selector.",
- "type": "boolean"
- },
- "maestroNonHittableCoordinateFallbackUsed": {
- "description": "Whether the direct iOS Maestro coordinate fallback was actually used.",
- "type": "boolean"
- },
- "message": {
- "type": "string"
- },
- "ref": {
- "description": "Snapshot ref without the @ prefix when the target was an @ref.",
- "type": "string"
- },
- "refLabel": {
- "type": "string"
- },
- "referenceHeight": {
- "description": "Reference frame height for visualizing the interaction point.",
- "type": "number"
- },
- "referenceWidth": {
- "description": "Reference frame width for visualizing the interaction point.",
- "type": "number"
- },
- "resolution": {
- "description": "Pre-action disclosure of how the acting path resolved its target. Absent when resolutionDisclosure is inapplicable for the path.",
- "oneOf": [
- {
- "properties": {
- "kind": {
- "const": "unique",
- "type": "string"
- },
- "phase": {
- "const": "pre-action",
- "type": "string"
- },
- "source": {
- "const": "runtime",
- "type": "string"
- }
- },
- "required": [
- "source",
- "phase",
- "kind"
- ],
- "type": "object"
- },
- {
- "properties": {
- "alternatives": {
- "description": "At most 5 losing candidates, document order. Present at default/full response levels and omitted in digest. The winner is never included.",
- "items": {
- "properties": {
- "diagnosticRef": {
- "description": "Opaque non-@ diagnostic token. Never a snapshot ref: not issued via refsGeneration and cannot be pinned or reused as an @ref target. UTF-8 truncated to 256 bytes.",
- "type": "string"
- },
- "label": {
- "description": "UTF-8 truncated to 256 bytes.",
- "type": "string"
- },
- "role": {
- "description": "UTF-8 truncated to 256 bytes.",
- "type": "string"
- }
- },
- "required": [
- "diagnosticRef"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "kind": {
- "const": "disambiguated",
- "type": "string"
- },
- "matchCount": {
- "description": "Total matches resolveSelectorChain found before disambiguation.",
- "type": "number"
- },
- "phase": {
- "const": "pre-action",
- "type": "string"
- },
- "source": {
- "const": "runtime",
- "type": "string"
- },
- "tiebreak": {
- "description": "The comparison that decided the winner.",
- "enum": [
- "visible",
- "deepest",
- "smallest-area"
- ],
- "type": "string"
- },
- "winnerDiagnostic": {
- "properties": {
- "diagnosticRef": {
- "description": "Opaque non-@ diagnostic token. Never a snapshot ref: not issued via refsGeneration and cannot be pinned or reused as an @ref target. UTF-8 truncated to 256 bytes.",
- "type": "string"
- },
- "label": {
- "description": "UTF-8 truncated to 256 bytes.",
- "type": "string"
- },
- "role": {
- "description": "UTF-8 truncated to 256 bytes.",
- "type": "string"
- }
- },
- "required": [
- "diagnosticRef"
- ],
- "type": "object"
- }
- },
- "required": [
- "source",
- "phase",
- "kind",
- "matchCount",
- "winnerDiagnostic",
- "tiebreak"
- ],
- "type": "object"
- },
- {
- "properties": {
- "kind": {
- "const": "exact",
- "type": "string"
- },
- "phase": {
- "const": "pre-action",
- "type": "string"
- },
- "source": {
- "const": "ref",
- "type": "string"
- }
- },
- "required": [
- "source",
- "phase",
- "kind"
- ],
- "type": "object"
- },
- {
- "properties": {
- "kind": {
- "const": "label-fallback",
- "type": "string"
- },
- "phase": {
- "const": "pre-action",
- "type": "string"
- },
- "source": {
- "const": "ref",
- "type": "string"
- }
- },
- "required": [
- "source",
- "phase",
- "kind"
- ],
- "type": "object"
- },
- {
- "properties": {
- "kind": {
- "const": "not-observed",
- "type": "string"
- },
- "source": {
- "const": "direct-ios",
- "type": "string"
- }
- },
- "required": [
- "source",
- "kind"
- ],
- "type": "object"
- }
- ],
- "type": "object"
- },
- "selector": {
- "description": "Selector expression when the target was a selector.",
- "type": "string"
- },
- "selectorChain": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "settle": {
- "properties": {
- "captures": {
- "type": "number"
- },
- "diff": {
- "description": "Settled diff vs the pre-action tree (changed lines only).",
- "properties": {
- "lines": {
- "items": {
- "properties": {
- "kind": {
- "enum": [
- "added",
- "removed"
- ],
- "type": "string"
- },
- "ref": {
- "description": "Plain ref body (e12) for added lines.",
- "type": "string"
- },
- "text": {
- "type": "string"
- }
- },
- "required": [
- "kind",
- "text"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "summary": {
- "properties": {
- "additions": {
- "type": "number"
- },
- "removals": {
- "type": "number"
- },
- "unchanged": {
- "type": "number"
- }
- },
- "required": [
- "additions",
- "removals",
- "unchanged"
- ],
- "type": "object"
- },
- "truncated": {
- "description": "Lines were capped to the response bound.",
- "type": "boolean"
- }
- },
- "required": [
- "summary",
- "lines"
- ],
- "type": "object"
- },
- "hint": {
- "type": "string"
- },
- "quietMs": {
- "type": "number"
- },
- "refs": {
- "items": {
- "properties": {
- "ref": {
- "description": "Plain ref body (e12) minted from the stored settled tree.",
- "type": "string"
- }
- },
- "required": [
- "ref"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "refsGeneration": {
- "description": "Snapshot generation of the stored settled tree; refs on added diff lines were minted from it.",
- "type": "number"
- },
- "settled": {
- "description": "Whether the UI held the quiet window before the deadline. false is advisory, not failure.",
- "type": "boolean"
- },
- "tail": {
- "description": "Unchanged interactive refs tail: still-present, actionable elements from the settled tree, attached only when diff carries zero added-line refs (a modal-dismiss/toast-only diff).",
- "items": {
- "properties": {
- "label": {
- "type": "string"
- },
- "ref": {
- "description": "Plain ref body (e12) minted from the stored settled tree.",
- "type": "string"
- },
- "role": {
- "type": "string"
- }
- },
- "required": [
- "ref",
- "role"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "tailTruncated": {
- "description": "Present (true) when tail candidates exceeded the response cap.",
- "type": "boolean"
- },
- "timeoutMs": {
- "type": "number"
- },
- "waitedMs": {
- "type": "number"
- }
- },
- "required": [
- "settled",
- "waitedMs",
- "captures",
- "quietMs",
- "timeoutMs"
- ],
- "type": "object"
- },
- "targetHittable": {
- "type": "boolean"
- },
- "targetKind": {
- "description": "Resolved interaction target kind.",
- "enum": [
- "point",
- "ref",
- "selector"
- ],
- "type": "string"
- },
- "text": {
- "description": "Text submitted to the field.",
- "type": "string"
- },
- "warning": {
- "type": "string"
- },
- "x": {
- "description": "Resolved interaction x coordinate when available.",
- "type": "number"
- },
- "y": {
- "description": "Resolved interaction y coordinate when available.",
- "type": "number"
- }
-}