接续上一轮,按接续文件持续推进

结论:已完成剩余77个SKIP的promotion复核;仅2个main SKIP且promotion_allowed均为0,当前baseline保持82/82/77/0,并新增文档与docs smoke防止误promotion。
This commit is contained in:
2026-06-20 08:07:06 +08:00
parent 07869f5c69
commit c2e07518d3
5 changed files with 246 additions and 6 deletions

View File

@@ -1,15 +1,15 @@
# Project Completion Tracker # Project Completion Tracker
Last updated: 2026-06-16 CST Last updated: 2026-06-20 CST
This file tracks the overall completion state of the LinuxCNC WASM/browser port. This file tracks the overall completion state of the LinuxCNC WASM/browser port.
Use it for project-level status and acceptance tracking. Use `text16.txt` for Use it for project-level status and acceptance tracking. Use `text32.txt` for
turn-by-turn continuation notes and next-batch execution records. turn-by-turn continuation notes and next-batch execution records.
## Current Status ## Current Status
- Active continuation file: `text16.txt` - Active continuation file: `text32.txt`
- Latest completed batch: AXIS run summary - Latest completed batch: remaining 77 SKIP promotion audit
- Latest relevant commit: use `git log -1 --oneline` after each committed batch - Latest relevant commit: use `git log -1 --oneline` after each committed batch
- Working tree at tracker creation: clean - Working tree at tracker creation: clean
- Required policy: LinuxCNC remains the only CNC semantic source - Required policy: LinuxCNC remains the only CNC semantic source
@@ -32,7 +32,7 @@ The project is complete for the current scope when all of the following are true
- Host/runtime blocked families are explicitly documented and not falsely promoted. - Host/runtime blocked families are explicitly documented and not falsely promoted.
- All required gates pass. - All required gates pass.
- Documentation explains what is supported, blocked, and how to verify it. - Documentation explains what is supported, blocked, and how to verify it.
- `text16.txt` contains the current continuation record and the working tree is clean. - `text32.txt` contains the current continuation record and the working tree is clean.
## Area Status ## Area Status
@@ -45,7 +45,7 @@ The project is complete for the current scope when all of the following are true
| Simulation test program library | Active | Built-in browser simulation programs live in `wasm-port/runtime/ui/simulation/programs/`, one module per program, exported through `programs/index.js`; `verify_real_simulation_programs.sh` checks directory-backed inventory, IDs, defaults, and playback contracts. | | Simulation test program library | Active | Built-in browser simulation programs live in `wasm-port/runtime/ui/simulation/programs/`, one module per program, exported through `programs/index.js`; `verify_real_simulation_programs.sh` checks directory-backed inventory, IDs, defaults, and playback contracts. |
| Vendor/source guard | Stable | `verify_vendor_sync.sh` and standalone semantic guard are required every batch. | | Vendor/source guard | Stable | `verify_vendor_sync.sh` and standalone semantic guard are required every batch. |
| Interpreter WASM smoke | Stable | `interp_wasm_node_smoke=ok`. | | Interpreter WASM smoke | Stable | `interp_wasm_node_smoke=ok`. |
| Sim config inventory | Stable with skips | `executed=28`, `passed=28`, `skipped=131`, `unexpected_fail=0`; `docs/sim-configs-coverage-handoff.md` records the release-gate baseline. | | Sim config inventory | Stable with skips | `executed=82`, `passed=82`, `skipped=77`, `unexpected_fail=0`; `docs/sim-configs-coverage-handoff.md` records the release-gate baseline. The 2026-06-20 remaining-skip audit found 2 skipped main-program rows and 0 rows with `promotion_allowed=1`, so the baseline must not change without new LinuxCNC-owned native/Node/browser proof. |
| Native nc_files baseline | Stable | Last recorded Layer 1: `total 107`, `pass 101`, `expected_fail 6`, `unexpected_fail 0`. | | Native nc_files baseline | Stable | Last recorded Layer 1: `total 107`, `pass 101`, `expected_fail 6`, `unexpected_fail 0`. |
| Native sim configs baseline | Stable | Last recorded Layer 2: `total 159`, `pass 151`, `expected_fail 8`, `unexpected_fail 0`. | | Native sim configs baseline | Stable | Last recorded Layer 2: `total 159`, `pass 151`, `expected_fail 8`, `unexpected_fail 0`. |
| OPFS/session persistence | Stable for current scope | Browser smoke passes, SDK re-exports OPFS/session helpers including `readMachineSessionReadiness()` and `createMachineSessionPersistenceSummary()`, the UI exposes `getMachineSessionPersistenceSummary()`, and `docs/opfs-session-persistence.md` defines the project-level release gate. | | OPFS/session persistence | Stable for current scope | Browser smoke passes, SDK re-exports OPFS/session helpers including `readMachineSessionReadiness()` and `createMachineSessionPersistenceSummary()`, the UI exposes `getMachineSessionPersistenceSummary()`, and `docs/opfs-session-persistence.md` defines the project-level release gate. |

