{
  "platform": "ios",
  "reports": [
    {
      "id": "settle-after-tap",
      "flow": "differential/flows/settle-after-tap.yaml",
      "maestro": {
        "engine": "maestro",
        "outcome": "pass",
        "exitCode": 0
      },
      "agentDevice": {
        "engine": "agent-device",
        "outcome": "pass",
        "exitCode": 0
      },
      "outcomeDiverged": false,
      "invariants": [
        {
          "invariant": {
            "kind": "metricAtLeast",
            "command": "tapOn",
            "metric": "settleLatches",
            "min": 1,
            "because": "the scenario must execute and latch its inline stability loop"
          },
          "status": "held",
          "detail": "tapOn settleLatches reached 1 (>= 1)"
        },
        {
          "invariant": {
            "kind": "metricAtMost",
            "command": "tapOn",
            "metric": "settleTimeouts",
            "max": 0,
            "because": "a tap whose stability loop ran out of settle budget without the UI going quiet is the sleep-before-capture ordering signature"
          },
          "status": "held",
          "detail": "tapOn settleTimeouts stayed at 0 (<= 0)"
        }
      ],
      "status": "ok",
      "failed": false
    },
    {
      "id": "percent-swipe",
      "flow": "differential/flows/percent-swipe.yaml",
      "maestro": {
        "engine": "maestro",
        "outcome": "pass",
        "exitCode": 0
      },
      "agentDevice": {
        "engine": "agent-device",
        "outcome": "pass",
        "exitCode": 0
      },
      "outcomeDiverged": false,
      "invariants": [
        {
          "invariant": {
            "kind": "gestureExecutionProfile",
            "command": "swipe",
            "profile": "endpoint-hold",
            "because": "Maestro timed swipes are normalized to pan with the endpoint-hold execution profile, which the iOS runner delivers as a fast 100ms move followed by a hold."
          },
          "status": "held",
          "detail": "swipe executionProfile is endpoint-hold on 1 step(s)"
        }
      ],
      "status": "ok",
      "failed": false
    },
    {
      "id": "tap-retry-if-no-change",
      "flow": "differential/flows/tap-retry-if-no-change.yaml",
      "maestro": {
        "engine": "maestro",
        "outcome": "pass",
        "exitCode": 0
      },
      "agentDevice": {
        "engine": "agent-device",
        "outcome": "pass",
        "exitCode": 0
      },
      "outcomeDiverged": false,
      "invariants": [
        {
          "invariant": {
            "kind": "metricAtLeast",
            "command": "tapOn",
            "metric": "tapRetries",
            "min": 1,
            "because": "a tap on an unchanging screen must re-tap; zero retries means retryIfNoChange never ran and the scenario proved nothing"
          },
          "status": "held",
          "detail": "tapOn tapRetries reached 1 (>= 1)"
        }
      ],
      "status": "ok",
      "failed": false
    },
    {
      "id": "optional-warned-not-failed",
      "flow": "differential/flows/optional-warned-not-failed.yaml",
      "maestro": {
        "engine": "maestro",
        "outcome": "pass",
        "exitCode": 0
      },
      "agentDevice": {
        "engine": "agent-device",
        "outcome": "pass",
        "exitCode": 0
      },
      "outcomeDiverged": false,
      "invariants": [],
      "status": "ok",
      "failed": false
    },
    {
      "id": "wait-animation-between-taps",
      "flow": "differential/flows/wait-animation-between-taps.yaml",
      "maestro": {
        "engine": "maestro",
        "outcome": "pass",
        "exitCode": 0
      },
      "agentDevice": {
        "engine": "agent-device",
        "outcome": "pass",
        "exitCode": 0
      },
      "outcomeDiverged": false,
      "invariants": [],
      "status": "ok",
      "failed": false
    },
    {
      "id": "optional-warned-scroll-and-wait",
      "flow": "differential/flows/optional-scroll-and-wait.yaml",
      "maestro": {
        "engine": "maestro",
        "outcome": "pass",
        "exitCode": 0
      },
      "agentDevice": {
        "engine": "agent-device",
        "outcome": "pass",
        "exitCode": 0
      },
      "outcomeDiverged": false,
      "invariants": [],
      "status": "ok",
      "failed": false
    }
  ]
}
