diff --git a/text5.txt b/text5.txt index 1a1e77d..49ce872 100644 --- a/text5.txt +++ b/text5.txt @@ -6802,3 +6802,100 @@ Guard abort and m19 staging manifests 提交后再继续下一批已有 INI-context fixture 的 staging manifest guard;仍保持每批 只选少量 pure interpreter/INI-context case,并按 native/Node/browser gate 顺序 复核,不推进 blocked runtime promotion。 + +七十二、2026-06-13 继续执行记录:iniparam staging manifest guard + +本轮先按上一节建议提交稳定批次: + +```text +4680639 Guard abort and m19 staging manifests +``` + +随后继续当前 host 可执行路线。当前 host 仍按 blocked runtime 规则处理,不执行 +任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。 + +1. 候选选择。 + +选择已有 Node/browser 执行覆盖、且通过 `stageInterpIniContext()` staging +INI-context 的两个 interpreter regression family: + +- `tests/interp/iniparam` +- `tests/interp/iniparam-failassign` + +这两个 family 只验证 INI variable expansion/read-only assignment 相关解释器行为, +不需要 HAL/task/tool DB/Python remap/user-M process runtime。本轮只固定 +host/filesystem staging manifest 对账,不新增 CNC 语义。 + +2. 覆盖对账。 + +`tests/interp/iniparam` 当前 upstream `.ngc` 文件: + +```text +test.ngc +``` + +`tests/interp/iniparam-failassign` 当前 upstream `.ngc` 文件: + +```text +test.ngc +``` + +3. 更新。 + +更新: + +- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs` +- `wasm-port/tests/browser/interp_smoke.html` + +Node 新增: + +- `iniparamNgcFiles` 固定 `test.ngc`; +- `iniparamFailassignNgcFiles` 固定 `test.ngc`; +- 分别与 `interpRegressionNgcFilesRecursive(...)` 精确对账; +- 检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合与 + fixed list 一致。 + +Browser 新增: + +- fixed-count 和 duplicate-free guard; +- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合 + 与 fixed list 一致; +- browser 仍不枚举目录。 + +4. 已执行验证。 + +```bash +git diff --check +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_interp_wasm.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +结果: + +- `git diff --check` clean。 +- `vendor sync up to date` +- `standalone CNC semantics guard complete` +- `interp_wasm_node_smoke=ok` +- Node inventory 保持: + - `executed=28` + - `passed=28` + - `skipped=131` + - `unexpected_fail=0` +- `browser_interp_smoke=ok` +- `host_wasm_opfs_browser_smokes=ok` + +5. 下一步工作建议。 + +当前工作集已稳定。建议先做小提交,message: + +```text +Guard iniparam staging manifests +``` + +提交后继续下一小批已有 interpreter fixture 的 staging manifest guard。优先选择 +仍已具备 Node/browser coverage、且不依赖 HAL/task/tool DB/Python remap/user-M +process 的 case;不推进 blocked runtime promotion。 diff --git a/wasm-port/tests/browser/interp_smoke.html b/wasm-port/tests/browser/interp_smoke.html index 43eb0d2..0eb3256 100644 --- a/wasm-port/tests/browser/interp_smoke.html +++ b/wasm-port/tests/browser/interp_smoke.html @@ -7195,6 +7195,20 @@ } const iniparamPlan = await stageInterpIniContext(interp, "iniparam"); + const iniparamNgcFiles = [ + "test.ngc", + ]; + if (iniparamNgcFiles.length !== 1 || new Set(iniparamNgcFiles).size !== iniparamNgcFiles.length) { + throw new Error("browser_interp_iniparam_fixture_coverage: list drift"); + } + const iniparamStagedNgcFiles = iniparamPlan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/iniparam/", "")) + .sort(); + if (iniparamStagedNgcFiles.join(",") !== iniparamNgcFiles.join(",")) { + throw new Error("browser_interp_iniparam_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_iniparam", interp.runFileWithIniContinueOnError( @@ -7221,6 +7235,20 @@ interp, "iniparam-failassign", ); + const iniparamFailassignNgcFiles = [ + "test.ngc", + ]; + if (iniparamFailassignNgcFiles.length !== 1 || new Set(iniparamFailassignNgcFiles).size !== iniparamFailassignNgcFiles.length) { + throw new Error("browser_interp_iniparam_failassign_fixture_coverage: list drift"); + } + const iniparamFailassignStagedNgcFiles = iniparamFailassignPlan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/iniparam-failassign/", "")) + .sort(); + if (iniparamFailassignStagedNgcFiles.join(",") !== iniparamFailassignNgcFiles.join(",")) { + throw new Error("browser_interp_iniparam_failassign_staging_manifest: list drift"); + } verifyExpectedOutput( "browser_interp_iniparam_failassign", interp.runFileWithIni( diff --git a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs index a7179b0..3b620be 100644 --- a/wasm-port/tests/wasm/node/verify_interp_wasm.mjs +++ b/wasm-port/tests/wasm/node/verify_interp_wasm.mjs @@ -2093,6 +2093,23 @@ assert.match( ); const iniparamPlan = stageInterpIniContext("iniparam"); +const iniparamNgcFiles = [ + "test.ngc", +]; +assert.deepEqual( + iniparamNgcFiles, + interpRegressionNgcFilesRecursive("iniparam"), + "interp iniparam fixture coverage drift", +); +assert.deepEqual( + iniparamPlan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/iniparam/", "")) + .sort(), + iniparamNgcFiles, + "interp iniparam staging manifest drift", +); verifyExpectedOutput( "interp_iniparam_wasm", interp.runFileWithIniContinueOnError( @@ -2116,6 +2133,23 @@ verifyExpectedOutput( ); const iniparamFailassignPlan = stageInterpIniContext("iniparam-failassign"); +const iniparamFailassignNgcFiles = [ + "test.ngc", +]; +assert.deepEqual( + iniparamFailassignNgcFiles, + interpRegressionNgcFilesRecursive("iniparam-failassign"), + "interp iniparam-failassign fixture coverage drift", +); +assert.deepEqual( + iniparamFailassignPlan.files + .map((file) => file.sourceRel) + .filter((sourceRel) => sourceRel.endsWith(".ngc")) + .map((sourceRel) => sourceRel.replace("tests/interp/iniparam-failassign/", "")) + .sort(), + iniparamFailassignNgcFiles, + "interp iniparam-failassign staging manifest drift", +); verifyExpectedOutput( "interp_iniparam_failassign_wasm", interp.runFileWithIni(