{
  "schemaVersion": 1,
  "status": "success",
  "project": "travel_app",
  "name": "travel_app",
  "runId": "2026-09-10T11-00-57-811Z-0adc",
  "createdAt": "2026-09-10T11:00:57.813Z",
  "completedAt": "2026-09-10T11:01:16.009Z",
  "technology": "Flutter / Dart; Android, iOS, Web, Windows, macOS, Linux scaffolds",
  "detectedPlatforms": [
    {
      "platform": "flutter",
      "root": "archive/travel_app",
      "targets": [
        "web",
        "android",
        "ios",
        "windows",
        "macos",
        "linux"
      ],
      "sdkConstraint": "'>=3.0.6 <4.0.0'"
    }
  ],
  "captureMethod": "Flutter web in Chromium; accessibility semantics; mobile-sized viewport (not a native device)",
  "viewport": {
    "width": 390,
    "height": 844
  },
  "deviceScaleFactor": 2,
  "dataMode": "Application’s built-in travel fixtures; fresh browser profile; booking UI is a demo. Required public Roboto and Noto Symbols fonts are cached outside the original project.",
  "source": {
    "projectPath": "archive/travel_app",
    "git": "not_available"
  },
  "build": {
    "kind": "isolated-source-build",
    "entrySha256": "fd9bd6bb355195dda777b22f880c93c1298862e898ac879561329c055d4dae98",
    "sourceFreshness": "built_from_current_source",
    "flutter": "3.35.7",
    "dart": "3.9.2",
    "platform": "web",
    "target": "lib/main.dart",
    "defines": [],
    "sourceFingerprint": "3db52ba80df3103f7fca046c0f9ec21e547c8fc89778e88d87bf4445141e9382"
  },
  "sourceStateUnchanged": true,
  "steps": [
    {
      "name": "Use the mobile Search navigation tab",
      "startMs": 596,
      "endMs": 1365,
      "status": "passed"
    },
    {
      "name": "Switch from flights to hotels",
      "startMs": 1365,
      "endMs": 2110,
      "status": "passed"
    },
    {
      "name": "Filter hotels by Kyoto",
      "startMs": 2110,
      "endMs": 2949,
      "status": "passed"
    },
    {
      "name": "Open hotel actions in a bottom sheet",
      "startMs": 3052,
      "endMs": 3727,
      "status": "passed"
    },
    {
      "name": "Dismiss the hotel sheet using Escape",
      "startMs": 3822,
      "endMs": 4568,
      "status": "passed"
    },
    {
      "name": "Switch to the Tickets tab",
      "startMs": 4568,
      "endMs": 5254,
      "status": "passed"
    },
    {
      "name": "Switch to the Profile tab",
      "startMs": 5327,
      "endMs": 6001,
      "status": "passed"
    }
  ],
  "assets": {
    "animation": {
      "file": "travel-app-interaction.webp",
      "format": "WEBP",
      "width": 390,
      "height": 844,
      "bytes": 282192,
      "sha256": "d3e7e4f833fe6681b883603d8ba38fa889b3ad3175e94035c93c03a63a19cbba",
      "frames": 42,
      "distinctFrames": 39,
      "durationMs": 6833,
      "loop": 0,
      "blankFrames": 0,
      "validation": "decoded_all_frames",
      "encoding": {
        "width": 390,
        "fps": 12,
        "quality": 78,
        "bytes": 282192
      },
      "encodingAttempts": [
        {
          "width": 390,
          "fps": 12,
          "quality": 78,
          "bytes": 282192
        }
      ],
      "budgetBytes": 2097152
    },
    "screenshots": [
      {
        "alt": "Travel app: Flutter mobile home, upcoming flights and hotel cards.",
        "png": {
          "file": "travel-home.png",
          "format": "PNG",
          "width": 780,
          "height": 1688,
          "bytes": 479974,
          "sha256": "2a7804ce95ddffa6f53b46b32d8cc4ff40662d2de0da1cea332b38d5e0d5f30e",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": null,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        },
        "webp": {
          "file": "travel-home.webp",
          "format": "WEBP",
          "width": 780,
          "height": 1688,
          "bytes": 109146,
          "sha256": "dae6e04bfd7cb61e880d958a403a976a75bc4faf3a71d5df1eb72c9ae75a59ae",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": 1,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        }
      },
      {
        "alt": "Travel app: hotel search filtered to Kyoto.",
        "png": {
          "file": "hotel-search.png",
          "format": "PNG",
          "width": 780,
          "height": 1688,
          "bytes": 102984,
          "sha256": "b7a94ca7009918f8f8aba559b0d47d2a9f539124a4174fdfa8faa79b0d257750",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": null,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        },
        "webp": {
          "file": "hotel-search.webp",
          "format": "WEBP",
          "width": 780,
          "height": 1688,
          "bytes": 30786,
          "sha256": "6679ead7687c0f49b0387b3f2f7fa96af021cfca0046cfa0d7a20312de91f3d8",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": 1,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        }
      },
      {
        "alt": "Travel app: hotel actions bottom sheet; no booking or payment submitted.",
        "png": {
          "file": "hotel-bottom-sheet.png",
          "format": "PNG",
          "width": 780,
          "height": 1688,
          "bytes": 116771,
          "sha256": "e21ae8e9389316b9454a1055e02f060b2e38f7c64b99f96259528650cc5531ed",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": null,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        },
        "webp": {
          "file": "hotel-bottom-sheet.webp",
          "format": "WEBP",
          "width": 780,
          "height": 1688,
          "bytes": 35656,
          "sha256": "ff96712c200efa9bd26370a5527a507d763ec6f56b8438924f6056ca1aa1452e",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": 1,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        }
      },
      {
        "alt": "Travel app: Flutter ticket view and mobile navigation.",
        "png": {
          "file": "tickets.png",
          "format": "PNG",
          "width": 780,
          "height": 1688,
          "bytes": 95620,
          "sha256": "56ab785aa8608a1a13dc16c2366a741f3978f8e477b4850f980a9c72c22a1d6e",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": null,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        },
        "webp": {
          "file": "tickets.webp",
          "format": "WEBP",
          "width": 780,
          "height": 1688,
          "bytes": 60692,
          "sha256": "5287326272187c379908e688ed126509ad48cb32b6d7dfdc672d8b365641b34d",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": 1,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        }
      },
      {
        "alt": "Travel app: traveler profile and account navigation using built-in demo data.",
        "png": {
          "file": "traveler-profile.png",
          "format": "PNG",
          "width": 780,
          "height": 1688,
          "bytes": 117507,
          "sha256": "26d6013955d9fb5f6a212aa0266c85eac3a1ce7aeddc6998cf09b3d78ed20fc0",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": null,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        },
        "webp": {
          "file": "traveler-profile.webp",
          "format": "WEBP",
          "width": 780,
          "height": 1688,
          "bytes": 34708,
          "sha256": "f4ab46ecb6ee00b4f81728c85a858f5f092426e90e9f68c6517e96110702fb99",
          "frames": 1,
          "distinctFrames": 1,
          "durationMs": 0,
          "loop": 1,
          "blankFrames": 0,
          "validation": "decoded_all_frames"
        }
      }
    ]
  },
  "limitations": [
    "Responsive Flutter web capture is not native Android/iOS/desktop verification.",
    "iOS Simulator requires macOS."
  ],
  "runtimeEvidence": {
    "pageErrors": [],
    "expectedOfflineConsoleErrors": [],
    "blockedRequestCount": 0,
    "fullDesktopCaptured": false
  },
  "verification": {
    "media": "All frames decoded; nonblank; changing animation; loop; dimensions; file-size budget; checksums.",
    "interaction": "Each configured step completed against the real running application.",
    "visualReview": "passed: all screenshots and representative animation frames inspected; no blank, cropping, font, or viewport defects observed"
  },
  "primaryFormat": "Animated WebP",
  "sourceRecordingRetained": false
}
