Repository navigation
Update WPT - #8126
Update WPT#8126
Conversation
There was a problem hiding this comment.
Superseded by the review of
f804ff17.
This review, of 4aa9b0a5
✅ Approved — This is a WPT archive bump plus matching config: the WebCrypto suites move to their new keys, new suites are classified, and the expectations are updated. No issues were found.
The decision is advisory: this review is a comment and never approves, blocks or requests changes on the pull request.
✅ All checks passed
🚀 Release: ✅ LGTM
Risk: Low. Only the dependency pin for the test-only WPT archive changes.
🔒 Security: ✅ LGTM
The archive URL, strip_prefix and version agree across shared_deps.jsonc and the generated MODULE file. Everything else is test configuration and has no security impact.
📖 AGENTS.md: ✅ LGTM
No issues found.
📋 Code Quality: ✅ LGTM
The WPT config changes match the upstream renames and the new suites. The new expected failures and disabled tests each have an explanatory comment.
⚡ Performance: ✅ LGTM
Only test configuration changes, so there is no performance impact.
📝 Documentation: ✅ LGTM
The new notes in the wpt-update skill are accurate.
Reviewed commit: 4aa9b0a5
There was a problem hiding this comment.
Superseded by the review of
3f9d2b62.
This review, of f804ff17
✅ Approved — This updates the test-only WPT dependency and its config and adds two new WPT suites. No issues were found.
The decision is advisory: this review is a comment and never approves, blocks or requests changes on the pull request.
✅ All checks passed
🚀 Release: ✅ LGTM
Risk: Low. Only the pin for the test-only WPT archive changes.
🔒 Security: ✅ LGTM
Only test configuration and the WPT archive pin change, so there is no security impact.
📖 AGENTS.md: ✅ LGTM
No issues found.
📋 Code Quality: ✅ LGTM
The config changes match the upstream renames and the new suites. Each new disabled or omitted test has a comment explaining why.
⚡ Performance: ✅ LGTM
Only test configuration changes, so there is no performance impact.
📝 Documentation: ✅ LGTM
The new notes in the wpt-update skill are accurate.
Reviewed commit: f804ff17
There was a problem hiding this comment.
Superseded by the review of
f82d7afc.
This review, of 3f9d2b62
✅ Approved — This updates the test-only WPT archive pin and its config and adds three new WPT suites. No issues were found.
The decision is advisory: this review is a comment and never approves, blocks or requests changes on the pull request.
✅ All checks passed
🚀 Release: ✅ LGTM
Risk: Low. Only the pin for the test-only WPT archive changes.
🔒 Security: ✅ LGTM
Only test configuration and the sha256-pinned WPT archive pin change, so there is no security impact.
📖 AGENTS.md: ✅ LGTM
No issues found.
📋 Code Quality: ✅ LGTM
The config changes match the upstream renames and the new suites. The new timers suite config explains each disabled or omitted test, and its BUILD.bazel target follows the existing pattern.
⚡ Performance: ✅ LGTM
Only test configuration changes, so there is no performance impact.
📝 Documentation: ✅ LGTM
The new notes in the wpt-update skill are accurate.
Reviewed commit: 3f9d2b62
Reconcile the WPT configuration with upstream changes between 2f17dec1f and 2e4dc257c. WebCryptoAPI: upstream b638c093cd moved the modern-algos and secure-curves tests into their own directories and removed the tentative labels. Move the existing config to the new keys. The modern-algos idlharness now covers only the modern-algos operations, so drop the base WebCrypto IDL expectations, which remain on idlharness.https.any.js. Add the new okp_fixed_length, okp_malformed_asn1, aes_kw_unwrapKey_failures and secure-curves idlharness suites, which pass. encoding: 51a3177fe0 added an EUC-JP JIS0212 fatal streaming test. The encoding_rs-backed decoder resets on a fatal error and drops the ASCII byte that should be restored to the input, so mark it as an expected failure. eventsource: four new format-* suites use relative EventSource URLs, matching the existing expected failures. fetch/api: e58225abb9 added a Last-Event-ID byte test; workerd sends U+0080-U+00FF header values UTF-8 encoded. 18904ce927 renamed and inverted a request-disturbed assertion that workerd now passes. performance-timeline: a8f306ee43 moved test-helper.js into resources/. 77c05300a4 added a re-observe test to po-disconnect that hangs because PerformanceObserver never delivers callbacks; disable it. webidl: ddb25fdfff added an AudioWorklet processor module used by an HTML test; omit it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Explain that include_tentative suites carry config keys for tentative files, so upstream dropping the label renames suites, and that a stale config key aborts the whole suite before any test runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
base64.any.js checks btoa() against a reference implementation for 286 inputs (WebIDL conversions, every code point up to U+0101, and characters above U+00FF that must throw InvalidCharacterError), and atob() against the shared data-URL base64 vectors from fetch/data-urls/resources/base64.json plus WebIDL conversion cases. All 380 subtests pass, so the config has no expected failures, disabled or omitted tests. The JSON vectors are bound through extra_wpt_directories. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The suite covers queueMicrotask(): that it exists, that it throws a TypeError for non-callable arguments, that it calls the callback asynchronously with no arguments, and that its callbacks interleave with promise reactions in FIFO order. All 5 subtests of queue-microtask.any.js pass. "It rethrows exceptions" (queue-microtask-exceptions.any.js) is disabled: it listens for the global error event, but the harness stubs globalThis.addEventListener with a no-op, so the test hangs. It passes with the stub removed. The two subtests in queue-microtask.window.js need MutationObserver and a DOM, so they are omitted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run the .any.js tests from html/webappapis/timers, which cover
setTimeout and setInterval: clearing timers from callbacks, using
clearTimeout and clearInterval interchangeably, missing, undefined
and negative delays, and ordering of zero-delay timers.
All 10 subtests in the 7 enabled files pass, including the two
setup({single_test: true}) files that check negative delays.
- evil-spec-example.any.js is omitted: it relies on string handlers,
which workerd does not support because it disallows eval.
- type-long-settimeout.any.js and type-long-setinterval.any.js are
disabled because they hang. workerd clamps the delay as a double
rather than converting it to a WebIDL long, so 2 ** 32 ms does not
wrap to 0 and done() is never called.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Runs the structuredClone() battery of tests (structured-clone.any.js), which clones and transfers primitives, wrappers, dates, regexps, errors, buffers, views, Blobs, Files, MessagePorts and more. The three battery helper files that discovery picks up are omitted. 117 of 135 subtests pass; 18 are expected failures and 2 (ImageBitmap, OffscreenCanvas) are omitted because workerd has no canvas APIs. The expected failures fall into these groups: - enhanced_error_serialization deliberately clones custom error properties (8 subtests). - File is not serializable, although Blob is. - structuredClone(new Response()) succeeds instead of throwing a DataCloneError. - Only ArrayBuffers can be transferred: MessagePort and ReadableStream transfers throw TypeError, and transferring a Blob throws TypeError instead of a DataCloneError. - Transferring a detached ArrayBuffer succeeds. - "Growable SharedArrayBuffer" compares a SharedArrayBuffer with `instanceof ArrayBuffer`, which only passes in browsers because they refuse to clone SABs without cross-origin isolation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Superseded by the review of
d4c78989.
This review, of f82d7afc
✅ Approved — Only test configuration and the test-only WPT archive pin change, and the new structured-clone suite follows the existing patterns. No issues were found.
The decision is advisory: this review is a comment and never approves, blocks or requests changes on the pull request.
✅ All checks passed
🚀 Release: ✅ LGTM
Risk: Low. Only the pin for the test-only WPT archive changes.
🔒 Security: ✅ LGTM
The sha256 pin and the URL of the WPT archive change together. The rest of the change only edits test configuration, so there is no security impact.
📖 AGENTS.md: ✅ LGTM
No issues found.
📋 Code Quality: ✅ LGTM
structured-clonetarget (src/wpt/BUILD.bazel):html/webappapis/structured-clone@moduleis listed in bothwpt_directoryandextra_wpt_directories. This is intentional:wpt_testskips the duplicate when it builds runfiles. The extra entry binds the files under their absolute path, which the META scripts need.wasm/jsapiis set up the same way.structured-clone-test.ts: the config keys match the helper files and the test file. Each expected failure has a justification comment, and the omitted tests are explained.- The
atob,timersandmicrotask-queuingtargets follow the existingwpt_testpattern.
⚡ Performance: ✅ LGTM
Only test configuration changes, so there is no performance impact.
📝 Documentation: ✅ LGTM
The new notes in the wpt-update skill are accurate.
Reviewed commit: f82d7afc
WPT 2e4dc257c adds Blob.text() subtests for byte order marks. Blob::text() passes the blob's bytes straight to js.str() rather than running UTF-8 decode, so it keeps a leading BOM. The three subtests that expect it to be stripped are recorded as expected failures; the other five new subtests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
f82d7af to
d4c7898
Compare
There was a problem hiding this comment.
✅ Approved — The change touches only WPT test configuration, the pin for the test-only WPT archive, and skill documentation. The new FileAPI BOM expectations and the new html/webappapis targets match the runtime code and follow the existing patterns. No issues found.
The decision is advisory: this review is a comment and never approves, blocks or requests changes on the pull request.
✅ All checks passed
🚀 Release: ✅ LGTM
Risk: Low. Only the pin for the test-only WPT archive changes.
🔒 Security: ✅ LGTM
The URL and sha256 pin of the WPT archive change together. Everything else is test configuration, so there is no security impact.
📖 AGENTS.md: ✅ LGTM
No issues found.
📋 Code Quality: ✅ LGTM
src/wpt/BUILD.bazel:- The
microtask-queuing,atob,timersandstructured-clonetargets follow the existingwpt_testpattern. atobpulls infetch/data-urls@modulethroughextra_wpt_directories, which itsbase64.any.jsneeds forfetch/data-urls/resources/base64.json.structured-clonelists its own module in both places on purpose, with a comment explaining why.
- The
src/wpt/FileAPI-test.ts: the three BOM expected failures match the code.Blob::text()(src/workerd/api/blob.c++:271-276) passes the bytes tojs.str()without UTF-8 decoding, so it keeps a leading BOM. The failures are listed by subtest name, each with an accurate justification.
⚡ Performance: ✅ LGTM
Only test configuration changes, so there is no performance impact.
📝 Documentation: ✅ LGTM
The new notes in the wpt-update skill are accurate.
Reviewed commit: d4c78989
This is an automated pull request for updating WPT in workerd.
The WPT update was triaged by an agent using the wpt-update skill (run).
WPT update:
wpt-2f17dec1f→wpt-2e4dc257cThis is a triage-only update: the dependency bump was already committed. The upstream changes are at
https://github.com/web-platform-tests/wpt/compare/2f17dec1f36194d1c236120fd38b3556be466072...2e4dc257cfbe254ff8449e291cc231f0989b2d38.diff
Verification
bazel test //src/wpt/... --test_size_filters= --nocache_test_resultsreportsBuild completed successfullyandExecuted 65 out of 65 tests: 65 tests pass.This covers the default and all-autogates variants, plus the ESLint and TypeScript checks.python3 tools/cross/format.py --check gitandgit diff --checkare clean.WPT patches
None needed.
0001-disable-virtualenv-for-serve-command.patchstill applies, and the new archive adds norequirementskeys to theservecommand.Suite changes
Renamed (WebCryptoAPI, 71 suites). Upstream b638c093cd ("[WebCryptoAPI] Group tests by spec and remove tentative labels", #62873) moved the tests into
modern-algos/andsecure-curves/and dropped.tentativefrom the file names. For example,digest/sha3.tentative.https.any.jsis nowmodern-algos/digest/sha3.https.any.js, andgenerateKey/failures_Ed448.tentative.https.any.jsis nowsecure-curves/generateKey/failures_Ed448.https.any.js. The existing config moved with each file.idlharness.tentative.https.any.jswas split intomodern-algos/idlharness.https.any.jsandsecure-curves/idlharness.https.any.js. Its config moved to the modern-algos file.idlharness.https.any.js. The 5 expectations for modern-algos operations stay (encapsulateKey,encapsulateBits,decapsulateKey,decapsulateBits,getPublicKey).Added:
WebCryptoAPI/import_export/okp_fixed_length.https.any.js{}(passes)WebCryptoAPI/import_export/okp_malformed_asn1.https.any.js{}(passes)WebCryptoAPI/wrapKey_unwrapKey/aes_kw_unwrapKey_failures.https.any.js{}(passes)WebCryptoAPI/secure-curves/idlharness.https.any.js{}(passes)eventsource/format-bom-split.any.jsexpectedFailures: true: workerd's EventSource does not support relative URLs (same as the otherformat-*suites)eventsource/format-bom-utf-16.any.jseventsource/format-field-id-redirect.any.jseventsource/format-field-retry-bogus-2.any.jsfetch/api/headers/header-values-last-event-id.any.js(fetch/api and fetch/api-ts)webidl/ecmascript-binding/es-exceptions/DOMException-audioworklet-processor.jsomittedTests: true: an AudioWorklet processor module loaded by an HTML test, not a test;AudioWorkletProcessordoes not exist in workerdRemoved:
performance-timeline/not-restored-reasons/test-helper.js. Upstream a8f306ee43 moved it intoresources/, which discovery skips.Expectations added
textdecoder-mistakes.any.js:EUC-JP JIS0212 state after a fatal streaming erroris an expected failure.8F A2 20the ASCII byte0x20must go back into the input, so the next decode returns" ". workerd returns" ".src/rust/encoding/lib.rs(decode,DecoderResult::Malformedbranch) replaces the decoder with a fresh one and truncates the output, so the byte is lost.headers/header-values-last-event-id.any.js:fetch() sends the bytes of a non-ASCII Last-Event-ID header value unchangedis an expected failure.636166c383c2a9instead of636166c3a9.po-disconnect.any.js:Entries queued before disconnect() are not delivered after re-observingis disabled.async_testthat waits for an observer callback.PerformanceObserver::observeanddisconnectare no-ops insrc/workerd/api/performance.c++:288-298, so the callback never fires and the test hangs; workerd cancels the request as hung. The other subtests in this file were already disabled.takeRecords() returns no entries after disconnect(), passes.Expectations removed
request/request-disturbed.any.js: removedInput request used for creating new request became disturbed even if body is not used.…with a new body is not disturbedand inverted the assertion.Audit
src/wpt/BUILD.bazelbetween the two archives.buffer.transfer()with!detached(3726093110).cors-preflight-cacheadds a test, but the suite is omitted.request-bad-port(d64eb89a3b) andwebsockets/Create-blocked-port(cfddf189bb) are entirely omitted or disabled.http-cache/varyadds anot_cachedcase, which passes.expectedFailures, which the harness validates.Skill update
.opencode/skills/wpt-update/SKILL.mdnow documents two things:include_tentative = Truehave config keys for tentative files, so upstream dropping the label renames them.Out-of-scope follow-ups
src/rust/encoding/lib.rs, onMalformedin fatal mode, keep the bytes encoding_rs consumed after the malformed sequence (or avoid resetting state those bytes depend on), so a reused streaming decoder decodes them. The same area may explain the long-disabled iso-2022-jpfatal streamcase.request-disturbedexpectation (Request construction failure should not set "bodyUsed") keeps its old comment, whose reason I did not re-verify. It likely relates to workerd not treatingCONNECTas a forbidden method.