Advance AXIS-style Three.js simulation UI

This commit is contained in:
2026-06-17 09:59:22 +08:00
parent d6a623308b
commit 656cddf73a
24 changed files with 84658 additions and 75 deletions

View File

@@ -7,6 +7,8 @@ const root = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
const doc = readFileSync(resolve(root, "docs/axis-style-simulation-implementation.md"), "utf8");
const readme = readFileSync(resolve(root, "README.md"), "utf8");
const priority = readFileSync(resolve(root, "docs/real-browser-simulation-priority.md"), "utf8");
const simulationPackage = JSON.parse(readFileSync(resolve(root, "runtime/ui/simulation/package.json"), "utf8"));
const threeVendor = readFileSync(resolve(root, "runtime/ui/simulation/vendor/three/three.core.js"), "utf8");
for (const required of [
"AXIS-Style Browser Simulation Implementation Plan",
@@ -15,7 +17,18 @@ for (const required of [
"Preview and DRO",
"G-code source with active execution line",
"window.linuxCncRealSimulationApi",
"reloadCurrentProgram()",
"getMdiHistory()",
"getRecentPrograms()",
"Three.js `^0.183.2`",
"exportDiagnosticsArtifact()",
"getLimitsHomeState()",
"getAxisStatusbarState()",
"applyAxisViewFromUrl(search)",
"AXIS_SCREENSHOT_ARTIFACT_DIR",
"AXIS_SCREENSHOT_FULL_DIAGNOSTICS=1",
"SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh",
"SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_axis_screenshot_browser.sh",
"Immediate Next Batch",
]) {
assert.ok(doc.includes(required), `axis-style simulation doc missing ${required}`);
@@ -35,5 +48,11 @@ assert.ok(
priority.includes("docs/axis-style-simulation-implementation.md"),
"priority doc should link AXIS-style implementation plan",
);
assert.equal(
simulationPackage.dependencies?.three,
"^0.183.2",
"simulation package should pin the requested Three.js dependency range",
);
assert.match(threeVendor, /REVISION = '183'/, "vendored Three.js build should match the requested 0.183.x runtime");
console.log("axis_style_simulation_docs_node_smoke=ok");

View File

@@ -18,6 +18,7 @@ const hostSmokeText = readFileSync(resolve(root, "tests/host/verify_host_smokes.
const releaseGateText = readFileSync(resolve(root, "tests/host/verify_project_release_gate.sh"), "utf8");
const simulationHtmlText = readFileSync(resolve(root, "runtime/ui/simulation/index.html"), "utf8");
const simulationSmokeText = readFileSync(resolve(root, "tests/browser/verify_real_simulation_browser.sh"), "utf8");
const simulationScreenshotSmokeText = readFileSync(resolve(root, "tests/browser/verify_real_simulation_axis_screenshot_browser.sh"), "utf8");
for (const phrase of [
"Real Browser Simulation Priority",
@@ -44,10 +45,17 @@ for (const text of [handoffText, readmeText, trackerText]) {
assert.match(hostSmokeText, /verify_real_browser_simulation_priority_docs\.sh/);
assert.match(hostSmokeText, /verify_real_simulation_browser\.sh/);
assert.match(hostSmokeText, /verify_real_simulation_axis_screenshot_browser\.sh/);
assert.match(releaseGateText, /verify_real_simulation_browser\.sh/);
assert.match(releaseGateText, /verify_real_simulation_axis_screenshot_browser\.sh/);
assert.match(simulationHtmlText, /LinuxCNC Browser Simulation/);
assert.match(simulationHtmlText, /data-toolpath-svg/);
assert.match(simulationHtmlText, /data-toolpath-three/);
assert.match(simulationHtmlText, /data-program-lines/);
assert.match(simulationSmokeText, /browser_real_simulation_page_smoke=ok/);
assert.match(simulationScreenshotSmokeText, /axis_screenshot_browser_smoke=ok/);
assert.match(simulationScreenshotSmokeText, /--screenshot=/);
assert.match(simulationScreenshotSmokeText, /AXIS_SCREENSHOT_ARTIFACT_DIR/);
assert.match(simulationScreenshotSmokeText, /axis-\$\{name\}-diagnostics\.json/);
console.log("real_browser_simulation_priority_docs_node_smoke=ok");