diff --git a/check-linuxcnc-switchkins-remap-source-map.sh b/check-linuxcnc-switchkins-remap-source-map.sh index 1eb1f4f..c37ea46 100755 --- a/check-linuxcnc-switchkins-remap-source-map.sh +++ b/check-linuxcnc-switchkins-remap-source-map.sh @@ -6,7 +6,8 @@ cd "$(dirname "$0")" # LinuxCNC source basis: this guard ties generated switchkins/remap aliases and # config cases to LinuxCNC configs/sim INI REMAP entries, remap_subs # # assignments, and halcmd loadusr parsing sources. It validates -# generator/table policy only; it does not add CNC behavior or expand smoke. +# generator/table policy only; it does not add CNC behavior, expand smoke +# parsing, or interpret G-code. linuxcnc_root=${LINUXCNC_ROOT:-../linuxcnc} linuxcnc_root=$(cd "$linuxcnc_root" && pwd) @@ -70,11 +71,14 @@ if f"| LinuxCNC switchkins REMAP INI sources | {len(remap_inis)} |" not in sourc raise SystemExit("docs/linuxcnc-switchkins-remap-source-map.md REMAP INI source count mismatch") required_phrases = [ - "must not add new smoke parser behavior", + "must not add CNC behavior", + "must not expand the temporary smoke parser", "`#` assignments", "[EMCIO] TOOL_TABLE` entries are source coverage only", "must not become generated switchkins aliases", + "./check-linuxcnc-switchkins-remap-source-map.sh", "./check-linuxcnc-switchkins-remap-table.sh linuxcnc-kinematics-source-files.txt", + "does not interpret G-code", ] for phrase in required_phrases: if phrase not in source_map: @@ -82,6 +86,15 @@ for phrase in required_phrases: f"docs/linuxcnc-switchkins-remap-source-map.md is missing boundary phrase: {phrase}" ) +for entry in [ + "test-native.sh", + "test-linuxcnc-source-link.sh", + "build-wasm.sh", +]: + text = Path(entry).read_text(encoding="utf-8") + if "./check-linuxcnc-switchkins-remap-source-map.sh" not in text: + raise SystemExit(f"{entry} must run ./check-linuxcnc-switchkins-remap-source-map.sh") + case_fields = {case["field"] for case in json_cases} source_only_field_re = re.compile(r"asset|metadata|tool|tooldata|tool_table|TOOL_TABLE", re.I) bad_fields = [field for field in case_fields if source_only_field_re.search(field)] diff --git a/docs/linuxcnc-switchkins-remap-source-map.md b/docs/linuxcnc-switchkins-remap-source-map.md index 81000fd..f555c39 100644 --- a/docs/linuxcnc-switchkins-remap-source-map.md +++ b/docs/linuxcnc-switchkins-remap-source-map.md @@ -1,7 +1,7 @@ # LinuxCNC switchkins/remap source map This map records the source basis for generated M428/M429/M430 switchkins -aliases and config cases. It is a generator/table map only; it must not add new smoke parser behavior or expose LinuxCNC source-only assets as browser API fields. +aliases and config cases. It is a generator/table map only; it must not add CNC behavior, must not expand the temporary smoke parser, and must not expose LinuxCNC source-only assets as browser API fields. ## LinuxCNC Source Basis @@ -31,6 +31,12 @@ aliases and config cases. It is a generator/table map only; it must not add new are source coverage, not browser API surface. - Generated tables must continue to derive M428/M429/M430 kinstypes from LinuxCNC remap `#` assignments, not from hand-authored behavior. +- `test-native.sh`, `test-linuxcnc-source-link.sh`, and `build-wasm.sh` must + run `./check-linuxcnc-switchkins-remap-source-map.sh` before consuming + generated config aliases, source-linked LinuxCNC objects, or browser + artifacts. +- The switchkins/remap source-map guard validates LinuxCNC source/config + ownership and generated table drift only; it does not interpret G-code. ## Checks