From d076763ef457033bf84712041b4204f7ce1ddaed Mon Sep 17 00:00:00 2001 From: wangdequan Date: Tue, 16 Jun 2026 04:33:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20project=20release=20gate?= =?UTF-8?q?=20wrapper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROJECT_COMPLETION_TRACKER.md | 10 ++- text14.txt | 62 +++++++++++++++++++ wasm-port/README.md | 9 ++- wasm-port/docs/project-release-handoff.md | 11 +++- .../verify_project_release_handoff_docs.mjs | 18 ++++++ .../tests/host/verify_project_release_gate.sh | 18 ++++++ 6 files changed, 125 insertions(+), 3 deletions(-) create mode 100755 wasm-port/tests/host/verify_project_release_gate.sh diff --git a/PROJECT_COMPLETION_TRACKER.md b/PROJECT_COMPLETION_TRACKER.md index b2fdbe7..d2801eb 100644 --- a/PROJECT_COMPLETION_TRACKER.md +++ b/PROJECT_COMPLETION_TRACKER.md @@ -9,7 +9,7 @@ turn-by-turn continuation notes and next-batch execution records. ## Current Status - Active continuation file: `text14.txt` -- Latest completed batch: final clean-tree acceptance closeout +- Latest completed batch: project release gate wrapper - Latest relevant commit: use `git log -1 --oneline` after each committed batch - Working tree at tracker creation: clean - Required policy: LinuxCNC remains the only CNC semantic source @@ -48,6 +48,7 @@ The project is complete for the current scope when all of the following are true | Workflow overview embedding | Stable for current scope | Report/display/render, DOM contract/readiness/renderer, mount result/display/render, mount DOM contract/readiness/renderer/wrapper exist. | | Host/runtime boundary proof | Stable blocked state | Host smoke passes; runtime families remain blocked and `docs/host-runtime-boundary-handoff.md` records host readiness, promotion blockers, dispatch, and evidence gates. | | Documentation/release gate | Stable for current scope | `docs/project-release-handoff.md` links README, panel entry, SDK, OPFS/session, sim-config, host/runtime, source reuse, drift, and tracker acceptance paths. | +| Project release gate wrapper | Stable | `tests/host/verify_project_release_gate.sh` runs the documented minimum release validation commands and ends with `project_release_gate=ok`. | ## Blocked Runtime Families @@ -210,6 +211,12 @@ wasm-port/tests/ui/node/verify_ui_node_smokes.sh wasm-port/tests/host/verify_host_smokes.sh ``` +Or run the same current-scope minimum gate through: + +```bash +wasm-port/tests/host/verify_project_release_gate.sh +``` + Run this if browser interpreter behavior is touched: ```bash @@ -235,6 +242,7 @@ wasm-port/tests/native/verify_sim_configs.sh - [x] UI Node smoke passes. - [x] Browser INI panel smoke passes. - [x] Host aggregate smoke passes. +- [x] Project release gate wrapper passes. - [x] Runtime blocked families remain documented. - [x] Project release handoff docs smoke passes. - [x] README/docs explain supported workflows and blocked items. diff --git a/text14.txt b/text14.txt index 4586aae..322f856 100644 --- a/text14.txt +++ b/text14.txt @@ -1576,3 +1576,65 @@ blocked_runtime_promotion_allowed=0 若 host runtime 可用,按 native -> Node/WASM -> browser/host 顺序验证 `L4-USER-M-PROCESS`、`L4-TOOL-DB`、`L4-PYTHON-REMAP`,否则保持 blocked;若进入新功能范围, 继续遵守 LinuxCNC 作为唯一 CNC 语义来源、JS/browser 只做边界 glue 与 UI/OPFS/SDK workflow。 + +十八、2026-06-16 继续执行记录:project release gate wrapper + +本轮在当前 scope complete 后继续快速推进可维护性,不新增运行时功能。新增单入口 project +release gate wrapper,把 `docs/project-release-handoff.md` 中的最小 release validation commands +固化为可执行脚本,减少后续维护者手动拼命令的漂移风险。 + +完成内容: + +- 新增 `wasm-port/tests/host/verify_project_release_gate.sh`; +- 脚本执行当前 scope 最小 release validation commands: + - `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_ini_panel_browser.sh`; + - `wasm-port/tests/ui/node/verify_ui_node_smokes.sh`; + - `wasm-port/tests/host/verify_host_smokes.sh`; +- 脚本成功时输出 `project_release_gate=ok`; +- `wasm-port/docs/project-release-handoff.md` 增加单入口 release gate 命令和输出; +- `wasm-port/README.md` 增加单入口 release gate 命令和输出; +- `PROJECT_COMPLETION_TRACKER.md` 增加 Project release gate wrapper 状态与 checklist 项; +- `wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs` 增加 release gate wrapper + 文档/脚本漂移检查; +- 未新增控制按钮; +- 未执行 action-plan; +- 未解析 G-code; +- 未解释 canonical events; +- 未新增 JS CNC 语义; +- 未运行 opt-in runtime probes; +- 未 promotion blocked runtime family; +- 未改变 LinuxCNC interpreter、tool、parameter、planner、kinematics、remap 或 LinuxCNC-owned + runtime semantics。 + +验证已通过: + +```bash +git diff --check +wasm-port/tests/docs/node/verify_project_release_handoff_docs.sh +wasm-port/tests/host/verify_project_release_gate.sh +``` + +关键输出: + +```text +project_release_handoff_docs_node_smoke=ok +vendor sync up to date +standalone CNC semantics guard complete +interp_wasm_node_smoke=ok +sim_configs_wasm_node_inventory_unexpected_fail=0 +browser_ini_shell_integration_workflow_smoke=ok +ui_node_smokes=ok +host_wasm_opfs_browser_smokes=ok +project_release_gate=ok +``` + +下一步工作计划: + +若本批验证通过并提交,后续可以继续做低风险可维护性推进:为 project release gate 增加短文档索引或 +CI 入口说明;或者在真实 LinuxCNC host runtime 可用前,保持 blocked runtime family 不 promotion, +只维护 guard、docs 和 workflow/API 边界。 diff --git a/wasm-port/README.md b/wasm-port/README.md index 3057a3f..c91e554 100644 --- a/wasm-port/README.md +++ b/wasm-port/README.md @@ -9,7 +9,13 @@ handoff. It links the browser/UI workflow surface, SDK surface, OPFS/session persistence scope, sim-config coverage baseline, blocked host/runtime families, source reuse rules, drift rules, and acceptance tracker. -The minimum release validation commands for the current scope are: +The project release gate for the current scope is: + +```bash +wasm-port/tests/host/verify_project_release_gate.sh +``` + +It executes these minimum release validation commands: ```bash git diff --check @@ -31,6 +37,7 @@ sim_configs_coverage_docs_node_smoke=ok host_runtime_boundary_docs_node_smoke=ok sdk_surface_node_smoke=ok host_wasm_opfs_browser_smokes=ok +project_release_gate=ok ``` Browser/UI entry points are documented in `docs/panel-entry.md`. Stable SDK diff --git a/wasm-port/docs/project-release-handoff.md b/wasm-port/docs/project-release-handoff.md index 685f23f..af55813 100644 --- a/wasm-port/docs/project-release-handoff.md +++ b/wasm-port/docs/project-release-handoff.md @@ -37,7 +37,14 @@ continuation records are in `../text14.txt`. ## Required release gates -Run these before claiming the current scope is release-ready: +Run the single project release gate before claiming the current scope is +release-ready: + +```bash +wasm-port/tests/host/verify_project_release_gate.sh +``` + +It executes the same minimum release validation commands: ```bash git diff --check @@ -55,6 +62,7 @@ browser smoke coverage. A passing aggregate ends with: ```text host_wasm_opfs_browser_smokes=ok +project_release_gate=ok ``` ## Expected baseline outputs @@ -110,6 +118,7 @@ must not be run on hosts that do not provide the required LinuxCNC runtime. - UI Node smoke passes. - Browser INI panel smoke passes. - Host aggregate smoke passes. +- `verify_project_release_gate.sh` passes. - SDK exports match `runtime/sdk/README.md`. - `docs/panel-entry.md` documents the external shell workflow surface. - OPFS/session, sim-config coverage, host/runtime boundary, source reuse, and diff --git a/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs b/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs index 7d3b254..9405bd3 100644 --- a/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs +++ b/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs @@ -17,6 +17,7 @@ const sdkReadmeText = readFileSync(resolve(root, "runtime/sdk/README.md"), "utf8 const sourceReuseText = readFileSync(resolve(root, "docs/source-reuse-map.md"), "utf8"); const driftText = readFileSync(resolve(root, "docs/drift-report.md"), "utf8"); const hostSmokeText = readFileSync(resolve(root, "tests/host/verify_host_smokes.sh"), "utf8"); +const projectReleaseGateText = readFileSync(resolve(root, "tests/host/verify_project_release_gate.sh"), "utf8"); const trackerText = readFileSync(resolve(root, "../PROJECT_COMPLETION_TRACKER.md"), "utf8"); for (const phrase of [ @@ -33,7 +34,9 @@ for (const phrase of [ "workflow overview embedding mount DOM", "verify_no_standalone_cnc_semantics.sh", "verify_host_smokes.sh", + "verify_project_release_gate.sh", "host_wasm_opfs_browser_smokes=ok", + "project_release_gate=ok", "sim_configs_wasm_node_inventory_unexpected_fail=0", "browser_ini_shell_integration_workflow_smoke=ok", "project_release_handoff_docs_node_smoke=ok", @@ -52,6 +55,20 @@ for (const phrase of [ assert.match(hostSmokeText, literalRegExp("verify_project_release_handoff_docs.sh")); } +for (const phrase of [ + "git diff --check", + "verify_vendor_sync.sh", + "verify_no_standalone_cnc_semantics.sh", + "verify_interp_wasm.sh", + "verify_sim_configs_inventory_wasm.sh", + "verify_ini_panel_browser.sh", + "verify_ui_node_smokes.sh", + "verify_host_smokes.sh", + "project_release_gate=ok", +]) { + assert.match(projectReleaseGateText, literalRegExp(phrase)); +} + for (const phrase of [ "docs/project-release-handoff.md", "runtime/sdk/src/index.js", @@ -70,6 +87,7 @@ for (const phrase of [ assert.match(sourceReuseText, literalRegExp("docs/project-release-handoff.md")); assert.match(driftText, literalRegExp("docs/project-release-handoff.md")); assert.match(trackerText, /Documentation\/release gate/); +assert.match(trackerText, /Project release gate wrapper/); assert.match(trackerText, /Final Acceptance Checklist/); console.log("project_release_handoff_docs_node_smoke=ok"); diff --git a/wasm-port/tests/host/verify_project_release_gate.sh b/wasm-port/tests/host/verify_project_release_gate.sh new file mode 100755 index 0000000..1273a45 --- /dev/null +++ b/wasm-port/tests/host/verify_project_release_gate.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)" +REPO_ROOT="$(cd "$ROOT_DIR/.." && pwd)" + +cd "$REPO_ROOT" + +git diff --check +"$ROOT_DIR/tools/verify_vendor_sync.sh" +"$ROOT_DIR/tools/verify_no_standalone_cnc_semantics.sh" +SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_interp_wasm.sh" +SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_sim_configs_inventory_wasm.sh" +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_ini_panel_browser.sh" +"$ROOT_DIR/tests/ui/node/verify_ui_node_smokes.sh" +"$ROOT_DIR/tests/host/verify_host_smokes.sh" + +echo "project_release_gate=ok"