)]}'
{
  "log": [
    {
      "commit": "a2810c0ff080a88711d55ff0ae7bd4a8b38cfead",
      "tree": "24688940b06a69461db11406cc08afe5c5763058",
      "parents": [
        "f6c140c9d533a2b6767eb2b692f6af8d2b0787c4"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Tue Sep 22 05:27:33 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 05:27:33 2026 +0000"
      },
      "message": "Roll Dart SDK from 4c572fafd056 to 907d0c1bcd40 (4 revisions) (#193141)\n\nhttps://dart.googlesource.com/sdk.git/+log/4c572fafd056..907d0c1bcd40\n\n2026-09-22 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-252.0.dev\n2026-09-21 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-251.0.dev\n2026-09-21 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-250.0.dev\n2026-09-21 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-249.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "f6c140c9d533a2b6767eb2b692f6af8d2b0787c4",
      "tree": "8eaab5b5e7dd377537bfcde156d5900061f26591",
      "parents": [
        "a3ca57056ced96664bbdb2b6360d2be76c12196a"
      ],
      "author": {
        "name": "flutter-pub-roller-bot",
        "email": "137456488+flutter-pub-roller-bot@users.noreply.github.com",
        "time": "Tue Sep 22 01:46:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 01:46:25 2026 +0000"
      },
      "message": "Roll pub packages (#193138)\n\nThis PR was generated by `flutter update-packages --force-upgrade`."
    },
    {
      "commit": "a3ca57056ced96664bbdb2b6360d2be76c12196a",
      "tree": "5969e969ef3f065b1cdc117336e1cdee4fc8746b",
      "parents": [
        "860ac7c6182e9dedd7d547a15592b2e9b0b94769"
      ],
      "author": {
        "name": "flutter-pub-roller-bot",
        "email": "137456488+flutter-pub-roller-bot@users.noreply.github.com",
        "time": "Mon Sep 21 23:16:11 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 23:16:11 2026 +0000"
      },
      "message": "Roll pub packages (#193129)\n\nThis PR was generated by `flutter update-packages --force-upgrade`."
    },
    {
      "commit": "860ac7c6182e9dedd7d547a15592b2e9b0b94769",
      "tree": "f95e2bfa0953f2c097e100c276967a7ae1527100",
      "parents": [
        "b993ec80748370fa5820519693f8c4e3a3d263c3"
      ],
      "author": {
        "name": "Robert Ancell",
        "email": "robert.ancell@canonical.com",
        "time": "Mon Sep 21 22:30:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 22:30:04 2026 +0000"
      },
      "message": "[Linux] Request a frame when a view starts rendering (#192911)\n\nFrames rendered before a view is realized are dropped, as there is\nnothing to present them to. The view is then left empty until something\nelse makes Flutter render, which happens to be the window metrics sent\nwhen the view is first given a size.\n\nAdd fl_engine_schedule_frame and ask the engine for a frame instead of\nrelying on that."
    },
    {
      "commit": "b993ec80748370fa5820519693f8c4e3a3d263c3",
      "tree": "b93258dc5c130800e270e796487a96637cdff44d",
      "parents": [
        "9cb45e8af7ac97de9182d96d9c9259cdeb9bf5ac"
      ],
      "author": {
        "name": "Nate Wilson",
        "email": "nate.w5687@gmail.com",
        "time": "Mon Sep 21 22:22:09 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 22:22:09 2026 +0000"
      },
      "message": "Update `MediaQuery` documentation (#183702)\n\nThis PR covers a couple of things:\n- The [style\nguide](https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md#use-the-passive-voice-recommend-do-not-require-never-say-things-are-simple)\u0027s\nadvice to never use \"you\" or \"we\".\n- A while back, the framework was tweaked so that\n[`runApp()`](https://main-api.flutter.dev/flutter/widgets/runApp.html)\ncreates and updates the MediaQuery instead of MaterialApp or WidgetsApp.\nThe [MediaQuery\ndocs](https://main-api.flutter.dev/flutter/widgets/MediaQuery-class.html)\nhave yet to be updated with this information.\n\nThis PR is related to #183701, but I haven\u0027t added any recommendations\nregarding whether or not `.maybeOf` methods should be used; I\u0027ll plan on\ndoing that if/when we decide to move forward with deprecating those\nmethods."
    },
    {
      "commit": "9cb45e8af7ac97de9182d96d9c9259cdeb9bf5ac",
      "tree": "b4093b26e0fe02f58713e02aed455a82671fff67",
      "parents": [
        "651a69ebd6a9daa0ecc43be02eb89fd09346a308"
      ],
      "author": {
        "name": "John \"codefu\" McDole",
        "email": "codefu@google.com",
        "time": "Mon Sep 21 22:15:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 22:15:16 2026 +0000"
      },
      "message": "Add `xvfb: \"1\"` to Linux flavors test (#193122)\n\n[Staging\ntest](https://ci.chromium.org/ui/p/flutter/builders/staging.shadow/Linux%20flavors_test_linux/1/overview)\npasses:\n\n```\nled get-builder \u0027luci.flutter.staging:Linux flavors_test_linux\u0027 | led edit -pa git_ref\u003d\u0027refs/pull/193122/head\u0027 | led edit -pa git_url\u003d\u0027https://github.com/flutter/flutter\u0027 | led edit -p xvfb\u003d\u0027\"1\"\u0027 | led launch\n```\n\nfixes #192651"
    },
    {
      "commit": "651a69ebd6a9daa0ecc43be02eb89fd09346a308",
      "tree": "5b209d3fa26439e04a166f4dbc0d4b192893dedd",
      "parents": [
        "feafe4149fdfae399369c10f071602c34100418e"
      ],
      "author": {
        "name": "holzgeist",
        "email": "holzgeist@users.noreply.github.com",
        "time": "Mon Sep 21 21:43:34 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 21:43:34 2026 +0000"
      },
      "message": "chore: correct copy paste error in test name (#191342)\n\n\u003c!--\nThanks for filing a pull request!\nReviewers are typically assigned within a week of filing a request.\nTo learn more about code review, see our documentation on Tree Hygiene:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n--\u003e\n\nFollowup to #184961, Gemini found a copy paste when filing the CP PR\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- [ ] I listed at least one issue that this PR fixes in the description\nabove.\n- [ ] 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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\nCo-authored-by: zhongliugo \u003czhongliu88889@gmail.com\u003e"
    },
    {
      "commit": "feafe4149fdfae399369c10f071602c34100418e",
      "tree": "1c2794a8397f4c93272b5d1553f33ca4801047b0",
      "parents": [
        "619aec9c382c58cf77e43ddc4bc8f3cd025b9a8c"
      ],
      "author": {
        "name": "Digvijaysinh Chauhan",
        "email": "150371713+dhc-tech@users.noreply.github.com",
        "time": "Mon Sep 21 21:43:34 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 21:43:34 2026 +0000"
      },
      "message": "Exclude local Swift package schemes from --flavor error message (#191098)\n\n\u003c!--\nThanks for filing a pull request!\nReviewers are typically assigned within a week of filing a request.\nTo learn more about code review, see our documentation on Tree Hygiene:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n--\u003e\n\nWhen a developer mistypes a `--flavor` (e.g. `flutter build ios --flavor\nPrdo`), Flutter reports the available schemes so they can pick a valid\none:\n\n```\nThe Xcode project defines schemes: Runner, Amplitude-Swift, Foo-Dependency...\nYou must specify a --flavor option to select one of the available schemes.\n```\n\n`XcodeProjectInfo` already filters two kinds of non-flavor schemes out\nof this list: Flutter\u0027s own generated SwiftPM packages, and *remote*\nSwift package checkouts (packages fetched by SwiftPM into the build\ndirectory\u0027s `checkouts` folder). Xcode auto-merges each of those\npackages\u0027 own `.xcscheme` files into the host project\u0027s scheme list,\neven though they aren\u0027t declared in the host `.xcodeproj` and aren\u0027t\nreal Flutter flavors.\n\nWhat wasn\u0027t handled: **local** Swift packages — ones added directly to\nthe Xcode project (an `XCLocalSwiftPackageReference` in\n`project.pbxproj`, e.g. living inside `ios/`) rather than fetched as a\nremote dependency. Those never appear under the `checkouts` directory,\nso their auto-merged schemes leaked straight through into\n`definesCustomSchemes`/`schemes`, and ended up quoted in the error\nmessage as if they were valid `--flavor` values.\n\nThis PR parses `XCLocalSwiftPackageReference` entries out of\n`project.pbxproj`, resolves each entry\u0027s `relativePath` against the host\napp root, and — for any local package that ships its own\n`.swiftpm/xcode/xcshareddata/xcschemes/` directory — adds those scheme\nnames to the same ignore set used for remote checkouts. The\nscheme-directory scan itself was already duplicated between the (new)\nlocal-package path and the existing remote-checkout path, so it\u0027s\nfactored into one small shared helper.\n\nFixes #190098\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "619aec9c382c58cf77e43ddc4bc8f3cd025b9a8c",
      "tree": "18a1b7a94d657668b9cea4963bedb85e1a599091",
      "parents": [
        "d306b57af3643bbea15c9c99af044ac40a825cb7"
      ],
      "author": {
        "name": "flutteractionsbot",
        "email": "154381524+flutteractionsbot@users.noreply.github.com",
        "time": "Mon Sep 21 20:37:20 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 20:37:20 2026 +0000"
      },
      "message": "Sync CHANGELOG.md from stable (#190685)\n\nThis PR automates the synchronization of `CHANGELOG.md` from the\n`stable` branch to the `master` branch.\n\nCo-authored-by: Camille Simon \u003c43054281+camsim99@users.noreply.github.com\u003e"
    },
    {
      "commit": "d306b57af3643bbea15c9c99af044ac40a825cb7",
      "tree": "9a3a16b9d92168e9af9ca29c29af165f1363175c",
      "parents": [
        "a9f72701dffffd9cd925a874de1c3ef3807a20c7"
      ],
      "author": {
        "name": "jesswrd",
        "email": "jesswon@google.com",
        "time": "Mon Sep 21 19:36:27 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 19:36:27 2026 +0000"
      },
      "message": "[Reland] Update remaining tests to AGP 9 (#192142)\n\nUpdate add-to-app scenarios to agp 9. Post submit tests failed because\n`android.newDsl\u003dfalse` was not added to test app `multiple_flutters` and\nI removed the compose plugin `org.jetbrains.kotlin.plugin.compose` when\nit was [required when using\ncompose](https://kotlinlang.org/docs/compose-compiler-migration-guide.html).\n\nReland of https://github.com/flutter/flutter/pull/191824\n\nReverted due to some failing postsubmits\nhttps://github.com/flutter/flutter/pull/191863\n\nran prev failing post submit test targets against this PR.\n\n| Post Submit Test Target | led builder | status |\n| -------- | -------- | -------- |\n| Mac `build_android_host_app_with_module_source` |\nhttps://ci.chromium.org/b/8671813941670356097 | ✅ |\n| Linux `build_android_host_app_with_module_source` |\nhttps://ci.chromium.org/b/8671813865826871697 | ✅ |\n| Windows `build_android_host_app_with_module_source` |\nhttps://ci.chromium.org/b/8671813858522257073 | ✅ |\n| Linux_mokey `flutter_engine_group_performance` |\nhttps://ci.chromium.org/b/8671813854112518177 | ✅ |\n\nFixes https://github.com/flutter/flutter/issues/189386\n\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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- [ ] All existing and new tests are passing.\n\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "a9f72701dffffd9cd925a874de1c3ef3807a20c7",
      "tree": "ffaf7e52df77d97f083a25612ac9d39bee92335f",
      "parents": [
        "c251c1765f77276af0a7be4f3ffdc54ab1b231b4"
      ],
      "author": {
        "name": "zhongliugo",
        "email": "zhongliu88889@gmail.com",
        "time": "Mon Sep 21 19:04:49 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 19:04:49 2026 +0000"
      },
      "message": "[web] Scope the mobile semantics placeholder to its view (#190856)\n\nFixes #152838\n\n**Problem**\n\nFlutter Web puts an invisible \"Enable accessibility\" button on the page\nfor screen reader users. On mobile it covered the whole page instead of\njust the Flutter app, swallowing taps meant for the surrounding HTML\nuntil about 20 taps made the engine remove it.\n\nDesktop was never affected: its button is one pixel and sits offscreen.\n\n**Fix**\n\nThe button now lives inside `\u003cflutter-view\u003e` rather than `\u003cbody\u003e`, one\nper view, so it can only cover the Flutter app. The CSS is unchanged,\nonly the parent element, and it goes in as the first child so platform\nviews keep their own events.\n\n**Demo**\n\nBefore: https://flutter-demo-59-before.web.app\nAfter: https://flutter-demo-59-after.web.app\n\nOpen either on a phone and tap the HTML links before touching the\nFlutter app.\n\n- Before: nothing responds. The links do not highlight and the log stays\nat \"no HTML link clicked yet\". They come alive only after tapping the\nFlutter app about 20 times.\n- After: the links respond on the first tap.\n\nDesktop browsers cannot show the difference, since they use the 1x1\nplaceholder on both builds."
    },
    {
      "commit": "c251c1765f77276af0a7be4f3ffdc54ab1b231b4",
      "tree": "162cbe050132c24bdfb430dade07f3d04062c1d2",
      "parents": [
        "415175cd885d63850a35708b2ed57255c5b19b40"
      ],
      "author": {
        "name": "artemkulyk",
        "email": "88086187+artemkulyk@users.noreply.github.com",
        "time": "Mon Sep 21 19:00:47 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 19:00:47 2026 +0000"
      },
      "message": "[Impeller] Fix the text benchmark on Impeller backends (#192677)\n\nThe DrawTextBlob benchmark always built a DlTextSkia, whose text frame\nis null on Impeller backends. The dispatcher FML_CHECKs that frame and\naborts.\n\nThis is a local macOS/iOS benchmark crash. The text benchmark is\ncompiled into display_list_benchmarks via DISPLAY_LIST_BENCHMARK_ALL_OPS\n(primitive_rendering_benchmarks omits text benchmarks); the Impeller\nMetal variants are built only when ENABLE_METAL_BENCHMARKS is set. Linux\nCI does not run those backends.\n\nBuild a DlTextImpeller when the surface provider targets Impeller. The\nbackend check is outside the timed loop.\n\nFixes #192671\n\ntest-exempt: benchmark-only crash fix\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\nMade with [Cursor](https://cursor.com)"
    },
    {
      "commit": "415175cd885d63850a35708b2ed57255c5b19b40",
      "tree": "859482dd370a53449d8ba85063c8ce8c5d253b98",
      "parents": [
        "e7224dfb410f9647e4d45288b0f3286e56b8d33f"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Mon Sep 21 18:31:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 18:31:18 2026 +0000"
      },
      "message": "[flutter_analyzer_plugin] Migrate unit tests off package:test_reflective_loader (#193017)\n\nRemoves the `test_reflective_loader` dev_dependency (and its transitive\n`dart:mirrors` dependency) from `dev/flutter_analyzer_plugin`, migrating\nall 18 test files to standard `package:test` `test(\u0027...\u0027, () async { ...\n})` blocks.\n\n### Motivation\n* `package:test_reflective_loader` relies on `dart:mirrors` to discover\n`@reflectiveTest` classes and invoke `test_*()` methods at runtime.\n* `package:analyzer_testing` (`AnalysisRuleTest` -\u003e\n`PubPackageResolutionTest` -\u003e `AbstractContextTest`) has **zero**\nruntime dependency on `test_reflective_loader`—it only provides\n`setUp()` and `tearDown()` lifecycle hooks.\n* Replacing `defineReflectiveTests(...)` and class-level `test_*()`\nmethods with standard `setUp` / `tearDown` + `test(\u0027...\u0027, () async { ...\n})` closures in `main()`:\n* Eliminates `test_reflective_loader` (and `dart:mirrors`) from\n`flutter/flutter`\u0027s dependency tree (`pubspec.lock` /\n`package_config.json`), unblocking Dart 4 `dart:mirrors` removal.\n* Eliminates all `// ignore: unreachable_from_main,\nnon_constant_identifier_names` lint suppressions across the test suite.\n  * Keeps a **0 net line delta** (`+524 / -524` lines across 21 files).\n* Allows running `dev/flutter_analyzer_plugin` tests directly via\n`flutter test dev/flutter_analyzer_plugin` (previously blocked because\n`flutter test` disables `dart:mirrors`).\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 [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- [ ] 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."
    },
    {
      "commit": "e7224dfb410f9647e4d45288b0f3286e56b8d33f",
      "tree": "91497de1ebbcc07080b4611199527b4abdacdf8b",
      "parents": [
        "aae258a564233b5b3eda8d63e13566e177b7b2f2"
      ],
      "author": {
        "name": "gaaclarke",
        "email": "30870216+gaaclarke@users.noreply.github.com",
        "time": "Mon Sep 21 17:42:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 17:42:08 2026 +0000"
      },
      "message": "[android]: removes RegisterExternalTexture race condition (#192951)\n\nfixes https://github.com/flutter/flutter/issues/192776\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "aae258a564233b5b3eda8d63e13566e177b7b2f2",
      "tree": "46e4f9b6b17c8efd3dd419a3b41bb0e49afa922a",
      "parents": [
        "332efcdada018d60b82f11c72c48ec2702e618e9"
      ],
      "author": {
        "name": "smocer",
        "email": "smoceone@yandex.ru",
        "time": "Mon Sep 21 17:31:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 17:31:07 2026 +0000"
      },
      "message": "[iOS] Rebind accessibility bridge after view controller changes (#187167)\n\nKeep the existing `AccessibilityBridge` when `PlatformViewIOS` detaches\nfrom an owner `FlutterViewController`, and rebind it when a\ncontroller/view is attached again.\n\nIn add-to-app integrations that reuse a `FlutterEngine`, the engine can\ndetach from one `FlutterViewController` and later attach to another one.\nWhen semantics are already enabled, clearing the bridge during detach\ndrops the UIKit accessibility representation of the current semantics\ntree. The Flutter UI continues to render, but VoiceOver / Accessibility\nInspector can no longer see Flutter fields and buttons after\nreattachment.\n\nThis change preserves the bridge across owner-controller\ndetach/reattach, skips semantics updates while no owner controller is\nattached, and rebinds the bridge to the new owner controller/view before\nsemantics updates resume.\n\nFixes https://github.com/flutter/flutter/issues/186582\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[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\n---------\n\nCo-authored-by: Yegor Butyrin \u003c26483921+smocer@users.noreply.github.com\u003e\nCo-authored-by: LongCatIsLooong \u003c31859944+LongCatIsLooong@users.noreply.github.com\u003e\nCo-authored-by: Chris Bracken \u003cchris@bracken.jp\u003e"
    },
    {
      "commit": "332efcdada018d60b82f11c72c48ec2702e618e9",
      "tree": "def92d459f24178f52b2b3ff58632727632ff4d2",
      "parents": [
        "67470e1546ccc7341e105449af195314d3b3e480"
      ],
      "author": {
        "name": "Nicholas Shahan",
        "email": "nshahan@google.com",
        "time": "Mon Sep 21 17:00:56 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 17:00:56 2026 +0000"
      },
      "message": "Remove webDevFS tests for the AMD module system (#193028)\n\nAMD modules are no longer supported by flutter tools, DDC library\nbundles are now the only supported option.\n\nThe Github UI is not showing this diff well. Locally in VSCode it is\neasier to see only the changes and ignore the whitespace diffs.\n\ndevfs_web_test.dart and devfs_web_ddc_modules.dart were initially copies\nof each other to cover all the same test cases with the two module\nformats. Over time they drifted apart.\n\nThis change was created by:\n1) Copying the contents of dev_web_ddc_modules_test.dart into\n   devfs_web_test.dart.\n2) Reverting the diffs that deleted test cases.\n3) Applying similar style changes and refactors that had previously been\nonly applied in devfs_web_ddc_modules_test.dart in the reverted diff\nsections.\n4) Migrating the reverted diff sections use to DDC library bundles.\n5) Deleting dev_web_ddc_modules_test.dart.\n\nThis ensures the remaining file contains the combination of all test\ncases that appeared in the diverging files.\n\nIssue: https://github.com/flutter/flutter/issues/142060\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 in-code documentation (doc comments with\n`///`).\n- [X] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "67470e1546ccc7341e105449af195314d3b3e480",
      "tree": "42f062d9f6db85d795d8151a100854129496b69c",
      "parents": [
        "638aae2d758db20d2b9dfa6a153b3f476f9ba336"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Mon Sep 21 16:54:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 16:54:18 2026 +0000"
      },
      "message": "Dispose OverlayEntry in WidgetsApp.router semantics tree structure test (#192995)\n\nIn #192601, the `\u0027WidgetsApp.router produces expected semantics tree\nstructure\u0027` test added in `packages/flutter/test/widgets/app_test.dart`\nregistered `addTearDown(entry.remove)` for its `OverlayEntry` without\ncalling `entry.dispose()`.\n\nBecause `OverlayEntry` allocates an internal\n`ValueNotifier\u003c_OverlayEntryWidgetState?\u003e` that is only disposed in\n`OverlayEntry.dispose()`, `Windows\nframework_tests_widgets_leak_tracking` failed in `tearDownAll` with 2\nundisposed objects (`OverlayEntry` and\n`ValueNotifier\u003c_OverlayEntryWidgetState?\u003e`).\n\nThis change updates the tear-down callback to call both `entry.remove()`\nand `entry.dispose()`, matching\n`packages/flutter/test/widgets/overlay_test.dart`.\n\nFixes https://github.com/flutter/flutter/issues/192993\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "638aae2d758db20d2b9dfa6a153b3f476f9ba336",
      "tree": "be07107aacbacf3d927a9b0c5218de9915516b09",
      "parents": [
        "985e18468472d10587c45e99420bf00395badf00"
      ],
      "author": {
        "name": "Kate Lovett",
        "email": "katelovett@google.com",
        "time": "Mon Sep 21 16:29:22 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 16:29:22 2026 +0000"
      },
      "message": "Migrate remaining `flutter_tools` templates \u0026 `widget_preview_scaffold` to `[material|cupertino]_ui` (#193099)\n\nFollow-up to #192947 in preparation for deprecating\n`package:flutter/material.dart` and `package:flutter/cupertino.dart`\nPart of un-blocking #192957\n\nThis PR migrates the remaining `flutter_tools` templates and test\nfixtures that run `flutter analyze` so they do not trigger\n`deprecated_member_use` diagnostics when the design libraries in\n`package:flutter` are deprecated:\n\n1. **module template**:\n- Migrates `lib/main.dart.tmpl` and `test/widget_test.dart.tmpl` to\n`material_ui`.\n2. **widget_preview_scaffold**:\n- Migrates the `widget_preview_scaffold` template files, hydrated\nscaffold sources, and tests to `material_ui` and `cupertino_ui`.\n3. **analyze_once_test.dart **:\n- Migrates the synthetic `mainDartSrc` fixture from\n`package:flutter/material.dart` to `package:flutter/widgets.dart`\n(`WidgetsApp`), since `createDotPackages()` constructs a minimal\n`.dart_tool/package_config.json` containing only `flutter` and\n`sky_engine`.\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "985e18468472d10587c45e99420bf00395badf00",
      "tree": "4f23239df5f461c0b28a7ec78efb222457691377",
      "parents": [
        "124f1de69f437a2eaafb3929edb994bc8dd45bb3"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Mon Sep 21 16:18:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 16:18:07 2026 +0000"
      },
      "message": "feat(web): emit precache_manifest.json when --web-content-hash is enabled (#192953)\n\n## Description\n\nImplements **Phase 3** of Flutter Web Content Hashing (#191916):\n\n- **Emit `build/web/precache_manifest.json` when `--web-content-hash` is\nenabled**:\n- Generated inside `WebServiceWorker.build`\n(`packages/flutter_tools/lib/src/web/content_hash.dart`) after\n`hashWebAssets` rewrites hashed assets.\n- Emits `{ \"version\": 1, \"entries\": [...] }` sorted lexicographically by\n`\"url\"` for deterministic output.\n  - Each entry includes:\n    - `\"url\"`: POSIX path relative to `build/web/`\n- `\"hash\"`: 8-character lowercase hex SHA-256 prefix of the file\u0027s bytes\n    - `\"size\"`: File byte length (`int`)\n- `\"urlHashed\"`: `bool` (`true` if the filename already contains\n`.$hash.` or ends with `.$hash` so custom service workers/PWAs can skip\nredundant `?v\u003d\u003chash\u003e` cache-busting query parameters; `false` for\nfixed-URL files such as `index.html`, `flutter_bootstrap.js`,\n`assets/AssetManifest.bin`, `assets/FontManifest.json`,\n`assets/NOTICES`, and `version.json`).\n- **Non-Runtime Bloat Exclusion**:\n- Excludes source maps (`*.map`), symbols (`*.symbols`), compiler info\n(`*.info.json`), dotfiles (`.` prefix), `flutter_service_worker.js`,\n`precache_manifest.json` itself, and `canvaskit/**` (unless\n`kUseLocalCanvasKitFlag \u003d\u003d \u0027true\u0027` / `--no-web-resources-cdn`).\n- **Stale Manifest Cleanup \u0026 Depfile Safety**:\n- Deletes any stale `precache_manifest.json` in `build/web/` when\n`--web-content-hash` is `false`.\n- Excludes `precache_manifest.json` from `WebServiceWorker` input\ndiscovery while registering it as a `Depfile` output to prevent\ninput/output cycles in `service_worker.d`.\n- **Preserve `hide: true` on `--web-content-hash`**:\n- Keeps `hide: true` on `WebOptions.webContentHash` while runtime\nraw-key asset resolution (`rootBundle.load`,\n`ui_web.AssetManager.getAssetUrl`) is completed in companion tasks, and\nupdates the `--help` description to clarify that\n`assets/AssetManifest.bin.json` and `assets/FontManifest.json` must be\nserved with revalidation while they remain unhashed.\n\n\u003e [!NOTE]\n\u003e On `master`, passing the hidden `--web-content-hash` flag currently\ncauses raw-key asset loads (`rootBundle.load(...)`, `vector_graphics`,\nDOM media plugins) to 404 on cold cache because physical files are\ncontent-hashed on disk but runtime resolution has not yet landed. Phase\n2.5 will add runtime key-to-hashed asset resolution in the web engine\n(`ui_web.AssetManager`) before `--web-content-hash` is un-hidden for\ngeneral use.\n\n## Related Issues\n\n- Fixes #191916\n- Part of #149031\n\n## Tests\n\n- Added 3 unit tests in\n`packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart`\nverifying `precache_manifest.json` schema/sorting/filtering,\n`kUseLocalCanvasKitFlag \u003d\u003d \u0027true\u0027` inclusion of `canvaskit/`, and stale\nmanifest deletion when `webContentHash: false`."
    },
    {
      "commit": "124f1de69f437a2eaafb3929edb994bc8dd45bb3",
      "tree": "a819cf53a83fb93567703b7b938794a57e0888ce",
      "parents": [
        "e9c242ee7e6d138ca89c4ca309b0c0fbeda8db79"
      ],
      "author": {
        "name": "stuartmorgan-g",
        "email": "stuartmorgan@google.com",
        "time": "Mon Sep 21 15:55:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 15:55:08 2026 +0000"
      },
      "message": "Update Android plugin language guidance (#192906)\n\nChange the policy for flutter/packages to prefer Kotlin rather than Java\nfor new code, per [RFC\n720.0001](https://github.com/flutter/rfc/blob/main/rfc/720.0001-kotlin-in-1p-plugins.md)\n\nPart of https://github.com/flutter/flutter/issues/188630"
    },
    {
      "commit": "e9c242ee7e6d138ca89c4ca309b0c0fbeda8db79",
      "tree": "fe508f3809e67dc5645780b793d69b9b92d8542d",
      "parents": [
        "19946f91c8d9de18a4674460d015229cc0b2534f"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Mon Sep 21 15:29:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 15:29:16 2026 +0000"
      },
      "message": "[tool] Migrate BuildAarCommand to modular dependency injection (#192247)\n\n## Summary\n\nPart 14c of the modular dependency injection migration.\n\nMigrates `BuildAarCommand` (`flutter build aar`) to modular dependency\ninjection with `ToolContext` and `AndroidContext`, removing direct\ndependencies on `globals.dart`.\n\nStacked on https://github.com/flutter/flutter/pull/192246\nCompare:\nhttps://github.com/bkonyi/flutter/compare/master...di/14c-build-aar\n\nPart of https://github.com/flutter/flutter/issues/47161\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "19946f91c8d9de18a4674460d015229cc0b2534f",
      "tree": "eefad46956c34d004b9f7fedc042ceeb6ea35943",
      "parents": [
        "62945793a3c790f788a8397873d8f27c6a9d2b34"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Sun Sep 20 10:16:38 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 20 10:16:38 2026 +0000"
      },
      "message": "Roll Fuchsia Linux SDK from ulsVReRE3w-SDIZE8... to uoIfEEWvgUEIbiXH_... (#193067)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/fuchsia-linux-sdk-flutter\nPlease CC codefu@google.com,zra@google.com on the revert to ensure that\na human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "62945793a3c790f788a8397873d8f27c6a9d2b34",
      "tree": "1c5eedd321558f31cad0e41c07917d2ab541ee0a",
      "parents": [
        "d9e52d8afdeb821c876b17ac060b65383eccce95"
      ],
      "author": {
        "name": "LongCatIsLooong",
        "email": "31859944+LongCatIsLooong@users.noreply.github.com",
        "time": "Sat Sep 19 22:26:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 22:26:31 2026 +0000"
      },
      "message": "Prefer `late` over null-initialized debug fields and enable the lint rule (#192438)\n\n- ~enables `no_runtimetype_in_tostring` and~\n`null_initialized_debug_expensive_fields` in `packages/flutter/lib`\n- updates `null_initialized_debug_expensive_fields` and the framework\ncode to use `late final` instead of conditionally (based on\n`kDebugMode`) initializing debug only fields.\n\n`late final` should achieve the same thing as null initializing\n(eliminating the initialization code). I used gemini-created toy dart\nprograms to verify the initialization code is stripped with late final.\nThere are some redundant fields left in the binary, according to gemini:\n\n\u003e When HashSet is not used anywhere else in the program, the +22/+23\nbyte DispatchTable diff (and +12 byte Instructions diff) is not caused\nby the late getter selector—it is caused by 7 empty HashSet class\nhierarchy shells from dart:collection remaining in the VM class table,\nwhich shifts the Object selector rows (\u003d\u003d, hashCode, toString) in the\ndispatch table by +7 CID slots.\n\nBecause the minimal test program is only referencing the `HashSet`\nconstructor in a late final initializer. But that shouldn\u0027t be a problem\nfor the framework since we use `HashSet` in production code too (and\nother expensive-to-construct types). Updating the toy program to\nintroduce a non-debug field eliminated the size difference.\n\n### TODO \n- This rule no longer guarantees that the initialization only happens in\ndebug mode. I\u0027ll add another rule to make sure members with a `debug`\n(or `_debug`) prefix can\u0027t be accessed outside of asserts,\n- Maybe remove the annotation and rely on the name of the field (whether\nit starts with `debug` or `_debug`)"
    },
    {
      "commit": "d9e52d8afdeb821c876b17ac060b65383eccce95",
      "tree": "0bbf49eb9a2329b6e97e0d4813faf47ea75d9898",
      "parents": [
        "cabe70666c93bd545e76bcbe5a2092e570ea018b"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Sat Sep 19 17:17:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 17:17:23 2026 +0000"
      },
      "message": "Roll Dart SDK from 195df22b93cc to 4c572fafd056 (1 revision) (#193052)\n\nhttps://dart.googlesource.com/sdk.git/+log/195df22b93cc..4c572fafd056\n\n2026-09-19 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-248.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "cabe70666c93bd545e76bcbe5a2092e570ea018b",
      "tree": "2e117a4b00cbff8198b3ed2344c8a79500a0f2cd",
      "parents": [
        "5e6db1aaad7b9a41e89d8d150472a0fd01eaa598"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Sat Sep 19 08:58:11 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 08:58:11 2026 +0000"
      },
      "message": "Roll Dart SDK from 0c5772ec6092 to 195df22b93cc (1 revision) (#193044)\n\nhttps://dart.googlesource.com/sdk.git/+log/0c5772ec6092..195df22b93cc\n\n2026-09-19 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-247.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "5e6db1aaad7b9a41e89d8d150472a0fd01eaa598",
      "tree": "c68e59c7e8bd9f28714a04e71a4606d55abd5add",
      "parents": [
        "b7f8dc1c97c49637c30e84f7d653a268ad1cbee2"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Sat Sep 19 06:10:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 06:10:25 2026 +0000"
      },
      "message": "Roll Fuchsia Linux SDK from zGeeR7JORNm-Un1vf... to ulsVReRE3w-SDIZE8... (#193043)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/fuchsia-linux-sdk-flutter\nPlease CC codefu@google.com,zra@google.com on the revert to ensure that\na human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "b7f8dc1c97c49637c30e84f7d653a268ad1cbee2",
      "tree": "dba9199fb7a40e178717c0fc953e0d55a12e68b8",
      "parents": [
        "e6d81bbfddfc458f663c09db3e95631ae6944e14"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Sat Sep 19 04:10:19 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 04:10:19 2026 +0000"
      },
      "message": "Roll Dart SDK from ac766ab0aab8 to 0c5772ec6092 (2 revisions) (#193039)\n\nhttps://dart.googlesource.com/sdk.git/+log/ac766ab0aab8..0c5772ec6092\n\n2026-09-19 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-246.0.dev\n2026-09-18 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-245.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "e6d81bbfddfc458f663c09db3e95631ae6944e14",
      "tree": "2d8999b05066390e154dacb0ac6f4ad358bcdc52",
      "parents": [
        "8b2d89c23fd4d935f88792430835f2b15f083010"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Fri Sep 18 23:23:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 23:23:04 2026 +0000"
      },
      "message": "Roll Dart SDK from e2fcf6d538c8 to ac766ab0aab8 (3 revisions) (#193022)\n\nhttps://dart.googlesource.com/sdk.git/+log/e2fcf6d538c8..ac766ab0aab8\n\n2026-09-18 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-244.0.dev\n2026-09-18 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-243.0.dev\n2026-09-18 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-242.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "8b2d89c23fd4d935f88792430835f2b15f083010",
      "tree": "8bc355e674c6ff8cf576de7978c7ce6f97e6083c",
      "parents": [
        "e92c0843e46e80b1671b380f89250e824c5476a6"
      ],
      "author": {
        "name": "LongCatIsLooong",
        "email": "31859944+LongCatIsLooong@users.noreply.github.com",
        "time": "Fri Sep 18 22:39:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 22:39:17 2026 +0000"
      },
      "message": "Remove `ios_debug_unopt_sim` builder from `Mac mac_unopt` (#192960)\n\nfixes https://github.com/flutter/flutter/issues/192753"
    },
    {
      "commit": "e92c0843e46e80b1671b380f89250e824c5476a6",
      "tree": "0a41e264db01b6f9527f783ae68abfcc9df9e7c3",
      "parents": [
        "a6728d79a68d7a7a682cd85c935a67e21d15af07"
      ],
      "author": {
        "name": "Matej Knopp",
        "email": "matej.knopp@gmail.com",
        "time": "Fri Sep 18 20:20:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 20:20:18 2026 +0000"
      },
      "message": "[win32] Remove allocation from GetWindowPositionCallback (#192990)\n\nRight now the output rectangle in `GetWindowPositionCallback` is\nallocated on Dart side through `CoTaskMemAlloc` and deallocated in\nnative through `free`, which is wrong. This PR removes the allocation\ncompletely making the caller (native side) provide target rect pointer\nwhere the Dart side fills values.\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "a6728d79a68d7a7a682cd85c935a67e21d15af07",
      "tree": "6a15b769818dee575bd5be09ae26b3f87e11eee9",
      "parents": [
        "2cb5ae40e66710e75a7fe0285dd874db820db2c0"
      ],
      "author": {
        "name": "Sarah Zakarias",
        "email": "zarah@google.com",
        "time": "Fri Sep 18 19:48:55 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 19:48:55 2026 +0000"
      },
      "message": "Add missing @docImport directives for doc comment references (#192734)\n\nAdd doc imports for elements that are not in the lexical scope of the\nfile they appear in. These currently resolve in dartdoc because it\nmaintains a global lookup of everything it has loaded, but the\nanalyzer\u0027s `comment_references` lint reports them.\n\nTowards https://github.com/flutter/flutter/issues/192870 — enabling the\n`comment_references` lint."
    },
    {
      "commit": "2cb5ae40e66710e75a7fe0285dd874db820db2c0",
      "tree": "cc0cb423f19a6d619c49ad970f3fdaa6ec4f971b",
      "parents": [
        "fa78ae3fbf744a83ea085dbb2dc123e216e903e8"
      ],
      "author": {
        "name": "Dmitrii Zolotov",
        "email": "dmitrii.zolotov@gmail.com",
        "time": "Fri Sep 18 19:30:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 19:30:07 2026 +0000"
      },
      "message": "[engine_tool] Allow a dot in GN target names (#192423)\n\n`Label._checkTarget` validated target names with `_identifier`, the same\npattern used for package components, which allows no dot.\n`testing/dart/BUILD.gn` derives a compile target from each test file\nname, so all 55 of them - `compile_gpu_test.dart` and friends - were\nrejected, along with the `:dart` group that depends on them. Building or\nrunning any Dart test through `et` was impossible; ninja was the only\nway in.\n\n`_identifier` gains `.` here, for both halves of a label. Target names\nneed it for `compile_gpu_test.dart`, and package components need it too:\n`DEPS` brings `third_party/swiftshader/third_party/llvm-16.0` into the\ncheckout, and its `BUILD.gn` defines `swiftshader_llvm`. An identifier\nstill has to start with a letter or underscore, so `.`, `..` and `...`\nremain invalid as a package name component, which is what keeps a label\nfrom walking out of the source tree.\n\nFixes https://github.com/flutter/flutter/issues/192422\n\nVerified on macOS, `host_debug_unopt_arm64`. Both commands from the\nissue fail on master and succeed with this change:\n\n```\n$ et build -c host_debug_unopt_arm64 //flutter/testing/dart:compile_gpu_test.dart\n100.0% (1/1) ACTION //flutter/testing/dart:compile_gpu_test.dart\n\n$ et build -c host_debug_unopt_arm64 //flutter/testing/dart:dart\n100.0% (53/53) ACTION //flutter/testing/dart:compile_text_test.dart\n```\n\n`dart test test/label_test.dart` in `engine_tool`: 20 passed.\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md"
    },
    {
      "commit": "fa78ae3fbf744a83ea085dbb2dc123e216e903e8",
      "tree": "8f1a65ed7094b91e28364624eb73b76531090b5f",
      "parents": [
        "e4cb8ffd9882e8db5edb7ab356205630f863c1e0"
      ],
      "author": {
        "name": "Sankalp Thakur",
        "email": "31366524+sankalpsthakur@users.noreply.github.com",
        "time": "Fri Sep 18 18:31:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 18:31:14 2026 +0000"
      },
      "message": "fix(web): guard parseBrowserLanguages against invalid locale tags (#190651)\n\nFixes #190510\n\nEngine bootstrap calls DomLocale(language) for every navigator.languages\nentry with no validation. A bad tag (e.g. en-US@posix from Chromium when\nLANG is unset) throws during field init and leaves a blank page.\n\nGuard each tag with try/catch and skip invalid ones. If all fail, fall\nback to _defaultLocale (en-US).\n\nTests: en-US@posix, mixed invalid+valid, empty list via\ndebugOverrideBrowserLanguages.\n\nAI tools helped with drafting.\n\n---------\n\nSigned-off-by: Sankalp Thakur \u003csankalphimself@gmail.com\u003e\nCo-authored-by: Mouad Debbar \u003cmdebbar@google.com\u003e"
    },
    {
      "commit": "e4cb8ffd9882e8db5edb7ab356205630f863c1e0",
      "tree": "c9cf73e69efc7f578e3dc58ea00dc0869bcfc417",
      "parents": [
        "f960c3ae208b8e0893cab5d45d4ab989ace2cbe7"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Fri Sep 18 16:29:09 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 16:29:09 2026 +0000"
      },
      "message": "[engine] Add cli_util to pubspec.yaml dependency_overrides (#192972)\n\nAdds `cli_util`\n(`./third_party/dart/third_party/pkg/tools/pkgs/cli_util`) to\n`dependency_overrides` in `engine/src/flutter/pubspec.yaml`.\n\nDart SDK commit https://dart-review.googlesource.com/c/sdk/+/551940\nrolled `tools_rev` to include\nhttps://github.com/dart-lang/tools/pull/2584, which added\n`package:cli_util` as a dependency of `package:coverage`. Because\n`engine/src/flutter/tools/pub_get_offline.py` runs `dart pub get\n--offline` against `engine/src/flutter/pubspec.yaml`\n(`_engine_workspace`), `cli_util` must be mapped in\n`dependency_overrides` for offline dependency resolution on the\nDart-in-Flutter (HHH) builders and the Dart-to-Flutter roll.\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 [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."
    },
    {
      "commit": "f960c3ae208b8e0893cab5d45d4ab989ace2cbe7",
      "tree": "a9b2fd1f6206b3938fb7b91f2f206d88b880f029",
      "parents": [
        "12384f9e87f79205076ce1990e8b7cd31cffb397"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Fri Sep 18 16:09:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 16:09:07 2026 +0000"
      },
      "message": "[flutter_tools] Stop deletion progress status during flutter clean (#192996)\n\nEnsure `deletionStatus.stop()` is always called in a `finally` block\naround `file.deleteSync(recursive: true)` in `CleanCommand._deleteFile`.\n\nPreviously, `deletionStatus.stop()` was only called inside the `on\nFileSystemException catch` block, leaving `StdoutLogger._status` active\non successful file deletions. Because `StdoutLogger.startProgress`\nignores new statuses when `_status !\u003d null` and only emits the trailing\nnewline in `stop()` / `cancel()`, the first `Deleting ...` progress\nstatus remained unstopped, suppressing all subsequent deletion progress\nstatuses and omitting the trailing newline on exit.\n\nAdds a regression test in\n`packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart`\nverifying that `flutter clean` stops each deletion progress status and\nlogs every deleted directory.\n\nFixes https://github.com/flutter/flutter/issues/192531\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "12384f9e87f79205076ce1990e8b7cd31cffb397",
      "tree": "e79c5d53a3e8b2fd3174186c2bcd55dfcc83d62d",
      "parents": [
        "c3edad8766a937c49d66380894017cad401aab51"
      ],
      "author": {
        "name": "Michael Thomsen",
        "email": "mit@google.com",
        "time": "Fri Sep 18 11:46:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 11:46:17 2026 +0000"
      },
      "message": "Fix FFI links for Linux in README.md (#192981)\n\nAdd missing Linux FFI link.\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "c3edad8766a937c49d66380894017cad401aab51",
      "tree": "975e1d1ff22157f849a0f0540c012a5e9d893e79",
      "parents": [
        "2b9e1e754c9a4db097ba363302a637cb19ed6b10"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Fri Sep 18 04:17:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 04:17:14 2026 +0000"
      },
      "message": "Roll Fuchsia Linux SDK from 0aRZ0OQVRmLEk3TKB... to zGeeR7JORNm-Un1vf... (#192970)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/fuchsia-linux-sdk-flutter\nPlease CC codefu@google.com,zra@google.com on the revert to ensure that\na human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "2b9e1e754c9a4db097ba363302a637cb19ed6b10",
      "tree": "55afcb8496032366ebbc75e89582c11e1b341d71",
      "parents": [
        "07dd8b028e69578ec369ba80e5c15ea39afc7da2"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Fri Sep 18 02:49:33 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 02:49:33 2026 +0000"
      },
      "message": "Roll Dart SDK from 938ec090f8bc to e2fcf6d538c8 (2 revisions) (#192968)\n\nhttps://dart.googlesource.com/sdk.git/+log/938ec090f8bc..e2fcf6d538c8\n\n2026-09-18 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-241.0.dev\n2026-09-17 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-240.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "07dd8b028e69578ec369ba80e5c15ea39afc7da2",
      "tree": "8f076b2c1fd637404657057975ea3d0a59d978f0",
      "parents": [
        "f13bf48eee5dd8c1518a4df83c29aba9826e118c"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Fri Sep 18 01:51:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 01:51:07 2026 +0000"
      },
      "message": "feat(web): support --web-content-hash for physical static assets (#191919)\n\nSupports content-hashing physical static assets under `assets/` and\nrewrites target path mappings in `AssetManifest.bin`,\n`AssetManifest.bin.json`, `AssetManifest.json`, and `FontManifest.json`\nwhen building Flutter Web with `--web-content-hash`.\n\n### What this PR accomplishes\n* Computes SHA-256 (first 8 hex characters) for project static assets\nunder `build/web/assets/`.\n* Renames physical assets on disk prior to file extension\n(`image.\u003chash\u003e.png`).\n* Rewrites `AssetManifest.bin`, `AssetManifest.bin.json`, and\n`AssetManifest.json` variant maps to point to hashed filenames so\n`AssetImage` transparently resolves content-hashed assets at runtime.\n* Rewrites font asset target paths in `FontManifest.json`.\n* Excludes special files (`AssetManifest.*`, `FontManifest.json`,\n`NOTICES`, `NOTICES.Z`) and all shaders (`*.frag` and `shaders/`) from\ncontent-hashing to prevent runtime discovery and CanvasKit\n`FragmentProgram` 404s.\n* Cleans `build/web/assets/` on incremental rebuilds to prevent stale\nasset accumulation, and updates `flutter_assets.d` for hermetic build\ntracking.\n* Follows `dart-use-path-package` conventions (`fileSystem.path` context\ndecomposition and `p.posix.joinAll` manifest bridging).\n\n\u003e [!NOTE]\n\u003e Direct runtime resolution for arbitrary `rootBundle.load(...)` and\n`rootBundle.loadString(...)` calls (which pass raw keys to the engine\nchannel without consulting `AssetManifest`) will be completed in a\ncompanion framework task.\n\nPart of #191915\nPart of #149031"
    },
    {
      "commit": "f13bf48eee5dd8c1518a4df83c29aba9826e118c",
      "tree": "ab67c90cc86dbefb25f87cbccb9a57fb23ce2242",
      "parents": [
        "d704f3a67ea608387ca73023ef2b48900b42ab42"
      ],
      "author": {
        "name": "Kate Lovett",
        "email": "katelovett@google.com",
        "time": "Fri Sep 18 01:49:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 01:49:04 2026 +0000"
      },
      "message": "Migrate flutter create templates to material_ui (#192947)\n\nThis migrates the `flutter create` templates to use `material_ui`\ninstead of `flutter/material.dart`.\n\nThis was surprisingly easy... maybe I am missing something? 🙃 \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- [ ] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "d704f3a67ea608387ca73023ef2b48900b42ab42",
      "tree": "b161f9bd7586eb7386c93882a01370cecf3f6ebd",
      "parents": [
        "dd88f100d8194e0775f0ede7fee7806c76fe926e"
      ],
      "author": {
        "name": "Kate Lovett",
        "email": "katelovett@google.com",
        "time": "Fri Sep 18 01:47:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 01:47:17 2026 +0000"
      },
      "message": "Deprecate decoupled localizations, add dart fixes (#192954)\n\nDeprecates the Material and Cupertino localization classes and symbols\nin `package:flutter_localizations` in favor of\n`package:material_ui/material_ui.dart` and\n`package:cupertino_ui/cupertino_ui.dart`, and adds `dart fix`\nmigrations.\n\n- Deprecates `GlobalMaterialLocalizations`,\n`kMaterialSupportedLanguages`, `getMaterialTranslation`, and all\ngenerated `MaterialLocalization*` classes in `flutter_localizations` in\nfavor of `package:material_ui/material_ui.dart`.\n- Deprecates `GlobalCupertinoLocalizations`,\n`kCupertinoSupportedLanguages`, `getCupertinoTranslation`, and all\ngenerated `CupertinoLocalization*` classes in `flutter_localizations` in\nfavor of `package:cupertino_ui/cupertino_ui.dart`.\n- Updates `dev/tools/localization/bin/gen_localizations.dart` to\ngenerate the `@Deprecated` annotations as well as the corresponding\n`dart fix` rules (`fix_material_localizations.yaml` and\n`fix_cupertino_localizations.yaml`).\n- Adds `dart fix` golden tests under\n`packages/flutter_localizations/test_fixes/` and enables\n`runFixTests(\u0027flutter_localizations\u0027)` in CI.\n\n Part of https://github.com/flutter/flutter/issues/172935\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "dd88f100d8194e0775f0ede7fee7806c76fe926e",
      "tree": "500916e7356d9c1e1d77c9a1df8399230acd4b6b",
      "parents": [
        "0e6f5065317a6af48ffbeb34bc2011f28be70b93"
      ],
      "author": {
        "name": "Kate Lovett",
        "email": "katelovett@google.com",
        "time": "Fri Sep 18 01:47:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 01:47:16 2026 +0000"
      },
      "message": "Better Dart bumps (#192644)\n\nPart of https://github.com/flutter/flutter/issues/191628\n\nAdds a script and companion skill for bumping the Dart version in\nflutter/flutter\nAlso adds creating an issue to do this every quarter to the quarterly\nrecurring tasks scheduled workflow.\n\nPrior art:\n- https://github.com/flutter/flutter/pull/187800\n- https://github.com/flutter/flutter/pull/191625\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "0e6f5065317a6af48ffbeb34bc2011f28be70b93",
      "tree": "9e3b7f02aef2db4608bf8ac6c6bac4bf432cbc9d",
      "parents": [
        "e847cfe2de1992e645fc0cd36c271a873ad22b47"
      ],
      "author": {
        "name": "Alexander Markov",
        "email": "alexmarkov@google.com",
        "time": "Thu Sep 17 22:35:29 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 22:35:29 2026 +0000"
      },
      "message": "Manual Roll Dart SDK from 2dfdae0ea100 to 938ec090f8bc (2 revisions) (#192943)\n\nhttps://dart.googlesource.com/sdk.git/+log/2dfdae0ea100..938ec090f8bc\n\n2026-09-17\n[dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com](mailto:dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com)\nVersion 3.14.0-239.0.dev\n2026-09-17\n[dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com](mailto:dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com)\nVersion 3.14.0-238.0.dev\n\nReformat engine sources after prebuilt Dart SDK was updated.\n\n---------\n\nCo-authored-by: engine-flutter-autoroll \u003cengine-flutter-autoroll@skia.org\u003e"
    },
    {
      "commit": "e847cfe2de1992e645fc0cd36c271a873ad22b47",
      "tree": "986bea4493d41ed84c8849ec6c51966d5f46a86a",
      "parents": [
        "634b0ed597124ca57830047cad4358371fd4e517"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Thu Sep 17 21:11:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 21:11:08 2026 +0000"
      },
      "message": "[tool] Migrate DevFS to modular dependency injection (#192836)\n\n## Summary\nPart 23a of the modular dependency injection migration.\n* Migrates `DevFS` and `DevFSContent` to modular dependency injection,\nremoving ambient `devFSConfig` and `HttpClientFactory` context lookups.\n* Injects explicit `Config?` and `DevFSConfig?` parameters into `DevFS`\nand `DevFSFileContent`.\nFork diff:\nhttps://github.com/bkonyi/flutter/compare/master...di/23a-devfs\nPart of https://github.com/flutter/flutter/issues/188471"
    },
    {
      "commit": "634b0ed597124ca57830047cad4358371fd4e517",
      "tree": "7e8b9ead9933d5a8ff8d6a71d4ffcf4f1e6bf5cc",
      "parents": [
        "94306f72c0ba7dcbeb6bf37894c71c13b3fddeff"
      ],
      "author": {
        "name": "zhongliugo",
        "email": "zhongliu88889@gmail.com",
        "time": "Thu Sep 17 21:05:21 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 21:05:21 2026 +0000"
      },
      "message": "Reland \"[web] Keep the keyboard up during an iOS caret drag\" (#190942)\n\nFixes https://github.com/flutter/flutter/issues/189744\n\n**Reland of #190014, reverted in #190926.**\n\nCause: three of the new tests dispatch a real input.blur(), but desktop\nSafari uses SafariDesktopTextEditingStrategy, which does not subscribe\nto blur, so handleBlur never ran. Real iOS does subscribe, so the fix\nitself was unaffected.\n\nDelta: one test-only commit adding skip: isSafari to those three tests.\nNo production change.\n\n**Problem**\nOn iOS 27, long-press-dragging the selection caret in a Web TextField\ndismisses the keyboard mid-gesture. WebKit transiently blurs the hidden\ninput with a null relatedTarget while the document keeps focus, then\nrefocuses it a frame later,and the engine reacted to that blink on two\nlisteners that each tore the input down. A plain input ignores the same\nblur, so the cause is Flutter\u0027s reaction, not a WebKit limitation.\n\n**Fix**\nOn iOS both listeners now defer their teardown by 100ms and cancel it if\nthe input refocuses, mirroring the existing\nhttps://github.com/flutter/flutter/issues/155265 deferred close. Done\nand tap-away never refocus so they still close, and the deferral is\nnarrowed to the exact drag signature so every other focus transition is\nunaffected.\n\n**Demo**\nBefore: https://flutter-demo-52-before.web.app/ (keyboard dismisses mid\ncaret drag)\nAfter: https://flutter-demo-52-after.web.app/ (keyboard stays up)\n\nRepro on iOS 27 Safari: tap the field to raise the keyboard, then\nlong-press and drag the selection caret. Before dismisses; after stays\nup. Done and tap-away still dismiss."
    },
    {
      "commit": "94306f72c0ba7dcbeb6bf37894c71c13b3fddeff",
      "tree": "a44d0e184ecc5c5c3b1a563178a366223e9a8706",
      "parents": [
        "b48c3967fa253bf986dbecde3482f3b09c882913"
      ],
      "author": {
        "name": "Kyrylo K.",
        "email": "63228361+krll-kov@users.noreply.github.com",
        "time": "Thu Sep 17 20:48:34 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 20:48:34 2026 +0000"
      },
      "message": "[Windows] Use an unsized texture format for backing stores on OpenGL ES 2 (#192917)\n\nOn GPUs limited to D3D11 feature level 10_0, ANGLE only creates an\nOpenGL ES 2.0 context. `CompositorOpenGL::CreateBackingStore` passes the\nsized format (`GL_BGRA8_EXT` or `GL_RGBA8`) as the `internalformat` of\n`glTexImage2D`. ES 2.0 requires `internalformat` to equal `format`, so\nthe call fails with `GL_INVALID_VALUE`, the backing store framebuffer is\nincomplete and the window stays black with no error logged. Flutter\n3.44.2 passed the unsized format there, the sized one came in with the\nMSAA backing store changes.\n\nThis change picks the internal format once in `Initialize`: the unsized\ngeneral format on an ES 2 context, the sized format otherwise. The three\n`TexImage2D` calls use it. The sized format is still reported to the\nengine through `FlutterOpenGLFramebuffer.target`, and nothing changes on\nES 3 contexts.\n\nTests:\n- `CreateBackingStoreGLES2Unsized`: ES 2 with Skia, `glTexImage2D` gets\n`GL_BGRA_EXT`, the engine still gets `GL_BGRA8_EXT`.\n- `CreateBackingStoreImpellerGLES2Unsized`: ES 2 with Impeller,\n`GL_BGRA_EXT`.\n- `CreateBackingStoreGLES3Sized`: ES 3 keeps `GL_RGBA8`.\n\nThe two ES 2 tests fail without the change.\n\nManually verified with a dxcpl *Feature level limit* of 10_0, where the\nunpatched engine shows a black window: on 3.47.4 x64 a stock app renders\nwith Skia and Impeller, and so does an app with gradients, shadows, a\nmultiply blend and animation. An animated app runs at 120 FPS at 10_0\nwith both renderers, the same as the official engine without the limit.\nWith Impeller, content drawn before a `BackdropFilter` is still lost at\n10_0; that is a separate Impeller bug. On `main` (arm64) the stock app\nrenders with an ES 2 context, a complete framebuffer and no GL errors.\nAlso verified in a production app on 3.47.4.\n\nFixes #191978\n\n## Pre-launch Checklist\n\n- [ ] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [ ] I read the [AI contribution guidelines] and understand my\nresponsibilities, or I am not using AI tools.\n- [ ] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [ ] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [ ] I signed the [CLA].\n- [x] I listed at least one issue that this PR fixes in the description\nabove.\n- [ ] I updated/added relevant in-code documentation (doc comments with\n`///`).\n- [ ] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\n- [x] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [ ] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [ ] All existing and new tests are passing.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "b48c3967fa253bf986dbecde3482f3b09c882913",
      "tree": "e1859f314aefabc9e0dd7aca93a5026bc0128b03",
      "parents": [
        "b62b39fcb0fd013d04f84ac16510b979cce759e7"
      ],
      "author": {
        "name": "Qun Cheng",
        "email": "36861262+QuncCccccc@users.noreply.github.com",
        "time": "Thu Sep 17 20:39:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 20:39:23 2026 +0000"
      },
      "message": "Add M3E migration guideline (#192519)\n\nThis PR is to add a [m3e migration\nguide](https://docs.google.com/document/d/13UequzlX71hFYTvAO4mfz9sckWVJz7XcqRVh6OkjBF8/edit?usp\u003dsharing)\nto `docs/ecosystem/material_ui`.\n\nRelated to https://github.com/orgs/flutter/projects/250\nFollowup: create a skill that point to this doc to help agent during\nmigration: https://github.com/flutter/packages/pull/12818\n\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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."
    },
    {
      "commit": "b62b39fcb0fd013d04f84ac16510b979cce759e7",
      "tree": "303396fbb1198ccf5f218bd12a338e4942172c2b",
      "parents": [
        "b138043fc75c1270e1bd9f1fa0a5c1299e86e638"
      ],
      "author": {
        "name": "August",
        "email": "git@reb0.org",
        "time": "Thu Sep 17 20:31:15 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 20:31:15 2026 +0000"
      },
      "message": "fix: Apply reversed axis flip by macOS on Web when scroll with modifier keys (#189506)\n\nMacOS is flipping the vertical scroll (y) to a horizontal scroll (x),\nwhen the \"Shift\" modifier key is pressed.\nTo conform with other platforms, a reverse flip was already applied for\nnative macOS, see:\nhttps://github.com/flutter/flutter/commit/be9ae4793d1e6aff6ad108200c4319fb1c82db96\n\nThe same must be done for web platforms, as the event is received by the\nbrowser, but the flipping by OSX happens before.\n\nFixes #159868\nSee also #185146\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\n---------\n\nCo-authored-by: Mouad Debbar \u003cmdebbar@google.com\u003e\nCo-authored-by: zhongliugo \u003czhongliu88889@gmail.com\u003e"
    },
    {
      "commit": "b138043fc75c1270e1bd9f1fa0a5c1299e86e638",
      "tree": "99491026fcc2e9de30708bdf36f98957ec9783f7",
      "parents": [
        "9d06bde9c80aa4caea0aab4b80738ab906996777"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Thu Sep 17 20:05:36 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 20:05:36 2026 +0000"
      },
      "message": "[flutter_tools] Extract Windows archives using native tar with PowerShell fallback (#192298)\n\n## Description\n\nToday, `flutter_tools` extracts archives on Windows using\n`package:archive` in memory because historically Windows lacked a\nbuilt-in unzipping CLI tool. This causes high memory consumption, slow\nextraction speeds, and out-of-memory crashes on large archives\n(https://github.com/flutter/flutter/issues/133371). Furthermore,\n`package:archive` 4.x introduced a dependency on `package:posix` which\nrelies on native FFI and cannot execute on Windows\n(https://github.com/flutter/flutter/issues/115660).\n\nThis PR:\n1. Updates `_WindowsUtils.unzip` and `_WindowsUtils.unpack` in `os.dart`\nto use native `%WINDIR%\\System32\\tar.exe` (available on Windows 10 build\n17063+ / version 1803 and Windows 11). This streams extraction directly\nfrom disk to disk, eliminating OOM crashes and providing significantly\nfaster throughput.\n2. Adds a backwards-compatible fallback to PowerShell `Expand-Archive`\n(checking `powershell` then `pwsh`) with verbatim single-quote escaping\nand `$ErrorActionPreference \u003d \"Stop\"` for older Windows 10 versions.\n3. Automatically creates missing destination directories prior to\nextraction.\n4. Decouples `WindowsApp.fromPrebuiltApp` in `application_package.dart`\nfrom `package:archive` by handling general `Exception`.\n5. Removes `package:archive` from `os.dart` and `os_test.dart`.\n6. Adds unit tests covering Windows `tar` unzipping, target directory\ncreation, PowerShell fallback, PowerShell Core (`pwsh`) fallback, and\ntool-missing error exits.\n\n## Related Issues\n- Fixes https://github.com/flutter/flutter/issues/133371\n- Part of https://github.com/flutter/flutter/issues/115660\n\n## Tests\n- Added unit tests in\n`packages/flutter_tools/test/general.shard/base/os_test.dart`\n- Added unit tests in\n`packages/flutter_tools/test/general.shard/windows/application_package_test.dart`\n- Verified with `flutter test` and clean `dart analyze --fatal-infos`\n\n---------\n\nCo-authored-by: Matthew Kosarek \u003cmatt.kosarek@canonical.com\u003e"
    },
    {
      "commit": "9d06bde9c80aa4caea0aab4b80738ab906996777",
      "tree": "59dac5eb002b53673283625692967465b5bda44c",
      "parents": [
        "e44e7f7a016fb7dbbef9e21a7945fb2997a44339"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Thu Sep 17 18:23:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 18:23:07 2026 +0000"
      },
      "message": "[tool] Migrate TestCompiler and WebTestCompiler to modular dependency injection (#192923)\n\n## Description\n\nThis pull request migrates `TestCompiler` and `WebTestCompiler` in\n`flutter_tools` to modular dependency injection using `ToolContext`.\n\nThis is Layer 21a in the modular dependency injection migration for the\ntesting subsystem.\n\n### Fork Compare Link\n* Compare:\nhttps://github.com/bkonyi/flutter/compare/master...di/21a-test-compiler\n\n## Tests\n* `test/general.shard/test/test_compiler_test.dart`\n* `test/general.shard/test/web_test_compiler_test.dart`"
    },
    {
      "commit": "e44e7f7a016fb7dbbef9e21a7945fb2997a44339",
      "tree": "85e1c4c162ba740100c0de3e74097d2d91c085a8",
      "parents": [
        "a029daab8b270ae3f5fad587c4551a490b67fe3a"
      ],
      "author": {
        "name": "Robert Ancell",
        "email": "robert.ancell@canonical.com",
        "time": "Thu Sep 17 17:34:46 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:34:46 2026 +0000"
      },
      "message": "Fix black tooltips and popups on Wayland (#192910)\n\nTooltips and popups were showing as black boxes, and opening a popup\ncould crash the compositor. Two things were wrong. A tooltip only draws\none frame, and that frame went into the buffer left over from before the\nsurface was resized, which nothing had ever painted — so we now swap\nthat stale buffer away unused before drawing. Separately, GTK destroys a\nwindow’s surface when the window is hidden and makes a new one when it\nis shown again, which it does when a popup is resized, leaving the\nsubsurface Flutter draws into attached to a surface that no longer\nexists — so we now notice when the surface has been replaced, make a new\nsubsurface on it, and ask the engine for another frame to fill it."
    },
    {
      "commit": "a029daab8b270ae3f5fad587c4551a490b67fe3a",
      "tree": "1df48f33fa6e630a44b98ac19e9d93ad60d47726",
      "parents": [
        "5857c3683a3c55001fa962f4f808dfad793ea065"
      ],
      "author": {
        "name": "Kevin Moore",
        "email": "kevmoo@users.noreply.github.com",
        "time": "Thu Sep 17 17:34:46 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:34:46 2026 +0000"
      },
      "message": "Wrap routing in FocusScope in WidgetsApp.router (#192601)\n\nIn #109702, Navigator\u0027s internal `FocusScopeNode` was removed and\nhoisted into `WidgetsApp`, but only inside the `else if\n(_usesNavigator)` branch. As a result, apps using `WidgetsApp.router`\n(including `MaterialApp.router` and `CupertinoApp.router` with\n`RouterConfig` or `RouterDelegate`) lacked the enclosing\n`FocusScope(debugLabel: \u0027Navigator Scope\u0027, autofocus: true)`.\n\nOn Flutter Web with semantics enabled (`ensureSemantics()`), when\nwidgets such as `Autocomplete` show an `OverlayPortal`, the semantics\ncompiler reparents the route node under a newly synthesized container\nnode. Without an enclosing `FocusScope`, moving the route\u0027s semantics\nnode detaches it from its previous DOM parent, triggering a native\nbrowser blur event on any focused `\u003cinput\u003e`. The text field loses focus\nimmediately after typing a single character, causing the options overlay\nto dismiss.\n\nThis change wraps `routing` in `FocusScope` whenever `routing !\u003d null`\nin `WidgetsApp`, ensuring consistent focus scope hierarchy across\n`_usesNavigator`, `_usesRouterWithConfig`, and\n`_usesRouterWithDelegates`.\n\nFixes https://github.com/flutter/flutter/issues/187561\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "5857c3683a3c55001fa962f4f808dfad793ea065",
      "tree": "f5351077892a04c40e8ba9a192b134749a408120",
      "parents": [
        "2d3333f896759b7ecc7b26f00638a07fb398c84e"
      ],
      "author": {
        "name": "stuartmorgan-g",
        "email": "stuartmorgan@google.com",
        "time": "Thu Sep 17 17:31:10 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:31:10 2026 +0000"
      },
      "message": "Update package list in the 1P package issue template (#192905)\n\nAdds packages that have been added since the last update to the list,\nand removes `process`, which was moved to the Dart org."
    },
    {
      "commit": "2d3333f896759b7ecc7b26f00638a07fb398c84e",
      "tree": "10eaf60665368f02b0343b0c174144c8317ed9e5",
      "parents": [
        "88eeff8b1235c48006cb917503f67697d5d4933c"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Thu Sep 17 17:29:53 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:29:53 2026 +0000"
      },
      "message": "[tool] Migrate BuildAppBundleCommand to modular dependency injection (#192246)\n\n## Summary\n\nPart 14b of the modular dependency injection migration.\n\nMigrates `BuildAppBundleCommand` (`flutter build appbundle`) to modular\ndependency injection with `ToolContext` and `AndroidContext`, removing\ndirect dependencies on `globals.dart`.\n\nStacked on https://github.com/flutter/flutter/pull/190776\nCompare:\nhttps://github.com/bkonyi/flutter/compare/di/14-android-build-and-toolchain...di/14b-build-appbundle\n\nPart of https://github.com/flutter/flutter/issues/47161\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "88eeff8b1235c48006cb917503f67697d5d4933c",
      "tree": "356d2d84bb98e80e5c2a15fa9d83848f8eed5a44",
      "parents": [
        "9b8dd16125a67543878d2dfc87d5c2a0c92902ad"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 17:28:44 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:28:44 2026 +0000"
      },
      "message": "Roll Skia from 9f935c65aa3a to 430885776aa8 (4 revisions) (#192916)\n\nhttps://skia.googlesource.com/skia.git/+log/9f935c65aa3a..430885776aa8\n\n2026-09-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE\nfrom 2db891493f26 to 64cc2e072729 (14 revisions)\n2026-09-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\nSwiftShader from 694585a05946 to 1e80438d2b93 (1 revision)\n2026-09-17 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn\nfrom 4aefbf1ef607 to 47499fc1ee1d (10 revisions)\n2026-09-17\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "9b8dd16125a67543878d2dfc87d5c2a0c92902ad",
      "tree": "54a98566805eff355d28407d511a4bb305ba48f3",
      "parents": [
        "f505170accc00ab43a99ae216a8df2a7770df851"
      ],
      "author": {
        "name": "John \"codefu\" McDole",
        "email": "codefu@google.com",
        "time": "Thu Sep 17 17:27:48 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:27:48 2026 +0000"
      },
      "message": "ci: remove bringup on Linux_android_emu_vulkan_stable android_engine_hcpp_tests (#192932)"
    },
    {
      "commit": "f505170accc00ab43a99ae216a8df2a7770df851",
      "tree": "0cf9aea959dea20bc40aada5e42fc8f811fc0a1d",
      "parents": [
        "9ead586c1e139a8464d70b6cdf07d475aab99808"
      ],
      "author": {
        "name": "Danny Tuppeny",
        "email": "danny@tuppeny.com",
        "time": "Thu Sep 17 17:27:28 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:27:28 2026 +0000"
      },
      "message": "[flutter_tools] [dap] Handle --release, --profile and --wasm in args or toolArgs (#192926)\n\nThis fixes two things:\n\n1. It treats `--wasm` as an indicator that debugging is not supported,\njust like `--release` and `--profile`. This prevents us trying to\ninitialize a debugger which never completes (and blocks the\n`flutter.appStarted` event from ever being forwarded)\n\n2. It checks both `args` and `toolArgs` for these flags, ebcause for\nFlutter `args` and `toolArgs` are essentially the same (unlike Dart), so\nusers may put them in either place.\n\nSee https://github.com/Dart-Code/Dart-Code/issues/6178"
    },
    {
      "commit": "9ead586c1e139a8464d70b6cdf07d475aab99808",
      "tree": "2bc391bd2f33952cc33e0ea31fe9daf3e971f2cb",
      "parents": [
        "aced6c48283c518fab07225e6c0e18d6e9e1e139"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 06:26:13 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 06:26:13 2026 +0000"
      },
      "message": "Roll Fuchsia Test Scripts from YSOIVj3qhlnCrMgpj... to TVUpjuAV0GuqaM58O... (#192914)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/fuchsia-test-scripts-flutter\nPlease CC chrome-fuchsia-engprod@google.com,codefu@google.com on the\nrevert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "aced6c48283c518fab07225e6c0e18d6e9e1e139",
      "tree": "b7f48471fec89d002720a645137ce97ae33459b6",
      "parents": [
        "36a5eab4b491f5335c60fe2b9ee2dd01e9f268e5"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 05:19:21 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 05:19:21 2026 +0000"
      },
      "message": "Roll Skia from 906b48689951 to 9f935c65aa3a (1 revision) (#192909)\n\nhttps://skia.googlesource.com/skia.git/+log/906b48689951..9f935c65aa3a\n\n2026-09-17\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "36a5eab4b491f5335c60fe2b9ee2dd01e9f268e5",
      "tree": "1bbc590c2305ebbe9fd4bf72d5f240ca7c4821f3",
      "parents": [
        "461663fba20aaf8bbd5801ddcd197a33c401ef0a"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 04:17:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 04:17:17 2026 +0000"
      },
      "message": "Roll Dart SDK from 953482c7ff8a to 2dfdae0ea100 (1 revision) (#192908)\n\nhttps://dart.googlesource.com/sdk.git/+log/953482c7ff8a..2dfdae0ea100\n\n2026-09-17 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-237.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "461663fba20aaf8bbd5801ddcd197a33c401ef0a",
      "tree": "343806214eaa4a8415f62cb2b8b551b91adbfd7f",
      "parents": [
        "01bf655d7cae0cc8961644074b112987349cf527"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 03:14:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 03:14:23 2026 +0000"
      },
      "message": "Roll Skia from c97ef71e0369 to 906b48689951 (2 revisions) (#192907)\n\nhttps://skia.googlesource.com/skia.git/+log/c97ef71e0369..906b48689951\n\n2026-09-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\nvulkan-deps from 0bd3b3284048 to 8287e26a21dc (8 revisions)\n2026-09-16 ovsienko@google.com [vpython] Migrate .vpython3 to\nvpython.toml (UV)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "01bf655d7cae0cc8961644074b112987349cf527",
      "tree": "6ab366230719691e61d474a9a87ca7fd44408319",
      "parents": [
        "51e0a1953b5e7e416a57d8489ae39152a7c61e56"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 01:37:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 01:37:31 2026 +0000"
      },
      "message": "Roll Fuchsia Linux SDK from XCxrICzX1DWvyfqhA... to 0aRZ0OQVRmLEk3TKB... (#192903)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/fuchsia-linux-sdk-flutter\nPlease CC codefu@google.com,zra@google.com on the revert to ensure that\na human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "51e0a1953b5e7e416a57d8489ae39152a7c61e56",
      "tree": "5f646eb5c2a24b395c7e8c4ebe44657a3b0fada4",
      "parents": [
        "642d3968c587604ab437917e9788b7491661ae36"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Thu Sep 17 00:55:27 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 00:55:27 2026 +0000"
      },
      "message": "Roll Skia from bd96ea50ffd1 to c97ef71e0369 (5 revisions) (#192902)\n\nhttps://skia.googlesource.com/skia.git/+log/bd96ea50ffd1..c97ef71e0369\n\n2026-09-16 alexisdavidc@google.com [fuzz] Allow 16-bit loop int in\nGetLoopUnrollInfo\n2026-09-16 sergiog@microsoft.com [rust bmp] Match ICC transform source\nformat\n2026-09-16\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-16 borenet@google.com [infra] Run iOS builds on newer Mac Minis\n2026-09-16 michaelludwig@google.com [graphite] Stop using unpremul\nSkOpts\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "642d3968c587604ab437917e9788b7491661ae36",
      "tree": "42a47f80c3520298566c1120cb410ace792f4389",
      "parents": [
        "c5f8b9b255130ea8bc921ffefc0af15a2ddfd820"
      ],
      "author": {
        "name": "artemkulyk",
        "email": "88086187+artemkulyk@users.noreply.github.com",
        "time": "Thu Sep 17 00:25:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 00:25:23 2026 +0000"
      },
      "message": "[Impeller] Avoid heap-allocating std::function captures per draw (#192679)\n\nUberSDF and circle contents build per-draw callbacks that capture the\nsampler binding and geometry result by value. Those captures exceed the\nstd::function small-buffer optimization and heap-allocate on every draw.\n\nDrawGeometry invokes the callbacks before returning, so capturing by\nreference is valid and removes those allocations.\n\nFixes #192673\nRelated to #164607\n\ntest-exempt: capture-by-ref only; DrawGeometry remains synchronous\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\nMade with [Cursor](https://cursor.com)\n\n---------\n\nCo-authored-by: b-luk \u003c97480502+b-luk@users.noreply.github.com\u003e"
    },
    {
      "commit": "c5f8b9b255130ea8bc921ffefc0af15a2ddfd820",
      "tree": "a060a0b70323ad079f2b4e50b91023afe30ece51",
      "parents": [
        "340297b1d4176887e3cb5cfe22ad56653ec3bdd4"
      ],
      "author": {
        "name": "stuartmorgan-g",
        "email": "stuartmorgan@google.com",
        "time": "Wed Sep 16 23:49:13 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:49:13 2026 +0000"
      },
      "message": "Remove manually-combined darwin/ plugin tests (#192890)\n\nTo ensure that `sharedDarwinSource` plugins worked, we had tests that\ncreated standard iOS/macOS plugins and then attempted to manually modify\nthem to use `darwin/` and `sharedDarwinSource: true`. However, we now\nhave template options to directly create such plugins, and we are\nalready running tests with them, so we don\u0027t need to run the duplicate\ntests that construct them manually.\n\nThis both reduces infra time, and avoids the need to maintain project\nmanipulation code that knows the exact source of the template files\n(which makes updating the code in the templates more difficult).\n\nHelps unblock https://github.com/flutter/flutter/issues/63284\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "340297b1d4176887e3cb5cfe22ad56653ec3bdd4",
      "tree": "84319b6c6f25d88e01c78e6a690ad70c123ae81a",
      "parents": [
        "ba66987db2eed25b2307b33854da3fc81b240f26"
      ],
      "author": {
        "name": "Nikhil Kukreja",
        "email": "45616602+NikhilKukreja26@users.noreply.github.com",
        "time": "Wed Sep 16 23:20:03 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:20:03 2026 +0000"
      },
      "message": "Document default value of ReorderableDragStartListener.enabled (#192019)\n\nFixes https://github.com/flutter/flutter/issues/192018\n\nDocuments the default value (`true`) of\n`ReorderableDragStartListener.enabled`\nin its dartdoc, per the Flutter style guide\u0027s guidance to document\ndefault\nvalues. Documentation-only change; test-exempt per the docs/comment-only\ntest\nexemption in Tree hygiene.\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "ba66987db2eed25b2307b33854da3fc81b240f26",
      "tree": "f67583e89f6919d341fcb7599ba6e62e8231dc11",
      "parents": [
        "8dff900f186f8954aa5d20752fd34ece52afa0e1"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 23:10:42 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:10:42 2026 +0000"
      },
      "message": "Roll Dart SDK from 9ee905f1c015 to 953482c7ff8a (3 revisions) (#192898)\n\nhttps://dart.googlesource.com/sdk.git/+log/9ee905f1c015..953482c7ff8a\n\n2026-09-16 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-236.0.dev\n2026-09-16 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-235.0.dev\n2026-09-16 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-234.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "8dff900f186f8954aa5d20752fd34ece52afa0e1",
      "tree": "fd264c8efd81e1e154ab16849cb95b60c2b057a1",
      "parents": [
        "01172b864370dcf63f54d3fc30acd358fe23954a"
      ],
      "author": {
        "name": "gaaclarke",
        "email": "30870216+gaaclarke@users.noreply.github.com",
        "time": "Wed Sep 16 22:24:06 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:24:06 2026 +0000"
      },
      "message": "Updates freetype2 to 2.14.2 (#192883)\n\nfixes https://github.com/flutter/flutter/issues/192629\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "01172b864370dcf63f54d3fc30acd358fe23954a",
      "tree": "daaf74150124855dc5e7e8d7eab4cbe10360b2a8",
      "parents": [
        "5544f0071d1b87a760f243d17dfa74e2f4759433"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 22:13:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:13:04 2026 +0000"
      },
      "message": "Roll Skia from 743412b186bf to bd96ea50ffd1 (2 revisions) (#192892)\n\nhttps://skia.googlesource.com/skia.git/+log/743412b186bf..bd96ea50ffd1\n\n2026-09-16 borenet@google.com [infra] Fix testing on iOS 18\n2026-09-16 kylechar@google.com Add guard for SPIR-V validation\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "5544f0071d1b87a760f243d17dfa74e2f4759433",
      "tree": "2a2df6667472531b5938464f2919405487421df5",
      "parents": [
        "a1498f2449fa24a4788b03af690ba6b53481e466"
      ],
      "author": {
        "name": "Andy Wolff",
        "email": "awolff@google.com",
        "time": "Wed Sep 16 22:11:12 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:11:12 2026 +0000"
      },
      "message": "Fix square corner issue (#191096)\n\nFixes https://github.com/flutter/flutter/issues/190602, see my\n[comment](https://github.com/flutter/flutter/issues/190602#issuecomment-5288993664)\non that issue for details about the problems I identified.\nAlso fixes https://github.com/flutter/flutter/issues/162172\n\n## What changed\n\nWhen a route contained rounded clips (such as `CupertinoSheetRoute`),\nintermediate child ink features, and a backdrop filter (such as a\nblurred app bar), the clip stack replay logic prematurely popped parent\nclips and exceeded the depth buffer budget across render pass splits,\ncausing subsequent header draws to render with 90° square corners. This\nPR addresses both mechanisms:\n\nFirst, `EntityPassClipStack::RecordRestore` was popping replay entities\nunconditionally whenever any clip was restored. In a sheet containing\nink decorations (like list item ripple effects), child clip restores at\ndeeper heights would prematurely discard the root parent clip. We now\ntrack `clip_height` in `ReplayResult` so that restorations only pop\nentities when `clip_height \u003e restore_height`, preserving parent clips\nacross sibling restores. When replaying those clips in\n`ClipContents::Render`, we also supply the entity\u0027s model matrix to\nproperly recompute the MVP matrix against the new pass\u0027s orthographic\nprojection instead of reusing the stale matrix from the prior pass.\n\nSecond, the pass depth budget was exhausting across backdrop splits.\n`Canvas::kMaxDepth` (`1 \u003c\u003c 24`) was mismatched with\n`Entity::kDepthEpsilon` (`1.0 / 262144.0`, or `2^-18`), allowing integer\ndepths to exceed the 18-bit precision of the depth buffer. Aligning\n`Canvas::kMaxDepth` to `262,143` and capping depth allocations in\n`Save`/`SaveLayer` to `min(current_depth_ + total_content_depth,\nparent_clip_depth)` keeps clip replay and subsequent draw operations\nwithin valid precision bounds. In `Canvas::Restore`, we also prevent\nunconditional depth jumps to `kMaxDepth` for unclipped saves, preserving\nthe allocated budget for subsequent sibling draws.\n\n## Testing\n\nReproducing this interaction in automated tests required testing the\nonscreen pass-splitting branch (`IsOnscreen()`), which normal offscreen\nunit tests bypass. We added a `ScopedOnscreenOverride` test hook in\n`Canvas` and constructed a multi-layer display list recreating the route\nclip, child ink items, blurred backdrop bar, and trailing app bar:\n\n* `clip_stack_unittests.cc`: Added\n`EntityPassClipStackTest.RestoringChildClipPreservesParentReplayEntities`\nto isolate parent clip retention across sibling restores.\n* `canvas_unittests.cc`: Added\n`AiksTest.ClipDepthMaintainedAcrossBackdropFilterAndLayers` to verify\ndepth invariants and precision bounds (`\u003c\u003d kMaxDepth`), and\n`AiksTest.ParentClipDepthBudgetPreservedAfterBackdropLayerRestore` to\nverify parent depth budget restoration.\n* `dl_golden_unittests.cc` (`impeller_golden_tests`): Added\n`DlGoldenTest.CanRenderClippedBackdropFilterWithSuperellipse` for\npixel-accurate golden image verification in CI against Skia Gold.\n\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "a1498f2449fa24a4788b03af690ba6b53481e466",
      "tree": "e257a27b7e2efdf6a87b4debca37c134d8360ae8",
      "parents": [
        "e917f35fc347b055a8e6c7307fefe91f8268fcea"
      ],
      "author": {
        "name": "Gray Mackall",
        "email": "34871572+gmackall@users.noreply.github.com",
        "time": "Wed Sep 16 21:39:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:39:23 2026 +0000"
      },
      "message": "Separate HCPP tests in android_engine_test into their own CI target (#192512)\n\n## Description\n\nThis separates the HCPP integration tests in\n`dev/integration_tests/android_engine_test` out of the\n`android_engine_vulkan_tests` shard into a dedicated\n`android_engine_hcpp_tests` CI target in `.ci.yaml`.\n\nThe combined target does too much, and flakiness in the older platform\nview / external texture tests has been getting HCPP suppressed on the\ndashboard. Giving HCPP its own target gives it an independent signal.\n\nKey changes:\n1. **Runner separation:** Extracted `runAndroidEngineHcppTests()` in\n`dev/bots/suite_runners/run_android_engine_tests.dart`, which\nexclusively runs the HCPP suite (on Vulkan). `runAndroidEngineTests()`\nstays focused on the non-HCPP backend integration tests.\n2. **CI target:** Added `Linux_android_emu_vulkan_stable\nandroid_engine_hcpp_tests` with `bringup: true`.\n3. **Codeownership:** Added `@gmackall` as codeowner for the new shard\nin `TESTOWNERS`.\n\nThis is intentionally **behavior-preserving**: the same set of tests\nruns before and after, just split across two targets instead of one.\n\n**No Skia Gold re-triage is required.** Gold trace identity here is the\ngolden name plus `{Platform, CI}` — the builder/target name is not a key\n(`SkiaGoldClient._getKeysJSON`). Golden names are\n`android_engine_test.\u003cvariant\u003e.\u003cgoldenPrefix\u003e.\u003ccase\u003e.png`, where the\nvariant stays `vulkan` and `goldenPrefix` is a constant declared inside\neach test rather than derived from a filename. Nothing in that tuple\nchanges.\n\n## Validation\n\nRan `SHARD\u003dandroid_engine_hcpp_tests` against a physical Pixel 9; all 11\n`flutter drive` invocations pass and the generated goldens were visually\ninspected.\n\n## Follow-up\n\nWhile validating this I found that 4 HCPP tests never matched the\nrunner\u0027s `Glob` (they don\u0027t end in `_main.dart`), so they have never run\nin CI:\n\n| Test | Status |\n|---|---|\n| `platform_view_clear_hidden` | passes |\n| `platform_view_overlay_layer_cleared` | passes |\n| `hc_errors_with_hcpp_enabled` | **fails** |\n| `tlhc_with_fallback_to_hc_errors_with_hcpp_enabled` | **fails** |\n\nThe two failures assert a `PlatformException` containing `HC++` that the\nengine no longer throws: `PlatformViewsChannel.create()` now returns\nearly into the HCPP path and upgrades legacy HC/TLHC views instead of\nrejecting them, which makes\n`PlatformViewsController.throwIfHCPPEnabled()` unreachable.\n`upgrade_legacy_pv_types` already covers that current behavior.\n`hc_errors_with_hcpp_enabled` additionally hangs indefinitely rather\nthan failing, because the driver taps `LoadPlatformView` while the app\ndeclares `LoadHCPlatformView` and the tests use `timeout: Timeout.none`.\n\nEnabling those is deliberately left to a follow-up PR, so this one stays\na clean behavior-preserving split and the new target starts with an\nuncontaminated signal during `bringup`.\n\n---\n\n*This pull request was generated with AI assistance (Gemini).*"
    },
    {
      "commit": "e917f35fc347b055a8e6c7307fefe91f8268fcea",
      "tree": "fe20e5ffc296c0f1cb6af6c2318f5300cf925352",
      "parents": [
        "e619960004d7c07e9d899ce7f368bd100f965f11"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 20:10:06 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 20:10:06 2026 +0000"
      },
      "message": "Roll Fuchsia Test Scripts from VObjlh3xw2P9sEbC_... to YSOIVj3qhlnCrMgpj... (#192884)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/fuchsia-test-scripts-flutter\nPlease CC chrome-fuchsia-engprod@google.com,codefu@google.com on the\nrevert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "e619960004d7c07e9d899ce7f368bd100f965f11",
      "tree": "0aeeb6c8d6687842e4c4e054a40d7846e6887cd5",
      "parents": [
        "cd11a2c37ff384ed3ac7dca872068025f102006c"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 17:56:13 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 17:56:13 2026 +0000"
      },
      "message": "Roll Skia from 6f559bafbed4 to 743412b186bf (1 revision) (#192879)\n\nhttps://skia.googlesource.com/skia.git/+log/6f559bafbed4..743412b186bf\n\n2026-09-16 thomsmit@google.com [graphite] Remove RunAlphas from\nMakeStrips\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "cd11a2c37ff384ed3ac7dca872068025f102006c",
      "tree": "dbfc64395243a3b930d3e217f232de87c6bb20e5",
      "parents": [
        "c9a23114668d20b0c81cb5054846315bc42ed461"
      ],
      "author": {
        "name": "Elijah Okoroh",
        "email": "okorohelijah@google.com",
        "time": "Wed Sep 16 17:13:12 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 17:13:12 2026 +0000"
      },
      "message": "remove bringup batch 4 (#192872)\n\nRemove bringup for https://github.com/flutter/flutter/pull/192463\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- [ ] I listed at least one issue that this PR fixes in the description\nabove.\n- [ ] I updated/added relevant in-code documentation (doc comments with\n`///`).\n- [ ] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\n- [ ] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [ ] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [x] All existing and new tests are passing.\n\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "c9a23114668d20b0c81cb5054846315bc42ed461",
      "tree": "952a58c880ef253f1897bbc08fa2ead5739d8dbc",
      "parents": [
        "154e6f34f6cade05ab61890164f0d734aa05e70c"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 15:39:49 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 15:39:49 2026 +0000"
      },
      "message": "Roll Packages from bebbb5724eb1 to c2b58e1a97fb (8 revisions) (#192876)\n\nhttps://github.com/flutter/packages/compare/bebbb5724eb1...c2b58e1a97fb\n\n2026-09-15 stuartmorgan@google.com [local_auth] Convert implementation\nto Kotlin (flutter/packages#12635)\n2026-09-15 mhmmd.bayraktar@gmail.com [pigeon] Treat NSNull as null for\nnon-null Flutter API returns (flutter/packages#12531)\n2026-09-15 daniel.leon@cloudsufi.com [espresso] Adopt code-excerpts for\nREADME (flutter/packages#12644)\n2026-09-15 daniel.leon@cloudsufi.com [pointer_interceptor] Adopt\ncode-excerpts for README (flutter/packages#12641)\n2026-09-15 47866232+chunhtai@users.noreply.github.com [ci] Checks\nunmerged batch release sync back before next release\n(flutter/packages#12868)\n2026-09-15 puneetkukreja98@gmail.com [material_ui] Add sortIconBuilder\nto DataTable, PaginatedDataTable, and DataTableThemeData\n(flutter/packages#12645)\n2026-09-15 10687576+bparrishMines@users.noreply.github.com\n[cross_file_platform_interface] Platform interface implementation of\n`cross_file` (flutter/packages#12825)\n2026-09-15 10687576+bparrishMines@users.noreply.github.com [cross_file]\nMove cross_file into a federated cross_file directory\n(flutter/packages#12869)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/flutter-packages-flutter-autoroll\nPlease CC flutter-ecosystem@google.com on the revert to ensure that a\nhuman\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "154e6f34f6cade05ab61890164f0d734aa05e70c",
      "tree": "60d45250d91bb73880a85c50a852bd1850180d10",
      "parents": [
        "9babbe6384da96cb5afe2209776fa759e0598b91"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 12:08:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 12:08:31 2026 +0000"
      },
      "message": "Roll Skia from 9875bb59e3eb to 6f559bafbed4 (1 revision) (#192862)\n\nhttps://skia.googlesource.com/skia.git/+log/9875bb59e3eb..6f559bafbed4\n\n2026-09-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\nvulkan-deps from a72170d5b866 to 0bd3b3284048 (5 revisions)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "9babbe6384da96cb5afe2209776fa759e0598b91",
      "tree": "03d12ed08d6863a458d9e4406edfb0670b05254f",
      "parents": [
        "60bae28e4b48bec6449455df7e6b294d5467a5a8"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 10:58:24 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 10:58:24 2026 +0000"
      },
      "message": "Roll Dart SDK from 1864f7826e6c to 9ee905f1c015 (1 revision) (#192855)\n\nhttps://dart.googlesource.com/sdk.git/+log/1864f7826e6c..9ee905f1c015\n\n2026-09-16 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-233.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "60bae28e4b48bec6449455df7e6b294d5467a5a8",
      "tree": "c15d5d8418d03264122fe381e20f15599ba1228c",
      "parents": [
        "6ec54d2b55852ef40771157232a8d4db403d4017"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 09:00:09 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 09:00:09 2026 +0000"
      },
      "message": "Roll Skia from 14da4fce14a3 to 9875bb59e3eb (2 revisions) (#192850)\n\nhttps://skia.googlesource.com/skia.git/+log/14da4fce14a3..9875bb59e3eb\n\n2026-09-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE\nfrom 3c00aca547d8 to 2db891493f26 (13 revisions)\n2026-09-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn\nfrom 0987c3df0bd4 to 4aefbf1ef607 (5 revisions)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "6ec54d2b55852ef40771157232a8d4db403d4017",
      "tree": "05d36c2b6ca51bf38b2ab224190e3bd11aab3cfc",
      "parents": [
        "3cdba02f437e37a1a29adfad3c95e6fcf6b3554c"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 07:01:28 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 07:01:28 2026 +0000"
      },
      "message": "Roll Skia from 8608fa7a9da1 to 14da4fce14a3 (1 revision) (#192846)\n\nhttps://skia.googlesource.com/skia.git/+log/8608fa7a9da1..14da4fce14a3\n\n2026-09-16 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\ndebugger-app-base from 6b9f11c17f31 to 3b6994c509e4\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "3cdba02f437e37a1a29adfad3c95e6fcf6b3554c",
      "tree": "3e8b35eff15ebc8edc8148ae59c8ffaede717655",
      "parents": [
        "0430750650f945a2bc2de8163e21e99fd9a7c8d4"
      ],
      "author": {
        "name": "b-luk",
        "email": "97480502+b-luk@users.noreply.github.com",
        "time": "Wed Sep 16 05:42:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 05:42:18 2026 +0000"
      },
      "message": "Fix incorrect UberSDF pixelsize used for stroked shapes (#192659)\n\nSee\nhttps://github.com/flutter/flutter/pull/192267#issuecomment-5605951249:\n\nWe get bad hairline stroking due to uber_sdf.frag calculating pixel size\nfor stroked shapes using `pixelSize(sdf)`\n[here](https://github.com/flutter/flutter/blob/63b9518f16bc0548f0d9daeaa3966ffcb0a7e28b/engine/src/flutter/impeller/entity/shaders/uber_sdf.frag#L322).\n`pixelSize(sdf)` can give incorrect results when dealing with\nshapes/strokes with width that is close to or less than 1 pixel (due to\nresolution limits of the `dFdx(sdf), dFdy(sdf)` that it uses). For\nstroked shapes, we can simply use the pixel size of the base filled\nshape.\n\nFixes https://github.com/flutter/flutter/issues/192658\n\nAdded a new golden test that draws the shape from those comments.\n\n### Before:\n\u003cimg width\u003d\"1024\" height\u003d\"768\"\nalt\u003d\"impeller_Play_AiksTest_CanRenderTransformedRectWithNearVerticalEdgeHairline_MetalSDF\"\nsrc\u003d\"https://github.com/user-attachments/assets/c80c13ce-cc8d-4639-a806-e128981f8fa6\"\n/\u003e\n\n### After:\n\u003cimg width\u003d\"1024\" height\u003d\"768\"\nalt\u003d\"impeller_Play_AiksTest_CanRenderTransformedRectWithNearVerticalEdgeHairline_MetalSDF\"\nsrc\u003d\"https://github.com/user-attachments/assets/dd0b10bf-6bb1-4c11-9367-dfdaf74a56a7\"\n/\u003e\n\n### Zoomed in version of before/after from\nhttps://github.com/flutter/flutter/pull/192267#issuecomment-5605951249:\n\u003cimg width\u003d\"366\" height\u003d\"1028\" alt\u003d\"image\"\nsrc\u003d\"https://github.com/user-attachments/assets/09f1ebf9-d14f-4b31-bc65-a545d3a3317b\"\n/\u003e\n\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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- [ ] All existing and new tests are passing.\n\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "0430750650f945a2bc2de8163e21e99fd9a7c8d4",
      "tree": "55df2f03160c4967b4ca746fdf9cf0d972cc5e2a",
      "parents": [
        "956e0e24696f8e0b59afe2cbb711595b6058a8ff"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 05:27:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 05:27:08 2026 +0000"
      },
      "message": "Roll Dart SDK from fa55fbb5dc06 to 1864f7826e6c (1 revision) (#192840)\n\nhttps://dart.googlesource.com/sdk.git/+log/fa55fbb5dc06..1864f7826e6c\n\n2026-09-16 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-232.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "956e0e24696f8e0b59afe2cbb711595b6058a8ff",
      "tree": "918fd44aac8579ddca0bfd29a2de4b6724a506fb",
      "parents": [
        "66afb828fc5d61489674dd99b64241221ef3f2a3"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Wed Sep 16 01:04:23 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 01:04:23 2026 +0000"
      },
      "message": "Roll Skia from c440712584c7 to 8608fa7a9da1 (9 revisions) (#192835)\n\nhttps://skia.googlesource.com/skia.git/+log/c440712584c7..8608fa7a9da1\n\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\nvulkan-deps from ad9434a40d67 to a72170d5b866 (9 revisions)\n2026-09-15 bryanenriquegv@google.com [spanify] Rewrite C-style arrays to\nstd::array and std::to_array\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15 bryanenriquegv@google.com [spanify] Rewrite C-style arrays to\nstd::array and std::to_array\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll\nDawn from 64f9d221be0d to 0987c3df0bd4 (7 revisions)\n2026-09-15 nathanasanchez@google.com Enable\nVK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION for Android\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "66afb828fc5d61489674dd99b64241221ef3f2a3",
      "tree": "fce92a29d168b7ed427fa9d27e326e8967806abb",
      "parents": [
        "ff7eec84cc066b0340ded32b266e628517f9d65f"
      ],
      "author": {
        "name": "Gray Mackall",
        "email": "34871572+gmackall@users.noreply.github.com",
        "time": "Wed Sep 16 00:06:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 00:06:31 2026 +0000"
      },
      "message": "[Android] Fix the HCPP SurfaceControl transaction-list race and split the transaction entry points (#192606)\n\n## Description\n\nFix the Android 14+ HCPP transaction-list race. The raster thread added\nto the pending transaction list while the platform thread swapped it,\nleaving null entries that made `merge(null)` throw and abort the engine\nthrough JNI.\n\n- Guard the pending raster transaction list with one lock shared by\nraster-thread additions and platform-thread draining. The active raster\ntransaction list and both platform transaction slots are confined to the\nplatform thread.\n- Split the entry points by caller rather than inferring the thread at\nruntime: `createTransaction()` is the raster/JNI entry and always\nreturns an isolated transaction, while a private `platformTransaction()`\nconsolidates platform-thread mutations (clips, overlay visibility) into\none transaction per frame.\n- Close platform transactions once they are merged or discarded. Raster\ntransactions are not closed here, because their native producer may\nstill be writing through them.\n- Detached-view handling is unchanged: `onEndFrame()` still allocates a\nmerge destination, merges, invalidates and applies on every frame,\nexactly as before.\n- Remove the unused `applyTransactions()` JNI path, which nothing has\never called.\n\nThis fixes the Java-side list corruption only. Two pre-existing native\nownership hazards remain, and both need the same follow-up:\n\n1. `AHBSwapchainImplVK::Present` writes through the borrowed\n`ASurfaceTransaction*` after the transaction has been published to Java,\nso a merge on the platform thread can race those writes.\n2. Once Java drops its last reference, the `NativeAllocationRegistry`\ncleaner can free the native transaction while native code is still using\nit. Avoiding an explicit `close()` narrows this window but does not\nclose it.\n\nFixing either one properly requires the native side to retain the\ntransaction and publish it only after the producer has finished writing.\nThat is a separate change.\n\n## Tests\n\nCoverage includes platform consolidation, raster isolation, the separate\nmerge destination, transactions still in use by a paused producer,\ndiscarded platform transactions, and detached frames. The tests drive\nplatform mutations through their real call sites rather than calling\n`createTransaction()` directly.\n\nVerified locally with a Robolectric harness built against these sources:\n\n- 20/20 `PlatformViewsController2Test` tests pass.\n- The stress test passes 10 consecutive runs with 0 skips (3.4s total).\n- With the locks removed from a copy of the sources, the same test\nreports `NullPointerException: Cannot read field \"mResizedSurfaces\"\nbecause \"other\" is null` in 10/10 runs — the production stack trace,\nwhich `FML_CHECK(fml::jni::CheckException(env))` turns into an `abort()`\non device.\n\nDetection is probabilistic and one-sided: the test contains no timing\nassertions, so scheduling decides whether it catches an unsynchronized\nimplementation, never whether it fails a synchronized one. A barrier\ntimeout skips the run; a producer that fails to terminate fails it. It\ncovers list corruption, not liveness, and does not exercise the native\nwrites described above.\n\nJava formatting and `git diff --check` pass.\n\n---\n\n*Portions of this change and this description were authored with AI\nassistance.*\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- [ ] I listed at least one issue that this PR fixes in the description\nabove.\n- [x] I updated/added relevant in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "ff7eec84cc066b0340ded32b266e628517f9d65f",
      "tree": "72b625a00c55bd6b8f8eb419687f1e5fbd55dc04",
      "parents": [
        "f4de16032fbbebd6272cd94d8d20a5a551e61f62"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Tue Sep 15 23:50:21 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 23:50:21 2026 +0000"
      },
      "message": "Roll Dart SDK from c870e8afe036 to fa55fbb5dc06 (4 revisions) (#192832)\n\nhttps://dart.googlesource.com/sdk.git/+log/c870e8afe036..fa55fbb5dc06\n\n2026-09-15 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-231.0.dev\n2026-09-15 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-230.0.dev\n2026-09-15 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-229.0.dev\n2026-09-15 dart-internal-merge@dart-ci-internal.iam.gserviceaccount.com\nVersion 3.14.0-228.0.dev\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/dart-sdk-flutter\nPlease CC codefu@google.com,dart-vm-team@google.com on the revert to\nensure that a human\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "f4de16032fbbebd6272cd94d8d20a5a551e61f62",
      "tree": "afa86375f5f362103a499d5c2a4604539920c8e2",
      "parents": [
        "22b3584c4dfc63e20f63f267ee213487234a4dbc"
      ],
      "author": {
        "name": "Gray Mackall",
        "email": "34871572+gmackall@users.noreply.github.com",
        "time": "Tue Sep 15 23:00:40 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 23:00:40 2026 +0000"
      },
      "message": "Wait for first native frame displayed in android_engine_test (#191823)\n\nTry to deflake android_engine_test by waiting for\nFlutterUiDisplayListener.onFlutterUiDisplayed before taking screenshots.\n\nShould help with https://github.com/flutter/flutter/issues/185070"
    },
    {
      "commit": "22b3584c4dfc63e20f63f267ee213487234a4dbc",
      "tree": "c9f6bf1281f3669392a87417ca6750fdf785f746",
      "parents": [
        "c4d32e497dda8d49eca70900166223359c2a1807"
      ],
      "author": {
        "name": "Jackson Gardner",
        "email": "jacksongardner@google.com",
        "time": "Tue Sep 15 22:54:48 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 22:54:48 2026 +0000"
      },
      "message": "Build wasm_release local build on arm64 macs. (#192817)\n\nFor non-RBE builds like wasm_release and wasm_debug_unopt, x64 Macs are\nreally slow and often time out. On arm macs, the builds seem to stay\nunder 20 minutes."
    },
    {
      "commit": "c4d32e497dda8d49eca70900166223359c2a1807",
      "tree": "7722bb4178bdf5bef33cc4b5453ed0612ccf401a",
      "parents": [
        "b4da7f4d45ed357692e22b077dad62ada04c7be9"
      ],
      "author": {
        "name": "Daco Harkes",
        "email": "dacoharkes@google.com",
        "time": "Tue Sep 15 22:53:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 22:53:08 2026 +0000"
      },
      "message": "[flutter_tools] Replace KernelAsset with Flutter-owned NativeAssetsMa… (#192800)\n\nSince https://github.com/flutter/flutter/pull/159322, Flutter no longer\nembeds native assets into dill files. Instead, `flutter_tools`\nserializes a `native_assets.json` manifest that is parsed by the C++\nengine. However, the format was still using the same toJson as for the\ndill files, making the serialization and deserialization asymmetric.\n\nMoreover, because of this asymmetry, a lot of classes were imported from\n`hooks_runner` only to construct objects and then to destruct them again\nand construct them in a different way for the Flutter internal treatment\nof the data.\n\nThis PR removes the use of all of those classes, and adds the json\nserialization.\n\nThe PR is almost code size neutral: +426 -376, but the added code is\nmuch simpler to understand (data classes and a toJson) while the removed\ncode was ugly shuffling things across classes defined in different\npackages.\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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."
    },
    {
      "commit": "b4da7f4d45ed357692e22b077dad62ada04c7be9",
      "tree": "a69f08ed69ca8982429746cec25687a834e0f3db",
      "parents": [
        "37410f24e640e518ef0a41858c6c79ba8bcff581"
      ],
      "author": {
        "name": "LouiseHsu",
        "email": "louisehsu@google.com",
        "time": "Tue Sep 15 22:51:22 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 22:51:22 2026 +0000"
      },
      "message": "[iOS] Add Translate API support to Engine (#189878)\n\nSplit out engine portion of\nhttps://github.com/flutter/flutter/pull/180021 b/c of cupertino/material\nfreeze.\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."
    },
    {
      "commit": "37410f24e640e518ef0a41858c6c79ba8bcff581",
      "tree": "f0c4f03ecdf360add0780d824bbc13d227356df9",
      "parents": [
        "5be6f1084d64cae73a0acf1e512e3e30a1e7ac79"
      ],
      "author": {
        "name": "Elijah Okoroh",
        "email": "okorohelijah@google.com",
        "time": "Tue Sep 15 20:29:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 20:29:14 2026 +0000"
      },
      "message": "Migrate ios driver tests batch 4 to simulators (#192463)\n\nPart of https://github.com/flutter/flutter/issues/186414\n\nThis batch migrates 2 Devicelab tests to simulators:\n* `external_ui_integration_test_ios`\n(`external_textures_integration_test_ios`)\n* `hello_world_impeller_ios_sdfs`\n\nChanges:\n- Moved targets in `.ci.yaml` from `Mac_ios` to `Mac` (Simulator) with\n`bringup: true` and injected `ruby` dependency.\n- Changed tags to `[\"devicelab\", \"hostonly\", \"mac\"]`.\n- Wrapped `external_textures_integration_test_ios` Devicelab task with\n`testWithNewIOSSimulator`.\n- Migrated `dev/integration_tests/external_textures` and\n`examples/hello_world` iOS projects to adopt `UIScene` ."
    },
    {
      "commit": "5be6f1084d64cae73a0acf1e512e3e30a1e7ac79",
      "tree": "7d9315d561e175a18128c5eded9fda16c8ffbdb0",
      "parents": [
        "6d3ee1f75a80bcbe83b8f6cc69133f9883ce7da0"
      ],
      "author": {
        "name": "Danny Tuppeny",
        "email": "danny@tuppeny.com",
        "time": "Tue Sep 15 19:14:24 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 19:14:24 2026 +0000"
      },
      "message": "Roll pub packages (#192815)\n\nThis PR was generated by `flutter update-packages --force-upgrade`.\n\nThe only update is a minor change to `package:dap_adapters` which\nimprove the stack frame URI parsing."
    },
    {
      "commit": "6d3ee1f75a80bcbe83b8f6cc69133f9883ce7da0",
      "tree": "7d9315d561e175a18128c5eded9fda16c8ffbdb0",
      "parents": [
        "416cfc7469cdac46f8d89fe96a45d60d79a72c10"
      ],
      "author": {
        "name": "Chris Bracken",
        "email": "chris@bracken.jp",
        "time": "Tue Sep 15 19:06:43 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 19:06:43 2026 +0000"
      },
      "message": "[iOS] Split FlutterEngine setUpShell into orthogonal helpers (#192808)\n\n`-setUpShell:withVMServicePublication:` did three things:\n* shell mechanics: taking ownership of the shell and building the two\n`FlutterFMLTaskRunner` wrappers\n* engine configuration: channels, locales, displays, the VM Service\npublisher, and the platform view channels\n* additional shell configuration: write GPU availability.\n\nIt turns out that after recent refactoring, we already set GPU\navailability during Shell construction, so the write was redundant and\nhad no effect:\n* `-createShell:` passes `_isGpuDisabled` to `Shell::Create`, and the\n`Shell` constructor initialises the switch from it.\n* `Shell::Spawn` reads the spawning engine\u0027s switch and passes it to the\nspawned engine\u0027s constructor. `-spawnWithEntrypoint:` copies the\nspawning engine\u0027s `_isGpuDisabled` into the child engine. Both the\nengine flag and the switch will always match since they\u0027re both set in\n`-setIsGpuDisabled:`.\n\nThis deletes the GPU avaialability call and splits the reset into\nseparate methods:\n* `-adoptShell:`\n* `-configureForRunningShellWithVMServicePublication:`\n\nThis is preparation for extracting the shell-ownership parts of\n`FlutterEngine` into a separate backend class.\n\nThis is a refactor with no behavioural change, covered by existing\ntests.\n\nIssue: https://github.com/flutter/flutter/issues/112232\n\n\u003c!--\nThanks for filing a pull request!\nReviewers are typically assigned within a week of filing a request.\nTo learn more about code review, see our documentation on Tree Hygiene:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n--\u003e\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 in-code documentation (doc comments with\n`///`).\n- [x] If this PR introduces a new feature or capability, I created and\nlinked a website documentation issue or PR in [flutter/website] (or\nverified none is needed).\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\nIf you need help, consider asking for advice on the #hackers-new channel\non [Discord].\n\nIf this change needs to override an active code freeze, provide a\ncomment explaining why. The code freeze workflow can be overridden by\ncode reviewers. See pinned issues for any active code freezes with\nguidance.\n\n**Note**: The Flutter team is currently trialing the use of [Gemini Code\nAssist for\nGitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).\nComments from the `gemini-code-assist` bot should not be taken as\nauthoritative feedback from the Flutter team. If you find its comments\nuseful you can update your code accordingly, but if you are unsure or\ndisagree with the feedback, please feel free to wait for a Flutter team\nmember\u0027s review for guidance on which automated comments should be\naddressed.\n\n\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[flutter/tests]: https://github.com/flutter/tests\n[flutter/website]: https://github.com/flutter/website\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Discord]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md"
    },
    {
      "commit": "416cfc7469cdac46f8d89fe96a45d60d79a72c10",
      "tree": "597ba4150c5807eed17fdc9daff27f7483764586",
      "parents": [
        "434c957a50647ed8b2c0a6926dcfe76cd22e0d75"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Tue Sep 15 19:03:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 19:03:07 2026 +0000"
      },
      "message": "[tool] Migrate BuildApkCommand and Android build toolchain to modular dependency injection (#190776)\n\n## Summary\n\nPart 14 of the modular dependency injection migration.\n\n* Migrates `BuildApkCommand` (`flutter build apk`) and shared Android\ntoolchain components to modular constructor dependency injection:\n  ```dart\n  BuildApkCommand({\n    required AndroidBuilder androidBuilder,\n    required AndroidContext androidContext,\n    required BuildSystem buildSystem,\n    required ToolContext toolContext,\n    bool verboseHelp \u003d false,\n  })\n  ```\n* Requires non-nullable `AndroidBuilder` in `BuildCommand` and\n`AndroidGradleBuilder`, eliminating ambient `globals.dart` and\n`context.get\u003cAndroidBuilder\u003e()` fallbacks.\n* Requires explicit `Analytics` and `Logger` in `exitWithNoSdkMessage`.\n* Defers `BuildAppBundleCommand` and `BuildAarCommand` migrations to\nstacked follow-up PRs\n([#190778](https://github.com/flutter/flutter/pull/190778) /\n`di/14b-build-appbundle` and `di/14c-build-aar`).\n* Converts Android build command tests to hermetic `testWithoutContext`\nwhere applicable.\n\nPart of https://github.com/flutter/flutter/issues/188471\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "434c957a50647ed8b2c0a6926dcfe76cd22e0d75",
      "tree": "44288f7c9190ac5588ffeac343f43b7a13c979b5",
      "parents": [
        "769a7b8042d0388fa6c22f320922ff79c14d6f15"
      ],
      "author": {
        "name": "flutter-pub-roller-bot",
        "email": "137456488+flutter-pub-roller-bot@users.noreply.github.com",
        "time": "Tue Sep 15 18:52:20 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 18:52:20 2026 +0000"
      },
      "message": "Roll pub packages (#192819)\n\nThis PR was generated by `flutter update-packages --force-upgrade`."
    },
    {
      "commit": "769a7b8042d0388fa6c22f320922ff79c14d6f15",
      "tree": "95305dcb2ee5fc05c5ee56d87a431315947935f1",
      "parents": [
        "bfa129a7d737e1ffa7c7ee8c5bd0cae70795fa36"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Tue Sep 15 17:37:20 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:37:20 2026 +0000"
      },
      "message": "Roll Skia from 59904977fcbb to c440712584c7 (19 revisions) (#192813)\n\nhttps://skia.googlesource.com/skia.git/+log/59904977fcbb..c440712584c7\n\n2026-09-15 nathanasanchez@google.com [Graphite] Add include for\nSK_DUMP_TASKS code\n2026-09-15 alexisdavidc@google.com [fuzz] Reject large paths in fuzzer\nbuilds\n2026-09-15\nchrome-branch-day@chops-service-accounts.iam.gserviceaccount.com Update\nSkia milestone to 156\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Manual roll\nDawn from 47a5943a2006 to 64f9d221be0d (6 revisions)\n2026-09-15 alexisdavidc@google.com [fuzz] Limit loop termination limit\nin SkSL for fuzzer builds\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15 maryla@google.com Fix divide-by-zero in PCHIP edge case.\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\nvulkan-deps from d60dc547ea78 to ad9434a40d67 (10 revisions)\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll ANGLE\nfrom 9d4f4abe5c5c to 3c00aca547d8 (10 revisions)\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll\ndebugger-app-base from a1fe46e011c1 to 6b9f11c17f31\n2026-09-15 skia-autoroll@skia-public.iam.gserviceaccount.com Roll Dawn\nfrom 396fe14739bf to 47a5943a2006 (12 revisions)\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-15\nrecipe-mega-autoroller@chops-service-accounts.iam.gserviceaccount.com\nRoll recipe dependencies (trivial).\n2026-09-14 michaelludwig@google.com [graphite] Detect when 2D transfers\ncan be 1D\n2026-09-14 bryanenriquegv@google.com [spanify] Rewrite C-style arrays to\nstd::array and std::to_array\n2026-09-14 bryanenriquegv@google.com [spanify] Rewrite C-style arrays to\nstd::array and std::to_array\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/skia-flutter-autoroll\nPlease CC codefu@google.com,kjlubick@google.com,michaelludwig@google.com\non the revert to ensure that a human\nis aware of the problem.\n\nTo file a bug in Skia: https://bugs.chromium.org/p/skia/issues/entry\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    },
    {
      "commit": "bfa129a7d737e1ffa7c7ee8c5bd0cae70795fa36",
      "tree": "43e3bc8a23d3ab662b9b661ccf91919af9eb2834",
      "parents": [
        "8737f11506e7ef6be76343703b1dd8324cede696"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Tue Sep 15 17:14:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:14:07 2026 +0000"
      },
      "message": "[tool] Migrate CreateCommand to modular dependency injection (#190785)\n\n## Summary\n\nPart 18 of the modular dependency injection migration.\n\n* Migrates `CreateCommand`, `CreateBase`, and `WidgetPreviewCommand` to\nmodular constructor dependency injection with zero fallbacks:\n- `CreateCommand({required ToolContext toolContext, required\nthis.androidContext, required this.appleContext,\nExtensionTemplateManager? extensionTemplateManager, required\nTemplateRenderer templateRenderer, bool verboseHelp \u003d false})`\n- `WidgetPreviewCommand({required ShutdownHooks shutdownHooks, required\nToolContext toolContext, required bool verboseHelp, ...})`\n* Requires non-nullable context objects (`ToolContext`,\n`AndroidContext`, `AppleContext`) and `TemplateRenderer`, eliminating\nindividual constructor fallback parameters and ambient `globals.*`.\n* Migrates unit tests in\n`packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart`\nto hermetic `testWithoutContext`.\n\nPart of https://github.com/flutter/flutter/issues/188471"
    },
    {
      "commit": "8737f11506e7ef6be76343703b1dd8324cede696",
      "tree": "2c76380fcae8ec59a9d79d6c420654d61dc39f9f",
      "parents": [
        "50108652b7df0367dbe035e0ed2f2769520c1330"
      ],
      "author": {
        "name": "Ben Konyi",
        "email": "bkonyi@google.com",
        "time": "Tue Sep 15 17:12:06 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:12:06 2026 +0000"
      },
      "message": "[flutter_tools] Migrate BuildBundleCommand to modular dependency injection (#192462)\n\n## Description\n\nThis PR splits `BuildBundleCommand` migration out of\n[#190783](https://github.com/flutter/flutter/pull/190783) (part of\nmodular dependency injection migration in flutter_tools).\n\n- Migrates `BuildBundleCommand` to modular dependency injection with\n`BuildSystem`, `FeatureFlags`, and `ToolContext`.\n- Exposes `FeatureFlags? featureFlags` on `FlutterCommandRunner`.\n- Updates `FlutterCommand.targetFile` to use `toolContext?.fs`.\n- Converted `build_bundle_test.dart` from permeable context tests to\nhermetic `testWithoutContext` tests."
    },
    {
      "commit": "50108652b7df0367dbe035e0ed2f2769520c1330",
      "tree": "26cd12207b63152f311cfe6036e052f925603b95",
      "parents": [
        "0a34be73565ebf9f34d603e1e5e2aff3d427630e"
      ],
      "author": {
        "name": "Daco Harkes",
        "email": "dacoharkes@google.com",
        "time": "Tue Sep 15 17:00:10 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:00:10 2026 +0000"
      },
      "message": "Migrate SDK constraints for record_use and data_asset integration test packages to ^3.13.0-0 (#192728)\n\nFollow up of https://github.com/flutter/flutter/pull/192649\n\nI don\u0027t believe there is any reason the testing packages owned by me had\na different SDK constraint."
    },
    {
      "commit": "0a34be73565ebf9f34d603e1e5e2aff3d427630e",
      "tree": "53bd52a33227ef05cf583b031fe91d75b336b8af",
      "parents": [
        "b5e159ff1255315310eec6f372f1453162b226dc"
      ],
      "author": {
        "name": "zhongliugo",
        "email": "zhongliu88889@gmail.com",
        "time": "Tue Sep 15 16:54:11 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 16:54:11 2026 +0000"
      },
      "message": "[tool] Defer app.restart until the app has finished starting (#192650)\n\nFixes #192227\n\n**Problem**\n\n`AppDomain.launch` sends the `app.start` event, which carries the app\nID, before `ResidentRunner.run()` has compiled and called\n`generator.accept()`. A client that acts on that ID immediately can land\nan `app.restart` in the gap, producing a `recompile` against a compiler\nwith no accepted baseline. `frontend_server` then crashes on\n`lastKnownGoodResult!`, and the app fails to start.\n\n**Fix**\n\n`AppDomain.restart` now waits on a new `AppInstance.started` before\nentering the debounce queue, so the compiler is never asked to recompile\nbefore it has a baseline.\n\n**Demo**\n\nNo URLs: the bug is in the `flutter run --machine` daemon protocol, not\nin rendered output, so a deployed build has no daemon to race.\n\nVerified locally with a harness that sends `app.restart` during the\ninitial compile, which is the window this closes. Before, it reproduces\nthe exact trace from the issue and the app\ndies:\n\n    Null check operator used on a null value\n#0 FrontendCompiler.writeJavaScriptBundle (frontend_server.dart:1100)\n#1 FrontendCompiler.recompileDelta (frontend_server.dart:1312)\n#2 listenAndCompile.\u003canonymous closure\u003e (frontend_server.dart:1806)\n    App failed to start\n\nAfter, the restart is held until `app.started` and returns `code: 0`."
    },
    {
      "commit": "b5e159ff1255315310eec6f372f1453162b226dc",
      "tree": "7ee839aeb1ad7a5c0856d40ec441ba7fb7c2791e",
      "parents": [
        "0734985604a562166a5792343dbc73538244901e"
      ],
      "author": {
        "name": "Pranta Dutta",
        "email": "44747303+theprantadutta@users.noreply.github.com",
        "time": "Tue Sep 15 16:24:40 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 16:24:40 2026 +0000"
      },
      "message": "Suggest the -d flag after interactive device selection (#188941)\n\nWhen `flutter run` (or any command that resolves a target device) finds\nmultiple devices and no `-d` flag was given, it interactively prompts\nthe user to pick one — but never tells them how to skip that prompt next\ntime. This implements the suggestion from\nhttps://github.com/flutter/flutter/issues/63541 (and follows the pointer\n@jmagman gave there): after the user picks a device, print\n\n```\nTo skip this prompt in the future, pass the device id to the \"-d\" flag, e.g. \"-d macos\".\n```\n\nwith the id of the device they just chose.\n\nThe hint is printed in both selection flows:\n\n- `TargetDevices._chooseOneOfAvailableDevices` (the standard flow),\nright after the selection is parsed.\n-\n`TargetDevicesWithExtendedWirelessDeviceDiscovery._selectFromDevicesAndCheckForWireless`\n(the macOS + iOS wireless flow), after the chosen-device future\ncompletes rather than inside `TargetDeviceSelection.userSelectDevice` —\nprinting it at selection time would interleave with (and get wiped by)\nthe line-clearing/reprinting that happens when wireless device discovery\nfinishes while the prompt is up.\n\nThe 17 existing interactive-selection tests that assert the full status\ntext have been updated to include the hint line, and the eleventh-device\ntest now asserts the hint contains the correct id (`-d id-11`) rather\nthan the fake default.\n\nFixes https://github.com/flutter/flutter/issues/63541\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\u003c!-- Links --\u003e\n[Contributor Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview\n[AI contribution guidelines]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines\n[Tree Hygiene]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md\n[test-exempt]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests\n[Flutter Style Guide]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md\n[Features we expect every widget to implement]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement\n[CLA]: https://cla.developers.google.com/\n[breaking change policy]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes\n[Data Driven Fixes]:\nhttps://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md\n\nCo-authored-by: Ben Konyi \u003cbkonyi@google.com\u003e"
    },
    {
      "commit": "0734985604a562166a5792343dbc73538244901e",
      "tree": "9ebaebeecdc3fd4c03523575be27b4fb999c605a",
      "parents": [
        "728b40b9967a34a8c3a343d9f8d1314f46ca98b2"
      ],
      "author": {
        "name": "engine-flutter-autoroll",
        "email": "engine-flutter-autoroll@skia.org",
        "time": "Tue Sep 15 15:35:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 15:35:37 2026 +0000"
      },
      "message": "Roll Packages from 9caa77c796c2 to bebbb5724eb1 (9 revisions) (#192809)\n\nhttps://github.com/flutter/packages/compare/9caa77c796c2...bebbb5724eb1\n\n2026-09-15 5684363+tenninebt@users.noreply.github.com\n[google_maps_flutter_platform_interface] Add onPointOfInterestTap\nsupport (flutter/packages#12752)\n2026-09-14 stuartmorgan@google.com [google_maps_flutter] Adopts new\nasync/await Swift Pigeon support (flutter/packages#12860)\n2026-09-14 109692895+Massinissa-Mouhoub@users.noreply.github.com\n[material_ui] Fix `todayBorder` color being overridden by\n`todayForegroundColor` in `YearPicker` (flutter/packages#12697)\n2026-09-13 engine-flutter-autoroll@skia.org Roll Flutter from\n2553f89be1ef to 8b3e8f5a1e64 (4 revisions) (flutter/packages#12856)\n2026-09-12 stuartmorgan@google.com [google_maps_flutter] Convert\nremaining code to Swift (flutter/packages#12768)\n2026-09-12 engine-flutter-autoroll@skia.org Roll Flutter from\n63b9518f16bc to 2553f89be1ef (62 revisions) (flutter/packages#12855)\n2026-09-12 engine-flutter-autoroll@skia.org Roll Flutter (stable) from\nd3b14c876900 to 9584c6713b32 (15 revisions) (flutter/packages#12854)\n2026-09-12 36861262+QuncCccccc@users.noreply.github.com [material_ui]\nUpdate gen_defaults color helper (flutter/packages#12846)\n2026-09-11 brunocorona.alcantar@gmail.com [material_ui] Port\nflutter/flutter #185475 \"Accessibility: Add semanticLabel to MenuAnchor\"\n(flutter/packages#12806)\n\nIf this roll has caused a breakage, revert this CL and set the roller\nto dry run mode using the controls here:\nhttps://autoroll.skia.org/r/flutter-packages-flutter-autoroll\nPlease CC flutter-ecosystem@google.com on the revert to ensure that a\nhuman\nis aware of the problem.\n\nTo file a bug in Flutter:\nhttps://github.com/flutter/flutter/issues/new/choose\n\nTo report a problem with the AutoRoller itself, please file a bug:\nhttps://issues.skia.org/issues/new?component\u003d1389291\u0026template\u003d1850622\n\nDocumentation for the AutoRoller is here:\nhttps://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md"
    }
  ],
  "next": "728b40b9967a34a8c3a343d9f8d1314f46ca98b2"
}
