项目接续文件:L4-PYTHON-REMAP 53 rows 批量 PASS 方法与执行计划 生成时间:2026-06-19 CST 本文件接替 `text25.txt`,专门回答: ```text 如何把 53 个 Python-remap inventory rows 从 SKIP L4-PYTHON-REMAP 批量提升为 PASS; 以及下一批应按什么步骤推进。 ``` 重要边界: ```text 这里的“批量提升为 PASS”不能等价于删除 L4-PYTHON-REMAP skip reason。 必须是 proof-driven bulk promotion: 1. LinuxCNC-owned Python remap runtime 真实执行; 2. 每个 row 的 INI / Python modules / remap declarations / prolog / epilog / NGC remap assets 都已 vendored 并 staged; 3. native -> WASM/Node -> browser proof 全部通过; 4. promotion_allowed 由明确的 promotion artifact 置 1; 5. inventory baseline 从 PASS=29 / SKIP=130 变为 PASS=82 / SKIP=77; 6. 不新增 JS-owned G-code、planner、canonical motion、tool、parameter、kinematics、remap 语义。 ``` 当前禁止事项: ```text - 不直接把 `recommendedBlockedKind === "L4-PYTHON-REMAP"` 改成 `-`; - 不把现有 stop-lookahead lifecycle fixture 当作 53 rows 全量 pass; - 不用 fake worker / contract-only runtime 作为 PASS 证据; - 不把 Python import success 当作 remap execution pass; - 不把 NGC-only subroutine asset 当 standalone main program; - 不绕过 HAL/UI/HALUI/tool-change/TWP 等边界; - 不手工改 summary.tsv 的 PASS/SKIP 数字。 ``` 一、当前状态 当前已经完成: ```text L4-PYTHON-REMAP native / SDK / WASM / browser proof chain 已接入; runtime/ui/simulation 已暴露 Python remap runtime 状态; release artifact / URL workflow 能识别 python-remap-runtime-proof=ready; project release gate 通过; ``` 当前仍未完成: ```text 53 个 L4-PYTHON-REMAP rows 仍保持 SKIP; promotion_allowed=0; execution_enabled=0; manual promotion lock 仍开启; ``` 当前 inventory baseline: ```text total=159 pass=29 skip=130 fail=0 L4-PYTHON-REMAP=53 L4-USER-M-PROCESS=1 ``` 目标 bulk promotion baseline: ```text total=159 pass=82 skip=77 fail=0 L4-PYTHON-REMAP=0 L4-USER-M-PROCESS=1 ``` 二、53 rows 审计结果 来源: ```text wasm-port/build/wasm/sim-configs-inventory/python-remap-boundary-summary.tsv wasm-port/build/wasm/sim-configs-inventory/python-remap-family-summary.tsv ``` 总量: ```text rows=53 families=12 ``` 横向依赖统计: ```text hal_process=53 ui_process=49 halui_mdi_process=5 prolog_rows=43 epilog_rows=43 python_remap_rows=9 ngc_only_subpath_rows=7 mixed_ngc_python_rows=6 ``` family 分组: ```text axis/laser rows=3 hal=1 ui=1 halui=0 prolog=0 epilog=0 pyremap=1 ngc_only=0 axis/remap/cycle/nc_files rows=1 hal=1 ui=0 halui=0 prolog=1 epilog=1 pyremap=1 ngc_only=0 axis/remap/extend-builtins/nc_files rows=1 hal=1 ui=1 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=1 mixed=1 axis/remap/getting-started/nc_files rows=1 hal=1 ui=0 halui=0 prolog=0 epilog=0 pyremap=0 ngc_only=1 axis/remap/manual-toolchange-with-tool-length-switch/nc_files rows=1 hal=1 ui=1 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=0 axis/remap/rack-toolchange/nc_files rows=1 hal=1 ui=1 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=0 axis/remap/stop-lookahead/nc_files rows=1 hal=1 ui=0 halui=0 prolog=0 epilog=0 pyremap=0 ngc_only=0 axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos rows=5 hal=1 ui=1 halui=1 prolog=0 epilog=0 pyremap=1 ngc_only=1 mixed=1 axis/vismach/VMC_toolchange rows=1 hal=1 ui=0 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=0 gmoccapy/lathe_configs rows=8 hal=1 ui=1 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=0 gmoccapy/macros rows=25 hal=1 ui=1 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=0 gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples rows=5 hal=1 ui=1 halui=0 prolog=1 epilog=1 pyremap=0 ngc_only=0 ``` 三、批量 PASS 的正确方法 方法不是“解锁一个 family id”,而是新增一个 promotion pipeline: ```text python-remap-bulk-promotion-plan.tsv -> python-remap-row-runtime-proof.tsv -> python-remap-row-browser-proof.tsv -> python-remap-bulk-promotion-gate.tsv -> inventory rows promotion_allowed=1 -> summary baseline PASS=82 / SKIP=77 ``` 每个 row 至少要有这些字段: ```text path ini family main_or_macro_load_class python_modules_staged toplevel_executed path_prepend_applied python_remap_functions_bound prolog_functions_bound epilog_functions_bound ngc_remap_assets_staged ngc_only_subpaths_not_standalone interpreter_state_binding_ready canonical_events_ready hal_state_boundary_ready ui_process_boundary_ready halui_mdi_boundary_ready native_pass_ready wasm_node_pass_ready browser_pass_ready execution_enabled promotion_allowed ``` 四、实现阶段 Phase 0:冻结现状与审计 目标: ```text 确认当前 53 rows 分类、当前 proof 状态、当前 baseline。 ``` 验收: ```bash SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/browser/verify_python_remap_runtime_browser.sh SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh git diff --check ``` 状态: ```text 本文件创建时 Phase 0 已执行; 当前仍是 PASS=29 / SKIP=130 / L4-PYTHON-REMAP=53; 不允许从 Phase 0 直接跳到 PASS=82。 ``` Phase 1:生成 row-level bulk promotion plan 新增 artifact: ```text wasm-port/build/wasm/sim-configs-inventory/python-remap-bulk-promotion-plan.tsv ``` 生成逻辑: ```text 读取 python-remap-boundary-summary.tsv; 按 row 输出 proof requirements; 默认 promotion_allowed=0; 把 blockers 拆成: python_runtime prolog_epilog python_remap_callable ngc_remap_asset hal_process_boundary ui_process_boundary halui_mdi_boundary tool_change_boundary twp_boundary ``` 验收: ```text plan row count = 53 每个 L4-PYTHON-REMAP row 有且只有一条 plan row 所有 plan row promotion_allowed=0 ``` Phase 2:扩展 PythonRemapRuntimePort 为 row runtime 当前 port 只证明 stop-lookahead lifecycle。批量 PASS 需要变成 row-aware runtime: ```text createLinuxCncPythonRemapRowRuntimePort({ path, iniPath, machineRoot, pythonPathPrepend, topLevelPath, sourceFiles, remapDeclarations, prologFunctions, epilogFunctions, ngcRemapFiles, runtimeAdapter, }) ``` 必须支持: ```text INI [PYTHON] PATH_PREPEND INI [PYTHON] TOPLEVEL configured Python module import LinuxCNC stdglue prolog/epilog Python remap callable lookup Python generator lifecycle LinuxCNC interpreter state / sentinel binding LinuxCNC emccanon / canonical event bridge reload-on-change behavior ``` 禁止: ```text JS 解释 G-code; JS 计算 remap result; JS 伪造 prolog/epilog semantic state; ``` Phase 3:处理 HAL/UI/HALUI 边界 因为 53/53 rows 有 HAL 声明,49/53 rows 有 UI 进程声明,5/53 rows 有 HALUI MDI: ```text 批量 PASS 必须复用 virtual HAL proof; UI process 不能按 native GUI 执行,只能证明 browser/standalone UI boundary sufficient; HALUI MDI 必须有 LinuxCNC-owned command/state boundary; ``` 新增 artifact: ```text python-remap-hal-ui-boundary-proof.tsv ``` 每个 row 必须明确: ```text hal_process_boundary_ready=<0|1> ui_process_boundary_ready=<0|1> halui_mdi_boundary_ready=<0|1> arbitrary_native_gui_launched=0 arbitrary_native_hal_daemon_required=0 ``` Phase 4:按 family 做执行 proof 推荐顺序: ```text 1. axis/remap/stop-lookahead/nc_files rows=1 2. axis/remap/cycle/nc_files rows=1 3. axis/remap/getting-started/nc_files rows=1 4. axis/remap/extend-builtins/nc_files rows=1 mixed NGC/Python guard 5. axis/remap/manual-toolchange-with-tool-length-switch rows=1 tool-change prolog/epilog 6. axis/remap/rack-toolchange/nc_files rows=1 tool-change prolog/epilog 7. axis/vismach/VMC_toolchange rows=1 tool-change body 8. axis/laser rows=3 Python remap callable family 9. axis/vismach/5axis/table-rotary.../demos rows=5 TWP + HALUI + mixed NGC/Python 10. gmoccapy/lathe_configs rows=8 stdglue prolog/epilog 11. gmoccapy/non_trivial_kinematics/... rows=5 stdglue + kinematics context 12. gmoccapy/macros rows=25 macro bulk family ``` 每个 family 完成定义: ```text native row pass evidence exists WASM/Node row pass evidence exists browser row diagnostics exists promotion_allowed remains 0 until family review ``` Phase 5:bulk promotion gate 新增 artifact: ```text python-remap-bulk-promotion-gate.tsv ``` gate 规则: ```text all 53 row proof rows ready all family proof rows ready no ngc_only_subpath standalone violations no JS CNC semantics violations no missing vendored source files no native/browser result drift manual_lock_review=approved ``` 只有 gate 全部满足时: ```text promotion_allowed=1 execution_enabled=1 ``` Phase 6:inventory promotion implementation 允许改动的位置: ```text wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs wasm-port/runtime/sdk/src/sim-config-staging.js wasm-port/runtime/sdk/src/project-release-readiness.js 相关 docs/tests expected baseline ``` 禁止实现方式: ```text if blocked === "L4-PYTHON-REMAP" return PASS ``` 允许实现方式: ```text if blocked === "L4-PYTHON-REMAP" && row proof exists && bulk promotion gate approved && promotion_allowed === "1" then execute through LinuxCNC-backed row runtime and count PASS ``` Phase 7:baseline 更新 成功后必须更新: ```text summary.tsv expected: pass=82 skip=77 fail=0 skip-summary.tsv expected: ASSET-ONLY=65 L4-USER-M-PROCESS=1 NON_MAIN_CLASS=10 UPSTREAM-DEMO=1 ``` 必须删除/更新: ```text L4-PYTHON-REMAP=53 的 hard-block summary assertions; host-runtime docs 中 Python-remap locked wording; release artifact hard-block rows; workflow overview locked detail rows; ``` 五、下一步立即执行 不要直接做 Phase 6/7。 下一批从 Phase 1 开始: ```text 1. 在 verify_sim_configs_inventory_wasm.mjs 里生成 python-remap-bulk-promotion-plan.tsv; 2. 增加验证函数,确认 53 rows 全部进入 plan; 3. 增加 docs 说明:bulk PASS 需要 row proof,不接受 direct unlock; 4. 保持 PASS=29 / SKIP=130 不变; 5. 跑 inventory/browser/release gate。 ``` 建议验收命令: ```bash git diff --check SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/browser/verify_python_remap_runtime_browser.sh SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh wasm-port/tests/host/verify_project_release_gate.sh ``` 六、本文件的执行状态 ```text 已完成: - 当前 53 rows 审计; - bulk PASS 正确方法定义; - Phase 1 目标和验收条件定义; 未完成: - python-remap-bulk-promotion-plan.tsv 生成; - row-aware PythonRemapRuntimePort; - per-family execution proof; - promotion_allowed=1; - PASS=82 / SKIP=77 baseline update。 ```