chore: checkpoint web Blender feature-gap work, docs and tests
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

- update native web_engine sources and rebuilt wasm artifacts
- add task cards, status notes and tooling scripts
- add web e2e specs, tutorial UI sources and tutorial assets
- sync golden task manifests and audit records

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
mes123456
2026-11-11 10:46:55 +08:00
parent f3e21c6b98
commit d1e6b63d54
665 changed files with 59149 additions and 39194 deletions

View File

@@ -0,0 +1,76 @@
/* QA-only Dedicated Worker: exercises OPFS createSyncAccessHandle modes. */
const handles = new Map();
function reply(requestId, payload) {
self.postMessage({ requestId, ...payload });
}
async function resolveFile(path) {
const segments = String(path).split("/").filter(Boolean);
if (!segments.length) throw new Error("empty OPFS path");
let directory = await navigator.storage.getDirectory();
for (const segment of segments.slice(0, -1)) {
directory = await directory.getDirectoryHandle(segment, { create: true });
}
return directory.getFileHandle(segments[segments.length - 1], { create: true });
}
self.onmessage = async (event) => {
const data = event.data ?? {};
const requestId = data.requestId ?? "";
try {
if (data.op === "capability") {
reply(requestId, {
ok: true,
hasSyncMethod: typeof FileSystemFileHandle !== "undefined" &&
typeof FileSystemFileHandle.prototype.createSyncAccessHandle === "function",
isDedicatedWorker: typeof DedicatedWorkerGlobalScope !== "undefined",
});
return;
}
if (data.op === "acquire") {
const file = await resolveFile(data.path);
const mode = data.mode ?? "readwrite";
let handle;
try {
handle = await file.createSyncAccessHandle({ mode });
}
catch (error) {
if (mode === "readwrite-unsafe" && error instanceof TypeError) {
reply(requestId, { ok: false, unsupportedMode: true, mode, name: error.name, message: error.message });
return;
}
throw error;
}
handles.set(data.id ?? requestId, handle);
let written = 0;
if (data.write !== undefined) {
written = handle.write(new Uint8Array(data.write), { at: 0 });
handle.flush();
}
reply(requestId, { ok: true, mode, size: handle.getSize(), written });
return;
}
if (data.op === "close") {
const handle = handles.get(data.id ?? requestId);
if (handle) { handle.close(); handles.delete(data.id ?? requestId); }
reply(requestId, { ok: true, closed: Boolean(handle) });
return;
}
if (data.op === "close-all") {
for (const handle of handles.values()) handle.close();
handles.clear();
reply(requestId, { ok: true });
return;
}
reply(requestId, { ok: false, name: "QA_OPERATION_INVALID", message: String(data.op) });
}
catch (error) {
reply(requestId, {
ok: false,
name: error?.name ?? "Error",
message: error?.message ?? String(error),
stack: String(error?.stack ?? "").slice(0, 1200),
});
}
};

File diff suppressed because it is too large Load Diff