150
text32.txt Normal file
View File

@@ -0,0 +1,150 @@
项目接续文件:剩余 77 个 SKIP promotion 复核完成
生成时间2026-06-20 CST
一、本轮完成内容
按上一轮 `text31.txt` 的要求,已重新生成并复核当前 sim-config
inventory artifact
```bash
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
```
当前结果:
```text
sim_configs_wasm_node_inventory_executed=82
sim_configs_wasm_node_inventory_passed=82
sim_configs_wasm_node_inventory_skipped=77
sim_configs_wasm_node_inventory_unexpected_fail=0
sim_configs_wasm_node_inventory_skip_ASSET_ONLY=65
sim_configs_wasm_node_inventory_skip_L4_USER_M_PROCESS=1
sim_configs_wasm_node_inventory_skip_NON_MAIN_CLASS=10
sim_configs_wasm_node_inventory_skip_UPSTREAM_DEMO=1
sim_configs_wasm_node_inventory=ok
```
二、77 个 SKIP 复核结论
`remaining-skip-main-program-promotion-audit.tsv` 中只有 2 个 class=main
的 SKIP
```text
axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc
skip_kind=UPSTREAM-DEMO
native_status=FAIL
native_expected_failure=upstream-demo-missing-motion-gcode
promotion_allowed=0
conclusion=保留 upstream demo edge不强行 PASS
axis/vismach/millturn/example.ngc
skip_kind=L4-USER-M-PROCESS
native_status=PASS
simulation_proof_status=ready_disabled_by_default:native=0:node=0:browser=0
promotion_allowed=0
conclusion=Web virtual HAL 已有 M428/M429 -> M128/M129 状态 proof
但 external user-M arbitrary process execution 仍 disabled
不能作为 inventory promotion proof
```
其余 SKIP
```text
ASSET-ONLY=65
NON_MAIN_CLASS=10
```
这些不是 standalone browser main-program promotion 对象。
本轮最终结论:
```text
remaining_skip_count=77
remaining_skipped_main_program_rows=2
remaining_skipped_main_program_promotion_allowed=0
direct_inventory_promotion_rows=0
baseline_change_allowed=no
```
三、本轮代码/文档改动
已更新:
```text
PROJECT_COMPLETION_TRACKER.md
wasm-port/docs/sim-config-coverage-promotion-analysis.md
wasm-port/docs/sim-configs-coverage-handoff.md
wasm-port/tests/docs/node/verify_sim_configs_coverage_docs.mjs
text32.txt
```
新增 docs smoke 断言:
```text
1. skip-summary.tsv 仍是 ASSET-ONLY=65 / L4-USER-M-PROCESS=1 /
NON_MAIN_CLASS=10 / UPSTREAM-DEMO=1
2. remaining-skip-main-program-promotion-audit.tsv 只有 2 行;
3. 两行均 class=main
4. 两行均 promotion_allowed=0 且 promotion_ready=0
5. 路径必须是 millturn/example.ngc 和 incremental_repetition_g533.ngc。
```
四、已运行验证
```bash
git diff --check
wasm-port/tests/docs/node/verify_sim_configs_coverage_docs.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/sdk/node/verify_sdk_surface.sh
wasm-port/tests/ui/node/verify_real_simulation_programs.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
```
结果:
```text
sim_configs_coverage_docs_node_smoke=ok
sim_configs_wasm_node_inventory=ok
sdk_surface_node_smoke=ok
project_release_gate_manifest_node_smoke=ok
project_release_artifact_url_workflow_node_smoke=ok
project_batch_acceptance_workflow_node_smoke=ok
real_simulation_programs_node_smoke=ok
browser_real_simulation_page_smoke=ok
standalone CNC semantics guard complete
```
五、下一步工作计划
不要继续尝试把 77 个 SKIP 直接改 PASS。当前没有可直接 promotion 的
remaining SKIP main-program row。
下一批应推进已经 PASS 的 row 的 browser diagnostics / release evidence
不改 inventory baseline。优先顺序
```text
1. 读取 evidence-expansion-candidates.tsv
2. 从已 PASS 且 matrix_layer4_browser=REP 的五轴/vismach row 中选一组;
3. 优先建议:
- axis/vismach/5axis/table-rotary-tilting/demos/boat-xyzac.ngc
- axis/vismach/5axis/table-rotary-tilting/demos/xyzac_switchkins.ngc
- axis/vismach/melfa-sim/example.ngc
- axis/vismach/puma/puma_cube.ngc
4. 为首个候选补 browser diagnostics evidence不新增 JS CNC 语义;
5. 让 release artifact / real simulation diagnostics DOM 能显示该 evidence
6. 补 Node/browser smoke
7. 保持 inventory baseline=82/82/77/0。
```
推荐下一轮验证命令:
```bash
git diff --check
wasm-port/tests/docs/node/verify_sim_configs_coverage_docs.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/sdk/node/verify_sdk_surface.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
```

