)]}'
{
  "commit": "5967927edd6a632c853647358d396bfc2cde03a6",
  "tree": "a8bf47dbea8c68e135704386f91c3d958bf6a97d",
  "parents": [
    "0692e8ae904487fafbf92f60b4763e782172d2a9"
  ],
  "author": {
    "name": "Nate Bosch",
    "email": "nbosch@google.com",
    "time": "Mon Oct 26 17:50:52 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Oct 26 17:50:52 2026 -0700"
  },
  "message": "Diagnose browser connection failures and time them out with the suite load timeout (#2788)\n\nA wasm integration test failed with \"Timed out waiting for Firefox to\nconnect.\" and an empty \"Browser output:\"\n(https://github.com/dart-lang/test/actions/runs/37977193562/job/113978908374).\nAll three connection attempts had failed, but the error only showed the last\nattempt\u0027s output, and Firefox writes almost nothing to stdout or stderr, so\nthere was no way to tell how far the browser got.\n\n### Diagnostics\n\nWhen a browser fails to connect, describe each attempt: how long it waited,\nwhether the browser process was still running or its exit code, the command\nused to start it, its output, and the requests it made to the test server. A\nnew `BrowserRequestLog` wraps each compiler\u0027s server and records the host\npage, the resources it loads, and WebSocket upgrades, matched to the browser\nmanager by the `managerUrl` query parameter or the `Referer` header. Requests\nare labeled by file name so the server secret is not printed.\n\nSet Firefox preferences that print page console output and `dump()` calls to\nstdout, so errors in the host page show up in the browser output.\n\n### Connect timeout\n\nA browser had 30 seconds to connect, and one that didn\u0027t was replaced, up to\n3 attempts, regardless of `suite_load_timeout`. Following #2786, give the\nconnection until shortly before the suite load timeout instead, or no limit\nwithout one. Connecting and then loading the suite are consecutive steps of\nloading a suite, so they share that deadline, and loading gets whatever time\nconnecting left. A browser that times out uses the whole budget, so it isn\u0027t\nreplaced. Timeouts were the only failure that was retried; instead, retry a\nbrowser that starts and then exits before connecting, up to 3 attempts while\ntime remains. A process that fails to start, such as one with a missing\nexecutable, isn\u0027t retried.\n\nWithout a suite load timeout a browser that never connects now hangs the run\ninstead of failing, so add `suite_load_timeout: 2m` to the wasm and\nspawn_hybrid integration tests, which run in browsers on CI.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e95874ac7851f2f22dc1924a802cc8cce9a25342",
      "new_mode": 33188,
      "new_path": "integration_tests/spawn_hybrid/dart_test.yaml"
    },
    {
      "type": "modify",
      "old_id": "14308c4658bfa308d4a9fd6b47dbf40a81c6e232",
      "old_mode": 33188,
      "old_path": "integration_tests/wasm/dart_test.yaml",
      "new_id": "90b2bca58bd51e1b4b3e49a37e06892fedad9489",
      "new_mode": 33188,
      "new_path": "integration_tests/wasm/dart_test.yaml"
    },
    {
      "type": "modify",
      "old_id": "ddb42e48ea767796631c4e5da01c3f0e93e7e700",
      "old_mode": 33188,
      "old_path": "pkgs/test/CHANGELOG.md",
      "new_id": "8d9f657cbc263177804d2382633375d63c8b1bc0",
      "new_mode": 33188,
      "new_path": "pkgs/test/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "50a3de927408b982af124ccf5e313915d66e8043",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/browser.dart",
      "new_id": "402ddf4418314fb26f7b1dc50d40cfe7fca39d01",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/browser.dart"
    },
    {
      "type": "modify",
      "old_id": "8e9284970425cd5f3e595c50cd4fa66357b8b715",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/browser_manager.dart",
      "new_id": "51e000a6ec5fb817a9684f9f2eb88e95282e4f55",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/browser_manager.dart"
    },
    {
      "type": "modify",
      "old_id": "b5a88312c0749305cb4eda5d6543672f2aeb7f87",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/chromium.dart",
      "new_id": "6151fb8ed4d55b19767e436614c90bb18dea9cc5",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/chromium.dart"
    },
    {
      "type": "modify",
      "old_id": "5c0bbe9e69e7319b64eec9bc4274eb603ad2a950",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/compilers/compiler_support.dart",
      "new_id": "dd10e29652c35883b673109a0ae98fc15a57159e",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/compilers/compiler_support.dart"
    },
    {
      "type": "modify",
      "old_id": "607863c4a2f0cc328e38389f20bccdf95038e09c",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/compilers/dart2js.dart",
      "new_id": "eb51291302fdc304324374eb30740c046d4dc928",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/compilers/dart2js.dart"
    },
    {
      "type": "modify",
      "old_id": "9ea329c858f98ab9bb5883f5c31e1fe7b5fc7b0d",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/compilers/dart2wasm.dart",
      "new_id": "bf6c97e824c8005ea6edf93cde100c388f93d4be",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/compilers/dart2wasm.dart"
    },
    {
      "type": "modify",
      "old_id": "34d145b376161364efb9043a9c10a83afb5e7c43",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/compilers/precompiled.dart",
      "new_id": "59ed2ef3fcd0a6d9f0d01287e1d918db3364a80c",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/compilers/precompiled.dart"
    },
    {
      "type": "modify",
      "old_id": "54c392109071856438c8f4b31e9b6b3ce3cbee08",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/firefox.dart",
      "new_id": "1f8ed9c208acccf3cfe0c96b38dca688eb14ffb1",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/firefox.dart"
    },
    {
      "type": "modify",
      "old_id": "bcb01fba8d74d016f0bbf25cc2d5c987a4c2b214",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/load_timeout.dart",
      "new_id": "a99348534e1a3211f7459a30557430f99c75a044",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/load_timeout.dart"
    },
    {
      "type": "modify",
      "old_id": "f2c996e09d54c9229a73905900325466825f46eb",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/platform.dart",
      "new_id": "c63ecd3d5578e4bbbc7ce6e5ee26ea01875c8d61",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/platform.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "18ae455a77a1beaebde9033472a0b2f3cc645641",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/request_log.dart"
    },
    {
      "type": "modify",
      "old_id": "1e6e0563cee039595cc2d2bbcdfa119a4eca7966",
      "old_mode": 33188,
      "old_path": "pkgs/test/lib/src/runner/browser/safari.dart",
      "new_id": "313ba084fac98a6731f59cb98b615fe7c537089e",
      "new_mode": 33188,
      "new_path": "pkgs/test/lib/src/runner/browser/safari.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d00d29cc99c7d63daf883c908f114d89acbc42f0",
      "new_mode": 33188,
      "new_path": "pkgs/test/test/runner/browser/browser_manager_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "db3c3c3313f37fe21d6a2778cd2a256b13ff94ce",
      "new_mode": 33188,
      "new_path": "pkgs/test/test/runner/browser/request_log_test.dart"
    }
  ]
}
