Make machine configuration authoritative and restore native checkpoints exactly

This commit is contained in:
2026-09-18 09:09:41 +08:00
parent 6a69511276
commit 4a568f1f4c
94 changed files with 10882 additions and 301 deletions

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env python3
"""Audit the configuration input migration, without classifying every literal as an error."""
import hashlib
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def main():
sources = {
"machine_catalog": "web/workspace/machine-catalog.json",
"resource_catalog": "web/workspace/simulation-resources.json",
"web_settings": "web/workspace/web-settings.json",
"ini_reader": "web/workspace/trt-configuration.mjs",
"worker": "web/worker/sim-session.mjs",
"tp_adapter": "web/worker/wasm-linuxcnc-tp.mjs",
"tp_core": "wasm-core/src/sim_linuxcnc_tp.c",
"kinematics_adapter": "web/worker/wasm-xyzac-kinematics.mjs",
"case_loader": "web/workspace/sim-case-loader.mjs",
"model": "web/react/src/xyzac-machine-model.ts",
"machine_view": "web/react/src/XyzacMachineView.tsx",
}
content = {key: (ROOT / path).read_text() for key, path in sources.items()}
checks = {
"machine_catalog_parses": bool(json.loads(content["machine_catalog"])["machines"]),
"resource_catalog_parses": bool(json.loads(content["resource_catalog"])["runtime_fixtures"]),
"settings_parse": bool(json.loads(content["web_settings"])["viewer"]),
"worker_reparses_ini": "...readTrtConfiguration(configuration)" in content["worker"],
"axis_limits_from_ini": 'limits(`AXIS_${axis.toUpperCase()}`)' in content["ini_reader"],
"joint_limits_from_ini": 'limits(`JOINT_${joint}`)' in content["ini_reader"],
"no_kinematics_example_limits": "DEFAULT_LIMITS" not in content["kinematics_adapter"],
"no_loader_fixed_timing": "servo_cycle_time: 0.001" not in content["case_loader"],
"no_loader_axis3_override": "[-240, 100]" not in content["case_loader"],
"native_axis_dynamics_input": "sim_linuxcnc_tp_set_axis_dynamics" in content["tp_core"] and "sim_linuxcnc_tp_set_axis_dynamics" in content["tp_adapter"],
"no_native_xyzac_speed_override": "fmin(20.0, velocity_limit)" not in content["tp_core"] and "fmin(30.0, velocity_limit)" not in content["tp_core"],
"native_acceleration_upper_bound": "*acceleration = fmin" in content["tp_core"] and "*acceleration = fmax" not in content["tp_core"],
"model_uses_visual_configuration": "WEB_SETTINGS.viewer.models" in content["model"] and "WEB_SETTINGS.viewer.materials" in content["model"],
"machine_path_color_configured": "VIEWER.colors.path" in content["machine_view"],
}
report = {
"report_id": "configuration-input-audit-v1",
"status": "verified" if all(checks.values()) else "failed",
"scope": "configurable inputs; not a zero-literals claim",
"checks": checks,
"sources": [{"path": path, "sha256": hashlib.sha256((ROOT / path).read_bytes()).hexdigest()} for path in sources.values()],
"wasm_sha256": hashlib.sha256((ROOT / "build-wasm/linuxcnc-sim-core.wasm").read_bytes()).hexdigest(),
"retained": ["mathematical constants and tolerances", "ABI layouts, enums, and capacities", "source model mesh topology", "CSS/icon assets", "test fixtures and historical evidence", "upstream LinuxCNC and dependency locks"],
}
output = ROOT / "coverage/configuration/input-audit.report.json"
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text(json.dumps(report, indent=2) + "\n")
print(json.dumps({"report_id": report["report_id"], "status": report["status"], "checks": len(checks)}))
if report["status"] != "verified":
raise SystemExit(1)
if __name__ == "__main__":
main()