View File

@@ -26,6 +26,44 @@ as a blanket reason to reduce the skip baseline. The next useful promotions are
case promotions from Node inventory or representative coverage into browser, case promotions from Node inventory or representative coverage into browser,
diagnostics, and release evidence. diagnostics, and release evidence.
## 2026-06-20 Remaining Skip Promotion Audit
The generated audit for the remaining 77 skipped rows is:
```text
build/wasm/sim-configs-inventory/remaining-skip-main-program-promotion-audit.tsv
```
It contains only two skipped rows whose class is `main`:
| Path | Skip kind | Native status | Promotion allowed | Decision |
| --- | --- | --- | ---: | --- |
| `axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc` | `UPSTREAM-DEMO` | `FAIL` with `upstream-demo-missing-motion-gcode` | 0 | Preserve as an upstream demo edge; do not force into PASS. |
| `axis/vismach/millturn/example.ngc` | `L4-USER-M-PROCESS` | `PASS` | 0 | Web virtual HAL proof exists for M428/M429 to M128/M129 transition state, but arbitrary external user-M process execution remains disabled and is not an inventory promotion proof. |
The remaining skipped rows are not direct main-program promotion targets:
```text
ASSET-ONLY=65
NON_MAIN_CLASS=10
```
The 2026-06-20 audit conclusion is therefore explicit:
```text
remaining_skip_count=77
remaining_skipped_main_program_rows=2
remaining_skipped_main_program_promotion_allowed=0
direct_inventory_promotion_rows=0
baseline_change_allowed=no
```
Future work should add browser diagnostics and release evidence for already
passing Node inventory or representative rows. It should not change the
inventory baseline unless a later patch supplies LinuxCNC-owned native proof,
Node/WASM proof, browser proof, and a manual promotion-lock update for the row
being promoted.
## What Virtual HAL Unlocks ## What Virtual HAL Unlocks
The virtual HAL is now a source-derived Web simulation replacement for these The virtual HAL is now a source-derived Web simulation replacement for these

View File

