Files
cnc_wams/text7.txt

1428 lines
43 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
项目整体完成情况与后续执行计划
生成时间2026-06-13 CST
本文件接替 `text6.txt`。后续工作按 `text7.txt` 执行;除非明确要求审计旧记录,
不要再回到 `text1/text2/text3/text4/text5/text6` 扩展进度。`text6.txt` 作为历史
归档保留。
一、续接状态与防重规则
1. 当前续接点。
`text6.txt` 已推进到:
```text
四十九、2026-06-13 继续执行记录remap generated-file staging helper inventory
```
该批已提交:
```text
bea8320 Guard remap generated file staging
```
本文件从 `text7.txt` 重新开始记录后续进度。
2. 每轮开始前必须先执行。
```bash
git status --short
git log -5 --oneline
tail -n 120 text7.txt
awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
执行规则:
- 如果 `git status --short` 是 clean且最新提交已经包含当前建议工作不要重复追加记录
- 每轮只追加一个新的中文编号记录;提交前再次检查标题唯一性;
- `text7.txt` 只记录新的后续进度,不复制 `text6.txt` 的长历史;
- 每批完成后,如果要写记录,先写 `text7.txt`,再提交该批代码和记录;
- 如果发现重复记录,先做 dedupe 清理并提交,再继续新功能或新 guard。
二、当前项目纪律
1. LinuxCNC 仍是唯一 CNC 语义来源。
G-code、remap、tool、parameter、planner、kinematics、user-M、tool DB、Python
remap 等语义必须来自 LinuxCNC upstream 或 vendored LinuxCNC C/C++/配置/脚本源码。
2. 本项目允许实现的范围仍限于:
- build
- source sync
- runtime shim
- filesystem staging
- OPFS
- WASM/browser boundary
- 测试胶水;
- 文档;
- 机器可读 gate/artifact。
3. 禁止事项继续有效:
- 不在 JS 中重写 G-code 或 CNC 语义;
- 不修改 vendored LinuxCNC 源文件来让测试通过;
- 不把 full-process/HAL/UI/Python/tool DB 依赖伪装成 standalone pass
- 不把 expected failure 硬改成 pass除非已有 LinuxCNC-owned runtime proof并且
native、Node、browser gate 都按顺序通过;
- browser 不能依赖目录枚举。
三、当前完成情况摘要
1. WASM port 基础架构稳定。
`wasm-port` 已按独立移植工作区组织,包含 vendor、runtime/core、runtime/sdk、
runtime/opfs、runtime/ui、native/wasm/browser tests、docs 和 tools。
2. 关键基线保持稳定。
- `linuxcnc/nc_files` native Layer 1
- `total 107`
- `pass 101`
- `expected_fail 6`
- `unexpected_fail 0`
- `linuxcnc/configs/sim` native Layer 2
- `total 159`
- `pass 151`
- `expected_fail 8`
- `unexpected_fail 0`
- Node sim-config inventory
- `executed=28`
- `passed=28`
- `skipped=131`
- `unexpected_fail=0`
3. blocked runtime family 仍未 promotion。
仍 blocked不允许 promotion
- `L4-USER-M-PROCESS`
- `L4-TOOL-DB`
- `L4-PYTHON-REMAP`
当前 host 仍按缺少 LinuxCNC host runtime 处理,不执行任何:
```bash
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
```
4. staged path guard 当前收敛状态。
`text6.txt` 已完成并提交的主要收敛包括:
- ordinary interp direct-file / multi-file staged path guard
- `oword-bug315`、`oword-bug315-p2`、`namedparam-bug424` 等 early direct-file guard
- `cam-nisley`、`cam-nisley-bare`、`flowsnake`、`inside-corners`、
`inverse-time-with-comp` 等 interp guard
- `bad`、`good`、`g33.1`、`g6164`、`g71`、`g72`、`g76`、rotation、INI-context
fixture guard
- `m98m99` fixed `.ngc` manifest guard
- `g10` fixed `.ngc/.tbl` manifest guard
- `g52/g92` direct-file guard
- ccomp per-file staging helper guard
- remap aggregate staging helper 已收敛为 coverage helper + per-file staging helper
- `nested-remaps-oword` 保留 expected-unstaged overlap guard
- `remap-io/simpockets.tbl` 已切换为 generated-file staging helper
- Node/browser 侧已删除无调用的 remap aggregate helper。
5. 当前最近提交。
当前最近提交包括:
```text
bea8320 Guard remap generated file staging
e039cac Guard final special remap staging paths
76aa9fb Guard final simple remap staging paths
fe07e2f Guard more remap per-file staging paths
d7cd116 Guard initial remap per-file staging paths
```
四、当前必须保持通过的验证入口
每批后续改动至少运行:
```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
```
涉及 native baseline 或大范围 source/staging 改动时,再运行:
```bash
wasm-port/tests/native/verify_nc_files.sh
wasm-port/tests/native/verify_sim_configs.sh
wasm-port/tests/native/verify_native_probes.sh
```
五、下一步执行计划
1. 当前第一候选批次。
继续 staged path guard inventory 第二轮,优先处理 INI-context helper 内的 inline prefix
strip
```text
assertInterpIniContextNgcStaging(...)
```
当前已知位置:
```text
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
wasm-port/tests/browser/interp_smoke.html
```
执行目标:
- Node 侧将 `file.wasmPath.replace(`/work/interp/${name}/`, "")` 收敛为专用 helper
- browser 侧将 `file.wasmPath.replace(`/work/browser-interp/${name}/`, "")` 同步收敛;
- helper 必须检查 staged path 确实带有期望前缀,避免普通 `replace(...)` 静默放过
错误路径;
- 保持 browser 不枚举目录;
- 只整理 host/filesystem staging guard不改变 INI、O-word、parameter、remap 或
interpreter 语义。
2. 第一候选批次验证。
执行:
```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_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.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 staged prefix stripping
```
3. 后续候选原则。
继续只选:
- 已有 Node/browser coverage
- 不依赖 HAL/task/tool DB/Python remap/user-M process
- direct-file、generated-file 或 staging helper 已成型;
- 每批小范围收敛;
- 只做 host/filesystem staging guard不新增 CNC 语义。
暂不推进:
- blocked runtime promotion
- browser full 159 sim-config inventory
- full-process/HAL/UI/Python/tool DB 执行;
- upstream intake 大批量扩面。
六、下一次开始执行时的第一条命令
从这里继续:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
七、2026-06-13 继续执行记录staged prefix stripping guard
1. 本批目标。
按本文件第一候选批次继续 staged path guard inventory 第二轮,收敛 INI-context helper
内的 inline prefix strip
```text
assertInterpIniContextNgcStaging(...)
```
2. 已完成改动。
- Node 侧新增 `stripInterpIniContextStagingPrefix(...)`
- browser 侧新增 `stripInterpIniContextStagingPrefix(...)`
- 两侧均先检查 staged `wasmPath` 带有期望前缀,再用 `slice(...)` 取相对路径;
- 删除两侧 `file.wasmPath.replace(...)` 的静默前缀剥离;
- 保持 browser 不枚举目录;
- 未修改 INI、O-word、parameter、remap 或 interpreter 语义。
涉及文件:
```text
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
wasm-port/tests/browser/interp_smoke.html
```
3. 本批建议验证。
```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_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.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 staged prefix stripping
```
4. 下一步工作建议。
继续 staged path guard inventory 第三轮,优先扫描剩余 `wasmPath` 字符串拼接、prefix
strip 或 helper 旁路点,只选择已有 Node/browser coverage 且不依赖 HAL/task/tool
DB/Python remap/user-M process 的小批次。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
八、2026-06-13 继续执行记录fiveaxis staging manifest guard
1. 本批目标。
继续 staged path guard inventory 第三轮,收敛 fiveaxis 三组 helper 的 staged 文件写入:
```text
writeFiveAxisTrtMachineFiles(...)
writeFiveAxisTdrMachineFiles(...)
writeFiveAxisBridgeMillMachineFiles(...)
```
2. 已完成改动。
- Node 侧新增 fiveaxis 固定 manifest 写入 helper
- Node 侧为 `remap_subs` 和 `demos` 的 `.ngc` 子集增加 upstream coverage drift
断言;
- Node 侧移除 fiveaxis helper 里的 ad hoc `readdirSync(remap_subs)` 写入;
- browser 侧新增 fiveaxis 固定 manifest 写入 helper
- browser 侧增加 duplicate-free 和 staged root/path parity 断言;
- browser 侧仍不枚举目录;
- 未修改 INI、remap、kinematics、HAL 或 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 fiveaxis staging manifests
```
5. 下一步工作建议。
继续 staged path guard inventory 第四轮,优先扫描 `verify_interp_wasm.mjs` 和
`interp_smoke.html` 中剩余的 direct literal `/work/...` 写入点,选择已有
Node/browser 成对覆盖、且可以用 fixed manifest 或 single-file staging helper
收敛的小批次。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
九、2026-06-13 继续执行记录local gcode fixture staging guard
1. 本批目标。
继续 staged path guard inventory 第四轮,优先处理已有 Node/browser 成对覆盖的 local
fixture direct `/work/...` 写入点:
```text
coordinate_offsets.ngc
position_params.ngc
```
2. 已完成改动。
- 修正 `text7.txt` 中第七/第八条记录顺序,避免后续记录继续乱序;
- Node 侧新增 `writeLocalGcodeFixture(...)`
- browser 侧新增 `writeLocalGcodeFixture(...)`
- `coordinate_offsets` 和 `position_params` 两侧均改为 helper 写入;
- helper 显式检查 staged `wasmPath` 与期望路径一致;
- browser 侧仍不枚举目录;
- 未修改 G-code、canon expected、parameter、tool table 或 interpreter 语义。
涉及文件:
```text
text7.txt
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 local gcode fixture staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第五轮,优先处理 `runVendorNcFile(...)` /
`runVendorNcFileWithToolTable(...)` 这类 vendor `nc_files` direct/context helper
增加 single-file root parity 和 context file manifest guard仍暂不碰 parameter/tool
table runtime state tests。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
十、2026-06-13 继续执行记录browser nc-files staging guard
1. 本批目标。
继续 staged path guard inventory 第五轮,处理 browser 侧 vendor `nc_files` helper
```text
runVendorNcFile(...)
runVendorNcFileWithToolTable(...)
```
2. 已完成改动。
- browser 侧新增 `assertVendorNcFileStaging(...)`
- browser 侧新增 `assertVendorNcFileContextStaging(...)`
- direct `nc_files` helper 增加 `/work/browser-nc-files/<file>` root parity guard
- context helper 增加固定 manifest guard
- `<file>`
- `tool.tbl`
- `nc_files_context.ini`
- context helper 增加 staged root/path parity guard
- browser 侧仍不枚举目录;
- 未修改 vendor `nc_files`、tool table 内容、INI 内容或 interpreter 语义。
涉及文件:
```text
wasm-port/tests/browser/interp_smoke.html
```
3. 已完成的目标验证。
```bash
git diff --check
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_interp_wasm.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 browser nc-files staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第六轮,优先处理 browser/Node 中剩余的单文件
direct `/work/...` 写入点,例如 `disable_fanuc_style_sub_m98.ngc` 或 spindle-orient
INI fixture staging继续避开 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 继续执行记录local INI/direct fixture staging guard
1. 本批目标。
继续 staged path guard inventory 第六轮,处理 Node/browser 成对覆盖的 local INI 与
direct G-code fixture staging
```text
spindle_orient_offset.ini
disable_fanuc_style_sub.ini
spindle_orient_offset.ngc
disable_fanuc_style_sub_m98.ngc
```
2. 已完成改动。
- Node 侧新增 `writeLocalIniFixture(...)`
- browser 侧新增 `writeLocalIniFixture(...)`
- `spindle_orient_offset.ini` 和 `disable_fanuc_style_sub.ini` 两侧均改为 helper 写入;
- `spindle_orient_offset.ngc` 和 `disable_fanuc_style_sub_m98.ngc` 两侧均改为
`writeLocalGcodeFixture(...)` 写入;
- helper 显式检查 staged `wasmPath` 与期望路径一致;
- browser 侧仍不枚举目录;
- 未修改 INI 内容、G-code 内容、canon expected、tool table 或 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 local INI/direct fixture staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第七轮,优先处理 `INTERP_FILE_FIXTURES` /
`INTERP_BROWSER_FILE_FIXTURES` 和 `INTERP_ERROR_FIXTURES` 这类循环写入点,增加
loop-level single-file staging helper 或 manifest parity guard继续避开
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
```
十三、2026-06-13 继续执行记录INI context direct fixture staging guard
1. 本批目标。
继续 staged path guard inventory 第八轮,处理 Node/browser 成对覆盖的 INI-context
direct file 与 fixed manifest staging
```text
namedparam_semantics.ngc
namedparam_ini_semantics.ngc
ini_tool_table.ini
ini_tool_table.tbl
ini_tool_table.ngc
```
2. 已完成改动。
- `namedparam_semantics.ngc` 两侧均改为 `writeLocalGcodeFixture(...)` 写入;
- `namedparam_ini_semantics.ngc` 两侧均改为 `writeLocalGcodeFixture(...)` 写入;
- Node 侧新增 `writeIniToolTableFixtureStaging(...)`
- browser 侧新增 `writeIniToolTableFixtureStaging(...)`
- `ini_tool_table` 三文件 staging 增加 fixed manifest、duplicate-free 和 root/path
parity guard
- browser 侧仍不枚举目录;
- 未修改 INI 内容、G-code 内容、tool table 内容、canon 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 INI context fixture staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第九轮,优先处理剩余 direct `/work/...` run-step
代表路径,例如 `minimal_linear_run_steps` 直接使用 `/work/minimal_linear.ngc` 的调用
点,或继续扫描 `verify_interp_wasm.mjs` / `interp_smoke.html` 中未被 helper 覆盖的
单文件 staging继续避开 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 继续执行记录minimal linear run-step staging guard
1. 本批目标。
继续 staged path guard inventory 第九轮,处理 Node/browser 成对覆盖的 run-step
代表 direct path
```text
minimal_linear_run_steps
browser_minimal_linear_run_steps
```
2. 已完成改动。
- Node 侧将 `interp.runFile("/work/minimal_linear.ngc")` 改为使用
`writeLocalGcodeFixture(...)` 返回的 guarded path
- browser 侧将 `interp.runFile("/work/minimal_linear.ngc")` 改为使用
`writeLocalGcodeFixture(...)` 返回的 guarded path
- 两侧均显式检查 staged `wasmPath` 与期望路径一致;
- browser 侧仍不枚举目录;
- 未修改 G-code 内容、run-step 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 minimal linear run-step staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十轮,优先处理 `cam-nisley-bare` direct
`runFile(...)` 路径,或 `g52/g92-persistence` 这类固定 staging directory继续避开
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 继续执行记录cam-nisley bare direct staging guard
1. 本批目标。
继续 staged path guard inventory 第十轮,处理 Node/browser 成对覆盖的
`cam-nisley-bare` direct `runFile(...)` 路径:
```text
/work/interp/cam-nisley-bare/cam.ngc
/work/browser-interp/cam-nisley-bare/cam.ngc
```
2. 已完成改动。
- Node 侧将 bare `cam.ngc` staged path 提取为 `camNisleyBarePath`
- Node 侧使用 `assertInterpRegressionFileStaging(...)` 检查 staged path
- browser 侧将 bare `cam.ngc` staged path 提取为 `camNisleyBarePath`
- browser 侧使用 `assertInterpRegressionFileStaging(...)` 检查 staged path
- 写入和 `runFile(...)` 均使用同一个 guarded path
- browser 侧仍不枚举目录;
- 未修改 upstream `cam.ngc`、expected output 或 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 cam-nisley bare staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十一轮,优先处理 `g52/g92-persistence` 固定
staging directory增加 fixed manifest/root parity guard继续避开 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 继续执行记录G92 persistence staging manifest guard
1. 本批目标。
继续 staged path guard inventory 第十一轮,处理 Node/browser 成对覆盖的
`g52/g92-persistence` 固定 staging directory
```text
test.ngc
startup.var
persist.ini
disabled.ini
```
2. 已完成改动。
- Node 侧新增 `writeG92PersistenceStaging(...)`
- browser 侧新增 `writeG92PersistenceStaging(...)`
- 四个 generated fixture 文件增加 fixed manifest、duplicate-free 和 root/path
parity guard
- enabled/disabled 两个 G92 persistence 验证均改为使用 helper 返回的 guarded path
- browser 侧仍不枚举目录;
- 未修改 generated fixture 内容、expected output、parameter semantics 或 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 G92 persistence staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十二轮,优先扫描剩余 generated/direct staging
点;可选候选包括 user-M helper staging 或 restore-parameter negative fixtures但继续
避开 parameter/tool table runtime state semantics 和 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 继续执行记录user-M helper staging manifest guard
1. 本批目标。
继续 staged path guard inventory 第十二轮,处理 Node 侧 generated user-M helper
staging
```text
writeUserMCodeFixture(...)
```
2. 已完成改动。
- Node 侧新增 `assertUserMCodeFixtureStaging(...)`
- generated user-M fixture 增加 fixed manifest、duplicate-free 和 root/path parity
guard
- `test.ini`
- `test.ngc`
- `M110` / `M111`
- `writeUserMCodeFixture(...)` 写入前先校验 staging root 与 manifest
- 未修改 generated INI、G-code、M-code 内容、expected output 或 interpreter 语义;
- 未提升 `L4-USER-M-PROCESS`,也未改变 blocked runtime promotion 状态。
涉及文件:
```text
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
```
3. 已完成的目标验证。
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
```
4. 本批剩余建议验证。
```bash
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.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 user-M helper staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十三轮,优先扫描剩余 generated/direct staging
点;较安全候选是 restore-parameter negative fixtures 的 path guard但仍需明确只做
filesystem staging guard不改变 parameter runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
十八、2026-06-13 继续执行记录restore-parameter negative staging guard
1. 本批目标。
继续 staged path guard inventory 第十三轮,处理 Node/browser 成对覆盖的
restore-parameter negative fixture paths
```text
missing.var
out-of-order.var
missing-required.var
```
2. 已完成改动。
- Node 侧新增 `generatedParameterPath(...)`
- Node 侧新增 `writeGeneratedParameterFixture(...)`
- browser 侧新增 `generatedParameterPath(...)`
- browser 侧新增 `writeGeneratedParameterFixture(...)`
- missing-file、out-of-order、missing-required 三类 restore-parameter path 均增加
explicit path parity guard
- 未修改 generated parameter fixture 内容、expected output 或 parameter runtime
semantics。
涉及文件:
```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 restore-parameter negative staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十四轮,优先扫描剩余 direct generated staging
点;可选择普通 restore-parameter direct fixture 或 tool-table direct fixture但仍需
只加 filesystem path guard不改变 parameter/tool table runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
十九、2026-06-13 继续执行记录restore-parameter direct staging guard
1. 本批目标。
继续 staged path guard inventory 第十四轮,处理 Node/browser 成对覆盖的普通
restore/save parameter direct fixture path
```text
rs274ngc.var
browser-direct.var
```
2. 已完成改动。
- Node 侧普通 `parameterFilePath` 初始写入改为 `writeGeneratedParameterFixture(...)`
- browser 侧 `browserParameterFilePath` 初始写入改为
`writeGeneratedParameterFixture(...)`
- 两侧 direct restore/save parameter path 均复用 explicit path parity guard
- 未修改 generated parameter fixture 内容、save/restore expected output、backup
验证或 parameter runtime semantics。
涉及文件:
```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 restore-parameter direct staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十五轮,优先处理 tool-table direct fixture path
guard例如 `tool.tbl` / `random-tool.tbl` 和 browser direct tool-table paths仍只加
filesystem path guard不改变 tool table runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
二十、2026-06-13 继续执行记录tool-table direct staging guard
1. 本批目标。
继续 staged path guard inventory 第十五轮,处理 Node/browser 成对覆盖的 direct
tool table fixture path
```text
tool.tbl
random-tool.tbl
browser-direct-tool.tbl
browser-direct-random-tool.tbl
```
2. 已完成改动。
- Node 侧新增 `generatedToolTablePath(...)` 与
`writeGeneratedToolTableFixture(...)`
- Node 侧 direct `tool.tbl` 与 `random-tool.tbl` 初始写入改为走显式 path parity
guard
- browser 侧同步新增 direct tool-table fixture path guard helper
- browser 侧 `browser-direct-tool.tbl` 与 `browser-direct-random-tool.tbl` 初始写入改为
走显式 path parity guard
- 未修改 tool table fixture 内容、load/save expected output、random tool changer
配置或 tool table runtime semantics。
涉及文件:
```text
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
wasm-port/tests/browser/interp_smoke.html
```
3. 已完成的目标验证。
```bash
git diff --check
node --check wasm-port/tests/wasm/node/verify_interp_wasm.mjs
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 tool-table direct staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十六轮,优先处理 browser OPFS/session tool-table
path guard例如 `/work/browser-tool.tbl`、`/work/browser-random-tool.tbl`、
`/work/browser-custom-tool.tbl`、`/work/browser-explicit-tool.tbl`;仍只加
filesystem/OPFS path guard不改变 tool table、INI 或 session runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
二十一、2026-06-13 继续执行记录browser OPFS tool-table staging guard
1. 本批目标。
继续 staged path guard inventory 第十六轮,处理 browser OPFS/session tool-table
boundary path
```text
/work/browser-tool.tbl
/work/browser-random-tool.tbl
/work/browser-custom-tool.tbl
/work/browser-explicit-tool.tbl
```
2. 已完成改动。
- browser 侧新增 `assertOpfsToolTableStaging(...)`
- 默认 machine session 的 load/save tool table 均检查 OPFS path 与 WASM path
- random toolchanger session 的 load/save tool table 均检查 OPFS path 与 WASM path
- INI `TOOL_TABLE` 命名 session 的 load/save tool table 均检查 OPFS path 与 WASM path
- explicit override session 的 load/save tool table 均检查 OPFS path 与 WASM path
- 复用 `generatedToolTablePath(...)` 校验 WASM staged path
- 未修改 OPFS 存储内容、tool table 内容、INI 解析、random toolchanger 行为或 session
runtime semantics。
涉及文件:
```text
wasm-port/tests/browser/interp_smoke.html
```
3. 已完成的目标验证。
```bash
git diff --check
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_interp_wasm.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 browser OPFS tool-table staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十七轮,优先处理 browser OPFS/session parameter
path guard例如 `/work/browser-linuxcnc.var`、`/work/browser-random-linuxcnc.var`、
`/work/browser-custom.var`、`/work/browser-explicit.var`;仍只加 filesystem/OPFS path
guard不改变 parameter、INI 或 session runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
二十二、2026-06-13 继续执行记录browser OPFS parameter staging guard
1. 本批目标。
继续 staged path guard inventory 第十七轮,处理 browser OPFS/session parameter
boundary path
```text
/work/browser-linuxcnc.var
/work/browser-random-linuxcnc.var
/work/browser-custom.var
/work/browser-explicit.var
```
2. 已完成改动。
- browser 侧新增 `assertOpfsParameterStaging(...)`
- 默认 machine session 的 restore/save parameter 均检查 OPFS path 与 WASM path
- 默认 save parameter 同步检查 `.bak` OPFS path
- random toolchanger session 的 restore parameter 检查 OPFS path 与 WASM path
- INI `PARAMETER_FILE` 命名 session 的 restore/save parameter 均检查 OPFS path 与
WASM path并检查 `.bak` OPFS path
- explicit override session 的 restore/save parameter 均检查 OPFS path 与 WASM path
并检查 `.bak` OPFS path
- 复用 `generatedParameterPath(...)` 校验 WASM staged path
- 未修改 OPFS 存储内容、parameter 内容、INI 解析、backup 写入或 session runtime
semantics。
涉及文件:
```text
wasm-port/tests/browser/interp_smoke.html
```
3. 已完成的目标验证。
```bash
git diff --check
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_interp_wasm.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 browser OPFS parameter staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十八轮,优先处理 browser OPFS/session INI path
guard例如 `/work/browser-machine.ini`、`/work/browser-random-machine.ini`、
`/work/browser-ini-file-session.ini`、`/work/browser-ini-override-session.ini`;仍只加
filesystem/OPFS path guard不改变 INI parsing、parameter/tool table 或 session
runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
二十三、2026-06-13 继续执行记录browser OPFS INI staging guard
1. 本批目标。
继续 staged path guard inventory 第十八轮,处理 browser OPFS/session INI boundary
path
```text
/work/browser-machine.ini
/work/browser-random-machine.ini
/work/browser-ini-file-session.ini
/work/browser-ini-override-session.ini
```
2. 已完成改动。
- browser 侧新增 `assertOpfsIniStaging(...)`
- 默认 machine session 的 INI OPFS path 与 WASM path 增加显式 guard
- random toolchanger session 的 INI OPFS path 与 WASM path 增加显式 guard
- INI `PARAMETER_FILE`/`TOOL_TABLE` 命名 session 的 INI OPFS path 与 WASM path 增加
显式 guard
- explicit override session 的 INI OPFS path 与 WASM path 增加显式 guard
- 未修改 INI 内容、INI parsing、parameter/tool table staging、OPFS 存储内容或
session runtime semantics。
涉及文件:
```text
wasm-port/tests/browser/interp_smoke.html
```
3. 已完成的目标验证。
```bash
git diff --check
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_interp_wasm.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 browser OPFS INI staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第十九轮,优先扫描 browser OPFS/session invalid
INI-path negative cases例如 `/work/browser-invalid-param-file-session.ini` 与
`/work/browser-invalid-tool-file-session.ini`;仍只加 filesystem/OPFS path guard不改变
INI validation、path-model 或 session runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
二十四、2026-06-13 继续执行记录browser invalid INI staging guard
1. 本批目标。
继续 staged path guard inventory 第十九轮,处理 browser OPFS/session invalid INI
negative cases 的 INI boundary path
```text
/work/browser-invalid-param-file-session.ini
/work/browser-invalid-tool-file-session.ini
```
2. 已完成改动。
- invalid `PARAMETER_FILE = ../escape.var` negative case 改为先构造 options
- invalid parameter-file negative case 复用 `assertOpfsIniStaging(...)` 检查 INI OPFS
path 与 WASM path
- invalid `TOOL_TABLE = nested/tool.tbl` negative case 改为先构造 options
- invalid tool-table negative case 复用 `assertOpfsIniStaging(...)` 检查 INI OPFS path
与 WASM path
- `verifyRejects(...)` 的 expected error pattern 保持不变;
- 未修改 INI validation、path-model、invalid fixture 内容、OPFS 存储内容或 session
runtime semantics。
涉及文件:
```text
wasm-port/tests/browser/interp_smoke.html
```
3. 已完成的目标验证。
```bash
git diff --check
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_interp_wasm.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 browser invalid INI staging
```
5. 下一步工作建议。
继续 staged path guard inventory 第二十轮,优先扫描 browser OPFS/machine text store
边界,例如 `saveMachineTextFiles(...)` / `loadMachineTextFiles(...)` 中 machine 文件的
默认 OPFS path 对账;仍只加 filesystem/OPFS path guard不改变 OPFS file-service、
machine-file-store 或 session runtime semantics。
下一轮第一条命令仍保持:
```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```