)]}'
{
  "commit": "e33caa2fec856eb8c9313e5103cc361890dfa492",
  "tree": "1ecd2fd743a4bee2dd86d087fb8e92cdee1d1270",
  "parents": [
    "b4bfa3e73ec68e8150701a148a185230bc2b7487"
  ],
  "author": {
    "name": "Matt Boetger",
    "email": "matt.boetger@gmail.com",
    "time": "Fri Jun 12 12:06:02 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jun 12 19:06:02 2026 +0000"
  },
  "message": "Correct backoff retry time cap unit and add regression tests (#187250)\n\nFix a critical unit mismatch bug in\n\"AndroidGradleBuilder._runGradleTask\" where\n\"kMaxRetryTime.inMicroseconds\" (10,000,000) was mistakenly used instead\nof \"inMilliseconds\" (10,000) to cap the exponential backoff delay\nduration (which is calculated in milliseconds).\nThis error allowed the backoff delay time to scale up uncapped to 2.77\nhours instead of properly capping it at 10 seconds, significantly\nhanging failed/unstable builds.\n\nAdded a robust unit test using \"FakeAsync\" to simulate 8 failing build\nretries instantaneously, verifying that wait times double correctly\n(100ms -\u003e 200ms -\u003e 400ms -\u003e 800ms -\u003e 1600ms -\u003e 3200ms -\u003e 6400ms) and cap\ncleanly at exactly 10000ms (10s) on the 8th retry.\n\nAdditionally, added a safeguard to cap the exponent in the pow\ncalculation at 7, preventing potential integer overflow on high retry\ncounts (when maxRetries is null).\n\nFixes: #83971\n\n## Pre-launch Checklist\n\n- [X] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [X] I read the [AI contribution guidelines] and understand my\nresponsibilities, or I am not using AI tools.\n- [X] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [X] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [X] I signed the [CLA].\n- [X] I listed at least one issue that this PR fixes in the description\nabove.\n- [X] I updated/added relevant documentation (doc comments with `///`).\n- [X] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [X] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [X] All existing and new tests are passing.\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a1fd8fe3ce594ffd057bf956bab1c1191c7ed525",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/android/gradle.dart",
      "new_id": "505825b1afa068b6e2d41763297d080fe483f6c9",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/android/gradle.dart"
    },
    {
      "type": "modify",
      "old_id": "f8d9fbf8f1ce49a93c238c235de53dc2d7bb01dd",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart",
      "new_id": "dc1452171615ef66c2872189860b9dec3c21f4f2",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart"
    }
  ]
}
