)]}'
{
  "commit": "c984e49fbd5fc987bc9df586bcb91fa657548b9b",
  "tree": "00a8c6722ecc98249b3d565c9dc139cbaac7cb86",
  "parents": [
    "bde0dad5000f9b5940c06cdaf95ad947a9878cca"
  ],
  "author": {
    "name": "Ben Konyi",
    "email": "bkonyi@google.com",
    "time": "Thu Oct 01 19:06:08 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Oct 01 19:06:08 2026 +0000"
  },
  "message": "[flutter_tools] Bootstrap DeviceManager in ToolDependencies (#193524)\n\n## Summary\n\nMigrates `DeviceManager` (`FlutterDeviceManager`) initialization out of\n`context_runner.dart` and into `ToolDependencies.bootstrap` in\n`tool_dependencies.dart`, exposing `deviceManager` on\n`ToolDependencies`.\n\n* Bootstraps `AndroidWorkflow`, `MacOSWorkflow`, `WindowsWorkflow`, and\n`FlutterDeviceManager` in `ToolDependencies.bootstrap`.\n* Removes the `DeviceManager` fallback from `context_runner.dart` and\nbinds `DeviceManager: () \u003d\u003e toolDeps.deviceManager` in `runner.dart`\nafter bootstrapping so unmigrated callers accessing\n`globals.deviceManager` resolve the bootstrapped instance.\n* Wires `toolDependencies.deviceManager` into `DaemonCommand` and\n`DevicesCommand` in `executable.dart`.\n* Adds unit test coverage in\n`packages/flutter_tools/test/general.shard/context/dependency_injection_test.dart`.\n\nPart of https://github.com/flutter/flutter/issues/188471\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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "34ded87dc85cbeff2c1070a6daf8af533f2a9f11",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/executable.dart",
      "new_id": "b584baef91039f98aa3813180cc062c129e9a322",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/executable.dart"
    },
    {
      "type": "modify",
      "old_id": "2e75d0ebff30c539a1e8e7182e4c027fa782e7b7",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/runner.dart",
      "new_id": "d4b9076a4d9792ea08772baecd18f400f2d77f74",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/runner.dart"
    },
    {
      "type": "modify",
      "old_id": "cb2bbe195d9c411a535ddea56a292c26fc992679",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/context/tool_dependencies.dart",
      "new_id": "d7ae74e4c56bd2548478ae689cc200c9e5f9d416",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/context/tool_dependencies.dart"
    },
    {
      "type": "modify",
      "old_id": "1fc201b3285a8937b6fd44feaa109a006a09af0d",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/context_runner.dart",
      "new_id": "807a9bd536dbf78e977142d93108a836872e00b2",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/context_runner.dart"
    },
    {
      "type": "modify",
      "old_id": "4e810c1402004cfa6b3c39e5ffa3efa05e3cee45",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/args_test.dart",
      "new_id": "1751b3a0218b5f9ca83d310df785bbb56d5276df",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/args_test.dart"
    },
    {
      "type": "modify",
      "old_id": "9ad35a1a630068ee8b23578c3f5bbc9d5fcf76c6",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/context/dependency_injection_test.dart",
      "new_id": "3797cda27ef4f23b328dd2414b123a15fd279daa",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/context/dependency_injection_test.dart"
    },
    {
      "type": "modify",
      "old_id": "288e5aab04eb216ab6e57f529de65a6f83b69b48",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/runner/runner_test.dart",
      "new_id": "1c278eac4bc7743a6f7144ebb241ec9cac878c28",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/runner/runner_test.dart"
    },
    {
      "type": "modify",
      "old_id": "329e13650c9f5bf2546092622b3df2075344e45f",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/src/fakes.dart",
      "new_id": "300ec4f7cefb1bcdd9ece7243c0879c0e703f327",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/src/fakes.dart"
    }
  ]
}
