)]}'
{
  "commit": "afa7552a335d5c3a032cb3a445a3cacbd19d7202",
  "tree": "d65d8b8c830b356f62041ed411526b87bc6a86f5",
  "parents": [
    "dcae056e7efd9bb2f3206a3fb81efdc33cd66c00"
  ],
  "author": {
    "name": "Gray Mackall",
    "email": "34871572+gmackall@users.noreply.github.com",
    "time": "Wed Jun 03 15:27:51 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jun 03 22:27:51 2026 +0000"
  },
  "message": "Add a skill for flake analysis (#187530)\n\nExample output for issue\nhttps://github.com/flutter/flutter/issues/185070\n\n# Flake Analysis Report: `android_engine_vulkan_tests`\n\nThis report analyzes the failures of the `android_engine_vulkan_tests`\nshard in the `flutter/flutter` repository across 15 recent failed builds\nbetween Build 1658 and Build 2495.\n\n---\n\n## Executive Summary\n\nThe failures in the `android_engine_vulkan_tests` builder fall into\nthree distinct categories:\n1. **Primary Blocker (Skia Gold Image Mismatch)**: A\ndeterministic/semi-deterministic failure where 5 different integration\ntests all output the **exact same** image digest\n(`5ba6df7acef516f7dab78587cf30ce20`). This strongly points to a frame\nbuffer rendering or screenshot capture failure (e.g., capturing a\ncompletely blank, black, or transparent frame) on the Vulkan emulator.\n2. **Infrastructure / Emulator Issues (Transient Flakes)**: Classical\nADB/emulator connection issues, such as failing to uninstall/install the\napplication APK, or failure to initialize the native driver wrapper.\n3. **Timeout / Aborted Runs**: Builds that failed during the test\nexecution without printing any specific stdout failure details before\ntermination, indicating runner-level timeouts.\n\n---\n\n## Build Failure Summary Table\n\n| Build Number | Failure Category | Details / Primary Failure Symptom |\n|---|---|---|\n| **2495** | Skia Gold Mismatch | All 5 tests matched hash\n`5ba6df7acef516f7dab78587cf30ce20` |\n| **2392** | Timeout / Aborted | Shard failed without specific error\nlogs |\n| **2337** | Infrastructure | `Failed to uninstall app` (Process exited\nabnormally) |\n| **2317** | Infrastructure | `Failed to uninstall app` (Process exited\nabnormally) |\n| **2313** | Skia Gold Mismatch | All 5 tests matched hash\n`5ba6df7acef516f7dab78587cf30ce20` |\n| **2283** | Infrastructure | `Failed to uninstall app` (Process exited\nabnormally) |\n| **2280** | Infrastructure | `Failed to uninstall app` (Process exited\nabnormally) |\n| **2268** | Infrastructure | `Failed to uninstall app`, `nativeDriver\nhas not been initialized` |\n| **2198** | Infrastructure | `Failed to uninstall app`, `Failed to\nfulfill WaitFor due to remote error` |\n| **1965** | Skia Gold Mismatch | All 5 tests matched hash\n`5ba6df7acef516f7dab78587cf30ce20` |\n| **1857** | Timeout / Aborted | Shard failed without specific error\nlogs |\n| **1813** | Skia Gold Mismatch | All 5 tests matched hash\n`5ba6df7acef516f7dab78587cf30ce20` |\n| **1810** | Timeout / Aborted | Shard failed without specific error\nlogs |\n| **1691** | Skia Gold Mismatch | All 5 tests matched hash\n`5ba6df7acef516f7dab78587cf30ce20` |\n| **1658** | Skia Gold Mismatch | All 5 tests matched hash\n`5ba6df7acef516f7dab78587cf30ce20` |\n\n---\n\n## Detailed Findings\n\n### 1. Skia Gold Image Mismatch (Primary Blocker)\nIn builds **2495, 2313, 1965, 1813, 1691, and 1658**, the following 5\ntests failed because the screenshot captured during the test did not\nmatch any approved golden image:\n*\n`android_engine_test.vulkan.external_texture_surface_texture_smiley_face`\n*\n`android_engine_test.vulkan.external_texture_surface_producer_smiley_face`\n* `android_engine_test.vulkan.platform_view_tap_color_change_initial`\n* `android_engine_test.vulkan.fluttered_rendered_blue_rectangle`\n*\n`android_engine_test.vulkan.texture_layer_hybrid_composition_platform_view.blue_orange_gradient_portrait`\n\n\u003e [!IMPORTANT]\n\u003e **Identical Hash Anomaly:**\n\u003e For all 5 tests, the screenshot captured had the exact same hash:\n`5ba6df7acef516f7dab78587cf30ce20`.\n\u003e Since these tests render completely different UI components (e.g. a\nblue rectangle vs. a blue/orange gradient vs. a smiley face texture), it\nis mathematically impossible for them to produce the same valid image\ndigest. This indicates that the screenshot capture mechanism (or the\nemulator\u0027s Vulkan rendering context) returned a blank, black, or\ndefault-cleared buffer.\n\n### 2. Infrastructure / Emulator Issues (Transient Flakes)\nIn builds **2337, 2317, 2283, 2280, 2268, and 2198**, the tests failed\ndue to VM/emulator communication errors:\n* **ADB Failures:** Logs show `Failed to uninstall app` followed by\n`Process exited abnormally with exit code 1`.\n* **Driver Failures:** In build 2268, the runner output `Local\n\u0027nativeDriver\u0027 has not been initialized` and `Failed to fulfill\nNativeCommand due to remote error`.\n* **Wait Failures:** In build 2198, the runner output `Failed to fulfill\nWaitFor due to remote error`.\n\nThese are standard emulator health and connectivity flakes, where the\ntest runner loses connection to the emulator device during apk\ninstallation/uninstallation or command dispatch.\n\n---\n\n## Recommendations \u0026 Next Steps\n\n1. **Verify Vulkan Screenshot/Buffer Capture:**\nInvestigate if the screenshotting code in the Flutter Driver / engine\nVulkan integration tests is correctly capturing the Vulkan swapchain.\nThe identical hash suggests a blank/empty frame buffer is being\ncaptured.\n2. **Review/Triage on Flutter Gold:**\nCheck the [Flutter Gold console](https://flutter-gold.skia.org/) for\ndigest `5ba6df7acef516f7dab78587cf30ce20` to visually confirm if the\nimages are blank/black.\n3. **Emulator Stability Improvements:**\nTo address the secondary infrastructure failures, consider adding retry\nlogic for emulator ADB connection, or updating the Android emulator\nimage version used on the LUCI bots.\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f361d857233c9ed023bb90b0552125bba73d71ba",
      "new_mode": 33188,
      "new_path": ".agents/skills/analyze-github-flake/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "d464d7a5f41234464af8e799aec1b438bb6dbbe2",
      "old_mode": 33188,
      "old_path": "CODEOWNERS",
      "new_id": "fdbb5c3bff008eeb312cc0c1092806a05b5c6c99",
      "new_mode": 33188,
      "new_path": "CODEOWNERS"
    }
  ]
}
