)]}'
{
  "log": [
    {
      "commit": "487a3725b6f1fa67541074f014df8e80117fb874",
      "tree": "46d86b5ca49b7008f1bcb75244b01ba306d7543f",
      "parents": [
        "3bb2b496e323774ee94a7143f934eb844f8ab347"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon Jul 20 06:44:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 06:44:25 2026"
      },
      "message": "Update llvm-libc from LLVM 21.1.8 to 22.1.8 (#27374)\n\nThis updates llvm-libc from 2l.1.8 to LLVM 22.1.8:\nhttps://github.com/llvm/llvm-project/releases/tag/llvmorg-22.1.8\n\nAdditional changes:\n- Exclude more files using `mbstate_t`:\nhttps://github.com/emscripten-core/emscripten/pull/27374/changes/76f80f4585efcc19991c76cf9d6493da74491e2b\nWe are already excluding some files because the overlay mode doesn\u0027t\nsupport `mbstate_t`. There are new files using this and also some file\nhave moved to `src/stdlib`. This adds those files to the excludes list.\n\n- Exclude more files using `locale_t`:\nhttps://github.com/emscripten-core/emscripten/pull/27374/changes/90f338bf7472f14562f9d86b25c0834431cecbff\nWe are already excluding some file patterns using `locale_t` in\n`update_llvm_libc.py`. This adds more new files to it.\n\n- Add `llvmlibc` test mode to `runner.py`:\nhttps://github.com/emscripten-core/emscripten/pull/27374/changes/58736a9b5ed7da22cfe24f939dd8fa814e2356c5\nWe have `llvmlibc` test mode in `test_core.py` but not in `runner.py`.\nAdds this to `misc_test_modes`.\n\nAll tests pass with\n```console\n./test/runner llvmlibc\n```"
    },
    {
      "commit": "3bb2b496e323774ee94a7143f934eb844f8ab347",
      "tree": "cd53ef17a9f786e86c1e4436991e1a60ec4c8f5b",
      "parents": [
        "2e023432d3a118559c7dc136d71d1237d201cbdd"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 20 05:27:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 05:27:02 2026"
      },
      "message": "Apply ruff checks to files under `system/lib`. NFC (#27384)\n\nRemove `system/lib` exclusions from `pyproject.toml` and fix all lint\nwarnings in `system/lib/*.py`.\n\nInstead of adding `encoding\u003d\u0027utf-8\u0027` to individual `open()` calls, use\n`read_file()` and `write_file()` from `tools/utils.py`."
    },
    {
      "commit": "2e023432d3a118559c7dc136d71d1237d201cbdd",
      "tree": "1dead85be3149c65c798232170b3491765320099",
      "parents": [
        "c9cdff6c41794e4d206d9945515af201e0ed23fd"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 20 04:52:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 04:52:35 2026"
      },
      "message": "Fix update_openmp.py, openmp README. NFC (#27383)\n\nThe version of openmp that we imported was based on LLVM commit\n1823581ecb rather than an emscripten-libs branch.\n\nThis change updates the update_openmp.py script, and I verified that\nrunning it against 1823581ecb was a no-op aside from the one-line\ndownstream patch I made in #27289."
    },
    {
      "commit": "c9cdff6c41794e4d206d9945515af201e0ed23fd",
      "tree": "1897bbeef42e4452ecdd4c7590f01086ff4b966f",
      "parents": [
        "cf1becd9a80b88cfa23ca820eed4a7de51a66507"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sun Jul 19 22:44:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 22:44:26 2026"
      },
      "message": "Remove legacy library symbols: $ALLOC_NORMAL, $ALLOC_STACK, $allocate (#27378)\n\nRemove `$ALLOC_NORMAL`, `$ALLOC_STACK`, and `$allocate` from\n`liblegacy.js` and `extraLibraryFuncs` in `libcore.js`.\n\nThese symbols were moved to `library_legacy.js` when the file was first\ncreated in July 2022 (#17390). They have produced `-Wdeprecated`\nwarnings on usage since February 2024 (#21357), over 2 years ago, giving\nexternal users plenty time to transition.\n\nThe `test_legacy_exported_runtime_numbers` test in `test_core.py` is\nalso removed since it specifically tested `$ALLOC_STACK`. The error\nmessages checked by that test are covered elsewhere in `test_other.py`:\n- \"was not exported\" is covered by `test_warn_module_out_err` and\n  `test_exported_runtime_methods_from_js_library`.\n- \"is a library symbol and not included by default\" is covered by\n  `test_removed_runtime_function` and `test_legacy_runtime`."
    },
    {
      "commit": "cf1becd9a80b88cfa23ca820eed4a7de51a66507",
      "tree": "f8af0d9047f74312436d85579aa6bc6c6cf6a842",
      "parents": [
        "91f02346bdc3383f1de4a764275674d652c6e28b"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sun Jul 19 17:31:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 17:31:42 2026"
      },
      "message": "Update emsdk version from c09b2d2f to 4bfdde80 (#27379)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: c09b2d2f \u003d\u003e 4bfdde80\n\nThe following revisions were included in this update:\n\n```\n- 4bfdde80 Roll llvm-project from d00710093a3d to 6a33b69d8bae (12 revisions)\n- bb9d518c Roll emscripten from 3322f0a3634b to 91f02346bdc3 (2 revisions)\n- 8a8c1a18 Roll llvm-project from 93b124030930 to d00710093a3d (44 revisions)\n- 39761686 Roll binaryen from 74c39b9bc3e5 to acfdce94eae7 (5 revisions)\n- 72ac8e6f Roll emscripten from 7143cc128520 to 3322f0a3634b (2 revisions)\n- b79a6833 Roll emscripten from 3f62453168ec to 7143cc128520 (1 revision)\n- 3a755d77 Roll llvm-project from 6cafa889cd39 to 93b124030930 (55 revisions)\n- fd8b317f Roll v8 from 80bcd758a7c3 to 40466fbf711d (29 revisions)\n- 4d6ee34d Roll emscripten from 0b10e353c5c2 to 3f62453168ec (1 revision)\n- 3feb1900 Roll llvm-project from 3c6b4870425e to 6cafa889cd39 (32 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/c09b2d2f..4bfdde80\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "91f02346bdc3383f1de4a764275674d652c6e28b",
      "tree": "4f736cfced8980a3189ee43646fcd98745b5fedc",
      "parents": [
        "dcfb34325c8ec8db74398a938f1392b4f26020a1"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Fri Jul 17 23:22:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 23:22:04 2026"
      },
      "message": "NODERAWSOCKETS: socket fstat and SO_TYPE/SO_LINGER/TCP_MAXSEG options (#27306)\n\nFills in some missing socket metadata and options for the node:net\n(`-sNODERAWSOCKETS`) backend, so more standard socket code behaves as it\nwould on Linux.\n\n* `fstat` on a socket now reports `S_IFSOCK` (previously it fell through\nto a generic node), via a SOCKFS `stream_ops.getattr` that plugs into\nthe `FS.fstat` dispatch already present on `main`.\n* `getsockopt`:\n  * `SO_TYPE` reports the type the socket was created with.\n  * `SO_LINGER` round-trips a `struct linger`.\n* `TCP_MAXSEG` reports a default MSS. Node exposes no real MSS, so this\nmirrors Linux: the RFC 879 default (536) before the connection is\nestablished, and the (large) loopback-negotiated value once connected.\n* `setsockopt SO_LINGER` is now honored on close: a zero timeout does an\nabortive RST close (`resetAndDestroy`), a positive timeout ends\ngracefully and forces the connection down once the interval elapses, and\notherwise the connection is destroyed as before.\n\nAdds `test/sockets/test_socket_options.c` (registered as\n`test_noderawsockets_socket_options`) covering socket `fstat`,\n`SO_TYPE`, `SO_LINGER` round-trip, and the pre-connect `TCP_MAXSEG`\ndefault."
    },
    {
      "commit": "dcfb34325c8ec8db74398a938f1392b4f26020a1",
      "tree": "54a86f74dd247a894235dbecd25462004ee71e92",
      "parents": [
        "3322f0a3634bc299638f44fa20a24077a5e34f1a"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Fri Jul 17 23:17:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 23:17:30 2026"
      },
      "message": "Simplify NODERAWSOCKETS test output to \u0027done\u0027. NFC (#27373)"
    },
    {
      "commit": "3322f0a3634bc299638f44fa20a24077a5e34f1a",
      "tree": "18c2e3199ca98121e06fdf4c98c105e53e162e80",
      "parents": [
        "44d9f226b0b39aefedebf05cdc64196c0b8407bf"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 17 20:24:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 20:24:13 2026"
      },
      "message": "Mark SOCKET_WEBRTC as deprecated (#27371)\n\nSee #27366\n\nIf we don\u0027t get any feedback after a few releases we can followup with #27367."
    },
    {
      "commit": "44d9f226b0b39aefedebf05cdc64196c0b8407bf",
      "tree": "6639de84f1c16c1844e53f2436a64c2a3f213571",
      "parents": [
        "7143cc12852046b9b84383402c7f0024a6d58e5a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 17 19:53:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:53:29 2026"
      },
      "message": "Update Emscripten Toolchain Requirements docs (#27369)\n\nLLVM requires VS2019 these days:\nhttps://llvm.org/docs/GettingStartedVS.html"
    },
    {
      "commit": "7143cc12852046b9b84383402c7f0024a6d58e5a",
      "tree": "5fa4cfafa5178ad5fd348cdd16be345b3a3c912d",
      "parents": [
        "3f62453168ec29b3008f6f7802c45a73b9ebd590"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 17 18:02:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 18:02:47 2026"
      },
      "message": "Add third_party/README.md. NFC (#27365)"
    },
    {
      "commit": "3f62453168ec29b3008f6f7802c45a73b9ebd590",
      "tree": "f165b145e9baeafe43b63c112cc907c2b6005a32",
      "parents": [
        "0b10e353c5c2c3443d2e468cd70038f6094c344e"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Fri Jul 17 15:58:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 15:58:01 2026"
      },
      "message": "Update emsdk version from ca2b1316 to c09b2d2f (#27368)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: ca2b1316 \u003d\u003e c09b2d2f\n\nThe following revisions were included in this update:\n\n```\n- c09b2d2f Roll llvm-project from 398f2117379f to 3c6b4870425e (15 revisions)\n- b4865982 Roll llvm-project from 85cc99660cf0 to 398f2117379f (43 revisions)\n- e77575fd Roll emscripten from f062699d8063 to 0b10e353c5c2 (2 revisions)\n- 3fc8949f Roll llvm-project from 19595357e32b to 85cc99660cf0 (59 revisions)\n- 7789abeb Roll emscripten from 3f023523f14b to f062699d8063 (1 revision)\n- 17d03af5 Roll emscripten from 7aa3cc4673ff to 3f023523f14b (1 revision)\n- 0aac93e1 Roll v8 from 41abdf1244e1 to 80bcd758a7c3 (39 revisions)\n- b238b966 Roll llvm-project from d94df008e715 to 19595357e32b (30 revisions)\n- 5dda5656 Roll llvm-project from 6705f3d3d2e6 to d94df008e715 (28 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/ca2b1316..c09b2d2f\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "0b10e353c5c2c3443d2e468cd70038f6094c344e",
      "tree": "c10bcecd68f57fee2d412059e288501226f14014",
      "parents": [
        "e463a5dc180f8612b9f1ba2e3a274bea81114bd1"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 16 21:55:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 21:55:39 2026"
      },
      "message": "[docs] Update deprecated / incorrect W3C spec URLs (#27262)\n\n- Replace incorrect pointerevents mouse event URLs introduced in #27192\nwith W3C UI Events specification URLs.\n- Update all remaining deprecated dvcs.w3.org (DOM3-Events, fullscreen,\nscreen-orientation) and dev.w3.org URLs to their modern W3C and WHATWG\nspecifications across html5.h.rst, libsdl.js, and browser tests."
    },
    {
      "commit": "e463a5dc180f8612b9f1ba2e3a274bea81114bd1",
      "tree": "f68a1d916df6ea9e56ef5fe0727566cc18179fee",
      "parents": [
        "f062699d80637fe67b5c07bbaf2611174877b271"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Thu Jul 16 21:12:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 21:12:40 2026"
      },
      "message": "Teach metadce about WASM_ESM_INTEGRATION (#27218)\n\nThis makes `-sWASM_ESM_INTEGRATION` work at `-O2` and above. Previously\nsuch builds failed in the JS optimizer\u0027s metadce (dead code elimination)\npass with:\n\n```\nAssertionError: could not find the assignment to \"wasmImports\".\n```\n\nThe reason is that metadce reconstructs the wasm⇄JS def/use graph by\npattern-matching the idioms a normal build emits — the `wasmImports`\nobject literal and `wasmExports[\u0027x\u0027]` member uses. Under ESM integration\nthose don\u0027t exist: the boundary is expressed with native ES module\nsyntax instead, which is exactly the simpler, tooling-visible def/use\ngraph this mode was designed to produce:\n\n```js\n// wasm exports received by the JS:\nimport { main as _main, memory as wasmMemory } from \u0027./a.out.wasm\u0027;\n// JS functions exported to the wasm:\nexport { _fd_write as fd_write };\n```\n\nSo rather than synthesise the old shapes, metadce now reads the real\nmodule bindings directly.\n\n* `emitDCEGraph` recognises `import {..} from \u0027./x.wasm\u0027` as wasm export\nnodes (collapsing aliases such as `memory`/`wasmMemory` onto a single\nnode) and `export { js as wasmName }` as wasm import edges, while\nleaving re-exports (`export { _main }`) to root naturally.\n* `applyDCEGraphRemovals` prunes unused specifiers from those same\n`import`/`export` statements.\n* `applyImportAndExportNameChanges` applies binaryen\u0027s minified names to\nthe wasm-facing side of each specifier, e.g.\n\n  ```js\n  import { malloc as _malloc } from \u0027./a.out.wasm\u0027;\n  export { _fd_write as fd_write };\n  ```\n\n  becomes\n\n  ```js\n  import { c as _malloc } from \u0027./a.out.wasm\u0027;\n  export { _fd_write as d };\n  ```\n\nThe local binding is preserved (an unaliased `memory` becomes `b as\nmemory`, not a broken `b`).\n\nWhen `-sSOURCE_PHASE_IMPORTS` is also enabled, the glue additionally\nemits a source-phase import of the wasm module itself:\n\n```js\nimport source wasmModule from \u0027./a.out.wasm\u0027;\n```\n\nThat specifier is an `ImportDefaultSpecifier` binding the module (not a\nwasm export), so it has no `.imported`. `isImportFromWasm` matched any\nimport whose source ends in `.wasm` and `emitDCEGraph` then threw\n`TypeError: Cannot read properties of undefined (reading \u0027name\u0027)`\nreading `spec.imported.name`. It now gates on `!node.phase` so only\nvalue-phase `.wasm` imports (the export bindings) are treated as export\nedges; source/defer-phase imports are left alone.\n\nTwo supporting changes keep the two module interfaces in sync:\n\n* `building.py` — under ESM integration any export binaryen drops\n(including internal ones like the indirect function table) is also\ndropped from the JS `import`, so the JS never imports something the wasm\nno longer exports.\n* `link.py` — import/export *name* minification stays on for ESM, but\nimport *module name* minification is disabled, since every import is\nrewritten to the single support-module source by `create_esm_wrapper`\nanyway (and minifying `env`→`a` would break that rewrite).\n\nTest coverage:\n\n* New `js_optimizer` fixtures exercising each pass on ESM-shaped input:\n`emitDCEGraph-esm`, `applyDCEGraphRemovals-esm`,\n`applyImportAndExportNameChanges-esm`.\n* New `emitDCEGraph-sourcePhaseImports` fixture covering the combined\n`SOURCE_PHASE_IMPORTS` + `WASM_ESM_INTEGRATION` case that previously\ncrashed.\n* New end-to-end `other.test_metadce_esm_integration` building\n`hello_world.c` with `-O3 -sWASM_ESM_INTEGRATION`, asserting the\ndangling table import is removed and names are minified consistently\n(the run is guarded on Node 25).\n\nResolves #27217.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "f062699d80637fe67b5c07bbaf2611174877b271",
      "tree": "3a4cf2348662f5e17f415475bf0163de68c7193a",
      "parents": [
        "3f023523f14b03155a8f2fdcf231ee6790761e61"
      ],
      "author": {
        "name": "stephenduong1004",
        "email": "stephenduong@google.com",
        "time": "Thu Jul 16 18:28:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 18:28:53 2026"
      },
      "message": "Support multi-value returns in TS definitions (#27332)\n\n`wasm-bindgen` generates WebAssembly functions with multiple return\nvalues, so we need to remove the assertion that enforces a single return\ntype in tools/emscripten.py. This PR removes the assertion and correctly\nmaps multi-value returns to TypeScript tuples."
    },
    {
      "commit": "3f023523f14b03155a8f2fdcf231ee6790761e61",
      "tree": "9bc351b1f635bd52e46780a245825bd5908f243b",
      "parents": [
        "7aa3cc4673ffe2f23684e041386f04e113b56440"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Jul 16 15:24:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 15:24:55 2026"
      },
      "message": "Update emsdk version from 3c1f46b2 to ca2b1316 (#27361)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nExpected Binaryen version updated: 130 \u003d\u003e 131\n\nemsdk version updated: 3c1f46b2 \u003d\u003e ca2b1316\n\nThe following revisions were included in this update:\n\n```\n- ca2b1316 Roll llvm-project from 670841415d3d to 6705f3d3d2e6 (18 revisions)\n- cd05cb75 Roll emscripten from 9cbdf2df663c to 7aa3cc4673ff (1 revision)\n- 0b02a3eb Roll llvm-project from be1b1a77732c to 670841415d3d (43 revisions)\n- ddf1b35f Roll binaryen from 1f903c14babf to 74c39b9bc3e5 (1 revision)\n- e82798db Roll binaryen from 2de84ed25624 to 1f903c14babf (4 revisions)\n- 18d001da Roll llvm-project from a4d12bf0c2ab to be1b1a77732c (87 revisions)\n- 1e465cd0 Roll emscripten from e44858ed1d1b to 9cbdf2df663c (2 revisions)\n- b5156b35 Roll binaryen from 50181d7e7a8d to 2de84ed25624 (1 revision)\n- a0212609 Roll emscripten from 724e288c20a6 to e44858ed1d1b (1 revision)\n- 72fee93f Roll llvm-project from 15776b5cddd4 to a4d12bf0c2ab (63 revisions)\n- 49da8147 Roll v8 from d6cc628ee8e1 to 41abdf1244e1 (26 revisions)\n- 5f57462b Roll llvm-project from 2033c4569af6 to 15776b5cddd4 (26 revisions)\n- 8537f6a4 Roll binaryen from a3f1bc05f4e5 to 50181d7e7a8d (1 revision)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/3c1f46b2..ca2b1316\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "7aa3cc4673ffe2f23684e041386f04e113b56440",
      "tree": "1ed1de77e98342c56c1c949ee1a1b60ab46f76a8",
      "parents": [
        "9cbdf2df663ccb6b8f3ad942dca97b5b3aaf4a97"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 16 01:30:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 01:30:33 2026"
      },
      "message": "[docs] Update deprecated specification URLs to https and canonical domains (#27337)\n\nUpdate URLs to https across html5.h.rst, settings_reference.rst,\nsettings.js, libsdl.js, and browser tests.\n\nReplace deprecated draft and repository domains (dvcs.w3.org,\ndev.w3.org, w3c.github.io, whatwg.org/specs/web-apps/current-work, and\nkhronos.org) with their canonical W3C and WHATWG specification URLs\nwithout altering target section anchors or specification names.\n\nSplit out from: #27262"
    },
    {
      "commit": "9cbdf2df663ccb6b8f3ad942dca97b5b3aaf4a97",
      "tree": "9ed1a08d8d6da79440b2e9d80bb598a60eb0e4ae",
      "parents": [
        "f8b30fdf3d63c95876bb9abb865ec6b9aceba01c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 15 16:29:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 16:29:03 2026"
      },
      "message": "Remove mingw build script for pylauncher. NFC (#27357)\n\nThis script was already not working since #27048. Also, IIUC its not\npossible build the same tiny, dependency-free binary with mingw that we\ncan with cl.exe."
    },
    {
      "commit": "f8b30fdf3d63c95876bb9abb865ec6b9aceba01c",
      "tree": "e1553baaed86864406d4a69aa8f214f763774e32",
      "parents": [
        "e44858ed1d1bae7ec759b035375fd0c23d56f405"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 15 16:07:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 16:07:22 2026"
      },
      "message": "Bump pip dev dependency: coverage, ruff and mypy. NFC (#27350)"
    },
    {
      "commit": "e44858ed1d1bae7ec759b035375fd0c23d56f405",
      "tree": "12534590935cfe376c30cbe593e4929c734b92a0",
      "parents": [
        "724e288c20a6be40993667d7d6195d6ea66356f7"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Jul 15 15:03:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 15:03:38 2026"
      },
      "message": "Update emsdk version from 3baae256 to 3c1f46b2 (#27355)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nemsdk version updated: 3baae256 \u003d\u003e 3c1f46b2\n\nThe following revisions were included in this update:\n\n```\n- 3c1f46b2 Roll emscripten from d50368db1adb to 724e288c20a6 (1 revision)\n- b0c40e2f Roll llvm-project from 5fc69663ad4a to 2033c4569af6 (27 revisions)\n- 4a8e0c6a Roll emscripten from 571371eb9bf8 to d50368db1adb (3 revisions)\n- 5f7116fe Roll emscripten from a325eed9a4f9 to 571371eb9bf8 (4 revisions)\n- 1a9377f6 Roll llvm-project from fdc884f5a5f0 to 5fc69663ad4a (74 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/3baae256..3c1f46b2\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "724e288c20a6be40993667d7d6195d6ea66356f7",
      "tree": "708aa8448ea9650d671cb31d3275e1e232a92a78",
      "parents": [
        "d50368db1adbd6367106701f392e216fc5f0d6a3"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 15 07:06:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 07:06:12 2026"
      },
      "message": "Fix string template in rebaseline_tests.py. NFC (#27354)"
    },
    {
      "commit": "d50368db1adbd6367106701f392e216fc5f0d6a3",
      "tree": "6a47b1649b61855078d310aeca3206c5a22ca6bd",
      "parents": [
        "3d621be171cf4ed695f2de3879c2acd11785f627"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Jul 15 00:20:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 00:20:59 2026"
      },
      "message": "Update emsdk version from 89f7c6bc to 3baae256 (#27353)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--update-emsdk.\n\nExpected LLVM version updated: 23 \u003d\u003e 24\nExpected Binaryen version updated: 129 \u003d\u003e 130\n\nemsdk version updated: 89f7c6bc \u003d\u003e 3baae256\n\nThe following revisions were included in this update:\n\n```\n- 3baae256 Roll emscripten from 4ef0697d43d7 to a325eed9a4f9 (8 revisions)\n- 3ad26d89 Roll binaryen from c839180673de to a3f1bc05f4e5 (1 revision)\n- 2b26540b Roll llvm-project from a9d295d615a8 to fdc884f5a5f0 (71 revisions)\n- e633d5c4 Roll binaryen from 9cb9f39e4fd8 to c839180673de (1 revision)\n- 0065e91e Roll emscripten from 9bcf516954df to 4ef0697d43d7 (1 revision)\n- 7ad87b39 Roll llvm-project from 44a42e631e5b to a9d295d615a8 (49 revisions)\n- c3675cda Roll binaryen from 99f6fc6315d0 to 9cb9f39e4fd8 (1 revision)\n- 51f29e3d Roll v8 from c02343a118fb to d6cc628ee8e1 (39 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/89f7c6bc..3baae256\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "3d621be171cf4ed695f2de3879c2acd11785f627",
      "tree": "555f5e92ee52eecc9c13543acbc19862ed87dc31",
      "parents": [
        "45be81529694a2c1a0d57867c7de10c39479118a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 23:53:39 2026"
      },
      "committer": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 23:54:33 2026"
      },
      "message": "[CI] Fix branch name update-emsdk.yml\n\nThis should have been included in #27344.\n"
    },
    {
      "commit": "45be81529694a2c1a0d57867c7de10c39479118a",
      "tree": "f167a6d8059f3eb2446968178ecf4b4af28e97f6",
      "parents": [
        "571371eb9bf8255608ca568ef61c29f065ddb641"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 23:42:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 23:42:23 2026"
      },
      "message": "Improve `rebaseline_tests.py --update-emsdk` to enable llvm and binaryen version bumps (#27352)\n\nWhen running `tools/maint/rebaseline_tests.py --update-emsdk`, check\nboth the LLVM version and Binaryen version in the currently installed\nSDK (`get_clang_version` and `get_binaryen_version`), and automatically\npatch `EXPECTED_LLVM_VERSION` in `tools/shared.py` and\n`EXPECTED_BINARYEN_VERSION` in `tools/building.py` if they differ.\n\nAlso update `check_binaryen` in `tools/building.py` so it has the same\nbuildbot handling (`BUILDBOT_BUILDNUMBER`) as `check_llvm_version`, only\nallowing `EXPECTED_BINARYEN_VERSION + 1` in CI environments.\n\nWe should probably split up this script since its doing a lot more than\nrebaselining tests at this point, but I\u0027ll leave that for a followup.\n\nSee #27349"
    },
    {
      "commit": "571371eb9bf8255608ca568ef61c29f065ddb641",
      "tree": "e545351c6af9c860fb326edcbd4d6a540f7a3804",
      "parents": [
        "ee5cacb070aa6d299b7e38a7f15b1cdddb590f2c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 23:34:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 23:34:52 2026"
      },
      "message": "Add changelog entry for cleanup of legacy DOM APIs. NFC (#27346)"
    },
    {
      "commit": "ee5cacb070aa6d299b7e38a7f15b1cdddb590f2c",
      "tree": "6ce71ce11d13835cf063080f7eee0bac5401d88e",
      "parents": [
        "35f10b73a349c088b2794594dd604cf37f3b2007"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 22:56:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 22:56:45 2026"
      },
      "message": "Remove legacy vendor-prefixed DOM APIs and fallbacks (#27347)\n\nRemove references to `mozRequestFullScreen`, `msRequestFullscreen`,\n`mozCancelFullScreen`, `msExitFullscreen`, `cancelFullScreen`,\n`mozfullscreenchange`, and `MSFullscreenChange` across `libbrowser.js`\nand `libglfw.js`. Convert bracket notation\n(`canvasContainer[\u0027requestFullscreen\u0027]`, `document[\u0027exitFullscreen\u0027]`)\nto standard dot notation.\n\nIn `libhtml5.js`, remove `document.mozFullScreenElement`,\n`document.webkitCurrentFullScreenElement`, and\n`document.msFullscreenElement` from `$getFullscreenElement()`, leaving\n`document.fullscreenElement` and `document.webkitFullscreenElement`\n(guarded by `MIN_SAFARI_VERSION`). Also remove\n`screen.mozLockOrientation`, `screen.webkitLockOrientation`,\n`screen.mozUnlockOrientation`, and `screen.webkitUnlockOrientation`\nfrom `emscripten_lock_orientation` and `emscripten_unlock_orientation`.\n\nIn `libbrowser.js`, `libopenal.js`, and `closure-externs.js`, remove\nobsolete `mozGetUserMedia`, `msGetUserMedia`, and `webkitGetUserMedia`\nfallbacks and extern definitions, and transition `getUserMedia` calls\nfrom the deprecated callback API (`navigator.getUserMedia`) to standard\nPromise-based `navigator.mediaDevices.getUserMedia`.\n\nThese prefixed properties and fallbacks are safe to remove because:\n1. Fullscreen, Screen Orientation, and MediaDevices APIs became\nunprefixed standards across Firefox, Chrome, and Safari years ago\n(e.g. `requestFullscreen` in Firefox 64 / Chrome 71,\n`navigator.mediaDevices.getUserMedia` in Chrome 53 / Firefox 38 / Safari\n11). Emscripten\u0027s minimum supported browser versions\n(`MIN_FIREFOX_VERSION \u003d 79`, `MIN_CHROME_VERSION \u003d 85`) are well beyond\nwhen these unprefixed properties and methods became standard across\nmajor engines.\n2. IE and legacy Edge (`ms` prefix) and Firefox OS (`moz` prefixes) are\nno longer supported.\n3. Safari \u003c 16.4 still requires `webkit` prefixes for Fullscreen, so\n`webkitRequestFullscreen`, `webkitExitFullscreen`,\n`webkitfullscreenchange`, and `webkitFullscreenElement` are retained\nwhere appropriate."
    },
    {
      "commit": "35f10b73a349c088b2794594dd604cf37f3b2007",
      "tree": "2048a7433bbf042c9ce0d16f89b95059222e75f3",
      "parents": [
        "eec3aed6dd6e1ab8f3497fb1bcdbd2a7b83cabe6"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 22:32:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 22:32:58 2026"
      },
      "message": "Remove requestFullScreen assertion. NFC (#27348)\n\nThis assertion is added over 7 years ago: #9861. Seems like its probably\nserved its purpose to help folks transition at this point."
    },
    {
      "commit": "eec3aed6dd6e1ab8f3497fb1bcdbd2a7b83cabe6",
      "tree": "096ca94066c732ec67cc14a489a0a674b1516574",
      "parents": [
        "a325eed9a4f9f0b28b519630cb97c2cdb53bc84c"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Tue Jul 14 20:18:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 20:18:58 2026"
      },
      "message": "Report host uid/gid credentials under NODERAWFS (#27319)\n\nReports the real host process credentials for\n`getuid`/`geteuid`/`getgid`/`getegid` under NODERAWFS (via node\u0027s\n`process.get*id()`), rather than the hardcoded `0`.\n\nThese move from weak C stubs into the JS syscall layer, since a weak C\ndefinition otherwise wins over the JS override and the syscall would\nkeep returning `0`. Other backends — and Windows, which has no uid/gid\nconcept — continue to report `0`. The `set*` variants stay `EPERM`: musl\nroutes them all through `__setxid`, which emscripten stubs out because\nit relies on dynamic (numeric) syscall dispatch that the compile-time\nsyscall mapping can\u0027t provide.\n\nTested across MEMFS/NODEFS/NODERAWFS (`test_fs_getuid`).\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "a325eed9a4f9f0b28b519630cb97c2cdb53bc84c",
      "tree": "e5266cef260cde258271cc1b1736d9e2152ac837",
      "parents": [
        "9619377bb9131b4e028a7917bd8297d9002eac34"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 17:45:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 17:45:43 2026"
      },
      "message": "Prefer single quotes for stings in JS library files. NFC (#27322)"
    },
    {
      "commit": "9619377bb9131b4e028a7917bd8297d9002eac34",
      "tree": "cb30f1677aff3cfb87ca5e5035269e4e87ac9f59",
      "parents": [
        "94c12a9a8ba96673a07e6bc412e87b4226d9f178"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 16:45:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:45:03 2026"
      },
      "message": "Improve commit message for rebaseline_tests.py emsdk updates. NFC (#27344)\n\n- Include the revision hashes in the commit message\n- Consistently use the \"update\" terminology rather than \"bump\" or\n\"roll\".\n- Use short (8 char) SHAs when referring to git revisions."
    },
    {
      "commit": "94c12a9a8ba96673a07e6bc412e87b4226d9f178",
      "tree": "68419c0d94114ac9bff5894d910dd01ed9b9bd1b",
      "parents": [
        "f01f6956e3cf60a44db13a68d1fa72eef5a9a410"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 16:44:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:44:40 2026"
      },
      "message": "Fix location of openmp README.md (#27345)\n\nThe rename of the readme in #27296 raced with #27290."
    },
    {
      "commit": "f01f6956e3cf60a44db13a68d1fa72eef5a9a410",
      "tree": "4c03ebe38b07700dd1217bfd9ac470ac3ddc943c",
      "parents": [
        "141643077de5ab719b143190006834266393deec"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 16:44:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:44:24 2026"
      },
      "message": "Remove workarounds for old DOM APIs prior ot event.movementX/Y (#27341)\n\nInline `event.movementX` and `event.movementY` directly into\n`calculateMouseEvent` in `libbrowser.js`, removing the `getMovementX`\nand `getMovementY` helper methods from `LibraryBrowser`.\n\nRemove references to `mozMovementX`, `webkitMovementX`, `mozMovementY`,\nand `webkitMovementY` from `libbrowser.js` and `libsdl.js`. Also update\n`libhtml5.js` and `libsdl.js` to use standard dot notation\n(`e.movementX`, `event.movementX`) instead of bracket notation across\nall mouse event handling.\n\nThese prefixed properties and their workarounds (`if (\u0027mozMovementX\u0027 in\nevent)`) were added between 2012 and 2013 for early implementations of\nthe W3C Pointer Lock API to address Firefox bugs #750111 and #764498.\n\nThis is safe to remove because:\n1. `MouseEvent.movementX` and `MouseEvent.movementY` became standard\nunprefixed properties in Firefox 41 (2015) and Chrome 37 (2014).\n2. Emscripten\u0027s minimum supported browser versions\n(`MIN_FIREFOX_VERSION` and `MIN_CHROME_VERSION`) are well beyond when\nunprefixed `movementX` became universal across all engines.\n3. The vendor-prefixed properties (`mozMovementX`, `webkitMovementX`)\nhave been removed from modern browser engines.\n4. Bugzilla bugs #750111 (`mozMovementX is transient and becomes zero\nlater`) and #764498 (`movementX and movementY have the wrong value for\nmousedown and mouseup`) were both resolved in 2012 (Firefox 15).\n\nSee: https://bugzilla.mozilla.org/show_bug.cgi?id\u003d750111\nSee: https://bugzilla.mozilla.org/show_bug.cgi?id\u003d764498\nSee: https://bugzilla.mozilla.org/show_bug.cgi?id\u003d782777"
    },
    {
      "commit": "141643077de5ab719b143190006834266393deec",
      "tree": "172d8a5bbbb40221daa811de8526cfb9e3e518e0",
      "parents": [
        "5c65e277497108a76d2dd1edc93630fb4cb384a4"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 16:32:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:32:21 2026"
      },
      "message": "Remove support for old vendor-prefixed screen orientation API (#27339)\n\nSee https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation"
    },
    {
      "commit": "5c65e277497108a76d2dd1edc93630fb4cb384a4",
      "tree": "f3f0d0c641cf30aa00dc6b56f0dabcec52a4508f",
      "parents": [
        "8d056a6d50254abbe95ac8cbc45b7bdbf2922ce5"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Tue Jul 14 16:23:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:23:53 2026"
      },
      "message": "Update emsdk version used in testing (#27343)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--bump-emsdk.\n\nemsdk version updated: 80bb26b7e49f5d1b97ea9536a1cdf6b90843c3e4 \u003d\u003e\n89f7c6bcd976b263992d5f5671a83706ffce237a\n\nThis includes the following revisions:\n\n```\n- 89f7c6bc Roll llvm-project from d8636be51e34 to 44a42e631e5b (37 revisions)\n- 87b5ca58 Roll binaryen from 48858e8db9d8 to 99f6fc6315d0 (2 revisions)\n- 63da09ed Roll llvm-project from 67ebc4b221c3 to d8636be51e34 (37 revisions)\n- 63c6b6ee Roll emscripten from c9c4730c9d61 to 9bcf516954df (1 revision)\n- 21958732 Roll binaryen from 6c1ca53b8932 to 48858e8db9d8 (1 revision)\n- 99c2b13b Roll emscripten from 06e29db0f616 to c9c4730c9d61 (2 revisions)\n- 801e64ef Roll llvm-project from 592953beff73 to 67ebc4b221c3 (65 revisions)\n- ad4807f3 Roll emscripten from 410508e3bb30 to 06e29db0f616 (4 revisions)\n- 6dc43384 Roll binaryen from 1517ea948c09 to 6c1ca53b8932 (1 revision)\n- 1c6d2e35 Roll emscripten from 283e2d130132 to 410508e3bb30 (1 revision)\n- 9074aa51 Version 6.0.3 RC\n- fb8f213e Roll llvm-project from 2de67c330a97 to 592953beff73 (79 revisions)\n- 878597c8 Roll binaryen from 5d050e793d27 to 1517ea948c09 (1 revision)\n- 3cde2891 Roll llvm-project from 461f0b699c8d to 2de67c330a97 (20 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/80bb26b7e49f5d1b97ea9536a1cdf6b90843c3e4..89f7c6bcd976b263992d5f5671a83706ffce237a\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "8d056a6d50254abbe95ac8cbc45b7bdbf2922ce5",
      "tree": "a4225a28333ef87ee250fa6df9b0dbaa9df170df",
      "parents": [
        "fa291cc8d34fad2a0960ab5ea2dbbadae3047d94"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 16:23:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:23:18 2026"
      },
      "message": "[pthreads] Fix relaying of mailbox notifications to main thread (#27336)\n\nIn #27018, `d.targetThread \u0026\u0026 d.targetThread !\u003d _pthread_self()` in\n`worker.onmessage` on the main thread was changed to only check\n`d.targetThread` before relaying or asserting.\n\nHowever, when `waitAsyncPolyfilled` is active or `Atomics.waitAsync` is\nunsupported (e.g., Firefox before 145), `thread-\u003ewaiting_async` is not\nset when `_emscripten_thread_mailbox_await` runs. In this fallback mode,\n`emscripten_thread_mailbox_send` calls\n`_emscripten_notify_mailbox_postmessage`, which sends a `postMessage`\nfrom the worker with `targetThread` set to the main thread.\n\nWhen `worker.onmessage` on the main thread receives this message,\n`d.targetThread \u003d\u003d _pthread_self()`. Without checking `d.targetThread !\u003d\n_pthread_self()`, the main thread either triggers an assertion failure\n(`assert(d.targetThread !\u003d _pthread_self())`) or drops the message when\nlooking up `PThread.pthreads[targetThread]`.\n\nRestoring `d.targetThread !\u003d _pthread_self()` ensures that mailbox\nnotifications addressed to the main thread fall through and are\nprocessed directly (`checkMailbox()`) instead of being forwarded.\n\nAlso add a browser test (`browser.test_pthread_no_waitasync`) that\ndisables `Atomics.waitAsync` in a `--pre-js` script to verify this\nfallback behavior.\n\nFixes: #27037"
    },
    {
      "commit": "fa291cc8d34fad2a0960ab5ea2dbbadae3047d94",
      "tree": "d42ad18440aa90c553025e073f2f71f0e939cda9",
      "parents": [
        "4ef0697d43d7a6f3799f501490970c62720395ae"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 16:21:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:21:15 2026"
      },
      "message": "[sdl] Remove obsolete mozAudioChannelType workaround (#27340)\n\nRemove references to `mozAudioChannelType` from `Mix_LoadWAV` and\n`Mix_QuickLoad_RAW` in `libsdl.js`.\n\nThis workaround (`audio.mozAudioChannelType \u003d \u0027content\u0027`) was added in\n2014 (commit f0d152957d) for Boot to Gecko (B2G) / Firefox OS games so\nthat audio on the `content` channel would behave correctly when the\nscreen turned off or the app went to the background.\n\nThis is safe to remove because:\n1. Firefox OS / B2G was discontinued (~2016) and moved to the Firefox OS\nGraveyard.\n2. The `AudioChannel` API and `mozAudioChannelType` property were\nremoved from Gecko (`mozilla-central`). Setting `mozAudioChannelType`\nhas no effect on Firefox desktop or any modern browser.\n3. Bugzilla bug #910340 (`When screen is switched off, visibilitychange\nis not firing when audio is playing`) was closed in 2014 as `RESOLVED\nWONTFIX` since continuing audio playback when the screen turns off is\nexpected mobile behavior.\n\nSee: https://bugzilla.mozilla.org/show_bug.cgi?id\u003d910340"
    },
    {
      "commit": "4ef0697d43d7a6f3799f501490970c62720395ae",
      "tree": "ebc32811d0f753818bce58f29a748e10bc9ad9ed",
      "parents": [
        "9bcf516954dfb1ceb2693ae913dc80e583e7f51c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 14 12:40:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 12:40:37 2026"
      },
      "message": "Remove support for ancient gamepad DOM API (#27338)\n\nWe already used the new API unconditionally in libglfw.js.\n\nSee https://www.w3.org/TR/gamepad/#dom-gamepadbutton\n\nThe last browsers where you had to handle raw numbers in Gamepad.buttons\nor use webkitGetGamepads were Chrome 34 and Firefox 28. Those versions\nwere replaced in April/May 2014 making the old API ~12 years old. Every\ndesktop and mobile browser released over the past decade unconditionally\nprovides GamepadButton objects."
    },
    {
      "commit": "9bcf516954dfb1ceb2693ae913dc80e583e7f51c",
      "tree": "d7fb240d8a1941f43b24556ff78fadbaac971a9b",
      "parents": [
        "c9c4730c9d61d2fd64c6092ae268905ffba83c9c"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 13 22:55:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 22:55:15 2026"
      },
      "message": "[docs] Replace incorrect pointerevents URLs introduced in #27192 (#27333)\n\nReplace incorrect pointerevents specification URLs for mouse events and\npointerlockchange mousemove event with W3C UI Events specification URLs.\n\nSplit out from #27262\n\nSee: #27192"
    },
    {
      "commit": "c9c4730c9d61d2fd64c6092ae268905ffba83c9c",
      "tree": "b41982f5ae779319d8fee7a9ce34b465c83659ec",
      "parents": [
        "411966c51617871c1caea25fc0376da950a9181e"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 13 21:24:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 21:24:56 2026"
      },
      "message": "Use normal class declarations in libembind_shared.js. NFC (#27324)"
    },
    {
      "commit": "411966c51617871c1caea25fc0376da950a9181e",
      "tree": "12a73a33c81545704f6943767b74283ae516cd95",
      "parents": [
        "06e29db0f61652210f05b41b7385b264a1f6cbec"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Jul 13 21:19:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 21:19:22 2026"
      },
      "message": "Mark 6.0.3 as released (#27335)\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "06e29db0f61652210f05b41b7385b264a1f6cbec",
      "tree": "78733e55c45dfd984ac9859f42aed4c39652244b",
      "parents": [
        "cd6e8093817d9a8c5fc8a703454d8e96d592403a"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 13 17:16:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 17:16:35 2026"
      },
      "message": "[docs] Remove documentation about \"sdkbuild\" option. NFC (#27331)\n\nI don\u0027t think this feature has been used in a long time. These days I\nthink we always/only build the docs for the current version."
    },
    {
      "commit": "cd6e8093817d9a8c5fc8a703454d8e96d592403a",
      "tree": "6523bd98138f8e5188d9a28693d73d1f4eb8a0ce",
      "parents": [
        "0bcab36209278cbab9b39d326baa093cc6471076"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 13 16:42:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 16:42:36 2026"
      },
      "message": "Update instructions on building the website. NFC (#27330)"
    },
    {
      "commit": "0bcab36209278cbab9b39d326baa093cc6471076",
      "tree": "8d66b630c55ba48b140ce9e8f695a2aca578b334",
      "parents": [
        "b02214d9d2b53c7642d58e22d3f01dd0fcd0cfc5"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 13 16:36:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 16:36:39 2026"
      },
      "message": "Add `tools/maint/sync_deps.py` to sync external dependencies (#27323)\n\nAdd `tools/maint/sync_deps.py` utility script to synchronize\n`llvm-project` and `binaryen` checkout revisions to match the\n`emscripten-releases` `DEPS` file for the current `emsdk` version\n(`test/emsdk_version.txt`).\n\nThis is useful for folks like myself who want to be able to have\ncodesize tests passing without using emsdk\nto install the binaryen, but build llvm and binaryen from source.\n\nBy default, the script looks for `llvm-project` and `binaryen` in the\nparent directory, fetches any missing commits from `origin`, checks out\nthe target revision."
    },
    {
      "commit": "b02214d9d2b53c7642d58e22d3f01dd0fcd0cfc5",
      "tree": "4c2c3c155774deb4b77d4419ee651f2e68c188bb",
      "parents": [
        "410508e3bb30273b5bdce1fe09295ae859959d8b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 13 16:32:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 16:32:17 2026"
      },
      "message": "Update copyright info for Alon\u0027s contributions. NFC (#27313)\n\nSince they are split between Mozilla and Google I guess this makes\nsense?"
    },
    {
      "commit": "410508e3bb30273b5bdce1fe09295ae859959d8b",
      "tree": "8eebefe81ae9e0565c16e5a6489f2d0f96eb7a88",
      "parents": [
        "283e2d130132859fde6a4e4c87fd254b38127651"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Jul 13 15:59:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 15:59:25 2026"
      },
      "message": "Update emsdk version used in testing (#27328)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--bump-emsdk.\n\nemsdk version updated: 48c730101db0c5c74a0a1042ed21631370db9c86 \u003d\u003e\n80bb26b7e49f5d1b97ea9536a1cdf6b90843c3e4\n\nThis includes the following revisions:\n\n```\n- 80bb26b7 Roll v8 from 81b069e2bf3a to c02343a118fb (1 revision)\n- 07fecfcd Roll emscripten from b1562ff77537 to 283e2d130132 (1 revision)\n- e2d3b3dd Roll llvm-project from 62377815c4cc to 461f0b699c8d (12 revisions)\n- 2dbae9c0 Roll llvm-project from 97e24c8d1cfd to 62377815c4cc (18 revisions)\n- ad283af0 Roll emscripten from bd5b72d3f72d to b1562ff77537 (1 revision)\n- a90c37a8 Roll llvm-project from a06b1c9f4bd4 to 97e24c8d1cfd (8 revisions)\n- bc414d4e Roll llvm-project from 2aab89554cbf to a06b1c9f4bd4 (7 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/48c730101db0c5c74a0a1042ed21631370db9c86..80bb26b7e49f5d1b97ea9536a1cdf6b90843c3e4\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "283e2d130132859fde6a4e4c87fd254b38127651",
      "tree": "27cae9cba3809030489c91304fc1ee86f26ef979",
      "parents": [
        "b1562ff77537cb16a9326ef6b50aef6162a721bc"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Mon Jul 13 05:04:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 05:04:35 2026"
      },
      "message": "Update emsdk version used in testing (#27325)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--bump-emsdk.\n\nemsdk version updated: 99219dd9dec7558e4c8640b568ee54aebd409da1 \u003d\u003e\n48c730101db0c5c74a0a1042ed21631370db9c86\n\nThis includes the following revisions:\n\n```\n- 48c73010 Roll llvm-project from 3a6048dbea15 to 2aab89554cbf (8 revisions)\n- 45714672 Roll llvm-project from d6d0ccce19d1 to 3a6048dbea15 (3 revisions)\n- b7ada761 Roll v8 from 0646faaada71 to 81b069e2bf3a (1 revision)\n- 58e9c910 Roll llvm-project from 670e0a0c147a to d6d0ccce19d1 (10 revisions)\n- 09875eb8 Roll llvm-project from e490b437555b to 670e0a0c147a (5 revisions)\n- f0684759 Roll emscripten from 3af4cdc1234c to bd5b72d3f72d (1 revision)\n- a091b69d Roll llvm-project from e2223e665ecc to e490b437555b (12 revisions)\n- cf339f1c Roll llvm-project from a83ec0fb845e to e2223e665ecc (6 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/99219dd9dec7558e4c8640b568ee54aebd409da1..48c730101db0c5c74a0a1042ed21631370db9c86\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "b1562ff77537cb16a9326ef6b50aef6162a721bc",
      "tree": "7eeb639cc73100528747c9b358c07eb64d91780f",
      "parents": [
        "bd5b72d3f72d4056a78820ec99fd083a9de990fd"
      ],
      "author": {
        "name": "Oliver Geer",
        "email": "olivergeer08@gmail.com",
        "time": "Sun Jul 12 17:42:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 17:42:09 2026"
      },
      "message": "[docs] Add onMakeDirectory and onMakeSymlink to the list of tracking delegates (#27326)\n\nThis is to match the example code below that list, which contains\nonMakeDirectory and onMakeSymlink, while they are absent from the list\nabove.\n\nReading only the list and not the example code below it, I was confused\nabout how to track directory creation, and this pull request should\nresolve that confusion for others."
    },
    {
      "commit": "bd5b72d3f72d4056a78820ec99fd083a9de990fd",
      "tree": "dc426ba4ca783ccc66acfdde25a86d80444186e0",
      "parents": [
        "3af4cdc1234c6ae7d734a864e47679f6899fde4f"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Jul 11 16:41:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 16:41:33 2026"
      },
      "message": "Update emsdk version used in testing (#27321)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--bump-emsdk.\n\nemsdk version updated: da372d320f4ff6b2825db1221309bfe85c38344e \u003d\u003e\n99219dd9dec7558e4c8640b568ee54aebd409da1\n\nThis includes the following revisions:\n\n```\n- 99219dd9 Roll emscripten from 93ff3a9b9ae0 to 3af4cdc1234c (2 revisions)\n- f86f34d5 Roll llvm-project from 5a73020f0261 to a83ec0fb845e (14 revisions)\n- d738b87c Roll emscripten from 61c8692d6403 to 93ff3a9b9ae0 (1 revision)\n- e8aa2b6b Don\u0027t run codesize tests on the testsuites bot\n- 669e7e3c Roll v8 from f77acb421fea to 0646faaada71 (29 revisions)\n- acf5fbcf Roll emscripten from eadd74a97069 to 61c8692d6403 (7 revisions)\n- b5c7749b Roll llvm-project from 7c35673039cf to 5a73020f0261 (61 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/da372d320f4ff6b2825db1221309bfe85c38344e..99219dd9dec7558e4c8640b568ee54aebd409da1\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "3af4cdc1234c6ae7d734a864e47679f6899fde4f",
      "tree": "e80425bc167f258f9c186c0c22e57acdc0707229",
      "parents": [
        "16fa2c6eacb6fd3d611eb4a949bc8c732e879a55"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Sat Jul 11 03:46:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 03:46:38 2026"
      },
      "message": "Update emsdk version used in testing (#27320)\n\nThis is an automatic change generated by tools/maint/rebaseline_tests.py\n--bump-emsdk.\n\nemsdk version updated: 9a93926b6aca0b3ce87539c7ff208d3242aa0731 \u003d\u003e\nda372d320f4ff6b2825db1221309bfe85c38344e\n\nThis includes the following revisions:\n\n```\n- da372d32 Roll binaryen from 21822346a32c to 5d050e793d27 (3 revisions)\n- 19b37813 Roll emscripten from 35e6e0e02b11 to eadd74a97069 (3 revisions)\n- 5b6cadd2 Roll binaryen from 69d28ed6b8b1 to 21822346a32c (1 revision)\n- 759f0d3a Roll llvm-project from 9a1fe8e03c04 to 7c35673039cf (49 revisions)\n- 3f30c310 Roll emscripten from f3c99c9c2b0e to 35e6e0e02b11 (1 revision)\n- fe5ca712 Roll llvm-project from 642b85388cca to 9a1fe8e03c04 (34 revisions)\n- 67938583 Roll llvm-project from d0339aef5f46 to 642b85388cca (36 revisions)\n- 6c5be1d0 Roll llvm-project from 880f3d0fbe32 to d0339aef5f46 (19 revisions)\n- 686fe269 Roll emscripten from d7ab361720aa to f3c99c9c2b0e (3 revisions)\n- a98a0d71 Roll llvm-project from bba373c7a20c to 880f3d0fbe32 (40 revisions)\n- 3ec21a0d Roll emscripten from 4237a12a7f61 to d7ab361720aa (5 revisions)\n- e6e60eaa Roll binaryen from 21a717e8e8b3 to 69d28ed6b8b1 (1 revision)\n- d5ca2c05 Roll v8 from 474e5320ea63 to f77acb421fea (41 revisions)\n- b36d433a Roll emscripten from 4627e6510ed0 to 4237a12a7f61 (2 revisions)\n```\n\nFull log:\nhttps://chromium.googlesource.com/emscripten-releases/+log/9a93926b6aca0b3ce87539c7ff208d3242aa0731..da372d320f4ff6b2825db1221309bfe85c38344e\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "16fa2c6eacb6fd3d611eb4a949bc8c732e879a55",
      "tree": "2b2f674051782507cf3364863947e5d9ae14af96",
      "parents": [
        "93ff3a9b9ae0b52836247ed49d572134340037f4"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Sat Jul 11 02:36:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 02:36:02 2026"
      },
      "message": "[NODEFS] hardlinks, utimensat nofollow, and fadvise/fallocate seek errors (#27305)\n\nAdds a handful of filesystem fixes to the legacy (non-WASMFS) JS\nfilesystem, mostly around the NODEFS/NODERAWFS host backends where these\noperations previously either errored unconditionally or asserted.\n\n* `linkat(2)`: the weak stub always returned `EMLINK`, so hardlinks were\nimpossible even on host-backed filesystems. A new `FS.link` core op\nlooks up the target and delegates to a backend `link` node op when one\nexists, still returning `EMLINK` for backends without one. Only\nNODERAWFS provides it (via `fs.linkSync`). NODEFS deliberately does\n**not**: unlike NODERAWFS it confines the guest to a mount root, and a\nreal host hardlink can\u0027t be guaranteed to stay within that root (host\nsymlinks in intermediate path components are resolved by the OS and\nwould escape it, with no portable atomic way to check), so NODEFS\nreports `EMLINK` like MEMFS. `AT_SYMLINK_FOLLOW` is honored.\n* `utimensat(2)`: previously asserted `!flags`, so `AT_SYMLINK_NOFOLLOW`\naborted under assertions. `FS.utime` gains a `dontFollow` argument\nthreaded through `doSetAttr`. Both NODERAWFS and NODEFS use\n`fs.lutimesSync` for the nofollow case so a symlink\u0027s *own* timestamps\nare set without the host resolving the link — which also avoids escaping\nthe NODEFS mount root that `fs.utimesSync` (follows symlinks) would\nallow.\n* `posix_fadvise`/`posix_fallocate`: return `ESPIPE` on a non-seekable\nfd (pipe/socket) to match Linux, rather than silently succeeding or\ntruncating. `__syscall_fadvise64` moves from a weak C stub into the JS\nsyscall layer so it can inspect the stream.\n* NODERAWFS `fstat`: virtual streams (pipes, sockets) have no backing\nhost fd, so defer to their own `getattr` instead of calling\n`fs.fstatSync` on an undefined nfd.\n\nTests in `test/fs` cover these across MEMFS/NODEFS/NODERAWFS\n(`test_fs_link`, `test_fs_utimensat_nofollow`,\n`test_fs_fadvise_fallocate`). Codesize expectations are updated for the\nnew `FS.link`/`FS_link` symbol.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "93ff3a9b9ae0b52836247ed49d572134340037f4",
      "tree": "9874cc1c38ae539c6e91f8b9ef3e950f9cc52065",
      "parents": [
        "61c8692d64038f4e6ba9288a92345599ae27d326"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Jul 11 00:46:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 00:46:43 2026"
      },
      "message": "[rebaseline_tests] Improve commit message for --bump-emsdk. NFC (#27318)\n\nImprove the commit message generated by `rebaseline_tests.py` when\nrunning with `--bump-emsdk`:\n\n- Pass `old_sha` and `new_sha` (`current_sha` and `installed_sha`)\n  directly to `format_emsdk_version_update()`, rather than reading from\n  disk or querying `git show HEAD:test/emsdk_version.txt`.\n- Format the list of included emsdk revisions as a markdown list inside\n  a block quote so that automated roll PRs are easier to read on GitHub.\n- Clearly separate the full revision log URL at the bottom of the\n  message."
    },
    {
      "commit": "61c8692d64038f4e6ba9288a92345599ae27d326",
      "tree": "1c64738f2dec8db0106301dcd3add605c7cac4d6",
      "parents": [
        "69c975feba149f699e3910c33e8f9b47c2f0283d"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 23:50:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 23:50:23 2026"
      },
      "message": "Remove \"check codesize on target branch\" CI checks (#27317)\n\nThis simplifies the Codesize Checks CI job. We used to run the checks\nboth on main *and* on the PR branch.\n\nNow that we have a pinned version of emsdk the risk of main not being\nup-to-date is very low so there is no need to check this for each PR.\nFurthermore its currently broken because we really need to install the\ncorrect version of emsdk *after* sync\u0027ing main (i.e. to make this\ncorrect we would need to run the emsdk install part twice too).\n\nI think its faster and better to just remove the \"\"check codesize on\ntarget branch\" part."
    },
    {
      "commit": "69c975feba149f699e3910c33e8f9b47c2f0283d",
      "tree": "29c83c7da182e704e418a6266050638f5f3fcb54",
      "parents": [
        "8857e60fc3e8315915fc35b6ad53cfd8597061b6"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 23:09:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 23:09:17 2026"
      },
      "message": "[fetch] Fix POST request body handling in pthread builds (#27315)\n\nIn #27129, `HEAPU8.slice` was replaced with `HEAPU8.subarray` when\npassing request data to `XMLHttpRequest.send()` in `Fetch.js`. However,\nin `-pthread` builds (`SHARED_MEMORY`), `HEAPU8.buffer` is a\n`SharedArrayBuffer`, and browsers reject `SharedArrayBuffer`-backed\nviews passed to `XMLHttpRequest.send()`.\n\nRename `getUnsharedTextDecoderView` to `getHeapViewOrCopy` and use it in\n`Fetch.js` when passing `requestData` to `xhr.send(data)` and when\nstoring to IndexedDB (`EM_IDB_STORE`).\n\nParameterize `test_fetch_post` in `test_browser.py` so it also run in\n`-sPROXY_TO_PTHREAD` mode.\n\nFixes: #27301"
    },
    {
      "commit": "8857e60fc3e8315915fc35b6ad53cfd8597061b6",
      "tree": "302b33a523ff5310eb01db31ff551dad11721f0a",
      "parents": [
        "e6ee8cc331b359ccf710abe8b6a8eba5dd9f6346"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jul 10 22:31:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 22:31:45 2026"
      },
      "message": "Update and re-enable binaryen tests (#27310)\n\nThis reverts commit 605af0eb70aeeef5dd708d67962df6495ae4a804, including\nits inadvertent change to the googletest submodule. Update the test\nexpectations for other.test_asynicfy_response_file for the new error\nmessage from Binaryen. Update other.test_empath_split to have a more\nrobust regex for matching function names and to unescape the expected\nfunction names."
    },
    {
      "commit": "e6ee8cc331b359ccf710abe8b6a8eba5dd9f6346",
      "tree": "636498fe2fe099d5568645ddaed1a1990ee039b4",
      "parents": [
        "a41c221fbe7b99bf2f0d7e84990f90b5bf2fd9f3"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 22:14:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 22:14:15 2026"
      },
      "message": "Fix rebaseline_tests.py --bump-emsdk. NFC (#27314)\n\nThe \"tree is not clean\" check needs to come before we do the version\nbump."
    },
    {
      "commit": "a41c221fbe7b99bf2f0d7e84990f90b5bf2fd9f3",
      "tree": "b6247de1c3662c36efca0bcc1aa1a8c5ff6a1ce5",
      "parents": [
        "17b85843a81b355ebe623e044da9092adeafc301"
      ],
      "author": {
        "name": "heyparth",
        "email": "32264789+heyparth1@users.noreply.github.com",
        "time": "Fri Jul 10 21:30:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 21:30:49 2026"
      },
      "message": "Fix crash in UTF8ToString with resizable ArrayBuffers (#27242)\n\nThis fixes a crash in `UTF8ToString` (and related functions) that occurs\nwhen the heap is backed by a resizable `ArrayBuffer`. The\n`TextDecoder.decode()` API throws a `TypeError` when passed a view of a\nresizable `ArrayBuffer`, which previously caused a crash in builds with\n`ALLOW_MEMORY_GROWTH` and `GROWABLE_ARRAYBUFFERS` enabled.\n\nThe `getUnsharedTextDecoderView` function in `src/parseTools.mjs` is\nupdated to detect when the heap might be resizable and generate code\nthat copies the data using `.slice()` if the buffer is resizable,\nensuring `TextDecoder` only receives non-resizable views. A test is\nadded to verify this behavior by emulating the browser\u0027s strict\n`TextDecoder` implementation.\n\nCloses #27241"
    },
    {
      "commit": "17b85843a81b355ebe623e044da9092adeafc301",
      "tree": "156550108434a221ab262b432d11c2313c88f657",
      "parents": [
        "afe0854a00927cccc9e0e52b2ea3a7f5d05f5394"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 21:28:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 21:28:53 2026"
      },
      "message": "[pthread] Honor guard size in pthread_create (#27268)\n\nHonor requested/default guard size in pthread_create by reserving\nguard_size bytes between thread control data/TSD/TLS and the usable\nstack.\n\nAlthough we cannot set memory protection on this region like a native\nplatform this can still be useful for catching and reporting overflows\nthat are smaller than the guard region itself. Without this change\n`-sSTACK_OVERFLOW_CHECK\u003d1` is mostly useless for pthreads because any\nkind of overflow is likely to corrupt the stack before being reported.\n\nAdd test cases covering guard size queries via pthread_getattr_np and\nstack overflow detection within guard region.\n\nFixes: #27266"
    },
    {
      "commit": "afe0854a00927cccc9e0e52b2ea3a7f5d05f5394",
      "tree": "80ef33055f31f97b0b0f2803e4fb2317efb8335f",
      "parents": [
        "eadd74a970698350e5b523c9d4a840a3d3e58f1b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 21:21:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 21:21:03 2026"
      },
      "message": "Use guarded include for runtime_stack_check.js. NFC (#27307)\n\nThis matches the existing `runtime_safe_heap.js`."
    },
    {
      "commit": "eadd74a970698350e5b523c9d4a840a3d3e58f1b",
      "tree": "da6283e540b83a212bfba37150301ac34c43f92d",
      "parents": [
        "504a85ce3512baec88df5989878b686b766ca8cc"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 18:36:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:36:59 2026"
      },
      "message": "Update docs regarding pinned emsdk version (#27309)\n\nFollowup to #27300"
    },
    {
      "commit": "504a85ce3512baec88df5989878b686b766ca8cc",
      "tree": "da899b00a2576001467d5bf034b4cd34998ed239",
      "parents": [
        "45f0ee114e5ef75673b46811c415d440e52f71aa"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 18:12:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:12:06 2026"
      },
      "message": "[CI] Pin emsdk version in CI to test/emsdk_version.txt (#27300)\n\nInstead of always installing the \u0027tot\u0027 version of emsdk in CI, pin the\nversion to the SHA recorded in `test/emsdk_version.txt`.\n\nWhen rebaselining test expectations locally using `rebaseline_tests.py`,\nautomatically check the installed emsdk version against the pinned\nversion.\n\nAdd a new `--bump-emsdk` option to `rebaseline_tests.py` to update\n`test/emsdk_version.txt` when rolling emsdk.\n\nUpdate `.github/workflows/rebaseline-tests.yml` to run against the\npinned emsdk version, and add `.github/workflows/roll-emsdk.yml` to run\n(daily, and manually if needed) against tip-of-tree emsdk with\n`--bump-emsdk`.\n\nFixes: #27295"
    },
    {
      "commit": "45f0ee114e5ef75673b46811c415d440e52f71aa",
      "tree": "c27f7c31919752f1c39d92a0e4ffba7687a2ca3e",
      "parents": [
        "35e6e0e02b1162976fc906af10e15eb70ee95e81"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 18:09:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:09:49 2026"
      },
      "message": "Disable test_pthread_print_override_modularize under deno. NFC (#27308)\n\nAt least until we can fix the race condition."
    },
    {
      "commit": "35e6e0e02b1162976fc906af10e15eb70ee95e81",
      "tree": "5677dfce1b525f55e0d459989666b1711cddf776",
      "parents": [
        "f3c99c9c2b0e6bdd13879dd77bc56a83613c6f99"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 10 16:59:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 16:59:42 2026"
      },
      "message": "Fix stack cookie failure reporting under wasm64 (#27302)\n\nIn particular on wasm64 were printing `0x00000000AAAAAAAA` instead of\n`0xAAAAAAAA`.\n\nIIUC we didn\u0027t have any testing for stack cookie corruption errors until\nnow."
    },
    {
      "commit": "f3c99c9c2b0e6bdd13879dd77bc56a83613c6f99",
      "tree": "308d239efd681387ef7e1f1407f30cb920c25a27",
      "parents": [
        "c0f65a593cc4ee89636d2593bde883daf9ef2588"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Fri Jul 10 00:33:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 00:33:51 2026"
      },
      "message": "Support UDP multicast setsockopt/getsockopt in NODERAWSOCKETS (#27297)\n\nWith `-sNODERAWSOCKETS`, the UDP multicast socket options failed with\n`ENOPROTOOPT` (errno 50): `setsockopt`/`getsockopt` in\n`src/lib/libsockfs_node.js` only handled `IP_TTL` under `IPPROTO_IP` and\n`IPV6_V6ONLY` under `IPPROTO_IPV6`, so `IP_MULTICAST_TTL`,\n`IP_MULTICAST_LOOP`, `IPV6_MULTICAST_HOPS` and `IPV6_MULTICAST_LOOP` had\nno getter and were silently dropped on set. This broke UDP multicast\nconfiguration for downstream socket test suites.\n\nThis adds symmetric get/set for those options:\n\n* `IPPROTO_IP`: `IP_MULTICAST_TTL` (default 1), `IP_MULTICAST_LOOP`\n(default 1)\n* `IPPROTO_IPV6`: `IPV6_MULTICAST_HOPS` (default 1),\n`IPV6_MULTICAST_LOOP` (default 1)\n\nValues are stored on `sock.opts` and applied to the node `dgram` handle\nthrough `applyUdpOptions`, which calls `setMulticastTTL(n)` /\n`setMulticastLoopback(bool)` on both the public `dgram` socket and the\nfallback `udp_wrap` handle (libuv applies these regardless of family, so\nthe IPv6 hops/loop options funnel through the same methods). All handle\ncalls are guarded in try/catch so they are safe to (re)apply before\nbind. `getsockopt` returns the stored value, or the POSIX default when\nunset, so reads without a prior set succeed.\n\nAdds a self-contained `test/sockets/test_udp_sockopts.c` (run as\n`test_noderawsockets_udp_sockopts`) covering defaults-without-set and\nset/get round-trips on both AF_INET and AF_INET6 sockets. Verified it\nfails against the old code (the first `getsockopt` asserts) and passes\nwith the fix.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "c0f65a593cc4ee89636d2593bde883daf9ef2588",
      "tree": "35f8fcaeeb46f7e9151fadfc44979ba433babfe8",
      "parents": [
        "ee22665d3928d2e4819b5de004b94e428057b3c2"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Thu Jul 09 23:32:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 23:32:13 2026"
      },
      "message": "Automatic rebaseline of codesize expectations. NFC (#27303)\n\nThis is an automatic change generated by\ntools/maint/rebaseline_tests.py.\n\nThe following (5) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors2.json: 151287 \u003d\u003e 151287 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_except_wasm.json: 167008 \u003d\u003e 167008 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_mangle.json: 262252 \u003d\u003e 262251 [-1 bytes / -0.00%]\ncodesize/test_codesize_cxx_noexcept.json: 153884 \u003d\u003e 153884 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_wasmfs.json: 179507 \u003d\u003e 179507 [+0 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": "ee22665d3928d2e4819b5de004b94e428057b3c2",
      "tree": "e2a905513467a5346e8fcfdc6fa07eb5567f2407",
      "parents": [
        "d7ab361720aac6df9a4f0abc49939355d0cefcbd"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 09 22:45:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 22:45:11 2026"
      },
      "message": "Standardize of README.md for emscripten-specific readme files. NFC (#27296)"
    },
    {
      "commit": "d7ab361720aac6df9a4f0abc49939355d0cefcbd",
      "tree": "14ae7caeadd12434597b0d674ed4b9667f383a58",
      "parents": [
        "b5499ef34391d72ca4a1800b9b3780e1701bf595"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Thu Jul 09 22:29:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 22:29:49 2026"
      },
      "message": "Report POLLHUP/POLLERR readiness for pipe and socket hangups (#27298)\n\nMakes poll/epoll surface the hangup and error conditions that Linux does\nwhen the far end of a pipe or a connecting socket goes away. Without\nthese edges a reader (or writer) blocked in poll/epoll (e.g. mio\u0027s\n`is_write_closed()`/`is_error()`) never wakes and hangs.\n\nPipe (`libpipefs.js`): on Linux a `pipe(2)` signals both directions of\nhangup, which PIPEFS never modelled — `poll()` returned readiness only\nwhile unread bytes remained and `close()` just decremented a shared\nrefcount without waking anyone.\n\n* Once every write end is closed, poll on the read end reports\n`POLLHUP|POLLIN` (read returns EOF). We track open write ends via a\n`writerCount` (incremented in `dup`); when the last one closes we set\n`writeClosed`, `notifyListeners(POLLHUP | POLLRDNORM | POLLIN)` on the\nread end\u0027s wait-queue, and OR `POLLHUP|POLLIN` into `poll()`.\n* Symmetrically, once every read end is closed, poll on the write end\nreports `POLLERR` (a further write would get `EPIPE`), while staying\nwritable per Linux. Mirrored via `readerCount`/`readClosed` and a\n`pipe.writeNode` wait-queue.\n\nThe old `refcnt` field is dropped — it always equalled `readerCount +\nwriterCount`, so buckets are freed once both reach 0.\n\nSocket (`libsockfs_node.js`): a refused connect resolves with\n`sock.error \u003d ECONNREFUSED`, but `poll()` only reported `POLLOUT`, so\n`is_write_closed()` and `is_error()` were both false under\nNODERAWSOCKETS. We now report `POLLOUT | POLLERR | POLLHUP` on a pending\nerror, matching Linux\u0027s connect-failure readiness. `POLLOUT|POLLERR`\nsatisfies epoll\u0027s `is_write_closed()` mapping. The `SO_ERROR`\nread-and-clear semantics are untouched.\n\nBefore (pipe read end after writer close): `poll()` returned `0` once\nthe buffer drained.\nAfter: `poll()` returns `POLLHUP | POLLIN`.\n\nBefore (refused connect): `poll()` revents `0x11` (`POLLIN|POLLHUP` from\nthe CLOSED transition, no `POLLERR`).\nAfter: `0x1d` (`POLLIN|POLLOUT|POLLERR|POLLHUP`).\n\nTest coverage:\n\n* `test/core/test_pipe_pollhup.c` — writes, closes the writer, and\nasserts `POLLHUP|POLLIN` both while data is buffered and after draining\nto EOF; also closes the reader and asserts the write end reports\n`POLLOUT|POLLERR`.\n* Extends `test/sockets/test_tcp_refused.c` to `poll()` for\n`POLLERR|POLLHUP` *before* reading (and thereby clearing) `SO_ERROR`.\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "b5499ef34391d72ca4a1800b9b3780e1701bf595",
      "tree": "613ad98eedd51c173f9929fff451eb402faf4ccd",
      "parents": [
        "e13dc4bedd5b9ccaee51101b9ce6d8836cbc74b7"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 09 22:21:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 22:21:21 2026"
      },
      "message": "[test] Move embind benchmark to test/benchmark (#27287)\n\nDelete build_benchmark from test/embind, move benchmark files to\ntest/benchmark, and add test_embind to test/test_benchmark.py.\n\nThis benchmark was added way back in 75881fce8. I\u0027m not sure if its\nuseful but that fact that is still compiles after 13 years is a good\nsign."
    },
    {
      "commit": "e13dc4bedd5b9ccaee51101b9ce6d8836cbc74b7",
      "tree": "c1d8a235d91350b62e935afdb8faf3ac41a53ebd",
      "parents": [
        "f6cbe9c7b1591e5f452d02a9e951325ee8ce8313"
      ],
      "author": {
        "name": "Jaap Aarts",
        "email": "JAicewizard@users.noreply.github.com",
        "time": "Thu Jul 09 21:16:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 21:16:35 2026"
      },
      "message": "Add co-author of libomp support to AUTHORS. NFC (#27299)\n\nas discussed in #27073"
    },
    {
      "commit": "f6cbe9c7b1591e5f452d02a9e951325ee8ce8313",
      "tree": "5c203bbaae7d4736f49939644eeeed6851030717",
      "parents": [
        "f616d92d38ef1f9138dd118f336049d52fe707de"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 09 20:09:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 20:09:04 2026"
      },
      "message": "Rename internal libllvmopenmp to just libopenmp. NFC (#27290)"
    },
    {
      "commit": "f616d92d38ef1f9138dd118f336049d52fe707de",
      "tree": "948081ab209c7c88fa365e65b97e3cffd115c02d",
      "parents": [
        "4237a12a7f6134165b4564b16f749ea4a78f09fb"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Thu Jul 09 19:56:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 19:56:43 2026"
      },
      "message": "Emit source phase import for MODULARIZE\u003dinstance (#27237)\n\nThis makes `-sSOURCE_PHASE_IMPORTS` work together with\n`-sMODULARIZE\u003dinstance` (and `EXPORT_ES6`).\n\nIn `MODULARIZE\u003dinstance` mode the output is not wrapped by\n`modularize()`, so the top-level `import source wasmModule` statement\nthat `src/modularize.js` normally emits was never produced. This left\n`preamble.js` referencing an undefined `wasmModule`, breaking source\nphase imports in instance mode.\n\nSince instance mode output is itself a module, the source phase import\nis now emitted directly from `postamble.js` at module scope when both\nsettings are enabled:\n\n```js\n#if SOURCE_PHASE_IMPORTS \u0026\u0026 MODULARIZE \u003d\u003d \u0027instance\u0027\nimport source wasmModule from \u0027./{{{ WASM_BINARY_FILE }}}\u0027;\n#endif\n```\n\nAdds a parameterized `test_esm_source_phase_imports_instance` (default\nand `-O3`) that builds with `-sSOURCE_PHASE_IMPORTS\n-sMODULARIZE\u003dinstance` and verifies the import is emitted and the module\nruns."
    },
    {
      "commit": "4237a12a7f6134165b4564b16f749ea4a78f09fb",
      "tree": "0ca59d6dcc409b2c8a4214ae5139bc831c02c872",
      "parents": [
        "da452f749e7c83a41555f02b107eaec859b94902"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Thu Jul 09 18:17:43 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 18:17:43 2026"
      },
      "message": "Fix test_openmp_max_threads in ASan mode. NFC (#27293)\n\nASan test mode enables memory growth by default. Using OpenMP implicitly\nenables pthreads, which triggers a warning when combined with memory\ngrowth that becomes a fatal error under -Werror.\n\nSuppress the warning to allow the test to pass in ASan mode."
    },
    {
      "commit": "da452f749e7c83a41555f02b107eaec859b94902",
      "tree": "cf82f4815d552bc5fe73ee5af38ea65f8efa67eb",
      "parents": [
        "4627e6510ed055bfda96ff89bd6562917e6f1b45"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 09 17:19:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 17:19:39 2026"
      },
      "message": "[test] Add `do_benchmarkf` and use it for single-file benchmarks (#27288)\n\nRefactor test_benchmark.py to introduce `do_benchmarkf`, which accepts a\nsource file path on disk. Update `do_benchmark` to write string-based\nbenchmarks to a file and delegate to `do_benchmarkf`. Update all\nbenchmarks with dedicated source files to call `do_benchmarkf` directly\ninstead of reading source contents with `read_file`."
    },
    {
      "commit": "4627e6510ed055bfda96ff89bd6562917e6f1b45",
      "tree": "eaa6900b22a8cef8c0bbd6c264cea09a6859d60d",
      "parents": [
        "ca783f432c0929606c9d632c864ea55a84b6eea6"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Thu Jul 09 15:58:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 15:58:13 2026"
      },
      "message": "Fix compiler-rt/openpm with latest LLVM + `-Wunused-template` (#27289)\n\nBasically cherry-pick https://github.com/llvm/llvm-project/pull/206308:\n\n[compiler-rt][sanitizer_common] Remove internal linkage from\nRegisterFlag (NFC) (#206308)\n\nRegisterFlag is a static function template in a header, so every TU that\n    includes it without calling it trips `-Wunused-template`. Dropping\n    static gives it normal external linkage and clears the warning.\n\n    NFC. Part of #202945.\n\nAnd https://github.com/llvm/llvm-project/pull/#207983\n\n[OpenMP] Remove internal linkage from __kmp_wait template (NFC)\n(#207983)\n\n__kmp_wait in kmp_dispatch.h is a static function template in a header,\n    so any TU that includes it without instantiating it trips\n-Wunused-template (kmp_runtime.cpp, kmp_affinity.cpp, kmp_global.cpp,\n    kmp_settings.cpp). It is used by kmp_dispatch.cpp and\n    kmp_dispatch_hier.h. Drop static, which the comment above it already\n    suggests.\n\n    Part of #202945"
    },
    {
      "commit": "ca783f432c0929606c9d632c864ea55a84b6eea6",
      "tree": "e3670dfcd720d6414a73059e9fa49ef4cf3de549",
      "parents": [
        "2d95c52277d8af68a53ab05284d91f0063661f88"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Thu Jul 09 02:06:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 02:06:31 2026"
      },
      "message": "Gather writev iovecs into a single FS.write (#27286)\n\n`doWritev` currently issues one `FS.write` per iovec. For a stream\nsocket that fragments a single `writev` into one segment per iovec,\nwhich breaks stream byte semantics — e.g. mio\u0027s TCP writes came through\nsplit rather than as one contiguous send.\n\nPOSIX `writev` is a single gather-write, and `__syscall_sendmsg` already\ngathers all iovecs into one contiguous buffer before writing. This makes\n`doWritev` do the same:"
    },
    {
      "commit": "2d95c52277d8af68a53ab05284d91f0063661f88",
      "tree": "8ead5e7f732260d42da5547597910fc56f7529ca",
      "parents": [
        "f3beb1ced773145a701802b5ad63eaaf4acd534f"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Wed Jul 08 23:56:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 23:56:22 2026"
      },
      "message": "Fix doReadv/doWritev discarding partial count on EAGAIN (#27284)\n\n$doReadv reads iovec-by-iovec via `FS.read`. On a non-blocking socket,\n`FS.read` (nodeSockOps.recvmsg) throws EAGAIN when the queue is empty,\nunlike a regular file which returns 0. If an earlier iovec already\nconsumed data and filled exactly to its length (so the `if (curr \u003c len)\nbreak` doesn\u0027t fire), the loop advances to the next iovec, whose\n`FS.read` throws EAGAIN. The exception escaped `doReadv`, discarding the\naccumulated `ret`, so the whole `readv(2)` failed with EAGAIN even\nthough bytes were read.\n\nPOSIX readv/writev are single gather operations: they return the\navailable byte count and never fail after partial success.\n\nObserved with an mio `TcpStream` (NODERAWSOCKETS + PROXY_TO_PTHREAD +\nJSPI) where an echo returned as two TCP chunks: `read_vectored` with two\niovecs hit recvmsg on iovec #1 (12 bytes, drains recvq) then recvmsg\nEMPTY on iovec #2 (next chunk not yet arrived), throwing WouldBlock for\nthe whole call. A single-buffer read never hits it — matching \"read\nworks, readv fails\". It is timing-sensitive: if both chunks are queued\nbefore the read, iovec #2 succeeds.\n\n- `doReadv` and `doWritev` now catch `EAGAIN`/`EWOULDBLOCK`\n`FS.ErrnoError` from a subsequent iovec and return the accumulated count\nwhen `ret \u003e 0`, only rethrowing when `ret \u003d\u003d 0` (nothing transferred\nyet, so the would-block belongs to the first iovec).\n\nAdds `test/fs/test_readv_eagain.c` (wired up as `test_fs_readv_eagain`),\nwhich registers custom devices that satisfy the first iovec fully then\nthrow EAGAIN, asserting both `readv` and `writev` return the partial\ncount rather than failing. The test aborts without the fix and passes\nwith it."
    },
    {
      "commit": "f3beb1ced773145a701802b5ad63eaaf4acd534f",
      "tree": "c97a42ce8c542c03bcd78bd351cfc002bc3d08b2",
      "parents": [
        "961798894b058e48f440c888033e5790eb21290e"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Wed Jul 08 22:58:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 22:58:23 2026"
      },
      "message": "Honor MSG_PEEK in the socket recv path (#27278)\n\n* Thread the syscall `flags` through to `sock_ops.recvmsg(sock, len,\nflags)`.\n* When `MSG_PEEK` is set, return up to `len` bytes from the head of the\nqueue without mutating any state — no shift, no `recv_bytes` accounting,\nand no resuming the paused node stream — so a later recv returns the\nsame bytes and readiness is unchanged.\n* Applied to both the node:net (NODERAWSOCKETS) and websocket backends,\nfor stream and datagram sockets.\n* Adds `MSG_PEEK` to struct_info."
    },
    {
      "commit": "961798894b058e48f440c888033e5790eb21290e",
      "tree": "6fd34854daba0246be5f83b0b971976503640ec3",
      "parents": [
        "50a57e69c615cac6be78fe0bddbfa3d9dc682e6e"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Wed Jul 08 22:48:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 22:48:21 2026"
      },
      "message": "Wait for compiled socket server to start listening in test harness. NFC (#27283)\n\nFixes a flaky failure in the socket tests. `CompiledServerHarness`\nspawned the node `ws` server and returned immediately, so a client that\nconnected before the server\u0027s `listen()` completed raced it and saw\n`ECONNREFUSED`. This showed up intermittently as e.g. `connect failed:\nConnection refused` in `test_nodejs_sockets_echo`.\n\nThe harness now polls the listen port until it accepts a connection\nbefore returning, mirroring the readiness check\n`WebsockifyServerHarness` already performs."
    },
    {
      "commit": "50a57e69c615cac6be78fe0bddbfa3d9dc682e6e",
      "tree": "1a0b2d71124c448c7665d3a9812bc9a9c9e11dcf",
      "parents": [
        "87e5243fcb398838ec2c17edc9fc9e89a88fcfd1"
      ],
      "author": {
        "name": "Guy Bedford",
        "email": "gbedford@cloudflare.com",
        "time": "Wed Jul 08 22:02:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 22:02:21 2026"
      },
      "message": "Report POLLHUP for a locally fully-shutdown TCP socket in NODERAWSOCKETS (#27279)\n\nAfter `shutdown(fd, SHUT_RDWR)` on a connected TCP socket,\n`poll`/`epoll` should report `POLLHUP` — Linux does — but the\n`NODERAWSOCKETS` backend did not. `poll()` only set `POLLHUP` once the\nunderlying node connection reached `SOCK_STATE_CLOSED`, whereas after a\nlocal full shutdown the connection is still `CONNECTED` (FIN sent,\nsocket not destroyed). So a locally fully-shut socket returned\n`POLLIN|POLLRDHUP|POLLOUT` with no `POLLHUP`.\n\n`shutdown(SHUT_RDWR)` already sets both `sock.readClosed` and\n`sock.writeShutdown`, but `poll()` ignored `writeShutdown` entirely.\nThis treats a socket whose read and write halves are both locally shut\nas hung up:\n\n```js\nif (sock.state \u003d\u003d\u003d SOCK_STATE_CLOSED || (sock.readClosed \u0026\u0026 sock.writeShutdown)) {\n  mask |\u003d POLLHUP;\n}\n```\n\nmatching Linux epoll behavior even though the peer hasn\u0027t closed.\n\nFound while running the `mio` test suite (`wasm32-unknown-emscripten`,\n`NODERAWSOCKETS`+`PROXY_TO_PTHREAD`+`JSPI`):\n`tcp_stream::tcp_shutdown_client_both_close_event` expects a\n`WRITE_CLOSED` event after `shutdown(Both)` that was never delivered.\n\nTest coverage: extended `test_tcp_client_semantics.c` to assert `poll()`\nreports `POLLHUP` after a full `shutdown(SHUT_RDWR)`. Verified the new\nassertion fails without the fix and passes with it. The `SHUT_WR`-only\ncase is left unchanged (a genuine epoll-vs-kqueue difference, already\nignored on epoll platforms).\n\n_Made with AI assistance under my review_"
    },
    {
      "commit": "87e5243fcb398838ec2c17edc9fc9e89a88fcfd1",
      "tree": "c80ac707a6ab9a6e30072e2e4851fd5745a24082",
      "parents": [
        "e1de0aaf688fb6739851a3aa0fa6d5150d854ad4"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed Jul 08 21:30:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 21:30:07 2026"
      },
      "message": "Enable test_embind_unsigned with ESM integration. (#27276)\n\nWorks fine with ESM integration."
    },
    {
      "commit": "e1de0aaf688fb6739851a3aa0fa6d5150d854ad4",
      "tree": "008fc1f8c09cd8b7993759abf25c8b2af7af42be",
      "parents": [
        "ffd884b92932e3e52f799f00729d16c4c57e622b"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed Jul 08 21:19:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 21:19:42 2026"
      },
      "message": "Enable pthreads when -fopenmp is specified (#27280)\n\nIn Clang, specifying -fopenmp automatically enables thread support.\nMatch this behavior in Emscripten to prevent link and runtime errors\nwhen using OpenMP libraries."
    },
    {
      "commit": "ffd884b92932e3e52f799f00729d16c4c57e622b",
      "tree": "d8ec4cdbfa9367f8b09f4e70fdee98730c33a906",
      "parents": [
        "666e211cd872b55e5374f7f20fafcd96ffe2a233"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 08 21:06:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 21:06:18 2026"
      },
      "message": "Refactor/rename `is_user_symbol`. NFC (#27281)\n\nReferring to \"user\" symbols was confusing because it could mean \"user\nrequested symbol\" or \"user exported symbol\"."
    },
    {
      "commit": "666e211cd872b55e5374f7f20fafcd96ffe2a233",
      "tree": "2f22d34fc0d33f5ddd739793623d81e748de72d2",
      "parents": [
        "45050b17d6ef8a92fabe8f4260c2f38307c99d18"
      ],
      "author": {
        "name": "LY",
        "email": "51789698+Young-Lord@users.noreply.github.com",
        "time": "Wed Jul 08 18:58:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 18:58:50 2026"
      },
      "message": "Fix duplicate Trusted Types policy creation when spawning workers (#27256)\n\nallocateUnusedWorker() and _emscripten_create_wasm_worker() called\ntrustedTypes.createPolicy() on every Worker creation. The Trusted Types\nspec forbids reusing a policy name unless CSP allows duplicates, so\nprograms with 2+ pthreads (or wasm workers) failed under Trusted Types\nenforcement.\n\nCache each policy once and pass the script URL through createScriptURL."
    },
    {
      "commit": "45050b17d6ef8a92fabe8f4260c2f38307c99d18",
      "tree": "0146568860a35da86e1ab5fdbbf2ffc798c13167",
      "parents": [
        "1b272ff20bda59cda3c274c458696273c66c7b09"
      ],
      "author": {
        "name": "Hood Chatham",
        "email": "roberthoodchatham@gmail.com",
        "time": "Wed Jul 08 18:55:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 18:55:19 2026"
      },
      "message": "[docs] instantiateWasm works with sanitizers (#27275)\n\nSince WasmOffsetConverter was removed. I also removed a couple of\nremaining references in the codebase to WasmOffsetConverter."
    },
    {
      "commit": "1b272ff20bda59cda3c274c458696273c66c7b09",
      "tree": "a6111f62fac028406f6870406e88644e00840700",
      "parents": [
        "7d5f96d762f42515d3d734204efda41f616de4bd"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Jul 08 18:32:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 18:32:53 2026"
      },
      "message": "Automatic rebaseline of codesize expectations. NFC (#27274)\n\nThis is an automatic change generated by\ntools/maint/rebaseline_tests.py.\n\nThe following (9) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 151739 \u003d\u003e 151739 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_ctors2.json: 151142 \u003d\u003e 151142 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_except.json: 195624 \u003d\u003e 195624 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_except_wasm.json: 166863 \u003d\u003e 166863 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 164747 \u003d\u003e 164747 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_lto.json: 120589 \u003d\u003e 120589 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_mangle.json: 262103 \u003d\u003e 262103 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_noexcept.json: 153739 \u003d\u003e 153739 [+0 bytes / +0.00%]\ncodesize/test_codesize_cxx_wasmfs.json: 179507 \u003d\u003e 179507 [+0 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": "7d5f96d762f42515d3d734204efda41f616de4bd",
      "tree": "0a47f0c6b9143d847516e4f3d5fe8f020123920d",
      "parents": [
        "6c5c5f078715a54b3734135aba0b4c8f8f58b0ec"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 08 18:32:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 18:32:08 2026"
      },
      "message": "Improve consistently of test output checking. NFC (#27267)\n\n- Then testing using `hello_world.c` using `do_runf_out_file` rather\nthan duplicating the expected string.\n- Add `done\\n` to a few more tests (its good to test at least something\nis printed in general I think).\n- Move the `expected_output\u003dNone` default to the low level\n`_build_and_run` function."
    },
    {
      "commit": "6c5c5f078715a54b3734135aba0b4c8f8f58b0ec",
      "tree": "68d6baf5c90f2f98562557abf8730e58623d1cd4",
      "parents": [
        "8acd0c82a851cb423c9dfa4c4bac732710a9ef39"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jul 08 18:31:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 18:31:52 2026"
      },
      "message": "[FS] Remove obsolete socket fd assertion (#27272)\n\nThis assertion dates back to commit 87b9fe11e545 (2013) when select()\nwas implemented directly in JavaScript using a 64-bit fd bitmask.\n\nSince select() was moved to musl C code and implemented via poll()/\n__syscall_poll, select() supports up to FD_SETSIZE (1024) and fd values\n\u003e 63 are handled properly by the FS and SOCKFS JS layers."
    },
    {
      "commit": "8acd0c82a851cb423c9dfa4c4bac732710a9ef39",
      "tree": "f7a682a3b6ce2f0af819a1ada26fb2528a46d712",
      "parents": [
        "22383d7400b93ea4404b72d6cbe0bff837b8dc22"
      ],
      "author": {
        "name": "Thomas Steiner",
        "email": "tomac@google.com",
        "time": "Wed Jul 08 16:16:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 16:16:32 2026"
      },
      "message": "[docs] Fix method name from `requestFileHandles()` to `requestFileHandle()` (#27273)\n\nThis is an oversight in the docs."
    },
    {
      "commit": "22383d7400b93ea4404b72d6cbe0bff837b8dc22",
      "tree": "2fa390650454aeaf0d1ceac355db26cb507c7e8d",
      "parents": [
        "e745bf35731b25b07ecafcf90ff802b98ec7937d"
      ],
      "author": {
        "name": "kcang",
        "email": "kengchew.ang@duerrdental.com",
        "time": "Wed Jul 08 04:41:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 04:41:21 2026"
      },
      "message": "Add openmp library from llvm (#27073)\n\nImports the openmp library from LLVM and enables it using the standard\n-fopenmp flag.\n\nFixes: #13892, #17637"
    },
    {
      "commit": "e745bf35731b25b07ecafcf90ff802b98ec7937d",
      "tree": "0585910fb71d067d10d21309511e2afc687dfe1b",
      "parents": [
        "d154f0613c3dccbbb21f39d65571ebcfdbdc2203"
      ],
      "author": {
        "name": "emscripten-bot",
        "email": "179889221+emscripten-bot@users.noreply.github.com",
        "time": "Wed Jul 08 04:36:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 04:36:31 2026"
      },
      "message": "Automatic rebaseline of codesize expectations. NFC (#27271)\n\nThis is an automatic change generated by\ntools/maint/rebaseline_tests.py.\n\nThe following (10) test expectation files were updated by\nrunning the tests with `--rebaseline`:\n\n```\ncodesize/test_codesize_cxx_ctors1.json: 151786 \u003d\u003e 151739 [-47 bytes / -0.03%]\ncodesize/test_codesize_cxx_ctors2.json: 151189 \u003d\u003e 151142 [-47 bytes / -0.03%]\ncodesize/test_codesize_cxx_except.json: 195681 \u003d\u003e 195624 [-57 bytes / -0.03%]\ncodesize/test_codesize_cxx_except_wasm.json: 166910 \u003d\u003e 166863 [-47 bytes / -0.03%]\ncodesize/test_codesize_cxx_except_wasm_legacy.json: 164794 \u003d\u003e 164747 [-47 bytes / -0.03%]\ncodesize/test_codesize_cxx_lto.json: 120616 \u003d\u003e 120589 [-27 bytes / -0.02%]\ncodesize/test_codesize_cxx_mangle.json: 262160 \u003d\u003e 262103 [-57 bytes / -0.02%]\ncodesize/test_codesize_cxx_noexcept.json: 153786 \u003d\u003e 153739 [-47 bytes / -0.03%]\ncodesize/test_codesize_cxx_wasmfs.json: 179554 \u003d\u003e 179507 [-47 bytes / -0.03%]\ncodesize/test_codesize_files_wasmfs.json: 63764 \u003d\u003e 63764 [+0 bytes / +0.00%]\n\nAverage change: -0.02% (-0.03% - +0.00%)\n```\n\nCo-authored-by: emscripten-bot \u003cemscripten-bot@users.noreply.github.com\u003e"
    },
    {
      "commit": "d154f0613c3dccbbb21f39d65571ebcfdbdc2203",
      "tree": "aff8ed34407113bc9c0daccc65552f807ca33353",
      "parents": [
        "382503cd331758af2397302f84caeb824354d34b"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 07 18:49:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 18:49:21 2026"
      },
      "message": "[html5] Remove duplication in `canvasResizedCallback` invocations. NFC (#27265)\n\nExtract `callCanvasResizedCallback` helper function to unify the 5\nseparate places where `strategy.canvasResizedCallback` is called in\nlibhtml5.js.\n\nAlso, initialize `currentFullscreenStrategy` to 0 rather than empty\nobject. This is what it gets reset to in `restoreWindowedState` anyway,\nso we should be consistent."
    },
    {
      "commit": "382503cd331758af2397302f84caeb824354d34b",
      "tree": "2e9573d0941f1c4ae1f29791e9789f46360b0378",
      "parents": [
        "e159e1005e34fa0023af67cb8a6b4c7ee1583ef0"
      ],
      "author": {
        "name": "Pavel Savara",
        "email": "pavel.savara@gmail.com",
        "time": "Tue Jul 07 18:13:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 18:13:19 2026"
      },
      "message": "[WasmFS] Enforce open file access mode on read/write (#27249)"
    },
    {
      "commit": "e159e1005e34fa0023af67cb8a6b4c7ee1583ef0",
      "tree": "9a7683d16a987c1f85c2eacc176051676fe5cc04",
      "parents": [
        "187c05d3233592ff7900c9221305dacf5858d6cb"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 07 16:24:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 16:24:15 2026"
      },
      "message": "[html5] Fix argument count for __emscripten_run_callback_on_thread (#27264)\n\nIn #25783, `_emscripten_run_callback_on_thread` was updated to take an\nevent_data_size parameter. However, call sites passing 0 for event data\nin `libhtml5.js` and `libhtml5_webgl.js` were missed and left with 5\narguments instead of 6, causing `userData` to be passed as\n`event_data_size` and `user_data` to be omitted."
    },
    {
      "commit": "187c05d3233592ff7900c9221305dacf5858d6cb",
      "tree": "5711943fa90c2d598f51f9d51ef5f6cbab94f161",
      "parents": [
        "3e979b65414b73f27c0a249b94e8080cec221a95"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 07 16:06:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 16:06:18 2026"
      },
      "message": "[docs] Remove unused link target. NFC (#27263)\n\nThe `webgl_context` link target was originally added in #7094 and used\nby `WebGL context`_, but subsequent updates reverted back to using\ninline URLs, leaving this link target definition unused."
    },
    {
      "commit": "3e979b65414b73f27c0a249b94e8080cec221a95",
      "tree": "d55fc15b5545caf0c6b9c87c1eefbbd3fdf84749",
      "parents": [
        "21afbf6ca876decc55f5944d7b7a0fa5126ba9c9"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 07 06:29:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 06:29:28 2026"
      },
      "message": "Ask about installing git hooks as part of `./bootstrap.py` (#27238)\n\nI feel like these two hooks a very useful, but maybe folks don\u0027t know\nabout them, or how to install them? This change effectively advertises\nthe option to install to anyone who runs `./bootstrap.py` in an\ninteractive shell.\n\nJust like all the other actions that bookstrap performs it will only run\nit if the stamp file is missing, so it effectively only asks once\n(unless you delete the stamp in the `out/` directory)."
    },
    {
      "commit": "21afbf6ca876decc55f5944d7b7a0fa5126ba9c9",
      "tree": "3840b320f009dd1841814bf5f8ff7347c406d306",
      "parents": [
        "929882a8bb2b89c0be698212187219a4bf548bf7"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Jul 07 02:59:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 02:59:37 2026"
      },
      "message": "Make update_*.py update readme\u0027s LLVM version (#27254)\n\nThis makes `update_*.py` automatically update version numbers in\n`readme.txt`. This also makes the scripts use `argparse`.\n\nSuggested in\nhttps://github.com/emscripten-core/emscripten/pull/27252#issuecomment-4879991836."
    },
    {
      "commit": "929882a8bb2b89c0be698212187219a4bf548bf7",
      "tree": "e6cff88218f48e3ffae60887290059432d219d0a",
      "parents": [
        "cd9990f3eda055c00c8c7a2861927f1ce0e5a5d7"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 06 23:32:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 23:32:10 2026"
      },
      "message": "[docs] Format (linewrap) api_reference docs. NFC (#27259)\n\nAlso add a `check_docs_noop.py` script that can be used to verify that a\ngiven change (like this one) does not effect the html output."
    },
    {
      "commit": "cd9990f3eda055c00c8c7a2861927f1ce0e5a5d7",
      "tree": "22835ac63261dc2664d1294990cb9275af0bbbc4",
      "parents": [
        "02fb45eecc8a0e201d9cc74cba5bfbdf9d72427d"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 06 23:28:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 23:28:19 2026"
      },
      "message": "Revert default for GROWABLE_ARRAYBUFFERS to 0 (#27260)\n\nSplit out from #27242.\n\nSee: #27241"
    },
    {
      "commit": "02fb45eecc8a0e201d9cc74cba5bfbdf9d72427d",
      "tree": "afa7c982a068bba6f2ee3ac233d5ca229d13e7fd",
      "parents": [
        "605af0eb70aeeef5dd708d67962df6495ae4a804"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 06 23:11:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 23:11:58 2026"
      },
      "message": "Temporarily disable -fcoverage-mapping test (#27261)\n\nThis test is currently blocking the LLVM roller because the version of\nthe coverage data changes in upstream LLVM, but the version of\ncompiler-rt we use is currently pinned to the stable version.\n\nSee #27223"
    },
    {
      "commit": "605af0eb70aeeef5dd708d67962df6495ae4a804",
      "tree": "28eef284f770046aecf07e2b1b6c185f29b0ef54",
      "parents": [
        "3775844052a64bedde2de12ad2ee849ea6160c11"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Jul 06 18:14:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 18:14:35 2026"
      },
      "message": "Temporarily skip tests to allow Binaryen roll (#27258)\n\nhttps://github.com/WebAssembly/binaryen/pull/8880 updated Binaryen to no\nlonger escape function names stored in the IR. This means that directly\nprinted function names are no longer escaped. An error message was also\ntweaked to improve readability.\n\nThese changes break Emscripten tests, so temporarily skip those tests to\nallow the Binaryen roll to proceed. A follow-on change after the roll\nwill update and re-enable the tests."
    },
    {
      "commit": "3775844052a64bedde2de12ad2ee849ea6160c11",
      "tree": "c5618a9bb7179994fd63ebc0c9d75e7cfc522a8b",
      "parents": [
        "e00597b511c16aa40da0c36f7c773b96e3f246af"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Mon Jul 06 10:59:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 10:59:01 2026"
      },
      "message": "Update docs on mainScriptUrlOrBlob. NFC (#27255)\n\nAFAICT this settings has never actually applied to wasm workers.\n\nThese docs were originally added in #18371."
    },
    {
      "commit": "e00597b511c16aa40da0c36f7c773b96e3f246af",
      "tree": "c4efe22750d2f57a0d6dcbc733c0a4d0a93fd444",
      "parents": [
        "10d8b6defdac95ef6f22282d3ac20acd40f95dbe"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Jul 04 06:41:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 06:41:50 2026"
      },
      "message": "[test] Rename `do_run_in_out_file_test` to match `do_runf` naming (#27253)\n\nSpecifically we don\u0027t use the `_test` suffix for these helpers normally\nand I wanted to shared the `do_runf` prefix."
    }
  ],
  "next": "10d8b6defdac95ef6f22282d3ac20acd40f95dbe"
}
