)]}'
{
  "commit": "e18fd8efca1b13a2a460107a975c62c4e478b3e2",
  "tree": "a41d7f07ad875560739c0e54915002791b853370",
  "parents": [
    "6e0e42c700867ed4b794bdfc9aa3aab438a2a489"
  ],
  "author": {
    "name": "Sam Rawlins",
    "email": "srawlins@google.com",
    "time": "Tue Nov 03 16:43:14 2026 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Nov 03 16:43:14 2026 -0800"
  },
  "message": "Fix ParallelWaitError in forEachIsolateHelper during service disconnect (#10074)\n\n`forEachIsolateHelper` used `[for (final isolate in vmIsolates) callback(isolate)].wait`.\nIn Dart 3, the `Iterable.wait` extension wraps any error from completed futures\nin a `ParallelWaitError\u003cV, E\u003e`.\n\nWhen a target application exits or a VM Service connection is shut down while an\noperation is in flight (e.g. periodic polling in `refreshNetworkData`), VM Service\nmethods like `getSocketProfileWrapper` throw `RPCError: (112) Service has disappeared`.\nCallers catch typed errors (e.g., `on RPCError catch (e)` in `network_service.dart` or\n`on SentinelException` / `on RPCError` in `service_extension_manager.dart`) and check\n`e.isServiceDisposedError` to safely swallow teardown exceptions.\n\nBecause `ParallelWaitError` does not inherit from `RPCError` or `Exception`, it bypassed\nthese typed catch blocks and escaped uncaught, causing flaky integration test failures\nin `network_screen_test.dart`.\n\nUsing `Future.wait` preserves the underlying exception type thrown by the isolate\ncallback. Also update `_enableNetworkTrafficRecordingOnAllIsolates` to use `Future.wait`.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "88490a270ca6a53a9945aae17c2d724aff65084d",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/lib/src/screens/network/network_controller.dart",
      "new_id": "b340f9cc6b30bb47513b5f9e41ecb2830dce1c93",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/lib/src/screens/network/network_controller.dart"
    },
    {
      "type": "modify",
      "old_id": "cbf9cd68521ab4850b9d9aacc8369665f0d8afd4",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/screens/network/network_hot_restart_test.dart",
      "new_id": "3e9cff107c34fbd4c63bb12ea68f19fd91115ed3",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/screens/network/network_hot_restart_test.dart"
    },
    {
      "type": "modify",
      "old_id": "ea1eed25d4656392480a24d4407aea395a2b7f18",
      "old_mode": 33188,
      "old_path": "packages/devtools_app/test/screens/network/utils/hot_restart_network_vm_service.dart",
      "new_id": "cdd175e5a5ce56a5b94db790ed0625c0967a3fb2",
      "new_mode": 33188,
      "new_path": "packages/devtools_app/test/screens/network/utils/hot_restart_network_vm_service.dart"
    },
    {
      "type": "modify",
      "old_id": "683bc2bdaf9b512a47283d6a638a08b371e660e6",
      "old_mode": 33188,
      "old_path": "packages/devtools_app_shared/CHANGELOG.md",
      "new_id": "577b5c24924863cf8fe64f9fc2256f0b05422fee",
      "new_mode": 33188,
      "new_path": "packages/devtools_app_shared/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "5470605f6810b5506ff23835ac32ca9638f399c5",
      "old_mode": 33188,
      "old_path": "packages/devtools_app_shared/lib/src/service/service_utils.dart",
      "new_id": "82e00516528efeb818a6f0af934660a7ddb42b3a",
      "new_mode": 33188,
      "new_path": "packages/devtools_app_shared/lib/src/service/service_utils.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9d3c7c2933d6c2c4f53d3f3ba24a57fd9dabd38a",
      "new_mode": 33188,
      "new_path": "packages/devtools_app_shared/test/service/service_utils_test.dart"
    }
  ]
}
