From dfeedeb6759763b24dfa08cbfd55efbf4f774322 Mon Sep 17 00:00:00 2001 From: wangdequan Date: Sat, 13 Jun 2026 15:14:38 +0800 Subject: [PATCH] Guard fixture loop staging --- text7.txt | 67 +++++++++++++++++++ wasm-port/tests/browser/interp_smoke.html | 25 +++++-- .../tests/wasm/node/verify_interp_wasm.mjs | 27 +++++--- 3 files changed, 103 insertions(+), 16 deletions(-) diff --git a/text7.txt b/text7.txt index 002e5e7..89baa46 100644 --- a/text7.txt +++ b/text7.txt @@ -558,3 +558,70 @@ parameter/tool table runtime state tests 和 blocked runtime promotion。 ```bash git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d ``` + +十二、2026-06-13 继续执行记录:fixture loop staging guard + +1. 本批目标。 + +继续 staged path guard inventory 第七轮,处理 Node/browser 成对覆盖的 fixture loop +staging 写入点: + +```text +INTERP_ERROR_FIXTURES +INTERP_FILE_FIXTURES +INTERP_BROWSER_FILE_FIXTURES +``` + +2. 已完成改动。 + +- Node 侧新增 `writeLocalErrorGcodeFixture(...)`; +- browser 侧新增 `writeLocalErrorGcodeFixture(...)`; +- `INTERP_ERROR_FIXTURES` 的 file-error loop 两侧均改为 helper 写入; +- `INTERP_FILE_FIXTURES` / `INTERP_BROWSER_FILE_FIXTURES` 的 file loop 两侧均改为 + `writeLocalGcodeFixture(...)` 写入; +- helper 显式检查 staged `wasmPath` 与期望路径一致; +- browser 侧仍不枚举目录; +- 未修改 G-code 内容、canon expected、error expected 或 interpreter 语义。 + +涉及文件: + +```text +wasm-port/tests/wasm/node/verify_interp_wasm.mjs +wasm-port/tests/browser/interp_smoke.html +``` + +3. 已完成的目标验证。 + +```bash +git diff --check +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +``` + +4. 本批剩余建议验证。 + +```bash +wasm-port/tools/verify_vendor_sync.sh +wasm-port/tools/verify_no_standalone_cnc_semantics.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +如果通过,提交建议: + +```text +Guard fixture loop staging +``` + +5. 下一步工作建议。 + +继续 staged path guard inventory 第八轮,优先处理 `namedparam_semantics` / +`namedparam_ini_semantics` 等 INI-context 单文件 direct `/work/...` 写入点,或 +`ini_tool_table` 固定三文件 staging manifest;继续避开 parameter/tool table runtime +state tests 和 blocked runtime promotion。 + +下一轮第一条命令仍保持: + +```bash +git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d +``` diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index 991db89..cb88d78 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -4336,6 +4336,14 @@ return wasmPath; } + async function writeLocalErrorGcodeFixture(interp, fixtureName, wasmPath, expectedWasmPath) { + if (wasmPath !== expectedWasmPath) { + throw new Error(`browser_${fixtureName}_local_error_gcode_staging: path drift`); + } + interp.writeTextFile(wasmPath, await fetchText(`../fixtures/gcode_errors/${fixtureName}.ngc`)); + return wasmPath; + } + async function loadSimMachineFiles(machineRel, iniFile, programFile = null) { const iniText = await fetchText( `../../vendor/linuxcnc/configs/sim/${machineRel}/${iniFile}`, @@ -5215,10 +5223,11 @@ } for (const errorFixtureName of INTERP_ERROR_FIXTURES) { - const programPath = `/work/${errorFixtureName}-error.ngc`; - interp.writeTextFile( - programPath, - await fetchText(`../fixtures/gcode_errors/${errorFixtureName}.ngc`), + const programPath = await writeLocalErrorGcodeFixture( + interp, + errorFixtureName, + `/work/${errorFixtureName}-error.ngc`, + `/work/${errorFixtureName}-error.ngc`, ); verifyExpectedFileError( `${errorFixtureName}_file`, @@ -5308,8 +5317,12 @@ ); for (const fileFixtureName of INTERP_BROWSER_FILE_FIXTURES) { - const programPath = `/work/${fileFixtureName}.ngc`; - interp.writeTextFile(programPath, await fetchText(`../fixtures/gcode/${fileFixtureName}.ngc`)); + const programPath = await writeLocalGcodeFixture( + interp, + fileFixtureName, + `/work/${fileFixtureName}.ngc`, + `/work/${fileFixtureName}.ngc`, + ); verifyExpectedOutput( `${fileFixtureName}_file`, interp.runFile(programPath), diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index ca11e64..9b9f563 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -124,6 +124,15 @@ function writeLocalGcodeFixture(fixtureName, wasmPath, expectedWasmPath, targetI return wasmPath; } +function writeLocalErrorGcodeFixture(fixtureName, wasmPath, expectedWasmPath, targetInterp = interp) { + assert.equal(wasmPath, expectedWasmPath, `${fixtureName} local error gcode staging path drift`); + targetInterp.writeTextFile( + wasmPath, + readFileSync(resolve(rootDir, `tests/fixtures/gcode_errors/${fixtureName}.ngc`), "utf8"), + ); + return wasmPath; +} + function stageInterpIniContext(name, programFile = "test.ngc") { const sourceRootRel = `tests/interp/${name}`; const iniText = readFileSync( @@ -684,32 +693,30 @@ for (const fixtureName of INTERP_ERROR_FIXTURES) { } for (const fixtureName of INTERP_ERROR_FIXTURES) { - const programPath = `/work/${fixtureName}-error.ngc`; - const programText = readFileSync( - resolve(rootDir, `tests/fixtures/gcode_errors/${fixtureName}.ngc`), - "utf8", + const programPath = writeLocalErrorGcodeFixture( + fixtureName, + `/work/${fixtureName}-error.ngc`, + `/work/${fixtureName}-error.ngc`, ); const expectedOutput = readFileSync( resolve(rootDir, `tests/fixtures/canon_errors/${fixtureName}.expected`), "utf8", ).trimEnd(); - interp.writeTextFile(programPath, programText); verifyExpectedFileError(fixtureName, interp.runFile(programPath), expectedOutput); } for (const fixtureName of INTERP_FILE_FIXTURES) { - const programPath = `/work/${fixtureName}.ngc`; - const programText = readFileSync( - resolve(rootDir, `tests/fixtures/gcode/${fixtureName}.ngc`), - "utf8", + const programPath = writeLocalGcodeFixture( + fixtureName, + `/work/${fixtureName}.ngc`, + `/work/${fixtureName}.ngc`, ); const expectedEvents = readFileSync( resolve(rootDir, `tests/fixtures/canon/${fixtureName}.events`), "utf8", ).trimEnd(); - interp.writeTextFile(programPath, programText); verifyExpectedOutput(fixtureName, interp.runFile(programPath), expectedEvents); }