)]}'
{
  "commit": "458c576ff8aefcfdc427d88addbaadb249a2c500",
  "tree": "cca6e85e92793996aea26de2f5f6a230505e6c9d",
  "parents": [
    "47ec0eb2ebb9b4c9b2cfb535aea68eee7b34f08f"
  ],
  "author": {
    "name": "Ben Konyi",
    "email": "bkonyi@google.com",
    "time": "Thu Aug 20 18:02:59 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Aug 20 18:02:59 2026 +0000"
  },
  "message": "[flutter_tools] Implement Diagnostics extension slice and doctor integration (#191162)\n\n## Description\n\nThis PR implements Step 3 of Flutter Tools Extensibility: the\nDiagnostics extension slice and doctor integration.\n\n### Architectural Overview\n1. **`package:flutter_tools_core`**:\n- Defines core, platform-agnostic diagnostic models: `ValidationType`,\n`ValidationMessage`, and `ValidationResult`.\n2. **`package:flutter_tools_extension`**:\n- Defines the `DiagnosticsExtension` interface and service contract\n(`getTitle()`, `runDiagnostics()`).\n3. **`package:flutter_tools_extension_linux_prototype`**:\n- Implements `LinuxExtensionDiagnostics` validator in the Linux\nprototype extension.\n4. **`packages/flutter_tools`**:\n- Implements `DiagnosticsExtensionClient` to query isolate extensions\nover RPC.\n- Introduces `ExtensionDoctorValidator` which adapts extension\ndiagnostic results into Flutter tool `DoctorValidator` instances.\n- Wires `ExtensionDoctorValidator` into `Doctor.validators` via\n`ExtensionManager`.\n- Deprecates duplicate diagnostic types in `doctor_validator.dart` in\nfavor of `package:flutter_tools_core` exports.\n\n## Related Issues\nPart of https://github.com/flutter/flutter/issues/190692\n\n## Tests\n- Added\n`packages/flutter_tools/packages/flutter_tools_core/test/diagnostics_test.dart`\n- Added\n`packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/test/linux_diagnostics_test.dart`\n- Added\n`packages/flutter_tools/test/general.shard/extension_protocol/diagnostics_service_test.dart`\n- Added\n`packages/flutter_tools/test/commands.shard/hermetic/tool_extensions_integration_test.dart`\n- Added\n`packages/flutter_tools/test/integration.shard/tool_extensions_test.dart`\n- Updated existing doctor and validator tests in `commands.shard` and\n`general.shard`.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bdb5cb823edcfec5d2afaeeb3ced0d14e97279e0",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/executable.dart",
      "new_id": "203b5df3308eb97a9cec1aa9096f5fe6595f0b3d",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/executable.dart"
    },
    {
      "type": "modify",
      "old_id": "15ff20f5f9c0b835e8816c9b51e4e392f7e80df3",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/android/android_workflow.dart",
      "new_id": "55978adce25827e61ad1dc3c84a0817c8c084017",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/android/android_workflow.dart"
    },
    {
      "type": "modify",
      "old_id": "5131df96364acbdb0019e6b1ea48d25206ecb302",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/commands/build_ios.dart",
      "new_id": "f81e9351baf27ea5d498c270af308b4070189d7c",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/commands/build_ios.dart"
    },
    {
      "type": "modify",
      "old_id": "9ee7b16af7af4de17cff339368088cdfbc92357e",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/commands/doctor.dart",
      "new_id": "cb3acaecf26c3a53e19367654d607011a080152e",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/commands/doctor.dart"
    },
    {
      "type": "modify",
      "old_id": "997950190cd188c4806f18fcbc1e5c9303cf45f3",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/doctor.dart",
      "new_id": "e28af601f47b19fec01b8cad4ba2c33a5cb36384",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/doctor.dart"
    },
    {
      "type": "modify",
      "old_id": "b9b6802adba302e090c04e480814d0a9137782af",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/doctor_validator.dart",
      "new_id": "89e33d8d15364b23854c6fa51a312eb61363815a",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/doctor_validator.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7c0b83c588210fb4bfbd20e8a6794cf5d42816f7",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/experimental/diagnostics.dart"
    },
    {
      "type": "modify",
      "old_id": "5e638e8e915d6e7b9f2b52f7108b95bcb2cdcb1b",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/experimental/extension_manager.dart",
      "new_id": "80d78f958e5b687b1f6ab6e902aa497dfae4e1bf",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/experimental/extension_manager.dart"
    },
    {
      "type": "modify",
      "old_id": "9702f83bffd08b29c51fbd45779f848daf87431f",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/http_host_validator.dart",
      "new_id": "26a4f76095023ccf72c060fbe23f19df8012e1a5",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/http_host_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "781728cf5567f3449e44b61f52c056001096e616",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/intellij/intellij.dart",
      "new_id": "d73f221b334d9694fbee7abb2383d8d23bf26d6f",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/intellij/intellij.dart"
    },
    {
      "type": "modify",
      "old_id": "2900f7dac6d39293a4ae37e6492293a61038094a",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/linux/linux_doctor.dart",
      "new_id": "d67ccbfb33daee3177137fba2d4c55427c7d92b5",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/linux/linux_doctor.dart"
    },
    {
      "type": "modify",
      "old_id": "4983344fc3c5229a347c0851d7750a045d4bade1",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/macos/cocoapods_validator.dart",
      "new_id": "57b3e5d06283f36cbda2137b074045731710c9fc",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/macos/cocoapods_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "4f7a57992cb77299b949f1e0fc465fef2ada8e84",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/macos/xcode_validator.dart",
      "new_id": "5693ea2ed84a17a457fdbe2102324d7b159ac944",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/macos/xcode_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "df8658d5e239a3f88858b16d7e3cc0f59fb93fe8",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/proxy_validator.dart",
      "new_id": "f169a72a241ad4f70258f5fc360c642a27447d84",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/proxy_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "3335e932f26edee3c585ce4eab139e971818d077",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/web/web_validator.dart",
      "new_id": "aa28f3bc8d0310957979553c0a5e60f8c98b3d27",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/web/web_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "41c1614c331bb3508783b9ff4ebdab869bd22a02",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/windows/visual_studio_validator.dart",
      "new_id": "0e957f5da188f7e74175860ee1aa696754d2daca",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/windows/visual_studio_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "2aa2f86644a2894b6c1d50d109af407cafa8572e",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/windows/windows_version_validator.dart",
      "new_id": "cd0c246377717588b510d6fca3193f88357df83b",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/windows/windows_version_validator.dart"
    },
    {
      "type": "modify",
      "old_id": "891c430cb5a31bc551e6c0ef99e7e699dbdc781f",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/packages/flutter_tools_core/lib/flutter_tools_core.dart",
      "new_id": "c72c40a005f4a4aa932f1a0525712e51988cd524",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_core/lib/flutter_tools_core.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1eb8e3ac24973880a212993b642aa7b5270f3ec3",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_core/lib/src/diagnostics.dart"
    },
    {
      "type": "modify",
      "old_id": "56be4a789496688647211c0cb032ccea394d6a79",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/packages/flutter_tools_core/pubspec.yaml",
      "new_id": "ac9ac6297dcf359b1913bbd1489c222eedb34215",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_core/pubspec.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "26935c59e293974bd30444001831c88802b0cde1",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_core/test/diagnostics_test.dart"
    },
    {
      "type": "modify",
      "old_id": "624c7da30b2eecd590d9042adf5af6dffae209bb",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/packages/flutter_tools_extension/lib/flutter_tools_extension.dart",
      "new_id": "2ea6ad1ec4509d0535ce00b554b441f95256f22a",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_extension/lib/flutter_tools_extension.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0d22fbd5cf38af9facbb97497c8ae03b5b22a0e8",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_extension/lib/src/diagnostics.dart"
    },
    {
      "type": "modify",
      "old_id": "8e5a17cbed080b6f5cd86445bfd60df64e75ae55",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/lib/flutter_tools_extension_linux_prototype.dart",
      "new_id": "0be70ce91f83c10893a7b7bd211c5afc5de75085",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/lib/flutter_tools_extension_linux_prototype.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "66d8bd2754378811c71053c50f7e3c5c995587b7",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/lib/src/diagnostics.dart"
    },
    {
      "type": "modify",
      "old_id": "3e4d6af5c9e055ebfc131d1ffbae78987cf37475",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/pubspec.yaml",
      "new_id": "05cad934e150b387a9cfe53b38067a20e14c687f",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/pubspec.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "23f68c8722dfec17889805e7e76af5c5b75cc6eb",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/packages/flutter_tools_extension_linux_prototype/test/linux_diagnostics_test.dart"
    },
    {
      "type": "modify",
      "old_id": "c2a4f07f0448acde831362d7114f279821f8a3ee",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/commands.shard/hermetic/doctor_test.dart",
      "new_id": "68e528ba485c1170fc119b67e21e2c87129847cf",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/commands.shard/hermetic/doctor_test.dart"
    },
    {
      "type": "modify",
      "old_id": "e3bd6322f8cbb15ff43d5e4dc36fbd3c035884ea",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/commands.shard/hermetic/http_host_validator_test.dart",
      "new_id": "b71aea26bbaa70f4a02f0eb2ae752c406d19a850",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/commands.shard/hermetic/http_host_validator_test.dart"
    },
    {
      "type": "modify",
      "old_id": "c20c1a8d3fbbc7d30d4894c8b870e730f5d64b17",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/commands.shard/hermetic/proxy_validator_test.dart",
      "new_id": "3224d3382944c5a7ffed79ed07bc77c9e306a63d",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/commands.shard/hermetic/proxy_validator_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e3548907340ef9269c01ae3057c516d79143aad8",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/commands.shard/hermetic/tool_extensions_integration_test.dart"
    },
    {
      "type": "modify",
      "old_id": "fbacdecb9cf59b0a3f81084c179cbe777147061a",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/android/android_workflow_test.dart",
      "new_id": "da105d11004fc8cb77f2d4393ab8e701544c0995",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/android/android_workflow_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ae6d129682cf74d2956aa842ad7f734c2c819ad9",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/extension_protocol/diagnostics_service_test.dart"
    },
    {
      "type": "modify",
      "old_id": "21d0b9d879bf8017450ad4e327602ef640bf0f62",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/flutter_validator_test.dart",
      "new_id": "8c042905da3aeb436bd62de4140af783dab37dfb",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/flutter_validator_test.dart"
    },
    {
      "type": "modify",
      "old_id": "1c7ce2248999888ff34954c68e1d5bf5d9f728bc",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/intellij/intellij_test.dart",
      "new_id": "dde4cb850f31c459c68115cd4fed6f636f120b6d",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/intellij/intellij_test.dart"
    },
    {
      "type": "modify",
      "old_id": "e0790da94750a4eeedaa12a673ff15031dd9f668",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/linux/linux_doctor_test.dart",
      "new_id": "505492d0656ed0367020876851ac04a7976bb133",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/linux/linux_doctor_test.dart"
    },
    {
      "type": "modify",
      "old_id": "d407b3604484c50e53241ca7aea7ad5a0350944a",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/macos/cocoapods_validator_test.dart",
      "new_id": "400b2d390fb0733da66a558a6b48ab4161ff3bc0",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/macos/cocoapods_validator_test.dart"
    },
    {
      "type": "modify",
      "old_id": "e52fbf673727599f5b67902dfe93f08b0aae9171",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/macos/xcode_validator_test.dart",
      "new_id": "7386c23531c9c380485cd769a9067d3073aa173b",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/macos/xcode_validator_test.dart"
    },
    {
      "type": "modify",
      "old_id": "999eb597a793c0e020ab173944a15349e39bc55e",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/web/web_validator_test.dart",
      "new_id": "05397fcbc25aafd9dd6fd5dd5651170d5feea2c4",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/web/web_validator_test.dart"
    },
    {
      "type": "modify",
      "old_id": "47752e2abbcf255046cd52cfd1d5938dd3ea39e7",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/windows/visual_studio_validator_test.dart",
      "new_id": "0cf270598505bfa0731b42a6187a244f154b6182",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/windows/visual_studio_validator_test.dart"
    },
    {
      "type": "modify",
      "old_id": "f719d37636f0b4bb24e90ff041d0a96d1e09485c",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/windows_version_validator_test.dart",
      "new_id": "d9b41df397069341eeacacc9a95e95a12aceb2d4",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/windows_version_validator_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1f83165a9be3517cb3ffa91f2837c1e7afdcffbb",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/integration.shard/tool_extensions_test.dart"
    }
  ]
}
