)]}'
{
  "log": [
    {
      "commit": "d6c521a7f05449857c76bd99e396895583cf2083",
      "tree": "87c60e5602b65c344ccef62d66a16691250cd633",
      "parents": [
        "b8ffb45acc02246a5479b0589f0bf4d919a997e0"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Fri Sep 18 15:33:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 15:33:20 2026"
      },
      "message": "Update emsdk version from fd7524c0 to 8324e947 (#27743)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: fd7524c0 \u003d\u003e 8324e947\n\nThe following revisions were included in this update:\n\n```\n- 8324e947 Roll emscripten from 88e32e459301 to b8ffb45acc02 (1 revision)\n- 27630a59 Roll v8 from 44dada1e9325 to 6f1b3d32f052 (38 revisions)\n- eacc6f1f Roll llvm-project from 6486ab38c001 to 3c30abb2a47c (23 revisions)\n- 6f13b0f9 Roll emscripten from 9f89ae0c1722 to 88e32e459301 (5 revisions)\n- f576a278 Roll binaryen from 3f54c9d121d8 to e45f5ba12044 (1 revision)\n- 0a765721 Roll llvm-project from 5678ca9a3c4f to 6486ab38c001 (58 revisions)\n- f37f6c4f Roll binaryen from 7d27e49028f7 to 3f54c9d121d8 (1 revision)\n- 4989090b Roll emscripten from 4a8bd19ba874 to 9f89ae0c1722 (2 revisions)\n- 1706cfd3 Roll llvm-project from ef74d5b3f7c0 to 5678ca9a3c4f (70 revisions)\n- 3cd4dbf9 Roll binaryen from cbecb31262f4 to 7d27e49028f7 (1 revision)\n- bab60e5c Roll emscripten from 1b3042b902ab to 4a8bd19ba874 (15 revisions)\n- afc0858d Roll llvm-project from f557f80378b0 to ef74d5b3f7c0 (44 revisions)\n- 22f878cc Roll llvm-project from 1a87171c5055 to f557f80378b0 (18 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/fd7524c0..8324e947\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "b8ffb45acc02246a5479b0589f0bf4d919a997e0",
      "tree": "8ae6c0f4e02364304bc1a2483e56313e4dd972b3",
      "parents": [
        "88e32e4593019e8e730e72cdbd8a509aa78ec543"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri Sep 18 05:10:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 05:10:02 2026"
      },
      "message": "[EH] Remove -wasm-enable-eh LLVM flag (#27739)\n\nPreviously in LLVM, we had `-mllvm -enable-emscripten-cxx-exceptions` to\nenable Emscriten EH, and `-mllvm -wasm-enable-eh` to enable Wasm EH.\nThese were separate Wasm backend flags.\n\nAlso there is a separate `-exception-model\u003d` LLVM flag used for all LLVM\ntargets. We used `wasm` for Wasm EH and `none` for Emscripten EH. This\nwas a common LLVM flag which we didn\u0027t directly use but fed LLVM because\nit was a common flag.\n\nRecently a series of Clang+LLVM EH flag refactoring was done, and now\nLLVM is using `-exception-model` to control all EH modes. So Emscripten\nEH will be enabled by `-exception-model\u003demscripten`, and Wasm EH by\n`-exception-model\u003dwasm`, and we don\u0027t need the Wasm-specific LLVM flags.\n`-enable-emscripten-cxx-exceptions` was removed in #27704. This removes\n`-wasm-enable-eh`.\n\nThis has to land before\nhttps://github.com/llvm/llvm-project/pull/224313. This also temporarily\ndisable EH LTO tests, which we will reenable after\nhttps://github.com/llvm/llvm-project/pull/224313 lands."
    },
    {
      "commit": "88e32e4593019e8e730e72cdbd8a509aa78ec543",
      "tree": "75558aa8abe9455af75ba20882b6145808a9d91b",
      "parents": [
        "2226e489376d0544ed298d3931671fcd990c7139"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 22:27:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 22:27:08 2026"
      },
      "message": "[NODERAWFS] Fix getcwd() on Windows (#27738)\n\nIn upstream musl, `getcwd()` checks `buf[0] !\u003d \u0027/\u0027` to detect the Linux\nkernel\u0027s `(unreachable)` prefix returned by `sys_getcwd`. Emscripten\u0027s\n`__syscall_getcwd` never returns `(unreachable)`, and under `NODERAWFS`\non Windows `process.cwd()` returns paths starting with a drive letter\n(e.g. `C:\\...`) or UNC prefix (`\\\\...`), which caused `getcwd()` to fail\nwith `ENOENT`.\n\nSkip the `buf[0] !\u003d \u0027/\u0027` check on Emscripten and add a `@crossplatform`\n`test_noderawfs_getcwd` test so it runs on Windows CI.\n\nFixes: #25291\n\n---------\n\nCo-authored-by: Alon Zakai \u003calonzakai@gmail.com\u003e"
    },
    {
      "commit": "2226e489376d0544ed298d3931671fcd990c7139",
      "tree": "8730f856e218233f9c122775588437d41c09bf3f",
      "parents": [
        "600e523d42f700485bbd53987e5dcab2251898ab"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 22:25:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 22:25:39 2026"
      },
      "message": "Enable more ruff checks, part 6. NFC (#27741)\n\nThis should be the last one in the series I think."
    },
    {
      "commit": "600e523d42f700485bbd53987e5dcab2251898ab",
      "tree": "7dcd49be6ce348f09e4bb75ad14ddeba3defbacf",
      "parents": [
        "ec02c366564f321f604ec2a8b87b1f2dd21ae19f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 21:23:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 21:23:15 2026"
      },
      "message": "[CI] Enable auto-submit for website update PRs (#27725)\n\nIn practice I\u0027m not really reviewing these since they are fully\nauto-generated anyway.   We will still get emails so we can review\nasynchronously if needed."
    },
    {
      "commit": "ec02c366564f321f604ec2a8b87b1f2dd21ae19f",
      "tree": "b89110dc6b0a7bd4ef5b76e6dfd194667cddecc7",
      "parents": [
        "df9fa7ec32f54a69a44034ad874b9be5b8f8ee6c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 20:47:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 20:47:56 2026"
      },
      "message": "Remove NODE_CODE_CACHING setting (#27740)\n\nNode removed support for serializing compiled `WebAssembly.Module`\nobjects via `v8.serialize()` / `v8.deserialize()` over 5 years ago:\nhttps://github.com/nodejs/node/issues/18265.\n\nAs a result, `-sNODE_CODE_CACHING` has not worked in any version of\nNode.js since Node 12, and `test_node_code_caching` has been disabled\nsince #13489 (February 2021).\n\nMove `NODE_CODE_CACHING` to `LEGACY_SETTINGS` for backwards\ncompatibility with `-sNODE_CODE_CACHING\u003d0`.\n\nSee: #13128"
    },
    {
      "commit": "df9fa7ec32f54a69a44034ad874b9be5b8f8ee6c",
      "tree": "7bbcc807a675be38c36e96e7c40002664fa8599b",
      "parents": [
        "9f89ae0c172232b2e17967820ae72a804739ec32"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 20:28:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 20:28:32 2026"
      },
      "message": "Enable more ruff checks, part 5. NFC (#27726)"
    },
    {
      "commit": "9f89ae0c172232b2e17967820ae72a804739ec32",
      "tree": "c6152e3dba7571e4c7ba0fc4b68f9b32ab92dd93",
      "parents": [
        "a1725b9bb94e2bd3cf8a2b12a98a11c1ba24a6e1"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 18:32:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 18:32:15 2026"
      },
      "message": "Move `NODE_CODE_CACHING` check to `INCOMPATIBLE_SETTINGS` (#27734)\n\nMove the `WASM_ASYNC_COMPILATION` incompatibility check for\n`NODE_CODE_CACHING` from `tools/link.py` to `INCOMPATIBLE_SETTINGS` in\n`tools/settings.py` (following up on #27670).\n\nAlso remove the `ENVIRONMENT_MAY_BE_NODE` error check for\n`NODE_CODE_CACHING` in `tools/link.py`. This allows the existing\n`unused-command-line-argument` warning (added in #18820) to be reached\nwhen `node` is not in `ENVIRONMENT`, matching the behavior of\n`NODERAWFS` and `NODERAWSOCKETS`."
    },
    {
      "commit": "a1725b9bb94e2bd3cf8a2b12a98a11c1ba24a6e1",
      "tree": "fc391c80dda56160336725682b3e4443e4245086",
      "parents": [
        "4a8bd19ba87418ae92f6182f88771f2366aaf063"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 18:30:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 18:30:45 2026"
      },
      "message": "Move is_wasm, is_wasm_dylib, and is_ar out of building.py. NFC (#27736)\n\nMove `is_wasm` and `is_wasm_dylib` from `tools.building` to\n`tools.webassembly`, and `is_ar` to `tools.utils`.\n\nThis allows removing the `building` import completely from `emcc.py` and\nreduces internal coupling in `test/test_other.py` and `tools/link.py`.\n\nSee: #27666"
    },
    {
      "commit": "4a8bd19ba87418ae92f6182f88771f2366aaf063",
      "tree": "a7cca73eeb90cdf8e677d8e64f516a88b37b3f7e",
      "parents": [
        "84de598809379c4375dae881e7ace66879e0a2e9"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 17:27:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 17:27:47 2026"
      },
      "message": "[test] Fix for get_chrome_version under windows. NFC (#27735)\n\nIn `test/browser_common.py`, `get_chrome_version` (added in #27679)\ncalled `shlex.split(EMTEST_BROWSER, posix\u003dnot WINDOWS)[0]`. On Windows,\n`configure_test_browser` wraps `EMTEST_BROWSER` in double quotes and\nescapes backslashes. Because `shlex.split` with `posix\u003dFalse` does not\nstrip surrounding quotes from quoted tokens, `exe` retained literal\nquotes and produced invalid PowerShell syntax (`\"\"C:\\\\...\"\"`).\n\nUse `shlex.split(EMTEST_BROWSER)[0]` (matching `get_firefox_version` and\n`launch_browser`) so surrounding quotes are properly stripped."
    },
    {
      "commit": "84de598809379c4375dae881e7ace66879e0a2e9",
      "tree": "fc2aa8498026fa8f769fac2f8b60954624888e9f",
      "parents": [
        "1d48a73f4d65780414bb915c66c77b2580eca09e"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 16:46:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 16:46:42 2026"
      },
      "message": "Reduce direct usage of `shared` module in test code. NFC (#27712)\n\nThis change does introduce some duplication between the compiler code\nand the test code, but I\u0027ve tried to keep it very minimal.\n\nSee: #27666"
    },
    {
      "commit": "1d48a73f4d65780414bb915c66c77b2580eca09e",
      "tree": "8e2909da1aaa1cb8a6187c81f6c6765b85c08cd5",
      "parents": [
        "e65dbc9246c4749828f2df645d74f11c32ed1bbf"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 17 15:29:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 15:29:16 2026"
      },
      "message": "[test] Attempt to fix flakiness in test_poll_blocking_asyncify (#27729)\n\nIn `test_poll_blocking_asyncify.c`, `emscripten_set_timeout` was called\nbefore `clock_gettime(CLOCK_MONOTONIC, \u0026begin)` in `test_unblock_poll`.\nBecause Node.js schedules `setTimeout` relative to its internal\nmillisecond-truncated timestamp (`binding.getLibuvNow()`), any delay or\nOS thread scheduling preemption between scheduling the timer and\nrecording `begin` was subtracted from the measured duration.\n\nRecord `begin` before calling `emscripten_set_timeout` (matching the\npthread-based poll/select blocking tests), switch from hardcoded\n`1000`ms to `TIMEOUT_MS` (`300`ms, as done in #26257), normalize\nnegative nanoseconds in `timespec_delta_ms`, and increase\n`TIMEOUT_MARGIN_MS` to `20`ms across all blocking poll/select tests.\n\nFixes: #27727"
    },
    {
      "commit": "e65dbc9246c4749828f2df645d74f11c32ed1bbf",
      "tree": "e635e0f29f5ff03d98a36c2d08f35e92065a8627",
      "parents": [
        "466bed9dc51318e0e5a074a93fe8889c777c88d0"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Thu Sep 17 14:55:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:55:15 2026"
      },
      "message": "Fix caniuse link for `GROWABLE_ARRAYBUFFERS`. NFC (#27732)\n\nIt requires the `WebAssembly.Memory.toResizableBuffer()` API."
    },
    {
      "commit": "466bed9dc51318e0e5a074a93fe8889c777c88d0",
      "tree": "e5d76b508438864f35a9ab757454e5625fbe0277",
      "parents": [
        "04644a50bbbf5c34b5d2deb41ae1a2583c4e8461"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Sep 17 14:54:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:54:36 2026"
      },
      "message": "Update emsdk version from efe320d4 to fd7524c0 (#27733)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: efe320d4 \u003d\u003e fd7524c0\n\nThe following revisions were included in this update:\n\n```\n- fd7524c0 Roll v8 from 5559402c3afa to 44dada1e9325 (37 revisions)\n- 2df608e3 Roll llvm-project from 3936f33806ab to 1a87171c5055 (23 revisions)\n- 709c1f42 Roll binaryen from 5b07da180bbc to cbecb31262f4 (3 revisions)\n- fca0c8f6 Roll llvm-project from 616ec370aa2d to 3936f33806ab (42 revisions)\n- 4e9d0da4 Roll binaryen from 1b198ae5968b to 5b07da180bbc (1 revision)\n- f96ac449 Roll emscripten from 06e8b0d84d8b to 1b3042b902ab (2 revisions)\n- 7fde284c Roll binaryen from b71b29e2afa8 to 1b198ae5968b (1 revision)\n- 05d410e1 Roll llvm-project from 8167678860e1 to 616ec370aa2d (71 revisions)\n- d1e112d9 Roll llvm-project from 3b8ee89006f5 to 8167678860e1 (47 revisions)\n- 62492858 Roll emscripten from 49a7d0dbcbe8 to 06e8b0d84d8b (2 revisions)\n- 61bb1c3f Roll llvm-project from 182ca95eed3f to 3b8ee89006f5 (25 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/efe320d4..fd7524c0\n\nThe following (8) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_files_wasmfs.json: 63231 \u003d\u003e 63087 [-144 bytes / -0.23%]\ncodesize/test_codesize_hello_dylink.json: 43180 \u003d\u003e 43173 [-7 bytes / -0.02%]\ncodesize/test_codesize_hello_dylink_all.json: 858984 \u003d\u003e 858805 [-179 bytes / -0.02%]\ncodesize/test_minimal_runtime_code_size_hello_webgl2_wasm.json: 13186 \u003d\u003e 13103 [-83 bytes / -0.63%]\ncodesize/test_minimal_runtime_code_size_hello_webgl2_wasm2js.json: 18313 \u003d\u003e 18180 [-133 bytes / -0.73%]\ncodesize/test_minimal_runtime_code_size_hello_webgl2_wasm_singlefile.json: 15040 \u003d\u003e 14954 [-86 bytes / -0.57%]\ncodesize/test_minimal_runtime_code_size_hello_webgl_wasm.json: 12724 \u003d\u003e 12641 [-83 bytes / -0.65%]\ncodesize/test_minimal_runtime_code_size_hello_webgl_wasm2js.json: 17840 \u003d\u003e 17707 [-133 bytes / -0.75%]\n\nAverage change: -0.45% (-0.75% - -0.02%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "04644a50bbbf5c34b5d2deb41ae1a2583c4e8461",
      "tree": "cc2b1a302dd39132497760b03a3b82bcfa0a4ef7",
      "parents": [
        "d602fa6cc0d92a9e36ea9158d6bfed62d85c7762"
      ],
      "author": {
        "name": "Jeremy Nguyen",
        "email": "nguyen.jeremyt@gmail.com",
        "time": "Thu Sep 17 00:29:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 00:29:07 2026"
      },
      "message": "Add libwebp contrib port with multi-threading variant (#27680)\n\n- Add libwebp contrib port with optional multi-threading variant\n- Include documentation in site/source/docs/compiling/Contrib-Ports.rst"
    },
    {
      "commit": "d602fa6cc0d92a9e36ea9158d6bfed62d85c7762",
      "tree": "3d4c3697cf143b6bb5d20d1c54718705662ac6e7",
      "parents": [
        "e0e87f56df310844c0e62f1a745a31d4ad8b4d60"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Thu Sep 17 00:08:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 00:08:09 2026"
      },
      "message": "Release runtime keepalive in emscripten_clear_timeout and make clear_timeout/clear_immediate idempotent (#27720)\n\nThis fixes a runtime keepalive leak in `emscripten_clear_timeout` and\nmakes `emscripten_clear_timeout` / `emscripten_clear_immediate` safe to\ncall for ids that have already fired.\n\n`emscripten_set_timeout` goes through `safeSetTimeout`, which does\n`runtimeKeepalivePush()` and pops in the fire wrapper.\n`emscripten_clear_timeout` was aliased straight to `clearTimeout`, so\nclearing a pending timer leaked one keepalive forever: with\n`EXIT_RUNTIME\u003d1` the runtime never exits after `main` returns (no\n`atexit` handlers run, `emscripten_runtime_keepalive_check()` stays\ntrue). `emscripten_clear_immediate` had the mirror bug: it popped\nunconditionally, so clearing an already-fired immediate double-popped\nthe counter.\n\n* `safeSetTimeout` now follows the `setImmediateWrapped.mapping`\npattern: it returns an i32 index into `safeSetTimeout.mapping` holding\nthe native handle, and the fire wrapper clears the slot before popping\nthe keepalive. Ids start at 1 so, like `setTimeout`, they are never\nzero.\n* New `$safeClearTimeout(id)` pops and clears only if the slot is still\nlive, otherwise it is a no-op. `emscripten_clear_timeout` aliases it,\nwhich also removes the `AUDIO_WORKLET` special case. `SDL_PauseAudio`\nuses it too instead of a raw `clearTimeout`, which had the same leak.\n* `emClearImmediate` (both the `setImmediate` and `postMessage`\nvariants) reports whether the immediate was still pending, and\n`emscripten_clear_immediate` pops only in that case.\n\nTests:\n`other.test_emscripten_clear_timeout_{fires,cleared,idempotent,immediate}`\ncover clearing a pending timeout (runtime exits from `main` immediately\nwith `atexit` running), clearing the same id twice and clearing an id\nafter it fired while another pending timer keeps the runtime alive, the\nexisting set-then-fire behaviour, and the same idempotency for\nimmediates. Three of the four fail without the fix."
    },
    {
      "commit": "e0e87f56df310844c0e62f1a745a31d4ad8b4d60",
      "tree": "c2382b85bc1d4848ce332811d9f0d88290578abe",
      "parents": [
        "83ead441944270329bc879cf1e751c2d222f9973"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Wed Sep 16 23:09:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:09:18 2026"
      },
      "message": "Real DNS resolution for getaddrinfo under -sNODERAWSOCKETS (#27693)\n\nThis gives `getaddrinfo()` real name resolution under\n`-sNODERAWSOCKETS`. Split out from #27182, which also added a new\nasynchronous DNS API; this PR is only the change to the existing\nblocking API, allowing any async API work to follow separately.\n\nPreviously every hostname resolved to a fake `172.29.x.x` address, which\nis fine for the websocket proxy transport but not for real Node.js\nsockets, where the address has to be connectable.\n\n* Hostnames resolve via `node:dns` (which honors the host\u0027s\n`/etc/hosts`). The lookup is asynchronous, so `getaddrinfo` blocks by\nreturning a Promise where the calling stack can wait on it: a\nsync-proxied pthread (`PROXY_SYNC_ASYNC`, e.g. `main()` under\n`PROXY_TO_PTHREAD`), or `ASYNCIFY`/`JSPI` by suspending through\n`Asyncify.handleAsync`, which also holds a runtime keepalive so a user\ncallback completing mid-lookup does not exit the runtime. Numeric\naddresses and errors still return synchronously, so `JSPI` does not pay\na microtask on those.\n* Where there is no stack that can wait (the event-loop thread itself),\na hostname returns `EAI_AGAIN` without starting a lookup.\n* Results may now be an `addrinfo` linked list (multiple DNS records,\n`AF_UNSPEC`), and `freeaddrinfo` walks the whole chain.\n\nEverything is gated on `NODERAWSOCKETS`; without it `getaddrinfo` is\nunchanged.\n\nImplementation-wise `getaddrinfo` keeps its existing body and returns\neither an `EAI_*` code or a Promise of one. The pthread proxy receive\nside now accepts a synchronous value from a `PROXY_SYNC_ASYNC` function\n(`Promise.resolve(rtn).then(...)`), so no wrapper is needed for the sync\npaths.\n\nTested with `test_noderawsockets_dns` (numeric, `EAI_AGAIN`\nsingle-threaded), and\n`test_noderawsockets_dns_blocking{,_asyncify,_jspi}` (multi-address\nlists across families, and a timer firing during the lookup under\n`EXIT_RUNTIME`)."
    },
    {
      "commit": "83ead441944270329bc879cf1e751c2d222f9973",
      "tree": "8a14077fe0d1011251d602a885794db43b70146a",
      "parents": [
        "17cc81a468e6d5ff4d1d55d2e1dda4368a402e84"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 23:02:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:02:44 2026"
      },
      "message": "Enable more ruff checks, part 4. NFC (#27714)"
    },
    {
      "commit": "17cc81a468e6d5ff4d1d55d2e1dda4368a402e84",
      "tree": "4a9f0470eb8110280aa3ebf1d493f769a801319f",
      "parents": [
        "db42837b43924dd5d51454cf7e94ecfe1f59debb"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 22:57:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:57:42 2026"
      },
      "message": "[docs] Update descriptions for undefined symbol settings. NFC (#27598)\n\nUpdate and clarify the doc comments in `src/settings.js` for\n`ERROR_ON_UNDEFINED_SYMBOLS` and `WARN_ON_UNDEFINED_SYMBOLS`, and\nregenerate `site/source/docs/tools_reference/settings_reference.rst`."
    },
    {
      "commit": "db42837b43924dd5d51454cf7e94ecfe1f59debb",
      "tree": "b8cdc99b4cec4f053e0dc792616c0eb41230e21c",
      "parents": [
        "03c104f942e8550ba2f553fb87b2601c3a28bbb1"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 21:13:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:13:40 2026"
      },
      "message": "Remove promise chaining from wasm module FS plugin. NFC (#27716)\n\nThis chaining is no longer needed since all plugins run serially these\ndays. See #27034"
    },
    {
      "commit": "03c104f942e8550ba2f553fb87b2601c3a28bbb1",
      "tree": "83ac0b8a815e8c2841c99732ba36cbdd33e6f95a",
      "parents": [
        "14862fe7e5b0f7a0b11f77d98aeb89b15833522a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 21:11:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:11:37 2026"
      },
      "message": "Add test for native AudioWorklet.port and @requires_chrome_version (#27679)\n\nAdd `--enable-blink-features\u003dAudioWorkletSharedPort` to Chrome default\nflags to enable `AudioWorklet.port` (the spec-defined shared\n`MessagePort` between `AudioWorklet` and `AudioWorkletGlobalScope`).\n\nAdd `get_chrome_version()` in `test/browser_common.py` and\n`requires_chrome_version` in `test/test_browser.py`.\n\nAdd `test/webaudio/test_audio_worklet_port.c` and test\n`test_audio_worklet_port` to verify that when native `AudioWorklet.port`\nis present, the worklet uses it directly without falling back to the\n`em-bootstrap` `AudioWorkletProcessor`.\n\nSee: #27615"
    },
    {
      "commit": "14862fe7e5b0f7a0b11f77d98aeb89b15833522a",
      "tree": "99b7b60d2a96e2a7cd0a6ede438d2e27479cf9d2",
      "parents": [
        "997593468bab6e795a8b691bc7e4d5b56fc26235"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 20:15:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 20:15:49 2026"
      },
      "message": "Improve em-config utility (#27715)\n\n- More precise key matching\n- Better error messages"
    },
    {
      "commit": "997593468bab6e795a8b691bc7e4d5b56fc26235",
      "tree": "1b6466ebf95763dc6648523b98a2b33f8f232856",
      "parents": [
        "5e7a489074b8b6fc3121c9f4a33175568528b57a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 18:59:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:59:42 2026"
      },
      "message": "Fix -sEXPORT_ALL crash on pthread worker startup with memory growth (#27719)\n\nWhen `-sEXPORT_ALL` is used with `-pthread` and `-sALLOW_MEMORY_GROWTH`,\nheap views were being statically exported onto `Module` by\n`exportLibrarySymbols` (`Module[\u0027HEAPxx\u0027] \u003d HEAPxx;`).\n\nUnder memory growth and pthreads, `acorn-optimizer` instruments those\nheap view accesses into `(growMemViews(), HEAPxx)`. When pthread\nworkers start up and execute this top-level script code, `wasmMemory`\nhas not yet been delivered from the main thread, causing\n`growMemViews()` to throw a `TypeError` when reading\n`wasmMemory.buffer`.\n\nHeap views should not be exported via static assignments at module\ninitialization time. Like `exportRuntimeSymbols`, filter out `HEAP*`\nsymbols from `exportLibrarySymbols`.\n\nIn `runtime_common.js`, `shouldExportHeap` was checking\n`MODULARIZE \u0026\u0026 EXPORT_ALL`, which was an artifact from when that check\nonly applied to `MINIMAL_RUNTIME` fallback. With static exports\nremoved from `exportLibrarySymbols`, update `shouldExportHeap` to check\n`EXPORT_ALL` directly so non-modularize builds with `-sEXPORT_ALL` still\nexport heap views on `Module` inside `updateMemoryViews()`.\n\nFixes: #27711"
    },
    {
      "commit": "5e7a489074b8b6fc3121c9f4a33175568528b57a",
      "tree": "42778a9e23fc0df0d63fe971afb8cb46ac5eb5a6",
      "parents": [
        "1b3042b902abacbb84164dec267401d71b94317f"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Sep 16 18:47:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:47:54 2026"
      },
      "message": "Update emsdk version from 006cae2e to efe320d4 (#27709)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 006cae2e \u003d\u003e efe320d4\n\nThe following revisions were included in this update:\n\n```\n- efe320d4 Roll emscripten from cfb87fa8a5e6 to 49a7d0dbcbe8 (1 revision)\n- 319d4a79 Roll llvm-project from f0b5bfb908f2 to 182ca95eed3f (40 revisions)\n- 1e535b17 Roll v8 from 00fb7bb5eb4a to 5559402c3afa (26 revisions)\n- 34897978 Roll binaryen from 2746295ac84d to b71b29e2afa8 (1 revision)\n- 7fafa5fe Roll llvm-project from 8e39842f45ad to f0b5bfb908f2 (57 revisions)\n- 9663754d Roll emscripten from 8693db76027d to cfb87fa8a5e6 (1 revision)\n- 602e1175 Roll emscripten from 002e888da88f to 8693db76027d (1 revision)\n- b19e08a7 Roll llvm-project from 821dc0a3b170 to 8e39842f45ad (68 revisions)\n- 8c4d8911 Roll llvm-project from bfab06044d79 to 821dc0a3b170 (31 revisions)\n- cdf3f289 Roll llvm-project from d6b0c1b9a79d to bfab06044d79 (20 revisions)\n- c9e05c6f Roll emscripten from 23c212bb8f7e to 002e888da88f (1 revision)\n- d01c01c1 Roll llvm-project from 54ce74d9a419 to d6b0c1b9a79d (44 revisions)\n- 9ec80c06 Roll emscripten from e34b2b50a1ff to 23c212bb8f7e (1 revision)\n- 9fdd3063 Roll v8 from a52cba626da6 to 00fb7bb5eb4a (27 revisions)\n- 39ccbeff Roll llvm-project from c4a8bda414e8 to 54ce74d9a419 (60 revisions)\n- 8722fb87 Roll emscripten from b4602f5311d8 to e34b2b50a1ff (2 revisions)\n- 0539b10e Roll binaryen from 7d9ec2fa2129 to 2746295ac84d (1 revision)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/006cae2e..efe320d4\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "1b3042b902abacbb84164dec267401d71b94317f",
      "tree": "bfdb540c49d91e7ddec8a9495285f37f24e5cd92",
      "parents": [
        "166035d8cd8d631efdbcaad0998235d155eccf76"
      ],
      "author": {
        "name": "Dimokritos Kolitsos",
        "email": "dkolitsos@protonmail.com",
        "time": "Wed Sep 16 18:31:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:31:24 2026"
      },
      "message": "[embind] Post-merge cleanups from #27610 (#27722)\n\nFollow-ups for the review comments sbc100 left on #27610 after it\nmerged: zeroMemory instead of HEAPU8.fill for the stack temporaries,\ntruthiness checks on destructors, and my AUTHORS entry. The try/finally\nquestion is answered on the original thread."
    },
    {
      "commit": "166035d8cd8d631efdbcaad0998235d155eccf76",
      "tree": "641eb82a2cf3da73c149a3675c48740421fc4444",
      "parents": [
        "06e8b0d84d8b409b1b5ee59832948877bda6137e"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 16 18:18:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:18:01 2026"
      },
      "message": "Simplify LLVM sanity check. NFC (#27713)\n\nThe CLANG_CC and LLVM_AR variables are already expanded to include the\n.exe component on windows. See find_exe in utils.py."
    },
    {
      "commit": "06e8b0d84d8b409b1b5ee59832948877bda6137e",
      "tree": "3cd1fdebd8d5e16bc4387c25f6b4c46d47fa11bc",
      "parents": [
        "ac0a5222bf9d964e3ae2ac37acdd2e8b31fd7651"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Wed Sep 16 06:56:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 06:56:24 2026"
      },
      "message": "NODERAWSOCKETS: report the source address from getsockname() right after connect() (#27688)\n\nThis fixes `getsockname()` after `connect()` to store the address\nimmediately, so that it can be returned in host calls, which was an\noversight missed from #27566."
    },
    {
      "commit": "ac0a5222bf9d964e3ae2ac37acdd2e8b31fd7651",
      "tree": "d0d0dcf8f73a1d4e9547f536096fec2e1924ab43",
      "parents": [
        "49a7d0dbcbe876a7b1d5bad950dc89f1b4cc6a0c"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Wed Sep 16 05:54:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 05:54:17 2026"
      },
      "message": "[NODERAWSOCKETS] Follow Linux O_NONBLOCK semantics for sockets (#27717)\n\nPreviously, we attempted to make blocking socket syscalls work via a\nunified fd_wait approach in\nhttps://github.com/emscripten-core/emscripten/pull/27342, but this\napproach had some ugliness in introducing retry loops into existing\nsyscalls.\n\nThis PR instead fixes the current socket handling so that while blocking\nsyscalls remain unsupported, we properly handle the `SOCK_NONBLOCK`\nargument for `socket()` or `accept4()` instead of default assuming it /\nignoring it as previously.\n\nThis PR makes the flags follow Linux under `-sNODERAWSOCKETS`:\n\n* `socket(SOCK_NONBLOCK)` sets `O_NONBLOCK` (`SOCK_CLOEXEC` is still a\nno-op)\n* `accept4()` sets `O_NONBLOCK` only when `flags` has `SOCK_NONBLOCK`,\nand accepted sockets no longer copy the listener\u0027s flags. A socket from\nplain `accept()` is therefore now blocking, as on Linux, even when the\nlistener is non-blocking: `F_GETFL` reports blocking, and `send()` on it\nbuffers without limit rather than respecting the write high-water limit\nand returning `EAGAIN` (`recv()` is unaffected, it returns `EAGAIN`\neither way). Callers that want a non-blocking accepted socket should use\n`accept4(SOCK_NONBLOCK)` or `fcntl(F_SETFL, O_NONBLOCK)`. This affects\nRust std\u0027s `TcpListener::accept`, which uses plain `accept()` on\nemscripten\n* a non-blocking stream `connect()` (TCP and `AF_UNIX`) returns\n`EINPROGRESS`, and completion shows up as `POLLOUT` with the result in\n`SO_ERROR`\n\nA blocking `connect()` still returns 0, since callers like Rust std\ntreat `EINPROGRESS` from a blocking connect as an error. When an\noperation on a blocking socket would block, it still returns `EAGAIN`,\nand `ASSERTIONS` builds now print a warning the first time. The\nnetworking porting docs describe these semantics.\n\nThe WebSocket backend and PIPEFS are otherwise unchanged.\n\nTest coverage is a new `test_noderawsockets_nonblock_flags` test. It\nchecks `F_GETFL` after `socket()`, `FIONBIO`, `accept`/`accept4` flags\non blocking and non-blocking listeners, `EAGAIN` from an empty listener,\nthe non-blocking connect sequence (`EINPROGRESS`, then `POLLOUT` and\n`SO_ERROR`) for both TCP and `AF_UNIX`, and the warning. The test\nprogram also passes natively on Linux (the Emscripten-only checks are\nguarded)."
    },
    {
      "commit": "49a7d0dbcbe876a7b1d5bad950dc89f1b4cc6a0c",
      "tree": "b955b05443b99c1451406ada914abb9489f65c26",
      "parents": [
        "cfb87fa8a5e6f1e6c2ab8746b11b604c05f59525"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Wed Sep 16 04:56:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 04:56:15 2026"
      },
      "message": "[EH] Fix JS deps when linking without -fexceptions (#27708)\n\nSeveral Emscripten EH-related JS variables were gated under `if\n!DISABLE_EXCEPTION_CATCHING`, making them unavailable at the link time\nif `-fexceptions` was not given. It may not be given due to a command\nargument mismatch, or because the code was not using EH but\nsetjmp/longjmp.\n\nThis PR makes `setTempRet0` and `ExceptionInfo` dependent on the method\nthey were called in, rather than gating them behind `if\n!DISABLE_EXCEPTION_CATCHING`.\n\nThis also exports `setThrew` when `SUPPORT_LONGJMP` is true too, because\n`setThrew` is called from invokes, which can be also generated from\nEmscripten setjmp/longjmp handling. (And also when the options mismatch\nbetween the compile time and link time, as in #27703)\n\nFixes #27703."
    },
    {
      "commit": "cfb87fa8a5e6f1e6c2ab8746b11b604c05f59525",
      "tree": "95fa54da133e4cb41935fc9da1298ef210fbb9bc",
      "parents": [
        "8693db76027d649db28f132f8b05ccf4913146ea"
      ],
      "author": {
        "name": "Dimokritos Kolitsos",
        "email": "dkolitsos@protonmail.com",
        "time": "Tue Sep 15 17:55:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:55:06 2026"
      },
      "message": "Stack-allocate trivial value_object/value_array argument temporaries (#27610)\n\nAddresses the argument-marshaling side of #27553.\n\nWhen a value type is trivially constructible and destructible and does\nnot require over-alignment (alignof(T) \u003c\u003d STACK_ALIGN), its argument\ntemporaries no longer round-trip through `new T()` plus destructor\nbookkeeping. The registration passes `sizeof(T)` and a triviality flag;\n`toWireType` places the temporary on the wasm stack when the invoker\nbrackets the call in `stackSave`/`stackRestore` (a null `destructors`\nargument is that contract), zero-filled so unregistered fields and\npadding match the heap path\u0027s value-initialization. The bracket restores\nthe frame in a `finally`, so a throwing argument conversion or callee\ncannot leak stack. Over-aligned types keep the heap path, as do callers\nthat defer destruction (emval returns, property setters), Asyncify\nbuilds, and JSPI-async invokers, which outlive the frame. Field/element\nwrites skip their per-write destructors array when the element type\nregisters no destructor, which turns out to be the dominant source of\nper-call garbage in large modules (V8 sinks those arrays in small\nbenchmarks but not at scale). The AOT generator mirrors the type shape\nso invoker signatures stay in sync, and `libsigs.js` is regenerated for\nthe new registration parameters.\n\nMeasured on box3d.js (a real embind physics binding) rebuilt with this\nbranch, forced-GC heapUsed deltas, median over 9 rounds of 20k calls:\n\n| call | before | after |\n|---|---|---|\n| getter taking one 3-field value_object id | 96 B/call | 0 |\n| getter with id + value_array vec3 argument | 208 | 16 |\n| raycast (id, two vec3, filter in; result object out) | 179 | 37 |\n| world step (id + two scalars) | 125 | 61 |\n\nA stock rebuild with an unpatched toolchain reproduces the before column\nexactly. The remaining nonzeros are value-type returns, which still\nmaterialize fresh objects by design and are out of scope here."
    },
    {
      "commit": "8693db76027d649db28f132f8b05ccf4913146ea",
      "tree": "d299a8c53ea23ba496876f4d31ccf56b03c9b3b0",
      "parents": [
        "002e888da88f2cbe2080672b4318a7ee697cb3f2"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 15 17:13:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:13:27 2026"
      },
      "message": "Don\u0027t assume `.git` is a directory (#27710)\n\nWithin a git worktree this it is a text file.\n\nSee https://github.com/emscripten-core/emsdk/pull/1794"
    },
    {
      "commit": "002e888da88f2cbe2080672b4318a7ee697cb3f2",
      "tree": "9f10e2c9c816a2f8b523a430c0390247a4293d44",
      "parents": [
        "23c212bb8f7e51f4cad39a9f8f6c1796d55a00bb"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Sep 15 03:55:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 03:55:04 2026"
      },
      "message": "[EH] Use Emscripten EH flag+model in Clang/LLVM (#27704)\n\nhttps://github.com/llvm/llvm-project/pull/221431 and\nhttps://github.com/llvm/llvm-project/pull/221443 try to make Emscripten\nEH a first-class citizen to be consistent with Wasm EH.\nhttps://github.com/llvm/llvm-project/pull/221441 adds\n`-femscripten-exceptions` that matches `-fwasm-exceptions`, and\nhttps://github.com/llvm/llvm-project/pull/221443 adds\n`-exception-model\u003demscripten` that matches `-exception-model\u003dwasm`.\n\nThis PR feeds those command line arguments instead of the old `-mllvm\n-enable-emscripten-cxx-exceptions`.\n\nThis has to land after https://github.com/llvm/llvm-project/pull/221443."
    },
    {
      "commit": "23c212bb8f7e51f4cad39a9f8f6c1796d55a00bb",
      "tree": "02face556a0227ccd4ec09ce32b8ec13bccbf99b",
      "parents": [
        "e34b2b50a1ffd755a4b746b85dbeeab6b255195e"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Sep 15 00:56:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 00:56:11 2026"
      },
      "message": "Update emsdk version from 83b1bdcb to 006cae2e (#27706)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 83b1bdcb \u003d\u003e 006cae2e\n\nThe following revisions were included in this update:\n\n```\n- 006cae2e Roll emscripten from 0da378c05771 to b4602f5311d8 (1 revision)\n- 3ead3417 Roll binaryen from 5eb87bfcbdfa to 7d9ec2fa2129 (1 revision)\n- 25824488 Roll llvm-project from 9a7c7f2b3a40 to c4a8bda414e8 (74 revisions)\n- 0797e564 Roll emscripten from beac36cdff5c to 0da378c05771 (1 revision)\n- f2be0b4c Roll llvm-project from 6d7e7fbafd8d to 9a7c7f2b3a40 (11 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/83b1bdcb..006cae2e\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "e34b2b50a1ffd755a4b746b85dbeeab6b255195e",
      "tree": "e2f275fd28daadfa53bee2d43e9e52d2baa8c41b",
      "parents": [
        "f125defadf67f4db0c3045ea61a421c46fdebbe1"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Sep 14 20:10:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 20:10:36 2026"
      },
      "message": "Avoid mutating options and settings in test_other.py. NFC (#27674)\n\nQuery `em-config CACHE` directly in `test/test_other.py` to determine\nexpected library search paths instead of mutating `options.lto` and\n`settings.MEMORY64` to call `cache.get_lib_dir()`.\n\nAlso, remove top-level imports of `tools.cmdline.options` and\n`tools.settings.settings` from `test/test_other.py`.\n\nSee: #27666"
    },
    {
      "commit": "f125defadf67f4db0c3045ea61a421c46fdebbe1",
      "tree": "7b7ede10dbc759663ad201b1a097712329570d3c",
      "parents": [
        "b4602f5311d87102a2c950e61e1a4ae22d2217ec"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Sep 14 18:59:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 18:59:53 2026"
      },
      "message": "Enable more ruff checks, part 3. NFC (#27675)"
    },
    {
      "commit": "b4602f5311d87102a2c950e61e1a4ae22d2217ec",
      "tree": "0dd2f1d73fd17c2d6c02d1b60ca165e765ef1221",
      "parents": [
        "0da378c057719b602735261d4c946b246d47075b"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Sep 14 16:24:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 16:24:20 2026"
      },
      "message": "Clarify GROWABLE_ARRAYBUFFERS options in warning (#27697)\n\nWe linked to the design issue, but did not explain how to work around\nthe issue, which we now have an option for."
    },
    {
      "commit": "0da378c057719b602735261d4c946b246d47075b",
      "tree": "ff91e12b6f8c20a168ba886cc32428e1cf956848",
      "parents": [
        "beac36cdff5c6b392b9beddb123fd94195a20697"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Sep 14 13:06:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 13:06:48 2026"
      },
      "message": "Update emsdk version from 3355ee71 to 83b1bdcb (#27701)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 3355ee71 \u003d\u003e 83b1bdcb\n\nThe following revisions were included in this update:\n\n```\n- 83b1bdcb Roll binaryen from b7c5ff3c8b4e to 5eb87bfcbdfa (1 revision)\n- 3e9ef596 Roll llvm-project from e476e76df9b1 to 6d7e7fbafd8d (8 revisions)\n- f05e80ea Roll llvm-project from d36b94ae1dc4 to e476e76df9b1 (23 revisions)\n- cfc4edec Roll llvm-project from db65ace07649 to d36b94ae1dc4 (16 revisions)\n- db6e79e3 Roll v8 from 34d5dab70f7e to a52cba626da6 (1 revision)\n- 89d859d6 Roll llvm-project from 0d55d0bf81ce to db65ace07649 (11 revisions)\n- 77928d64 Roll llvm-project from 474b7358a90e to 0d55d0bf81ce (4 revisions)\n- 67cc5ae9 Roll llvm-project from 148ee2b266b7 to 474b7358a90e (6 revisions)\n- fbca0576 Roll llvm-project from e1b6027992df to 148ee2b266b7 (4 revisions)\n- c905e29e Roll llvm-project from 270678035666 to e1b6027992df (7 revisions)\n- fb5c43de Roll emscripten from bc7be4e0c44e to beac36cdff5c (1 revision)\n- d92abe01 Roll v8 from 603130eea0ed to 34d5dab70f7e (17 revisions)\n- 351ab3e7 Roll llvm-project from a67c8f208e87 to 270678035666 (8 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/3355ee71..83b1bdcb\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "beac36cdff5c6b392b9beddb123fd94195a20697",
      "tree": "4552090d8fc03ace8002d0df893c8df188ad7f8e",
      "parents": [
        "bc7be4e0c44eb0159cbdb4d37fea5526a337e3d8"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Sep 12 15:12:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 12 15:12:49 2026"
      },
      "message": "Update emsdk version from dbd2a169 to 3355ee71 (#27696)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: dbd2a169 \u003d\u003e 3355ee71\n\nThe following revisions were included in this update:\n\n```\n- 3355ee71 Roll llvm-project from e471938cf2c9 to a67c8f208e87 (8 revisions)\n- fb641391 Roll llvm-project from 2eb8c73f47c7 to e471938cf2c9 (41 revisions)\n- 55e66abd Roll binaryen from 45b6cd96f29e to b7c5ff3c8b4e (2 revisions)\n- 6bbc3a8f Roll binaryen from cb3586b8763d to 45b6cd96f29e (1 revision)\n- 2ce4af48 Roll llvm-project from 27d26292f819 to 2eb8c73f47c7 (57 revisions)\n- 4b32b422 Roll binaryen from 14bdb7f536a9 to cb3586b8763d (2 revisions)\n- e2095a2f Roll llvm-project from 18ea5b09a249 to 27d26292f819 (52 revisions)\n- 4db9cb52 Roll llvm-project from c9a1fc8d1dee to 18ea5b09a249 (52 revisions)\n- fd1ab687 Roll v8 from e1ac1f641ab1 to 603130eea0ed (22 revisions)\n- 098d4cbd Roll llvm-project from c5a4e6d87b7d to c9a1fc8d1dee (51 revisions)\n- bbc40349 Roll binaryen from ee098931c69f to 14bdb7f536a9 (2 revisions)\n- c106923c Roll llvm-project from fc6a6716ed7a to c5a4e6d87b7d (54 revisions)\n- 84af4a39 Roll binaryen from b872d117f55a to ee098931c69f (1 revision)\n- eb19f88e Roll emscripten from df49c0066bcf to bc7be4e0c44e (1 revision)\n- 2dd45a51 Roll llvm-project from e2955810d33e to fc6a6716ed7a (41 revisions)\n- 9d3c5279 Roll binaryen from 994a5cb99168 to b872d117f55a (1 revision)\n- 71149235 Roll llvm-project from 4d689e68a8e3 to e2955810d33e (36 revisions)\n- 1845064d Roll llvm-project from a2e2038fc932 to 4d689e68a8e3 (28 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/dbd2a169..3355ee71\n\nThe following (11) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 153108 \u003d\u003e 153150 [+42 bytes / +0.03%]\ncodesize/test_codesize_cxx_ctors2.json: 152514 \u003d\u003e 152556 [+42 bytes / +0.03%]\ncodesize/test_codesize_cxx_except.json: 199258 \u003d\u003e 199300 [+42 bytes / +0.02%]\ncodesize/test_codesize_cxx_except_wasm.json: 168624 \u003d\u003e 168663 [+39 bytes / +0.02%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 166484 \u003d\u003e 166523 [+39 bytes / +0.02%]\ncodesize/test_codesize_cxx_mangle.json: 265588 \u003d\u003e 265630 [+42 bytes / +0.02%]\ncodesize/test_codesize_cxx_noexcept.json: 155018 \u003d\u003e 155060 [+42 bytes / +0.03%]\ncodesize/test_codesize_cxx_wasmfs.json: 180124 \u003d\u003e 180166 [+42 bytes / +0.02%]\ncodesize/test_codesize_hello_dylink_all.json: 858817 \u003d\u003e 858850 [+33 bytes / +0.00%]\ncodesize/test_codesize_minimal_pthreads.json: 26015 \u003d\u003e 26022 [+7 bytes / +0.03%]\ncodesize/test_codesize_minimal_pthreads_memgrowth.json: 26474 \u003d\u003e 26481 [+7 bytes / +0.03%]\n\nAverage change: +0.02% (+0.00% - +0.03%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "bc7be4e0c44eb0159cbdb4d37fea5526a337e3d8",
      "tree": "bec21c266fda4894e34989e139bf91bda2568bf2",
      "parents": [
        "df49c0066bcfc8ebc2270c0c30fab33ec6127c3c"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Sep 10 16:00:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 16:00:21 2026"
      },
      "message": "Update emsdk version from 48fc5e44 to dbd2a169 (#27695)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 48fc5e44 \u003d\u003e dbd2a169\n\nThe following revisions were included in this update:\n\n```\n- dbd2a169 Roll v8 from 5404e0f85a83 to e1ac1f641ab1 (21 revisions)\n- 13515865 Roll emscripten from 14a8c99de0dd to df49c0066bcf (1 revision)\n- 5869a210 Roll llvm-project from 97d5de84b693 to a2e2038fc932 (23 revisions)\n- d3db73d3 Roll binaryen from ac7914969df9 to 994a5cb99168 (5 revisions)\n- 66a2c32f Roll emscripten from 4dd72ecd0489 to 14a8c99de0dd (1 revision)\n- 9434475d Roll llvm-project from 64ee3d3172c3 to 97d5de84b693 (65 revisions)\n- 2b301780 Roll binaryen from 72e6b562e3f1 to ac7914969df9 (2 revisions)\n- 20b311cf Roll emscripten from fedeef0f952c to 4dd72ecd0489 (1 revision)\n- 08d0f226 Roll binaryen from a7f790969ee8 to 72e6b562e3f1 (1 revision)\n- 267f9a8b Roll llvm-project from ef208564acbf to 64ee3d3172c3 (50 revisions)\n- bbdcd76f Roll emscripten from 969d5a421ce8 to fedeef0f952c (1 revision)\n- c295d5cc Roll llvm-project from b61bc3423967 to ef208564acbf (55 revisions)\n- 6ae7a628 Roll llvm-project from 42b846980eea to b61bc3423967 (289 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/48fc5e44..dbd2a169\n\nThe following (1) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_lto.json: 119568 \u003d\u003e 119632 [+64 bytes / +0.05%]\n\nAverage change: +0.05% (+0.05% - +0.05%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "df49c0066bcfc8ebc2270c0c30fab33ec6127c3c",
      "tree": "6020c9e832542d894011274a1be0be23d13de436",
      "parents": [
        "14a8c99de0dd0d57a34b034100e0cba53c4d095a"
      ],
      "author": {
        "name": "Derek Schuff",
        "email": "dschuff@chromium.org",
        "time": "Thu Sep 10 00:21:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 00:21:18 2026"
      },
      "message": "Use separate lib build paths for different configurations (#27694)\n\nLibraries with different configurations use different directories in the\nsysroot (e.g. wasm64-emscripten/pic) but currently all use the same\nbuild directory across configurations. When using Ninja, these\nintermediate directories persist and can result in corruption if one\nconfiguration is built after another. We could solve this by just\nclearing them, but keeping the build directories around can be useful\nfor local development, and will also allow building all the\nconfigurations at once (in a future PR).\n\nThis PR just makes the build directory share the path logic with the lib\ndirectory. (The ports system has its own separate logic)."
    },
    {
      "commit": "14a8c99de0dd0d57a34b034100e0cba53c4d095a",
      "tree": "250bfc9b78cb66b71e67c7a44ffcf5a6cd786237",
      "parents": [
        "4dd72ecd04897083f4d6b41a1fe3e7c41155b1fc"
      ],
      "author": {
        "name": "Derek Schuff",
        "email": "dschuff@chromium.org",
        "time": "Wed Sep 09 23:06:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 23:06:13 2026"
      },
      "message": "Don\u0027t build libopenmp in wasm64 mode (#27692)\n\nThe library doesn\u0027t support wasm64 and will error out. This causes\n`./embuilder --wasm64 build SYSTEM`\nto fail.\nSee https://github.com/emscripten-core/emscripten/issues/27221"
    },
    {
      "commit": "4dd72ecd04897083f4d6b41a1fe3e7c41155b1fc",
      "tree": "0e10b2b04a5c5c46f2f2e5282ad10642a3144495",
      "parents": [
        "fedeef0f952caaa85bad5dd0c9f3d7589a4fb681"
      ],
      "author": {
        "name": "Jacob Cain",
        "email": "115182890+jrcain-usgs@users.noreply.github.com",
        "time": "Wed Sep 09 20:09:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 20:09:55 2026"
      },
      "message": "[Docs] Update link in embind docs (#27691)\n\nUse Web Archive to resolve link with missing presentation."
    },
    {
      "commit": "fedeef0f952caaa85bad5dd0c9f3d7589a4fb681",
      "tree": "de44682964f878374e3fb6169308bb530d952340",
      "parents": [
        "969d5a421ce8fabf3508b6118b8e08b0ac075ba6"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Sep 09 16:11:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 16:11:36 2026"
      },
      "message": "Update emsdk version from e8579ea4 to 48fc5e44 (#27690)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: e8579ea4 \u003d\u003e 48fc5e44\n\nThe following revisions were included in this update:\n\n```\n- 48fc5e44 Roll v8 from 4d21392dd1a4 to 5404e0f85a83 (31 revisions)\n- dc4dcf8e Roll emscripten from 401790b00d8f to 969d5a421ce8 (2 revisions)\n- 805c0d75 Roll binaryen from 2abebd2a7163 to a7f790969ee8 (1 revision)\n- 6068ccf2 Roll emscripten from df2074162561 to 401790b00d8f (1 revision)\n- 5e6b2607 Roll emscripten from d10aa3af1bbc to df2074162561 (1 revision)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/e8579ea4..48fc5e44\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "969d5a421ce8fabf3508b6118b8e08b0ac075ba6",
      "tree": "eace066ef812d54825c980547863217357723172",
      "parents": [
        "05fbfb2c089326a0c693708e1d6f1f24de418859"
      ],
      "author": {
        "name": "Derek Schuff",
        "email": "dschuff@chromium.org",
        "time": "Tue Sep 08 23:42:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 23:42:30 2026"
      },
      "message": "test_other: match unused linker input warning flexibly across Clang versions (#27687)\n\nhttps://github.com/llvm/llvm-project/commit/7987830e7764 improved the\ndriver\u0027s\nhandling of compilation/linking phases, which results in a slightly\ndifferent\nwarning in the case of our test:\n\nInstead of\n`warning: -lbar: \u0027linker\u0027 input unused [-Wunused-command-line-argument]`\nwe now get\n`warning: -lbar: \u0027linker\u0027 input unused when \u0027-c\u0027 is present\n[-Wunused-command-line-argument]`\n\nWhich is an improvement but breaks our current test expectation.\nThis change makes our test looser to path both ways."
    },
    {
      "commit": "05fbfb2c089326a0c693708e1d6f1f24de418859",
      "tree": "86e37f0a282a941013e645bd18c2cf07806e43ef",
      "parents": [
        "401790b00d8fed54000499636fc32576e85a33bf"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 08 23:22:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 23:22:48 2026"
      },
      "message": "[ci] Use pip to install cmake and ninja on Windows (#27677)\n\nChocolatey\u0027s community feed is prone to rate-limiting, 503 Service\nUnavailable, and gateway timeouts on CI runners. Installing cmake and\nninja wheels via `pip` is significantly faster and avoids dependency on\ncommunity.chocolatey.org.\n\nIts also much faster it seems: 9s vs 38s in the run I compared.\n\nSee: #27511"
    },
    {
      "commit": "401790b00d8fed54000499636fc32576e85a33bf",
      "tree": "5faae0b508457e87b521284a4dede4eb09a138dc",
      "parents": [
        "df2074162561a213cda0ddb4e766c112dd22c2ff"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Tue Sep 08 21:26:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 21:26:09 2026"
      },
      "message": "Fix missing runtime exports in --emit-tsd (#27686)\n\nTypeScript 7 ignores unassigned property accesses on object literals\nduring declaration emission. As a result, runtime exports without JS\nlibrary definitions (such as callMain) were omitted from RuntimeExports.\n\nAlways assign a value when emitting intermediate runtime declarations so\nall exported runtime methods appear in the generated types. Also fix\ndouble curly braces in JSDoc type annotations.\n\nFixes #27682."
    },
    {
      "commit": "df2074162561a213cda0ddb4e766c112dd22c2ff",
      "tree": "14da73fcdaa1bb40953b5644111990f71ff67e35",
      "parents": [
        "d10aa3af1bbc06af6c9ead1cd418237d09ca5353"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Sep 08 18:13:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 18:13:42 2026"
      },
      "message": "Update emsdk version from bbd37521 to e8579ea4 (#27681)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: bbd37521 \u003d\u003e e8579ea4\n\nThe following revisions were included in this update:\n\n```\n- e8579ea4 Roll v8 from 9f30cc5fc4ad to 4d21392dd1a4 (17 revisions)\n- ee58ccd5 Roll llvm-project from fc3ad3f8c655 to 42b846980eea (36 revisions)\n- 2449b33a Roll llvm-project from 98baf03a3ca6 to fc3ad3f8c655 (22 revisions)\n- fc733329 Roll llvm-project from b1f20dd48e11 to 98baf03a3ca6 (4 revisions)\n- 685f4178 Roll llvm-project from de3dd2dc277f to b1f20dd48e11 (22 revisions)\n- 33c3dbc8 Roll v8 from ef4ca8ef1adc to 9f30cc5fc4ad (2 revisions)\n- d8378c93 Roll llvm-project from da9625ca5a15 to de3dd2dc277f (8 revisions)\n- 95eb9ebd Roll llvm-project from 72417eb739e5 to da9625ca5a15 (12 revisions)\n- 2be36238 Roll llvm-project from 62e6fe8bbab3 to 72417eb739e5 (4 revisions)\n- 023c836c Roll llvm-project from 3daf50547d38 to 62e6fe8bbab3 (10 revisions)\n- ebe31a54 Roll emscripten from 6fad56c9ccc9 to d10aa3af1bbc (1 revision)\n- 0f4fed66 Roll llvm-project from 29fda2c4ecca to 3daf50547d38 (15 revisions)\n- 94693ac7 Roll binaryen from cdb9eaa079d0 to 2abebd2a7163 (1 revision)\n- 76c07f50 Roll v8 from e3ad665e4604 to ef4ca8ef1adc (4 revisions)\n- 1d4d9b2c Roll llvm-project from 49a9f5094b5c to 29fda2c4ecca (8 revisions)\n- afc2a2c9 Roll llvm-project from ef7bfdcfd4e3 to 49a9f5094b5c (18 revisions)\n- 78c274bd Roll emscripten from e5a00cccf0a1 to 6fad56c9ccc9 (1 revision)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/bbd37521..e8579ea4\n\nThe following (15) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 153121 \u003d\u003e 153108 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_ctors2.json: 152527 \u003d\u003e 152514 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_except.json: 199271 \u003d\u003e 199258 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_except_wasm.json: 168637 \u003d\u003e 168624 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 166497 \u003d\u003e 166484 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_lto.json: 119581 \u003d\u003e 119568 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_mangle.json: 265601 \u003d\u003e 265588 [-13 bytes / -0.00%]\ncodesize/test_codesize_cxx_noexcept.json: 155031 \u003d\u003e 155018 [-13 bytes / -0.01%]\ncodesize/test_codesize_cxx_wasmfs.json: 180137 \u003d\u003e 180124 [-13 bytes / -0.01%]\ncodesize/test_codesize_files_wasmfs.json: 63248 \u003d\u003e 63231 [-17 bytes / -0.03%]\ncodesize/test_codesize_hello_O1.json: 7529 \u003d\u003e 7510 [-19 bytes / -0.25%]\ncodesize/test_codesize_hello_dylink.json: 43267 \u003d\u003e 43250 [-17 bytes / -0.04%]\ncodesize/test_codesize_hello_dylink_all.json: 858834 \u003d\u003e 858817 [-17 bytes / -0.00%]\ncodesize/test_minimal_runtime_code_size_hello_embind.json: 15004 \u003d\u003e 14987 [-17 bytes / -0.11%]\ncodesize/test_minimal_runtime_code_size_hello_embind_val.json: 11731 \u003d\u003e 11714 [-17 bytes / -0.14%]\n\nAverage change: -0.04% (-0.25% - -0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "d10aa3af1bbc06af6c9ead1cd418237d09ca5353",
      "tree": "fe8ad0c5d18bcfa3727564fb229f5af96ccb6e15",
      "parents": [
        "6fad56c9ccc9175aa13a7bf5751783924102a77c"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Sep 05 23:22:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 23:22:01 2026"
      },
      "message": "Update emsdk version from ada02ef3 to bbd37521 (#27664)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: ada02ef3 \u003d\u003e bbd37521\n\nThe following revisions were included in this update:\n\n```\n- bbd37521 Roll llvm-project from b5fe885e5d2d to ef7bfdcfd4e3 (8 revisions)\n- 7c6e5092 Roll emscripten from 48c8498a1530 to e5a00cccf0a1 (1 revision)\n- 7d2dbf37 Roll llvm-project from c3fa882edb34 to b5fe885e5d2d (28 revisions)\n- ebf7283b Roll emscripten from 43248806e422 to 48c8498a1530 (8 revisions)\n- 4e46da97 Roll emscripten from 9eca01833bb9 to 43248806e422 (2 revisions)\n- 0891e7ac Roll binaryen from c75f2ae1a525 to cdb9eaa079d0 (1 revision)\n- 10ef1d07 Roll emscripten from d81369405bfe to 9eca01833bb9 (3 revisions)\n- a4c8bc33 Roll llvm-project from ca7890e9f76d to c3fa882edb34 (38 revisions)\n- 5fd6b17c Roll emscripten from dc0f21dd8aab to d81369405bfe (1 revision)\n- c0ca00f3 Roll llvm-project from 543ac0371f32 to ca7890e9f76d (56 revisions)\n- 7e016196 Roll v8 from ec616fda9fd9 to e3ad665e4604 (25 revisions)\n- 44e171ec Roll llvm-project from c0fb057aad58 to 543ac0371f32 (41 revisions)\n- 6a1891c3 Roll llvm-project from 6ba0802b406e to c0fb057aad58 (15 revisions)\n- f5d4947d Roll llvm-project from e6734a41bb41 to 6ba0802b406e (54 revisions)\n- 60a1f53e Roll emscripten from 855804c1342a to dc0f21dd8aab (1 revision)\n- 95ea5027 Roll binaryen from 180bae3ed42f to c75f2ae1a525 (1 revision)\n- 3a40721b Roll llvm-project from d23b9dbc4e8b to e6734a41bb41 (82 revisions)\n- 80f0c7c3 Roll emscripten from 2bdd1af24187 to 855804c1342a (1 revision)\n- a91a1534 Roll llvm-project from f4ad12c3e437 to d23b9dbc4e8b (43 revisions)\n- 4ae1cf57 Roll v8 from 3e6373bb9f91 to ec616fda9fd9 (39 revisions)\n- 5ece3e68 Roll llvm-project from d79ce87f19d7 to f4ad12c3e437 (20 revisions)\n- 98b0f043 Roll llvm-project from fadd7e640336 to d79ce87f19d7 (21 revisions)\n- d7ae7883 Roll binaryen from 6c4214f7d34d to 180bae3ed42f (1 revision)\n- 197ab55b Roll emscripten from c28f6635a6e6 to 2bdd1af24187 (4 revisions)\n- 46e27fa0 Roll llvm-project from c13e9e15eb00 to fadd7e640336 (55 revisions)\n- 907bdaf6 Roll emscripten from e2ebea0e5f84 to c28f6635a6e6 (3 revisions)\n- b6475a37 Roll binaryen from e7a45512aa26 to 6c4214f7d34d (1 revision)\n- 8b650320 Roll emscripten from 7afdae44d67c to e2ebea0e5f84 (2 revisions)\n- 57d6f920 Roll llvm-project from 5c8ee8eb34e2 to c13e9e15eb00 (59 revisions)\n- 1be08a23 Roll binaryen from 20486056d457 to e7a45512aa26 (2 revisions)\n  ... (and more, see full log)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/ada02ef3..bbd37521\n\nThe following (1) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_hello_dylink_all.json: 858908 \u003d\u003e 858834 [-74 bytes / -0.01%]\n\nAverage change: -0.01% (-0.01% - -0.01%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "6fad56c9ccc9175aa13a7bf5751783924102a77c",
      "tree": "85d4d655db72029ad51790cb8816fd53442e164a",
      "parents": [
        "e5a00cccf0a19cc1aadc7206552da42b1018031a"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Sat Sep 05 05:06:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 05:06:38 2026"
      },
      "message": "Pin wasm-bindgen test crate to an exact version (#27678)\n\nThe wasm-bindgen tests pin the crate to the CLI version installed in CI,\nbut `cargo add wasm-bindgen@0.2.N` writes `wasm-bindgen \u003d \"0.2.N\"`,\nwhich cargo treats as the caret range `^0.2.N`. As soon as a newer 0.2.x\npatch is published, cargo resolves to it while the CLI on PATH stays at\nthe older version, and wasm-bindgen rejects the crate/CLI mismatch at\nlink time. This broke CI when 0.2.128 was released while the CLI was\nstill at 0.2.127.\n\n* Use exact requirements (`\u003d0.2.128`) in the `cargo add` calls in\n`test_other.py`\n* Same for `test/rust/bindgen_greeter/Cargo.toml`\n\nVerified that `cargo add wasm-bindgen@0.2.127` locks to 0.2.128 while\n`cargo add wasm-bindgen@\u003d0.2.127` locks to 0.2.127, so future releases\nno longer affect the pinned tests. `other.test_wasm_bindgen_*` pass\nlocally.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "e5a00cccf0a19cc1aadc7206552da42b1018031a",
      "tree": "dcceae6120616cdf03dfe541633879c19c854af2",
      "parents": [
        "48c8498a15300b43a61ba3ae50f3874bf3cfa8fc"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Sat Sep 05 02:40:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 02:40:06 2026"
      },
      "message": "Drop the WASM_BINDGEN wasmExports namespace import for ESM integration (#27676)\n\nThis removes the `WASM_ESM_INTEGRATION \u0026\u0026 WASM_BINDGEN` namespace import\nof the wasm module added in #27208, resolves #27658.\n\nwasm-bindgen 0.2.128 no longer reads `wasmExports[...]` inline in its\nemscripten glue; it binds the asmjs-mangled identifiers that\n`assignWasmExports` already provides for every export\n(wasm-bindgen/wasm-bindgen#5270), so the aggregate object is not needed.\n\n* Remove the conditional `import * as wasmExports` from\n`src/postamble.js`, leaving the plain `var wasmExports` declaration for\nall modes.\n* Bump the pinned wasm-bindgen library and CLI from 0.2.127 to 0.2.128\n(test crates, `cargo add` calls, CircleCI install).\n* `test_wasm_bindgen_tsd_multi_return` now asserts the correct public\nsurface: only wasm-bindgen\u0027s unwrapping wrapper `multi_value_return():\nnumber` is typed, and the raw multi-value `Result` ABI export\n`_multi_value_return` stays internal. With 0.2.127 the raw export leaked\ninto `WasmModule`, which is what the old `[number, number, number]`\nassertion was matching.\n\nAll `test_wasm_bindgen_*` tests pass against wasm-bindgen 0.2.128.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "48c8498a15300b43a61ba3ae50f3874bf3cfa8fc",
      "tree": "0ef5a341f22807105d55fbf46a421a382e961d11",
      "parents": [
        "d4bc5cc45b12c954013cd188589891b9350343c6"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Sep 05 01:12:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 01:12:36 2026"
      },
      "message": "Remove usage of `shared.EMCC` et al from test code. NFC (#27673)\n\nMove tool paths (such as `EMCC`, `LLVM_COV`, `LLVM_PROFDATA`, and\n`WASM_LD`) from `tools/shared.py` to `test/common.py` or\n`tools/building.py`.\n\nAlso, remove the dead `_is_ar_cache` from `tools/building.py`.\n\nPart of the effort to decouple test code from compiler internals.\n\nSee: #27666"
    },
    {
      "commit": "d4bc5cc45b12c954013cd188589891b9350343c6",
      "tree": "af8c3c8d4601f1c4ce76481faadb71aa7da05b46",
      "parents": [
        "8de9aa023c51dd9a7ac53f249f3b127c6862f1ca"
      ],
      "author": {
        "name": "Deepanshu Upadhyay",
        "email": "105731074+Kammu2000@users.noreply.github.com",
        "time": "Sat Sep 05 00:13:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 00:13:44 2026"
      },
      "message": "[docs] Fix grammar and spelling mistakes in dynamic linking documentation (#27671)\n\nFix a few grammar and spelling issues in the dynamic linking\ndocumentation."
    },
    {
      "commit": "8de9aa023c51dd9a7ac53f249f3b127c6862f1ca",
      "tree": "36c47a68009994d366a457ddbf2d5d4a2ca38445",
      "parents": [
        "ca28245974627d6f84c232360f7e95e080952068"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Sat Sep 05 00:10:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 00:10:46 2026"
      },
      "message": "Unify wasm-bindgen output under -sWASM_BINDGEN with marker-based detection (#27208)\n\nThis unifies wasm-bindgen output generation under a single\n`-sWASM_BINDGEN` path, building on the wasm-bindgen side change in\nwasm-bindgen/wasm-bindgen#5210. It supersedes #27179.\n\nPreviously `-sWASM_BINDGEN` was effectively a staticlib-only flow where\nemcc had to discover and own the export set itself. With\nwasm-bindgen/wasm-bindgen#5210, wasm-bindgen hoists its clean exported\nAPI (functions, classes, enums) into top-level library symbols that\nself-register as public exports via the `__export`/`__force` symbol\nattributes (#27436, wasm-bindgen/wasm-bindgen#5253) in its\n`--js-library`. The user-facing API now comes from wasm-bindgen\u0027s own\nlibrary in every flow, so emscripten no longer needs to guess or own\nexports — it just surfaces what wasm-bindgen registered. That lets one\n`-sWASM_BINDGEN` path serve both whether cargo/rustc drives the link\n(bin crate, emcc as the linker, rustc supplies `-sEXPORTED_FUNCTIONS`)\nor emcc drives it (staticlib, exports discovered locally).\n\nThe model for a public export is the union across both systems:\nwasm-bindgen\u0027s self-registered API, plus emscripten\u0027s own\n`EMSCRIPTEN_KEEPALIVE` exports — minus wasm-bindgen\u0027s internal expansion\nglue, which must not spill into the public surface.\n\nWhat\u0027s implemented:\n\n* `-sWASM_BINDGEN` is a no-op unless the linker inputs carry\nwasm-bindgen\u0027s `__wasm_bindgen_emscripten_marker` custom section\n(emitted by the wasm-bindgen crate). The check runs on the inputs before\nthe link (`llvm-objdump --section-headers`, so archive members are\ncovered), so there is a single link and no speculative exports. When the\nmarker is absent wasm-bindgen is never invoked and need not be\ninstalled, so cargo/rustc can pass the flag unconditionally via\n`-Clink-arg` without affecting ordinary builds.\n* The exports the wasm-bindgen expansion reaches by name — the supplied\n`EXPORTED_FUNCTIONS` (method shims, the `__wbindgen_*` runtime, the\nmarker, `main`) plus anything its expansion adds — are captured as\ninternal glue and kept off every export layer: the ESM wrapper\n(`user_requested_exports`), the factory `Module` attachment\n(`EXPORTED_FUNCTIONS`, via `should_export`), and the keepalive pass in\n`finalize_wasm`. `main` still runs automatically on init; `_main` isn\u0027t\nsurfaced.\n* A genuine `EMSCRIPTEN_KEEPALIVE` C/C++ export is **not** in that\ninternal set and remains surfaced, so a hand-written native export\ncomposes with wasm-bindgen\u0027s API in the same module.\n* Placeholder symbols wasm-bindgen consumes (`__wbindgen_describe*`,\n`__externref_*`, ...) are stripped so they aren\u0027t reported as undefined\nexports.\n* nm-based export discovery only runs when no driver supplied\n`EXPORTED_FUNCTIONS`; the rustc-driven link already lists them exactly.\n* Imported JS is wired through: `library_bindgen.extern-pre.js` is fed\nas extern-pre-js and the `snippets/` dir is copied next to the output so\nrelative imports resolve.\n* Under `WASM_ESM_INTEGRATION`, `wasmExports` is provided via a\nnamespace import of the wasm so wasm-bindgen\u0027s by-name export access\nworks. This is gated behind `WASM_BINDGEN` so plain ESM integration\nkeeps per-symbol named imports and their tree-shakability. (The wrapper\nre-export of self-registered JS library symbols itself landed in\n#27436.)\n\nBoth output modes then expose only the clean API (e.g. a `Greeter`\nclass).\n\nTesting:\n\n* End-to-end test parameterized over the ESM (`-sWASM_ESM_INTEGRATION`)\nand factory (`-sMODULARIZE -sEXPORT_ES6`) output modes, built via `cargo\nbuild` with `-sWASM_BINDGEN` passed as a link arg, asserting the clean\n`Greeter` API works, `main` runs on init, and none of the raw wasm\nexports leak.\n* A no-marker test asserting `-sWASM_BINDGEN` is a no-op for an ordinary\n`hello_world.c` build (doesn\u0027t require wasm-bindgen installed).\n* The staticlib integration test is extended to assert an\n`EMSCRIPTEN_KEEPALIVE` native export survives alongside the wasm-bindgen\nAPI (fails under a blanket export wipe).\n* CI installs a pinned `wasm-bindgen-cli` alongside rust so the flow is\nalways exercised.\n\nNot in scope (follow-up): preserving human-supplied `EXPORTED_FUNCTIONS`\nthrough wasm-bindgen linkage (the rustc-supplied set is currently\nindistinguishable from glue, so explicit exports aren\u0027t surfaced)."
    },
    {
      "commit": "ca28245974627d6f84c232360f7e95e080952068",
      "tree": "cb131fc0883d3a7b31b3db03b8f2b7adbc0fbdba",
      "parents": [
        "ae758f2ac2344f678444eebc99ad44a2b64f70a1"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Sep 05 00:10:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 00:10:33 2026"
      },
      "message": "Migrate incompatible settings checks to INCOMPATIBLE_SETTINGS. NFC (#27670)\n\nMove error checks from `tools/link.py` to `INCOMPATIBLE_SETTINGS` in\n`tools/settings.py` for:\n- `WASM2JS` with `SUPPORT_BIG_ENDIAN` and `MEMORY64`\n- `WASM_ESM_INTEGRATION` with `MAIN_MODULE`, `SIDE_MODULE`, `ASYNCIFY`,\n`WASM_WORKERS`, `WASM_ASYNC_COMPILATION\u003d0`, `WASM2JS`, and\n`ABORT_ON_WASM_EXCEPTIONS`\n- `FORCE_FILESYSTEM` with `FILESYSTEM\u003d0`\n- `NODE_CODE_CACHING` with `SINGLE_FILE`\n\nAlso remove redundant checks in `tools/link.py` and add test coverage in\n`test/test_other.py`."
    },
    {
      "commit": "ae758f2ac2344f678444eebc99ad44a2b64f70a1",
      "tree": "c3d4cf584623834b5bf72c82c632c925a2f1ac81",
      "parents": [
        "459eb7ae8ce9b2c49ebb8a443fa657bf57efb34f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Sep 05 00:10:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 00:10:28 2026"
      },
      "message": "Enable f-strings ruff check by default. NFC (#27669)"
    },
    {
      "commit": "459eb7ae8ce9b2c49ebb8a443fa657bf57efb34f",
      "tree": "266cb47b2d2549568cd5f8f2aad3f2502a8b69fb",
      "parents": [
        "a0d0901a32092da58fd55081431623550549e483"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Sep 05 00:04:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 00:04:51 2026"
      },
      "message": "[test] Check `CI` environment variable in a single location. NFC (#27672)"
    },
    {
      "commit": "a0d0901a32092da58fd55081431623550549e483",
      "tree": "648d564dcd80c45d8067a6bdf08e90ee37047a96",
      "parents": [
        "a593e008da8c83a9a889a152987d90fe71262f1f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 23:30:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 23:30:24 2026"
      },
      "message": "Remove use of `shared.DEBUG` from test code. NFC (#27667)\n\nPart of my effort to decouple test code from compiler internals.\n\nSee #27666"
    },
    {
      "commit": "a593e008da8c83a9a889a152987d90fe71262f1f",
      "tree": "a7fb83ae10874c3e5dc5ac0c18c78883be075dd0",
      "parents": [
        "43248806e422765590b397cd3a897b77e341207b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 23:12:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 23:12:45 2026"
      },
      "message": "Add design doc for using git subtree to manage external libraries (#27593)\n\nCovers external libraries in `system/lib/` as candidates for\n`git subtree`, recommending `mimalloc` as the initial pilot and\nprimary example, followed by `musl` and LLVM runtime libraries.\n\nThis was done successfully in wasi-libc:\nhttps://github.com/WebAssembly/wasi-libc/pull/797\n\nSee: #27515"
    },
    {
      "commit": "43248806e422765590b397cd3a897b77e341207b",
      "tree": "c84b274476b85a3bcb19f0b13ab4c94ae2f9f4e8",
      "parents": [
        "1841d41d9a09184c3b80dd1c54007c892f6f3ce0"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 22:52:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 22:52:26 2026"
      },
      "message": "Update ruff version from 0.16.0 to 0.16.6. NFC (#27668)"
    },
    {
      "commit": "1841d41d9a09184c3b80dd1c54007c892f6f3ce0",
      "tree": "ad4763f6d861be8bd0d8d509b6a344dce8351925",
      "parents": [
        "9eca01833bb98dc51f31a6c54f61cd71c03e2e89"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 22:43:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 22:43:38 2026"
      },
      "message": "Enable printf-string-formatting ruff check by default. NFC (#27663)\n\nThis change was generated almost exclusively using ruff auto-fixer, with\na couple of manual tweaks."
    },
    {
      "commit": "9eca01833bb98dc51f31a6c54f61cd71c03e2e89",
      "tree": "fb421c294ad063bf1f65afe9060e32cf445bb0fe",
      "parents": [
        "7cd002b5f3de846256fa0130e923bed933d901f8"
      ],
      "author": {
        "name": "Kleis Auke Wolthuizen",
        "email": "github@kleisauke.nl",
        "time": "Fri Sep 04 17:54:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 17:54:35 2026"
      },
      "message": "Update mimalloc to 3.5.1 (#27662)"
    },
    {
      "commit": "7cd002b5f3de846256fa0130e923bed933d901f8",
      "tree": "47fcf168bfb506ec1a10bb500ec88d030e1c1b9f",
      "parents": [
        "f0cd6739a4a7ffd9d91ee68f18b5d44acb555466"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 17:00:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 17:00:19 2026"
      },
      "message": "Consistent indentation for python multi-line data structures. NFC (#27659)\n\nStandardize on 2-space indentation for multi-line lists, sets, and\ndictionaries across the codebase.\n\nThe reason we have some inconsistency here between out code indentation\nand out data structure indentation is that `.style.yapf` was lacking a\n`continuation_indent_width \u003d 2`, so I added this.\n\nAlso convert `SUPPORTED_LINKER_FLAGS` in `tools/link.py` from a tuple to\na set for O(1) membership lookups."
    },
    {
      "commit": "f0cd6739a4a7ffd9d91ee68f18b5d44acb555466",
      "tree": "f840edc429646ac74f1c5327132640e1237cd010",
      "parents": [
        "d81369405bfefda921fe49d3670eef434ba991ec"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 16:47:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 16:47:42 2026"
      },
      "message": "[libc] Always use __builtin_wasm_memory_fill in memset (#27656)\n\nFollowup to #27653 and #27656.\n\nReplace Musl\u0027s `memset.c` and the `-Oz` logic in `emscripten_memset.c`\nwith `__builtin_wasm_memory_fill`.\n\nUnder ASan, keep `__attribute__((no_sanitize(\"address\")))` on the naive\nscalar loop because ASan\u0027s shadow memory poisoner calls `REAL(memset)`\ndirectly on shadow memory itself, which would otherwise trigger an\nimmediate shadow-on-shadow fault.\n\nMicrobenchmark results (100k iterations across sizes 1B to 16KB):\n\nAligned sets (sizes 1B to 16KB):\n- V8:             30.36ms vs 70.52ms (56.9% faster, 2.3x)\n- SpiderMonkey:   31.91ms vs 67.01ms (52.4% faster, 2.1x)\n- JavaScriptCore: 26.70ms vs 70.44ms (62.1% faster, 2.6x)\n\nUnaligned sets (offsets 1..3 across sizes 1B to 16KB):\n- V8:             30.61ms vs 65.28ms (53.1% faster, 2.1x)\n- SpiderMonkey:   32.94ms vs 64.28ms (48.8% faster, 2.0x)\n- JavaScriptCore: 26.90ms vs 63.24ms (57.5% faster, 2.4x)"
    },
    {
      "commit": "d81369405bfefda921fe49d3670eef434ba991ec",
      "tree": "c7b0ac091db803a184fe73093f5a9eca36fe834d",
      "parents": [
        "dc0f21dd8aab6818d3e9aaae91e2c8b75eb9ac32"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Sep 04 15:59:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 15:59:38 2026"
      },
      "message": "Add link to upstream ruff bug. NFC (#27660)\n\nSee https://github.com/astral-sh/ruff/issues/8705"
    },
    {
      "commit": "dc0f21dd8aab6818d3e9aaae91e2c8b75eb9ac32",
      "tree": "a295c6a30b72ebd35b59c5ee5a038d5929c20e5a",
      "parents": [
        "855804c1342a0d47e8e4a40ea0b1c8ff1da33e96"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 03 19:56:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 19:56:15 2026"
      },
      "message": "Mark wasm2js (WASM\u003d0) as deprecated (#27655)\n\nAdd `WASM\u003d0` to `DEPRECATED_SETTINGS` in `tools/settings.py` so that\npassing `-sWASM\u003d0` emits a deprecation warning under `-Wdeprecated`.\n\nAlso update settings documentation, `src/settings.js` comments,\n`ChangeLog.md`, and test runner/tests to ignore the warning where\nwasm2js is tested.\n\nSee: #27608"
    },
    {
      "commit": "855804c1342a0d47e8e4a40ea0b1c8ff1da33e96",
      "tree": "d97ac4fcf0b21f7675917935c3692fdf0b978c1f",
      "parents": [
        "2bdd1af24187f3061da1fac47fc8f3157a6eb543"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Sep 03 17:47:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 17:47:21 2026"
      },
      "message": "[libc] Always use __builtin_wasm_memory_copy in memmove (#27654)\n\nFollowup to #27653.\n\nReplace Musl\u0027s `memmove.c` and the `-Oz` manual loop in\n`emscripten_memmove.c` with `__builtin_wasm_memory_copy`.\n\nWebAssembly\u0027s `memory.copy` instruction is specified with overlapping\ncopy (`memmove`) semantics, and engines (V8, SpiderMonkey, JSC)\nimplement it using native host `memmove`.\n\nIn Musl\u0027s C implementation, misaligned overlapping copies fall back to a\nbyte-by-byte scalar loop in wasm, which is 15x to 33x slower than\n`memory.copy`.\n\nOverlapping copy benchmark results (200k iterations across sizes 1B to\n16KB):\n\nShift forward (dest \u003e src):\n- V8:             34.51ms vs  576.50ms (94.0% faster, 16.7x)\n- SpiderMonkey:   33.73ms vs 1129.64ms (97.0% faster, 33.5x)\n- JavaScriptCore: 33.32ms vs  715.26ms (95.3% faster, 21.5x)\n\nShift backward (dest \u003c src):\n- V8:             34.28ms vs  551.30ms (93.8% faster, 16.1x)\n- SpiderMonkey:   33.74ms vs  546.25ms (93.8% faster, 16.2x)\n- JavaScriptCore: 32.90ms vs  535.86ms (93.9% faster, 16.3x)"
    },
    {
      "commit": "2bdd1af24187f3061da1fac47fc8f3157a6eb543",
      "tree": "f86c569cb2566e6343529cc8e15fcb104f5e9533",
      "parents": [
        "d01f0edd12dbb6962ca5896f1b7c94bdf737b575"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 02 23:24:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 23:24:38 2026"
      },
      "message": "[ports] Pass integer for WASM_LEGACY_EXCEPTIONS when building ports (#27651)\n\nIn #27579, `WASM_LEGACY_EXCEPTIONS` was forwarded to sub-compilations\nwhen building ports with wasm SjLj. However,\n`settings.WASM_LEGACY_EXCEPTIONS` defaults to a boolean (`True`) in\nPython when not explicitly set via `-s` on the command line (e.g. when\nusing `-fwasm-exceptions`). Stringifying it into\n`-sWASM_LEGACY_EXCEPTIONS\u003d{settings.WASM_LEGACY_EXCEPTIONS}` resulted in\n`-sWASM_LEGACY_EXCEPTIONS\u003dTrue`, which `emcc` rejects because boolean\nsettings require 1 or 0.\n\nEnsure we format it as an integer so `1` or `0` is always passed.\n\nAlso, update the variants to set `WASM_LEGACY_EXCEPTIONS` to True/False\nwhich means that the embuilder build of these libraries will fail in the\nsame way.\n\nFixes: #27650"
    },
    {
      "commit": "d01f0edd12dbb6962ca5896f1b7c94bdf737b575",
      "tree": "ffc84d3ce27a7903d7bfb64b0d9c7e8db8a2c83d",
      "parents": [
        "f9d351a071eee387218263df1f246853da8c6067"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 02 22:32:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 22:32:32 2026"
      },
      "message": "[ports] Clear port build under cache lock to avoid deletion race (#27647)\n\nIn #24303, `Ports.fetch_project` was refactored into\n`Ports.fetch_port_artifact` and `Ports.clear_project_build`. In that\nrefactoring, `Ports.clear_project_build` was moved outside the\n`cache.lock(\u0027unpack port\u0027)` block.\n\nWhen parallel processes both require the same port on a cold cache:\n1. Process A unpacks the port and releases `cache.lock(\u0027unpack port\u0027)`.\n2. Process B sees the port is now unpacked and up-to-date, proceeds to\n   build the port library, and acquires `cache.lock`.\n3. Process A calls `Ports.clear_project_build`, which blocks on the\n   cache lock while Process B compiles the library.\n4. When Process B finishes compiling and releases the lock, Process A\n   acquires the lock and deletes the newly compiled library.\n\nFix this by reverting the split between `fetch_project` and\n`fetch_port_artifact` from #24303, and performing\n`Ports.clear_project_build` inside `fetch_project` while still holding\nthe unpack cache lock.\n\nAlso revert `get_port_by_name` back to `ports_by_name` in\n`Ports.clear_project_build` so it does not trigger recursion during\nexternal port loading, and mock `clear` in `init_external_port`.\n\nNote that external ports no longer have their loaded module\u0027s `.clear()`\nmethod called when updated, but this is safe because:\n1. `Ports.clear_project_build` still deletes the intermediate build\n   directory (`build/\u003cname\u003e`) under the unpack lock.\n2. In-tree ports rely on `clear()` to delete static library filenames\n   (like `libz.a` or `libSDL2.a`) from the cache, but external ports\n   (`contrib.glfw3` and `emdawnwebgpu`) incorporate either the release\n   tag or a content hash of source inputs into their library filenames\n   (e.g. `lib_emscripten-glfw3_\u003cTAG\u003e...` and\n   `libemdawnwebgpu-\u003chash\u003e...`). When updated, the library filename\n   changes, ensuring the new library is built on first use.\n3. In fact, calling `.clear()` on the newly unpacked port module would\n   only attempt to erase the new library name (which does not exist yet)\n   and would never have deleted the previous version\u0027s library anyway.\n4. Explicit clearing via `embuilder clear \u003cport\u003e` or `clear_port()`\n   continues to resolve and invoke `local_port.clear()` as before.\n\nFixes: #27160"
    },
    {
      "commit": "f9d351a071eee387218263df1f246853da8c6067",
      "tree": "415f8e4084a5d62dd41e7a3fa27af88bc9c2fd18",
      "parents": [
        "8993c521d2e6e6053960fb172ff611605db27e0e"
      ],
      "author": {
        "name": "Derek Schuff",
        "email": "dschuff@chromium.org",
        "time": "Wed Sep 02 21:56:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 21:56:22 2026"
      },
      "message": "Refactor system_libs to decouple library calculation from building (#27652)\n\n1. Make Library.get_link_flag() a pure query method without the side\neffect\n   of calling self.build().\n2. Introduce ensure_libraries() and make library building explicit in\n   calculate() and tools/link.py:process_libraries().\n3. Change get_libs_to_link() to return Library objects rather than flag\nstrings, allowing callers to inspect or build libraries independently."
    },
    {
      "commit": "8993c521d2e6e6053960fb172ff611605db27e0e",
      "tree": "c1b8daf967bf5faa1690eec87865dc95b1a745c4",
      "parents": [
        "c28f6635a6e606bf2030717726f6ac2f4f2ce7bb"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 02 21:50:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 21:50:49 2026"
      },
      "message": "[ci] Enable more tests after update the node v24 in emsdk (#27506)\n\nNow that emsdk ships Node 24\n(https://github.com/emscripten-core/emsdk/pull/1760) we can enable more\ntests."
    },
    {
      "commit": "c28f6635a6e606bf2030717726f6ac2f4f2ce7bb",
      "tree": "a4c7a593142af116be611004a2b51c32b74110e0",
      "parents": [
        "1a785614fc34c02a5e1ab77d3601e65084f8e749"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 02 21:22:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 21:22:45 2026"
      },
      "message": "[libc] Always use __builtin_wasm_memory_copy in memcpy (#27653)\n\nRemove the manual 32-bit copy loop for sizes \u003c 512 bytes in\n`emscripten_memcpy.c` and always use `__builtin_wasm_memory_copy`\ninstead, matching the behavior previously used only for `-Oz`.\n\nBenchmarking across V8, SpiderMonkey, and JavaScriptCore shows that\n`memory.copy` is consistently faster than the manual loop for small\nsizes, especially for unaligned copies.\n\nHead-to-head microbenchmark comparing the old manual loop against\n`__builtin_wasm_memory_copy` for sizes \u003c\u003d 511 bytes (500k iterations per\nsize):\n\nAligned copies (sizes 1B to 511B):\n- V8:             72.82ms vs 100.87ms (27.8% faster)\n- SpiderMonkey:   93.09ms vs 100.27ms (7.2% faster)\n- JavaScriptCore: 60.04ms vs  91.14ms (34.1% faster)\n\nUnaligned copies (source and dest offsets 0..3):\n- V8:            148.72ms vs 357.02ms (58.3% faster)\n- SpiderMonkey:  186.95ms vs 440.61ms (57.6% faster)\n- JavaScriptCore: 124.16ms vs 372.28ms (66.6% faster)"
    },
    {
      "commit": "1a785614fc34c02a5e1ab77d3601e65084f8e749",
      "tree": "fe47fe2098a582cac5e8319bb474c0671fb461e0",
      "parents": [
        "323a52807a14e83d7bad30d0443cc05c8bfa563d"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 02 20:19:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 20:19:58 2026"
      },
      "message": "[libc] Use Clang bulk memory builtins in memcpy and memset (#27631)\n\nReplace the out-of-line assembly implementations in\n`emscripten_memcpy_bulkmem.S` and `emscripten_memset_bulkmem.S` with\ndirect calls to `__builtin_wasm_memory_copy` and\n`__builtin_wasm_memory_fill`.\n\nThis allows inlining `memory.copy` and `memory.fill` directly into\n`memcpy` and `memset`, eliminating function call overhead and separate\nsymbols in output binaries.\n\nSee: https://github.com/llvm/llvm-project/issues/220086 and\nhttps://github.com/llvm/llvm-project/pull/220111"
    },
    {
      "commit": "323a52807a14e83d7bad30d0443cc05c8bfa563d",
      "tree": "dfeb67f8a857fd6ca86456c0355b3caa44eb7899",
      "parents": [
        "e2ebea0e5f847fec3b4a493648dfce667fbb9025"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Wed Sep 02 19:20:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 19:20:17 2026"
      },
      "message": "Fix WasmFS OPFS backend under -pthread with -sJSPI (#27633)\n\nThis fixes the WasmFS OPFS backend when building with `-pthread -sJSPI`,\nresolving #27620.\n\nUnder PTHREADS the OPFS backend always proxies operations to a dedicated\nworker via the proxying queue, with completion signalled by\n`emscripten_proxy_finish` rather than by suspending on the promise\nreturned from the import. Marking the `wasmfs_opfs_*` imports `__async`\nin this mode caused JSPI to wrap them in `WebAssembly.Suspending`, which\nthen trapped with `SuspendError: trying to suspend without\nWebAssembly.promising`, since the proxying queue is entered via\n`_emscripten_proxy_execute_queue` / `__emscripten_check_mailbox` which\nare not promising exports.\n\n* Use a compile-time macro in `libwasmfs_opfs.js` so the `wasmfs_opfs_*`\n`__async` annotations resolve to `\u0027auto\u0027` in non-threaded builds and\n`false` under PTHREADS, since in threaded builds these imports never\nneed to suspend.\n* Add a `pthread_jspi` variant (`-pthread -sPROXY_TO_PTHREAD -sJSPI`) to\n`test_wasmfs_opfs`, which previously hung with the SuspendError and now\npasses.\n\nAll four `test_wasmfs_opfs` variants and `test_wasmfs_opfs_errors` pass\nlocally in Chrome.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "e2ebea0e5f847fec3b4a493648dfce667fbb9025",
      "tree": "b7ac5e59340c0ec3dd9d7013bf0287d1ca0a4f4f",
      "parents": [
        "cf3c78a0203bb8ac5fcab27cd6197c436f0ff5bd"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Sep 02 17:47:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 17:47:41 2026"
      },
      "message": "Revert \"Experimental shared Wasm GC support (#27427)\" (#27648)\n\nThis reverts commit f11cc0b09f08c3b2c1061b8f2ea5e4ceb5312a4c. The shared\nobjects demos now have their own standalone runtime and do not depend on\nEmscripten. Since there is no practical use for this setting in\nEmscripten right now, remove it."
    },
    {
      "commit": "cf3c78a0203bb8ac5fcab27cd6197c436f0ff5bd",
      "tree": "545adcecfd08944086660d02901dc208459c6752",
      "parents": [
        "7afdae44d67ca8169d4c0f30a0d62092a54e23db"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Sep 02 17:45:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 17:45:07 2026"
      },
      "message": "Update emsdk version from f5bf03c7 to ada02ef3 (#27649)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: f5bf03c7 \u003d\u003e ada02ef3\n\nThe following revisions were included in this update:\n\n```\n- ada02ef3 Roll emscripten from 2aa6075990fb to 7afdae44d67c (5 revisions)\n- 98ea3057 Roll llvm-project from 4c791a6ff020 to ed1626b9d0ea (48 revisions)\n- ee91e665 Roll binaryen from d036a3b6c3a0 to 3d7eee7a4d2c (1 revision)\n- daa9411b Roll emscripten from a2059f978ed2 to 2aa6075990fb (1 revision)\n- 377c46ba Roll binaryen from 6531a981a86d to d036a3b6c3a0 (1 revision)\n- e54639d9 Roll llvm-project from 07ed92d6987f to 4c791a6ff020 (64 revisions)\n- b8a03456 Roll emscripten from 4e4223852a08 to a2059f978ed2 (9 revisions)\n- 8943b92c Roll llvm-project from 7d3165954f2b to 07ed92d6987f (38 revisions)\n- 94e5e66a Roll binaryen from d03c25ea43d8 to 6531a981a86d (9 revisions)\n- 99455d29 Roll llvm-project from 5bf0dde9bb48 to 7d3165954f2b (34 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/f5bf03c7..ada02ef3\n\nThe following (1) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_hello_dylink_all.json: 859376 \u003d\u003e 859337 [-39 bytes / -0.00%]\n\nAverage change: -0.00% (-0.00% - -0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "7afdae44d67ca8169d4c0f30a0d62092a54e23db",
      "tree": "5a7d8767453446d19d0c7b0161b9f3b5af7df236",
      "parents": [
        "0f6e30371cae4ddf8f113c426c1fd323d1ca3730"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 02 00:37:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 00:37:13 2026"
      },
      "message": "[deps]: Bump actions/checkout from 7.0.0 to 7.0.1 (#27644)"
    },
    {
      "commit": "0f6e30371cae4ddf8f113c426c1fd323d1ca3730",
      "tree": "a3cc07e6e74b90ede086155e9d130daebbca0f5b",
      "parents": [
        "fa4317d078f8bfea0f5364ea32d65e03b17cb122"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 02 00:35:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 00:35:56 2026"
      },
      "message": "[deps]: Bump github/codeql-action/upload-sarif from 3.29.2 to 4.37.9 (#27643)"
    },
    {
      "commit": "fa4317d078f8bfea0f5364ea32d65e03b17cb122",
      "tree": "ff42b3c5b060e3cdc7a8c901f164e531afbd44c2",
      "parents": [
        "74cc3c395041bda4d8f5a243469a4855c562198b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Sep 02 00:35:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 00:35:22 2026"
      },
      "message": "[deps]: Bump ossf/scorecard-action from 2.4.1 to 2.4.4 (#27645)"
    },
    {
      "commit": "74cc3c395041bda4d8f5a243469a4855c562198b",
      "tree": "ad16b8d2700b87e17ccbb88583503de4d3fa1e3b",
      "parents": [
        "8b38789dad9b2bf830e6537be70eb1be9317b3e3"
      ],
      "author": {
        "name": "NickZh",
        "email": "62114203+mrnickzh@users.noreply.github.com",
        "time": "Wed Sep 02 00:34:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 00:34:38 2026"
      },
      "message": "Add multithreaded variant of lua port (#26886)\n\nFixes: #26885"
    },
    {
      "commit": "8b38789dad9b2bf830e6537be70eb1be9317b3e3",
      "tree": "c5383e51707c3aa0b64d0f9bd5dc6c423fc727d5",
      "parents": [
        "2aa6075990fb692e02f03b640ba4a6909f8248be"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Sep 02 00:14:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 00:14:10 2026"
      },
      "message": "Remove experimental warning from SDL3 port (#27646)\n\nWe haven\u0027t had any reports of issues with this port since it was added."
    },
    {
      "commit": "2aa6075990fb692e02f03b640ba4a6909f8248be",
      "tree": "2ca6ce6ff1275c06861b6097760c285dba3dedb8",
      "parents": [
        "a2059f978ed206b688daf4a8774211949610c2aa"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 01 23:55:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 23:55:31 2026"
      },
      "message": "[test] Add test_sdl3_text.c based on test_sdl2_text.c. NFC (#27640)\n\nUpdate `fake_events.js` to derive `event.key` when not explicitly\nprovided.\n\nThis is needed for SDL3, where text input handling in upstream SDL (and\nin SDL2 with commit e64034952) has moved away from the deprecated\n`keyEvent-\u003echarCode` and now requires `keyEvent-\u003ekey`.\n\nExisting tests like `test_sdl3_text.c` and `test_sdl2_text.c` simulate\ntext input using `simulateKeyDown(\u0027a\u0027.charCodeAt(0))`, passing only the\nkey code. Without deriving `key`, `event.key` defaults to an empty\nstring, so `SDL_utf8strlen(keyEvent-\u003ekey) \u003d\u003d 1` fails and no\n`SDL_EVENT_TEXT_INPUT` (or `SDL_TEXTINPUT` in SDL2) events are emitted."
    },
    {
      "commit": "a2059f978ed206b688daf4a8774211949610c2aa",
      "tree": "2446d0346cb842f3809d30fbc00501a3b6855a19",
      "parents": [
        "9200225a31cb9dbea80456e064ec2119c3e22f0a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 01 20:10:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 20:10:37 2026"
      },
      "message": "Revert normalize case of `__rootpath__` on Windows (#27639)\n\nIn #27626, `__rootpath__` was changed to use\n`os.path.normcase(__file__)` to prevent caller-specified casing from\npropagating to `config.LLVM_ROOT` and `sanity.txt`.\n\nHowever, on Windows `normcase` unconditionally converts the entire path\nincluding the drive letter to lowercase (`c:\\...`). This lowercases all\npaths derived from `path_from_root`, including default `config.CACHE`\nand `EMSCRIPTEN_SYSROOT`.\n\nWhen CMake runs on Windows, imported targets and compiler autodetection\npreserve uppercase drive letters (`C:\\...`). Because CMake\u0027s implicit\ninclude directory checks are case-sensitive string comparisons, the\nmismatch between `c:\\...` and `C:\\...` caused CMake to treat the sysroot\ninclude directory as an explicit non-system include, injecting\n`-isystem` and disrupting libc++ header search order in\n`test_cmake_install`. It also caused assertion failures in\n`test_cmake_compile_commands_noforce`.\n\nThe normalization of `config.LLVM_ROOT` in `generate_sanity()` in\n`tools/shared.py` (also added in #27626) is already sufficient to ensure\nthat `sanity.txt` remains consistent regardless of the casing used to\ninvoke `emcc`. Normalizing `__rootpath__` is unnecessary and harmful.\n\nSee: #27626"
    },
    {
      "commit": "9200225a31cb9dbea80456e064ec2119c3e22f0a",
      "tree": "614602283f94d1aae5ab2a46cdf815ac3b9ed3a2",
      "parents": [
        "b0367903c19eac3b24d8339602421fda68bb2c11"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 01 17:38:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:38:41 2026"
      },
      "message": "Update min node version comment (#27629)"
    },
    {
      "commit": "b0367903c19eac3b24d8339602421fda68bb2c11",
      "tree": "49081a227e73052b8252ad34f1bd97df28734b5f",
      "parents": [
        "7644a68ccbe689bc1e998174f41eb4e9935164d6"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 01 17:38:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:38:24 2026"
      },
      "message": "[CI] Run sanity.test_windows_path_casing in Windows CI (#27630)\n\nSanity tests previously ran on Windows via `--crossplatform-only` after\n#22492, but were removed in #26365 when all tests were combined into a\nsingle parallel test suite (which made mixing parallel and non-parallel\nmodules an error).\n\nRun `sanity.test_windows_path_casing` as a dedicated step in\n`test-windows` so the Windows path casing regression test from #27626 is\nexercised in CI."
    },
    {
      "commit": "7644a68ccbe689bc1e998174f41eb4e9935164d6",
      "tree": "bec4c03903b6f414cadbe74544ac97348a2099e7",
      "parents": [
        "bcd205007d49a39034c2d129bab5d8d2f25cd349"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Sep 01 17:37:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:37:52 2026"
      },
      "message": "[test] Mark test_cmake_install as @crossplatform. NFC (#27637)\n\nThis test is failing on emscripten-release on windows only."
    },
    {
      "commit": "bcd205007d49a39034c2d129bab5d8d2f25cd349",
      "tree": "336764b30ecf35d483bb868cc4530fc637d39444",
      "parents": [
        "53cc691b742e83481b0c6f2abab3f0c4df383415"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Sep 01 14:52:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 14:52:05 2026"
      },
      "message": "Update emsdk version from a54ef286 to f5bf03c7 (#27636)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: a54ef286 \u003d\u003e f5bf03c7\n\nThe following revisions were included in this update:\n\n```\n- f5bf03c7 Roll llvm-project from da4883508b84 to 5bf0dde9bb48 (29 revisions)\n- f55b5d88 Roll v8 from 8a55ab2bed3a to 51e4731566c7 (19 revisions)\n- 846396ac Roll llvm-project from b158b0ae6c55 to da4883508b84 (33 revisions)\n- f04ea239 Version 6.0.9 RC\n- 5d5d7306 Roll llvm-project from 510126255f89 to b158b0ae6c55 (55 revisions)\n- 9ee402a9 Roll binaryen back to d03c25ea4 (before Enable ConstraintAnalysis pass (#9010))\n- ebaf6410 Roll emscripten from eac6f6c754e2 to 4e4223852a08 (1 revision)\n- 9867fbfc Roll llvm-project from 466bcf37fd16 to 510126255f89 (30 revisions)\n- 74d12157 Roll llvm-project from d291bcd466ed to 466bcf37fd16 (30 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/a54ef286..f5bf03c7\n\nThe following (1) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_hello_dylink_all.json: 859357 \u003d\u003e 859376 [+19 bytes / +0.00%]\n\nAverage change: +0.00% (+0.00% - +0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "53cc691b742e83481b0c6f2abab3f0c4df383415",
      "tree": "3ee0032d6b6e05ae4d967f01c5fb6ae54ff66cfa",
      "parents": [
        "f4f5003c3452e195ec1967d11a37f7d3a56f2c93"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Sep 01 06:40:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 06:40:55 2026"
      },
      "message": "Automatic rebaseline of codesize expectations. NFC (#27635)\n\nThis is an automatic change generated by\ntools/maint/rebaseline_tests.py.\n\nThe following (1) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_hello_dylink_all.json: 859356 \u003d\u003e 859357 [+1 bytes / +0.00%]\n\nAverage change: +0.00% (+0.00% - +0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "f4f5003c3452e195ec1967d11a37f7d3a56f2c93",
      "tree": "bf4531e8a3a2c94f1bb10de8a2c931789b93c2ab",
      "parents": [
        "df5b3aa6f07574b40a5ed25b79b7189d5a2cb694"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Tue Sep 01 06:40:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 06:40:07 2026"
      },
      "message": "Fix fstat on stdio streams under NODERAWFS (#27632)\n\nThis fixes a crash in `fstat` on the standard streams under\n`-sNODERAWFS`, resolving #27628.\n\nThe getattr dispatch added in #27305 for virtual streams (pipes,\nsockets) dereferences `stream.node`, but the standard streams created by\nNODERAWFS carried no node at all — unlike streams from `open()`, which\nsince #23364 carry a synthetic node with the identity of the underlying\nfile. Rather than special-casing the missing node, this gives the\nstandard streams the same synthetic node, built from `fstat` of the\ninherited descriptor, restoring the invariant that every stream has a\nnode:\n\n* `createStandardStreams` now constructs each stdio stream with a node\ncarrying the id and mode of whatever the descriptor refers to (tty,\npipe, file).\n* `fstat` on stdio falls through to `fs.fstatSync` on the raw descriptor\nas before.\n\nAdds `test_fs_fstat_stdio` covering `fstat` on fds 0-2 across all\nfilesystem backends.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "df5b3aa6f07574b40a5ed25b79b7189d5a2cb694",
      "tree": "8881b708d489abf559c87cc3ddb81a5f063747c0",
      "parents": [
        "e88bf435e7a1fb7c32de314502d7446247cb587d"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Sep 01 06:22:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 06:22:05 2026"
      },
      "message": "Mark 6.0.9 as released (#27634)\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "e88bf435e7a1fb7c32de314502d7446247cb587d",
      "tree": "1cb8f3cc8380f1f8836805b400088caac4523839",
      "parents": [
        "4e4223852a0835923411059a3929907d7df1232e"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Aug 31 20:40:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 20:40:32 2026"
      },
      "message": "Normalize case for key config pathnames on Windows (#27626)\n\nOn Windows, file systems are case-insensitive. When tools like VS Code\nCMake Tools invoke the compiler through an all-lowercased path (e.g. via\nits `platformNormalizePath` helper), the caller-specified casing affects\nthe value of `__file__` in Python which then propagates all the way to\n`LLVM_ROOT` and the `sanity.txt` file (at least in the emsdk case):\n`__file__` -\u003e `__rootpath__` -\u003e `EM_CONFIG` -\u003e `CFGDIR` -\u003e `LLVM_ROOT`\n-\u003e `sanity.txt`.\n\nAddress this in two places:\n1. In `tools/utils.py`, normalize `__file__` using `normcase` when\n   initializing `__rootpath__`. This prevents caller-specified casing\n   from polluting paths derived from the script location (default\n   `EM_CONFIG`, `$CFGDIR`, and default `CACHE`).\n2. In `tools/shared.py`, normalize `config.LLVM_ROOT` using `normcase`\n   in `generate_sanity()`. This ensures that even if `LLVM_ROOT` was\n   configured explicitly (e.g. via `EM_LLVM_ROOT` or an absolute path\n   in `.emscripten`), the string written to `sanity.txt` is always\n   canonical on Windows.\n\nThe proximate cause of the issue was that the VS Code CMake Tools\nextension explicitly lowercases compiler paths on Windows:\n\nhttps://github.com/microsoft/vscode-cmake-tools/blob/09dd68b54de06469bd1b81d84d6b8666aa2dce1d/src/util.ts#L113-L115\nBy forcing the command line to all-lowercase, the above chain of events\nkicked in whenever the IDE queried compiler settings.\n\nSee: #27624"
    },
    {
      "commit": "4e4223852a0835923411059a3929907d7df1232e",
      "tree": "d3967f072c02d7c0779fc64e7e19e01002de65c3",
      "parents": [
        "eac6f6c754e213b224c833588cf5bde59b7f2fd9"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Aug 31 18:52:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:52:35 2026"
      },
      "message": "Update emsdk version from f93cae82 to a54ef286 (#27627)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: f93cae82 \u003d\u003e a54ef286\n\nThe following revisions were included in this update:\n\n```\n- a54ef286 Roll llvm-project from afdcd7f828b2 to d291bcd466ed (11 revisions)\n- d63ba739 Roll v8 from ad4cb876174a to 8a55ab2bed3a (2 revisions)\n- 8cda60a5 Roll llvm-project from 492a3a4f44e6 to afdcd7f828b2 (21 revisions)\n- c50e1477 Roll emscripten from 6f85eb3956f9 to eac6f6c754e2 (1 revision)\n- 6edf90e4 Roll llvm-project from e828491f47d9 to 492a3a4f44e6 (8 revisions)\n- d570272e Roll llvm-project from 450ef6da8290 to e828491f47d9 (11 revisions)\n- f0c9e8ce Roll llvm-project from b3a2fa281ee7 to 450ef6da8290 (12 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/f93cae82..a54ef286\n\nThe following (1) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_hello_dylink_all.json: 859345 \u003d\u003e 859356 [+11 bytes / +0.00%]\n\nAverage change: +0.00% (+0.00% - +0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "eac6f6c754e213b224c833588cf5bde59b7f2fd9",
      "tree": "e000711154ab3736ffeb1d8a437a95a93ba7123a",
      "parents": [
        "6f85eb3956f95dfb3afb3412a9127c2523e05649"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sun Aug 30 21:15:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 30 21:15:01 2026"
      },
      "message": "Update emsdk version from b57559d2 to f93cae82 (#27623)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: b57559d2 \u003d\u003e f93cae82\n\nThe following revisions were included in this update:\n\n```\n- f93cae82 Roll llvm-project from dca45adce16e to b3a2fa281ee7 (8 revisions)\n- f78b84ad Roll v8 from 1cdea338fd59 to ad4cb876174a (2 revisions)\n- 80098115 Roll llvm-project from 05da143c63d3 to dca45adce16e (11 revisions)\n- 2bc64bea Roll emscripten from c829a265fb0a to 6f85eb3956f9 (1 revision)\n- cce605c5 Roll llvm-project from d156987d1040 to 05da143c63d3 (8 revisions)\n- 1baeb1cf Roll llvm-project from d34be0ff2eb6 to d156987d1040 (12 revisions)\n- 886c0f0c Roll llvm-project from 48378de650fc to d34be0ff2eb6 (8 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/b57559d2..f93cae82\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "6f85eb3956f95dfb3afb3412a9127c2523e05649",
      "tree": "3ff3f09285beefa7d7195283a2443144d03fa1f3",
      "parents": [
        "c829a265fb0a920b68baedd0c29b7ab739ab2e17"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Aug 29 17:50:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 29 17:50:32 2026"
      },
      "message": "Update emsdk version from 5ec6e692 to b57559d2 (#27622)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 5ec6e692 \u003d\u003e b57559d2\n\nThe following revisions were included in this update:\n\n```\n- b57559d2 Roll emscripten from 92a1d865e63c to c829a265fb0a (4 revisions)\n- 25a9e054 Roll llvm-project from 3f2274211ab6 to 48378de650fc (18 revisions)\n- 2f48fa78 Roll emscripten from 259c50c36f7a to 92a1d865e63c (1 revision)\n- e05d8263 Roll binaryen from 23c19e240a81 to 8bad4db00f13 (1 revision)\n- 3c4d6d71 Roll llvm-project from 69db8489be2f to 3f2274211ab6 (58 revisions)\n- 6af18c37 Roll binaryen from 0f38ce795e95 to 23c19e240a81 (3 revisions)\n- c4b842cb Roll emscripten from 6c40a2747ca1 to 259c50c36f7a (1 revision)\n- 5069c80e Roll v8 from 6c9063bc8bb7 to 1cdea338fd59 (26 revisions)\n- 24e8852c Roll binaryen from d03c25ea43d8 to 0f38ce795e95 (1 revision)\n- dc30b0ee Roll llvm-project from 5c7095190a97 to 69db8489be2f (39 revisions)\n- d646ebaa Roll llvm-project from a7831dcce988 to 5c7095190a97 (28 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/5ec6e692..b57559d2\n\nThe following (15) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 153955 \u003d\u003e 153977 [+22 bytes / +0.01%]\ncodesize/test_codesize_cxx_ctors2.json: 153361 \u003d\u003e 153383 [+22 bytes / +0.01%]\ncodesize/test_codesize_cxx_except.json: 200105 \u003d\u003e 200127 [+22 bytes / +0.01%]\ncodesize/test_codesize_cxx_except_wasm.json: 169467 \u003d\u003e 169493 [+26 bytes / +0.02%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 167327 \u003d\u003e 167353 [+26 bytes / +0.02%]\ncodesize/test_codesize_cxx_lto.json: 119555 \u003d\u003e 119581 [+26 bytes / +0.02%]\ncodesize/test_codesize_cxx_mangle.json: 266435 \u003d\u003e 266457 [+22 bytes / +0.01%]\ncodesize/test_codesize_cxx_noexcept.json: 155865 \u003d\u003e 155887 [+22 bytes / +0.01%]\ncodesize/test_codesize_cxx_wasmfs.json: 180971 \u003d\u003e 180993 [+22 bytes / +0.01%]\ncodesize/test_codesize_files_wasmfs.json: 63231 \u003d\u003e 63248 [+17 bytes / +0.03%]\ncodesize/test_codesize_hello_O1.json: 8041 \u003d\u003e 8060 [+19 bytes / +0.24%]\ncodesize/test_codesize_hello_dylink.json: 44108 \u003d\u003e 44125 [+17 bytes / +0.04%]\ncodesize/test_codesize_hello_dylink_all.json: 859323 \u003d\u003e 859345 [+22 bytes / +0.00%]\ncodesize/test_minimal_runtime_code_size_hello_embind.json: 14987 \u003d\u003e 15004 [+17 bytes / +0.11%]\ncodesize/test_minimal_runtime_code_size_hello_embind_val.json: 11714 \u003d\u003e 11731 [+17 bytes / +0.15%]\n\nAverage change: +0.05% (+0.00% - +0.24%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "c829a265fb0a920b68baedd0c29b7ab739ab2e17",
      "tree": "aafb1982d99aa031fa0f6d95610c3d12f11c6dea",
      "parents": [
        "4897433683b8adef2c35467a57906d849f400e16"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Aug 29 00:38:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 29 00:38:21 2026"
      },
      "message": "Update emsdk version from a05bf070 to 5ec6e692 (#27612)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: a05bf070 \u003d\u003e 5ec6e692\n\nThe following revisions were included in this update:\n\n```\n- 5ec6e692 Roll llvm-project from aa332ae6b0c9 to a7831dcce988 (21 revisions)\n- 3e10efdc Roll binaryen from ece5da21a818 to d03c25ea43d8 (1 revision)\n- 0b7893e9 Roll binaryen from e258ff094873 to ece5da21a818 (1 revision)\n- 882f4906 Roll llvm-project from 0c1af4ee5e05 to aa332ae6b0c9 (55 revisions)\n- 71725e47 Roll binaryen from cce27ed19006 to e258ff094873 (1 revision)\n- b45467a7 Roll llvm-project from c30c4f5cd9d3 to 0c1af4ee5e05 (35 revisions)\n- 69205d63 Roll binaryen from b7c050e02648 to cce27ed19006 (1 revision)\n- 0ccf8a1d Roll v8 from 3dbba7b86bcd to 6c9063bc8bb7 (33 revisions)\n- 484069a4 Roll llvm-project from 959e8e7c74a3 to c30c4f5cd9d3 (38 revisions)\n- 3b88a601 Roll llvm-project from dc222c2de559 to 959e8e7c74a3 (16 revisions)\n- 92eb5a53 Roll binaryen from 876015e45e4f to b7c050e02648 (2 revisions)\n- 44c1b410 Roll emscripten from c60181f926ae to 6c40a2747ca1 (1 revision)\n- 4c89ef8d Roll llvm-project from a69a951450e8 to dc222c2de559 (16 revisions)\n- b07bbaa0 Roll binaryen from 0d962bcb6c1c to 876015e45e4f (1 revision)\n- a8f3a4d2 Roll llvm-project from 68f9f8be6e69 to a69a951450e8 (47 revisions)\n- de3da167 Roll binaryen from 67ac1ab072cd to 0d962bcb6c1c (4 revisions)\n- 0c5d61b9 Roll emscripten from 618713f7edd5 to c60181f926ae (1 revision)\n- 075a349d Roll llvm-project from 6f217343afdb to 68f9f8be6e69 (38 revisions)\n- 9ec599e5 Roll binaryen from 9d6a093095a7 to 67ac1ab072cd (1 revision)\n- 30d3f375 Roll v8 from d8a4c1c5d7cc to 3dbba7b86bcd (33 revisions)\n- f9c13a2c Roll llvm-project from a2ac4f6af958 to 6f217343afdb (40 revisions)\n- c12f104a Roll llvm-project from 646f69cafd20 to a2ac4f6af958 (27 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/a05bf070..5ec6e692\n\nThe following (22) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 153946 \u003d\u003e 153955 [+9 bytes / +0.01%]\ncodesize/test_codesize_cxx_ctors2.json: 153352 \u003d\u003e 153361 [+9 bytes / +0.01%]\ncodesize/test_codesize_cxx_except.json: 200105 \u003d\u003e 200105 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_except_wasm.json: 169474 \u003d\u003e 169467 [-7 bytes / -0.00%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 167334 \u003d\u003e 167327 [-7 bytes / -0.00%]\ncodesize/test_codesize_cxx_lto.json: 119544 \u003d\u003e 119555 [+11 bytes / +0.01%]\ncodesize/test_codesize_cxx_mangle.json: 266435 \u003d\u003e 266435 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_noexcept.json: 155856 \u003d\u003e 155865 [+9 bytes / +0.01%]\ncodesize/test_codesize_cxx_wasmfs.json: 180958 \u003d\u003e 180971 [+13 bytes / +0.01%]\ncodesize/test_codesize_files_wasmfs.json: 63223 \u003d\u003e 63231 [+8 bytes / +0.01%]\ncodesize/test_codesize_hello_O0.json: 38580 \u003d\u003e 38580 [+0 bytes / +0.00%]\ncodesize/test_codesize_hello_dylink.json: 44108 \u003d\u003e 44108 [+0 bytes / +0.00%]\ncodesize/test_codesize_hello_dylink_all.json: 859331 \u003d\u003e 859323 [-8 bytes / -0.00%]\ncodesize/test_codesize_mem_O3_standalone.json: 9140 \u003d\u003e 9140 [+0 bytes / +0.00%]\ncodesize/test_codesize_mem_O3_standalone_narg.json: 8455 \u003d\u003e 8455 [+0 bytes / +0.00%]\ncodesize/test_codesize_mem_O3_standalone_narg_flto.json: 7386 \u003d\u003e 7386 [+0 bytes / +0.00%]\ncodesize/test_codesize_minimal_pthreads.json: 26001 \u003d\u003e 26015 [+14 bytes / +0.05%]\ncodesize/test_codesize_minimal_pthreads_memgrowth.json: 26460 \u003d\u003e 26474 [+14 bytes / +0.05%]\ncodesize/test_minimal_runtime_code_size_audio_worklet.json: 16385 \u003d\u003e 16385 [+0 bytes / +0.00%]\ncodesize/test_minimal_runtime_code_size_random_printf_wasm.json: 11037 \u003d\u003e 11037 [+0 bytes / +0.00%]\ncodesize/test_minimal_runtime_code_size_random_printf_wasm2js.json: 17346 \u003d\u003e 17346 [+0 bytes / +0.00%]\ncodesize/test_unoptimized_code_size.json: 172066 \u003d\u003e 172066 [+0 bytes / +0.00%]\n\nAverage change: +0.01% (-0.00% - +0.05%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e\nCo-authored-by: Alon Zakai \u003cazakai@google.com\u003e"
    },
    {
      "commit": "4897433683b8adef2c35467a57906d849f400e16",
      "tree": "ab761f85a1b3a75e592fcb93c86ee9c77175b57f",
      "parents": [
        "f4d9d9c500e5925aeb8c38dd67a770841816db66"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "guybedford@gmail.com",
        "time": "Sat Aug 29 00:38:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 29 00:38:16 2026"
      },
      "message": "Mark WASM_BINDGEN as an experimental setting (#27616)\n\nThis marks `-sWASM_BINDGEN` as an experimental setting, since the\nwasm-bindgen integration is still evolving and subject to change.\n\n* Adds the `[experimental]` tag in `settings.js` and an\n`EXPERIMENTAL_SETTINGS` entry, so enabling it now emits the standard\n`-Wexperimental` diagnostic:\n\n```\nemcc: warning: -sWASM_BINDGEN is experimental and subject to change [-Wexperimental]\n```\n\n* Regenerates the settings reference docs and adds a ChangeLog entry."
    },
    {
      "commit": "f4d9d9c500e5925aeb8c38dd67a770841816db66",
      "tree": "ccf54a2c357aa309b93423b128124b90a36fb780",
      "parents": [
        "704da900035b655c8aa3bc98fa42736d1ec28495"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Aug 29 00:25:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 29 00:25:04 2026"
      },
      "message": "[bootstrap] Honor EMSDK_NODE in bootstrap.py (#27617)\n\nWhen `EMSDK_NODE` is present in the environment, prepend its directory\nto `PATH` before running bootstrap actions.\n\nBy default, emsdk avoids prepending its own node binary to `PATH` if a\nsystem node is already present in `PATH`. However, bootstrap actions\n(such as `npm ci`) may fail if the system node is an older incompatible\nversion or lacks npm.\n\nSee: #27614"
    },
    {
      "commit": "704da900035b655c8aa3bc98fa42736d1ec28495",
      "tree": "c41fbf2a17fc5d3cda9e34a40514d710b6187863",
      "parents": [
        "92a1d865e63c91afab4f2d1d58d7d66f40f6b662"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Aug 28 23:58:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 23:58:52 2026"
      },
      "message": "[pylauncher] Use standard main() entry point with hybrid CRT linking (#27618)\n\nSwitch to standard `int main()` entry point in `pylauncher.c` and use\n`/MT` with `/NODEFAULTLIB:libucrt.lib ucrt.lib` in `build.bat`.\n\nThe goal of this change is to make the binaries less likely to trigger\nfalse positive detections from malware scanners and antivirus tools,\nwhich often flag tiny executables compiled with custom entry points\nand without buffer security checks (`/GS-`).\n\nThis links CRT startup code and compiler runtime support statically\n(so buffer security checks `/GS` and cookie initialization are handled\nautomatically by `mainCRTStartup` without custom entrypoint stubs or\n`vcruntime140.dll` dependencies) while dynamically linking against the\nOS-provided `ucrtbase.dll`.\n\nThis increases binary size by ~16-17 KB (total size ~23 KB) compared\nto the previous `/NODEFAULTLIB /GS-` setup, while avoiding the\n~100-300 KB overhead of statically linking the full Universal CRT."
    },
    {
      "commit": "92a1d865e63c91afab4f2d1d58d7d66f40f6b662",
      "tree": "7de9cd832ffd5068b105bdc55337a9c8e3f481db",
      "parents": [
        "259c50c36f7aa5578c38beac9b18f4b4fce4288f"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Aug 28 21:44:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 21:44:33 2026"
      },
      "message": "[CI] Remove `--enable-experimental-web-platform-features` from chrome flags (#27615)\n\nThis flag was originally added in #16813 to test WasmFS OPFS support,\nwhich has shipped in stable Chrome since version 102.\n\nIn Chrome 154, `--enable-experimental-web-platform-features` enables\n`AudioWorklet.port` (https://crbug.com/446920095). However, Chrome\ncannot deserialize `WebAssembly.Module` over a `MessagePort` into\n`AudioWorkletGlobalScope` (https://crbug.com/40210558).\n\nThis causes Emscripten\u0027s feature check in `src/lib/libwebaudio.js` to\nskip the `em-bootstrap` AudioWorkletProcessor and attempt to transfer\nthe Wasm module over `audioWorklet.port`, triggering a `messageerror`\nand breaking all audio worklet tests in Chrome 154."
    },
    {
      "commit": "259c50c36f7aa5578c38beac9b18f4b4fce4288f",
      "tree": "e64c15f03a0d2e8b2d6238337996bf55c7c1e6b3",
      "parents": [
        "6c40a2747ca1586e7a0aef73781c7f37186f5c5b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Aug 28 20:47:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 20:47:16 2026"
      },
      "message": "[pylauncher] Add VERSIONINFO resource file for Windows launcher (#27601)\n\nAdd `tools/pylauncher/pylauncher.rc` containing a `VERSIONINFO` resource\nwith metadata (file description, version, copyright, company) and update\n`build.bat` to compile it with `rc.exe` and link it into\n`pylauncher.exe`.\n\nThis helps properly identify the executable in Windows and reduces\ngeneric heuristic false positive detections from antivirus scanners."
    },
    {
      "commit": "6c40a2747ca1586e7a0aef73781c7f37186f5c5b",
      "tree": "2d61685f6c3fc232b3182daca6dca01179885f89",
      "parents": [
        "c60181f926ae60c68be795b51748e8f85653d364"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Thu Aug 27 04:33:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 04:33:13 2026"
      },
      "message": "[NODERAWSOCKETS] Bind-first connect for synchronous getsockname (#27566)\n\nThis fixes an ordering issue in the NODERAWSOCKETS TCP client connect\npath.\n\nAn unbound client connect() created a plain async `net.Socket`, with\n`saddr`/`sport` only recorded on the async `\u0027connect\u0027` event, so\n`getsockname()` immediately after a non-blocking `connect()` returned\n`0.0.0.0:0`. Kernel semantics assign the ephemeral source port\nsynchronously at `connect()`, so callers that read the local address\nright after a non-blocking connect raced the event loop (reliably\nfailing under load).\n\n`connect()` on an unbound socket now binds an ephemeral port first,\nthrough the same eager synchronous `bindHandle` path an explicit\n`bind()` takes, then connects through the bound handle:\n\n* `getsockname()` reports the assigned port synchronously after\n`connect()`, matching kernel behavior\n* the local address updates to the real source address once the\nconnection completes, and the port stays stable\n* both bind primitives (public `net.BoundSocket`, or the `tcp_wrap`\nfallback on older node) are synchronous, so this works across node\nversions\n\nTest coverage: `test_noderawsockets_connect_getsockname` asserts the\nephemeral port is non-zero immediately after a non-blocking `connect()`\nreturns, before any event loop turn, and that it is unchanged once\nconnected. The test is plain POSIX and passes natively against the host\nstack.\n\n_Made with AI assistance under my review_"
    }
  ],
  "next": "c60181f926ae60c68be795b51748e8f85653d364"
}