@@ -63,6 +63,19 @@ incomplete user-M process native/inventory promotion proof, even though the
browser simulation state now includes a source-derived virtual HAL proof for browser simulation state now includes a source-derived virtual HAL proof for
the `M429 -> M129` turn and `M428 -> M128` mill state transitions. The TWP the `M429 -> M129` turn and `M428 -> M128` mill state transitions. The TWP
`incremental_repetition_g533.ngc` row remains preserved upstream demo evidence. `incremental_repetition_g533.ngc` row remains preserved upstream demo evidence.
The 2026-06-20 re-audit confirmed that there are no directly promotable
remaining skipped main-program rows:
```text
remaining_skip_count=77
remaining_skipped_main_program_rows=2
remaining_skipped_main_program_promotion_allowed=0
direct_inventory_promotion_rows=0
baseline_change_allowed=no
```
The 65 `ASSET-ONLY` rows and 10 `NON_MAIN_CLASS` rows remain non-main evidence
targets, not standalone browser main programs.
SDK and workflow-overview release URL summaries expose the current SDK and workflow-overview release URL summaries expose the current
`evidence-ready` layer as dashboard fields: `evidence-ready-candidate-rows=8`, `evidence-ready` layer as dashboard fields: `evidence-ready-candidate-rows=8`,

View File

@@ -45,6 +45,11 @@ for (const phrase of [
"sim_configs_wasm_node_inventory_skip_UPSTREAM_DEMO=1", "sim_configs_wasm_node_inventory_skip_UPSTREAM_DEMO=1",
"build/wasm/sim-configs-inventory/skip-summary.tsv", "build/wasm/sim-configs-inventory/skip-summary.tsv",
"build/wasm/sim-configs-inventory/blocked-dependency-summary.tsv", "build/wasm/sim-configs-inventory/blocked-dependency-summary.tsv",
"remaining_skip_count=77",
"remaining_skipped_main_program_rows=2",
"remaining_skipped_main_program_promotion_allowed=0",
"direct_inventory_promotion_rows=0",
"baseline_change_allowed=no",
"verify_no_standalone_cnc_semantics.sh", "verify_no_standalone_cnc_semantics.sh",
"verify_sim_configs_coverage_docs.sh", "verify_sim_configs_coverage_docs.sh",
"L4-PYTHON-REMAP", "L4-PYTHON-REMAP",
@@ -65,6 +70,11 @@ for (const phrase of [
"axis/rose_engine/rcone_demo.ngc", "axis/rose_engine/rcone_demo.ngc",
"axis/external_offsets/queuebuster.ngc", "axis/external_offsets/queuebuster.ngc",
"Web Simulation Improvements From Virtual HAL", "Web Simulation Improvements From Virtual HAL",
"2026-06-20 Remaining Skip Promotion Audit",
"remaining_skipped_main_program_promotion_allowed=0",
"direct_inventory_promotion_rows=0",
"axis/vismach/millturn/example.ngc",
"incremental_repetition_g533.ngc",
"Browser and Node simulation no longer need host `halcmd`, `halrun`, or a", "Browser and Node simulation no longer need host `halcmd`, `halrun`, or a",
"servo-period stepping", "servo-period stepping",
"8 diagnostics-ready candidates across 3 families and 17 source files", "8 diagnostics-ready candidates across 3 families and 17 source files",
@@ -109,4 +119,33 @@ if (existsSync(skipSummaryPath)) {
); );
} }
const remainingSkipAuditPath = resolve(
root,
"build/wasm/sim-configs-inventory/remaining-skip-main-program-promotion-audit.tsv",
);
if (existsSync(remainingSkipAuditPath)) {
const rows = parseTsv(readFileSync(remainingSkipAuditPath, "utf8"));
assert.equal(rows.length, 2);
assert.deepEqual(
rows.map((row) => row.path).sort(),
[
"axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc",
"axis/vismach/millturn/example.ngc",
],
);
assert.deepEqual(
Object.fromEntries(rows.map((row) => [row.path, row.skip_kind])),
{
"axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc":
"UPSTREAM-DEMO",
"axis/vismach/millturn/example.ngc": "L4-USER-M-PROCESS",
},
);
for (const row of rows) {
assert.equal(row.class, "main");
assert.equal(row.promotion_allowed, "0");
assert.equal(row.promotion_ready, "0");
}
}
console.log("sim_configs_coverage_docs_node_smoke=ok"); console.log("sim_configs_coverage_docs_node_smoke=ok");