接续上一轮,先做 L4-USER-M-PROCESS,完全接入仿真系统
结论:已将 L4-USER-M-PROCESS 的 millturn M128/M129 受控状态转换接入 virtual HAL、真实 browser simulation、OPFS 会话 payload、SDK API 和 release diagnostics validation;外部 user-M process execution 与 promotion 仍保持 locked,不伪装为 native process 解锁。
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
import {
|
||||
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
|
||||
createVirtualHalCommandScriptFixtureReport,
|
||||
createVirtualHalMillturnUserMProcessBoundaryReport,
|
||||
createVirtualHalMotionControllerMatrixReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
@@ -433,6 +434,16 @@
|
||||
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc",
|
||||
],
|
||||
}),
|
||||
virtualHalMillturnUserMProcessBoundary: createVirtualHalMillturnUserMProcessBoundaryReport({
|
||||
manifestEntries: [
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/millturn.ini",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/example.ngc",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M128",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M129",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/remap_subs/428remap.ngc",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/remap_subs/429remap.ngc",
|
||||
],
|
||||
}),
|
||||
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport({ halState: diagnosticsVirtualHalState }),
|
||||
virtualHalMotionControllerMatrix: diagnosticsMotionControllerMatrix,
|
||||
};
|
||||
|
||||
@@ -241,6 +241,9 @@
|
||||
!api?.stepVirtualHalMotionController ||
|
||||
!api?.getVirtualHalSimulationRuntimeReport ||
|
||||
!api?.getVirtualHalSimulationReplacementReport ||
|
||||
!api?.getVirtualHalMillturnUserMProcessBoundaryReport ||
|
||||
!api?.getMillturnUserMProcessState ||
|
||||
!api?.applyMillturnUserMProcessState ||
|
||||
!api?.getVirtualHalSourceComplianceReport ||
|
||||
!api?.getVirtualHalSimConfigSourceCoverageReport ||
|
||||
!api?.getVirtualHalSimConfigPromotionCandidateReport ||
|
||||
@@ -442,7 +445,66 @@
|
||||
) {
|
||||
throw new Error(`simulation virtual HAL registry/integrity drift: ${JSON.stringify(initialVirtualHalRegistry)}`);
|
||||
}
|
||||
const diagnosticsArtifact = api.exportDiagnosticsArtifact();
|
||||
let diagnosticsArtifact = api.exportDiagnosticsArtifact();
|
||||
const millturnUserMBoundary = api.getVirtualHalMillturnUserMProcessBoundaryReport();
|
||||
if (
|
||||
millturnUserMBoundary.apiName !== "linuxcnc-wasm-virtual-hal-millturn-user-m-process-boundary-report" ||
|
||||
millturnUserMBoundary.boundaryClass !== "L4-USER-M-PROCESS" ||
|
||||
millturnUserMBoundary.complete !== true ||
|
||||
millturnUserMBoundary.webSimulationSatisfied !== true ||
|
||||
millturnUserMBoundary.executionEnabled !== false ||
|
||||
millturnUserMBoundary.promotionAllowed !== false ||
|
||||
millturnUserMBoundary.processExecutionReady !== false ||
|
||||
millturnUserMBoundary.rows.length !== 2 ||
|
||||
!millturnUserMBoundary.rows.some(({ userMCode, remapCode, stateTargetCount }) => userMCode === "M128" && remapCode === "M428" && stateTargetCount === 12) ||
|
||||
!millturnUserMBoundary.rows.some(({ userMCode, remapCode, stateTargetCount }) => userMCode === "M129" && remapCode === "M429" && stateTargetCount === 12) ||
|
||||
doc.body.dataset.userMProcessPhase !== "ready" ||
|
||||
doc.querySelector('[data-user-m-process="boundary"]')?.textContent !== "L4-USER-M-PROCESS" ||
|
||||
doc.querySelector('[data-user-m-process="path"]')?.textContent !== "axis/vismach/millturn/example.ngc" ||
|
||||
doc.querySelector('[data-user-m-process="execution"]')?.textContent !== "disabled" ||
|
||||
doc.querySelector('[data-user-m-process="promotion"]')?.textContent !== "locked"
|
||||
) {
|
||||
throw new Error(`simulation millturn user-M boundary drift: ${JSON.stringify(millturnUserMBoundary)}`);
|
||||
}
|
||||
const millturnM128 = api.applyMillturnUserMProcessState("M128");
|
||||
if (
|
||||
millturnM128.apiName !== "linuxcnc-wasm-virtual-hal-millturn-user-m-process-state-result" ||
|
||||
millturnM128.userMCode !== "M128" ||
|
||||
millturnM128.remapCode !== "M428" ||
|
||||
millturnM128.stateMode !== "mill" ||
|
||||
api.readVirtualHalPin("motion.switchkins-type")?.value !== 0 ||
|
||||
api.readVirtualHalPin("ini.x.min_limit")?.value !== -300 ||
|
||||
api.readVirtualHalPin("ini.z.max_limit")?.value !== 0 ||
|
||||
doc.body.dataset.userMProcessPhase !== "applied" ||
|
||||
doc.body.dataset.userMProcessActiveCode !== "M128" ||
|
||||
doc.body.dataset.userMProcessActiveMode !== "mill" ||
|
||||
doc.querySelector('[data-user-m-process="active-code"]')?.textContent !== "M128" ||
|
||||
doc.querySelector('[data-user-m-process="active-remap"]')?.textContent !== "M428" ||
|
||||
doc.querySelector('[data-user-m-process="active-mode"]')?.textContent !== "mill" ||
|
||||
doc.querySelector('[data-user-m-process="switchkins"]')?.textContent !== "0"
|
||||
) {
|
||||
throw new Error(`simulation M128 user-M state did not apply: ${JSON.stringify(millturnM128)}`);
|
||||
}
|
||||
const millturnM129 = api.applyMillturnUserMProcessState("M129");
|
||||
if (
|
||||
millturnM129.userMCode !== "M129" ||
|
||||
millturnM129.remapCode !== "M429" ||
|
||||
millturnM129.stateMode !== "turn" ||
|
||||
api.readVirtualHalPin("motion.switchkins-type")?.value !== 1 ||
|
||||
api.readVirtualHalPin("motion.analog-out-03")?.value !== 1 ||
|
||||
api.readVirtualHalPin("kinstype.is-0")?.value !== 0 ||
|
||||
api.readVirtualHalPin("kinstype.is-1")?.value !== 1 ||
|
||||
api.readVirtualHalPin("ini.x.max_limit")?.value !== 0 ||
|
||||
api.readVirtualHalPin("ini.z.max_limit")?.value !== 300 ||
|
||||
api.getMillturnUserMProcessState().activeMode !== "turn" ||
|
||||
doc.querySelector('[data-user-m-process="active-code"]')?.textContent !== "M129" ||
|
||||
doc.querySelector('[data-user-m-process="active-remap"]')?.textContent !== "M429" ||
|
||||
doc.querySelector('[data-user-m-process="active-mode"]')?.textContent !== "turn" ||
|
||||
doc.querySelector('[data-user-m-process="switchkins"]')?.textContent !== "1"
|
||||
) {
|
||||
throw new Error(`simulation M129 user-M state did not apply: ${JSON.stringify(millturnM129)}`);
|
||||
}
|
||||
diagnosticsArtifact = api.exportDiagnosticsArtifact();
|
||||
const promotionCandidateSummary = api.getVirtualHalPromotionCandidateSummary();
|
||||
const expectedPromotionCandidates = [
|
||||
[
|
||||
@@ -542,7 +604,14 @@
|
||||
diagnosticsArtifact.virtualHalSimulationReplacement?.sourceCompliance?.webSimulationSatisfied !== true ||
|
||||
diagnosticsArtifact.virtualHalSourceCompliance?.complete !== true ||
|
||||
diagnosticsArtifact.virtualHalSourceCompliance?.webSimulationSatisfied !== true ||
|
||||
!diagnosticsArtifact.virtualHalSourceCompliance?.sourceFiles?.includes("linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M128") ||
|
||||
!diagnosticsArtifact.virtualHalSourceCompliance?.sourceFiles?.includes("linuxcnc/src/hal/utils/halcmd_commands.cc") ||
|
||||
diagnosticsArtifact.virtualHalMillturnUserMProcessBoundary?.complete !== true ||
|
||||
diagnosticsArtifact.virtualHalMillturnUserMProcessBoundary?.boundaryClass !== "L4-USER-M-PROCESS" ||
|
||||
diagnosticsArtifact.virtualHalMillturnUserMProcessState?.activeUserMCode !== "M129" ||
|
||||
diagnosticsArtifact.virtualHalMillturnUserMProcessState?.activeMode !== "turn" ||
|
||||
diagnosticsArtifact.virtualHalMillturnUserMProcessState?.executionEnabled !== false ||
|
||||
diagnosticsArtifact.virtualHalMillturnUserMProcessState?.promotionAllowed !== false ||
|
||||
diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.complete !== true ||
|
||||
!diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.sourceFiles?.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini") ||
|
||||
!diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.sourceFiles?.includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini") ||
|
||||
@@ -976,6 +1045,8 @@
|
||||
savedVirtualHalSession.sessionDiagnostics?.ready !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.validation?.ready !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.validation?.motionControllerMatrixReady !== true ||
|
||||
savedVirtualHalSession.snapshot?.payload?.virtualHal?.millturnUserMProcessBoundary?.complete !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.diagnosticsArtifact?.virtualHalMillturnUserMProcessBoundary?.complete !== true ||
|
||||
savedVirtualHalSession.sessionDiagnostics?.diagnosticsArtifact?.virtualHalMotionControllerMatrix?.complete !== true ||
|
||||
doc.body.dataset.virtualHalSessionPhase !== "saved" ||
|
||||
!doc.querySelector("[data-virtual-hal-session-status]")?.textContent.includes("Saved HAL session")
|
||||
@@ -991,7 +1062,8 @@
|
||||
savedSessionDiagnosticsArtifact.validation?.ready !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.ready !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.validation?.ready !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.diagnosticsArtifact?.virtualHalSourceCompliance?.complete !== true
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.diagnosticsArtifact?.virtualHalSourceCompliance?.complete !== true ||
|
||||
diagnosticsWithSavedSession.virtualHalSessionDiagnostics?.diagnosticsArtifact?.virtualHalMillturnUserMProcessBoundary?.complete !== true
|
||||
) {
|
||||
throw new Error(`AXIS-style virtual HAL session diagnostics did not become release-ready: ${JSON.stringify(diagnosticsWithSavedSession.virtualHalSessionDiagnostics)}`);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
createVirtualHalSimConfigPromotionCandidateReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalCommandScriptFixtureReport,
|
||||
createVirtualHalMillturnUserMProcessBoundaryReport,
|
||||
createVirtualHalMotionControllerMatrixReport,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
createVirtualHalSimulationReplacementReport,
|
||||
@@ -57,6 +58,9 @@ const virtualHalSimConfigEvidenceExpansion = createVirtualHalSimConfigEvidenceEx
|
||||
const virtualHalSimConfigMacroLoadFixtures = createVirtualHalSimConfigMacroLoadFixtureReport({
|
||||
manifestText: sourceManifestText,
|
||||
});
|
||||
const virtualHalMillturnUserMProcessBoundary = createVirtualHalMillturnUserMProcessBoundaryReport({
|
||||
manifestText: sourceManifestText,
|
||||
});
|
||||
const virtualHalState = createVirtualHalState();
|
||||
const pythonRemapRuntimeProof = {
|
||||
nativeLifecycleReady: true,
|
||||
@@ -97,6 +101,7 @@ const browserDiagnosticsArtifact = {
|
||||
inventoryBaseline: "executed=82 passed=82 skipped=77 unexpected_fail=0",
|
||||
},
|
||||
virtualHalSimConfigMacroLoadFixtures,
|
||||
virtualHalMillturnUserMProcessBoundary,
|
||||
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport({ halState: virtualHalState }),
|
||||
virtualHalMotionControllerMatrix,
|
||||
};
|
||||
|
||||
@@ -34,6 +34,7 @@ import {
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
||||
VIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES,
|
||||
VIRTUAL_HAL_COVERAGE_STATES,
|
||||
VIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY,
|
||||
VIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES,
|
||||
VIRTUAL_HAL_PROJECT_PIN_GROUPS,
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_AUDIT_CANDIDATES,
|
||||
@@ -51,6 +52,7 @@ import {
|
||||
VIRTUAL_HAL_SYSTEM_PIN_FAMILIES,
|
||||
VIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS,
|
||||
applyVirtualHalAction,
|
||||
applyVirtualHalMillturnUserMProcessState,
|
||||
applyVirtualHalPinUpdates,
|
||||
applyVirtualHalToInterpSdk,
|
||||
createVirtualHalSimulationRuntimeReport,
|
||||
@@ -58,6 +60,7 @@ import {
|
||||
createLinuxCncInterpSdk,
|
||||
createLinuxCncVirtualHalRuntime,
|
||||
createVirtualHalIntegrityReport,
|
||||
createVirtualHalMillturnUserMProcessBoundaryReport,
|
||||
createVirtualHalMotionControllerMatrixReport,
|
||||
createMachineSessionSnapshotPayload,
|
||||
createVirtualHalSessionPayload,
|
||||
@@ -356,6 +359,7 @@ const requiredExports = [
|
||||
["createProjectReleaseReadinessReport", createProjectReleaseReadinessReport],
|
||||
["createProjectReleaseReadinessSummaryViewModel", createProjectReleaseReadinessSummaryViewModel],
|
||||
["applyVirtualHalAction", applyVirtualHalAction],
|
||||
["applyVirtualHalMillturnUserMProcessState", applyVirtualHalMillturnUserMProcessState],
|
||||
["applyVirtualHalPinUpdates", applyVirtualHalPinUpdates],
|
||||
["applyVirtualHalToInterpSdk", applyVirtualHalToInterpSdk],
|
||||
["createLinuxCncVirtualHalRuntime", createLinuxCncVirtualHalRuntime],
|
||||
@@ -363,6 +367,7 @@ const requiredExports = [
|
||||
["createVirtualHalBridgeReadiness", createVirtualHalBridgeReadiness],
|
||||
["createVirtualHalCommandScriptFixtureReport", createVirtualHalCommandScriptFixtureReport],
|
||||
["createVirtualHalIntegrityReport", createVirtualHalIntegrityReport],
|
||||
["createVirtualHalMillturnUserMProcessBoundaryReport", createVirtualHalMillturnUserMProcessBoundaryReport],
|
||||
["createVirtualHalMotionControllerMatrixReport", createVirtualHalMotionControllerMatrixReport],
|
||||
["createVirtualHalPinInventory", createVirtualHalPinInventory],
|
||||
["createVirtualHalPinRegistry", createVirtualHalPinRegistry],
|
||||
@@ -648,6 +653,11 @@ assert.equal(VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS
|
||||
.sourceFiles.includes("linuxcnc/configs/sim/axis/external_offsets/M111"), true);
|
||||
assert.equal(VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES["halcmd-simulation-replacement"].sourceFiles.includes("linuxcnc/src/hal/utils/halcmd_commands.cc"), true);
|
||||
assert.equal(VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES["motion-controller-simulation-replacement"].sourceFiles.includes("linuxcnc/src/emc/motion/motion.c"), true);
|
||||
assert.equal(VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES["controlled-user-m-process-state-boundary"].sourceFiles.includes("linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M128"), true);
|
||||
assert.equal(VIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY.boundaryClass, "L4-USER-M-PROCESS");
|
||||
assert.equal(VIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY.cases.length, 2);
|
||||
assert.equal(VIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY.cases.some(({ userMCode }) => userMCode === "M128"), true);
|
||||
assert.equal(VIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY.cases.some(({ userMCode }) => userMCode === "M129"), true);
|
||||
assert.equal(VIRTUAL_HAL_COVERAGE_STATES.runtimeBoundary, "runtime-boundary");
|
||||
assert.equal(VIRTUAL_HAL_SOURCE_FILES.halui, "linuxcnc/src/emc/usr_intf/halui.cc");
|
||||
assert.equal(VIRTUAL_HAL_SYSTEM_PIN_FAMILIES.some(({ id }) => id === "iocontrol"), true);
|
||||
@@ -656,6 +666,8 @@ assert.match(sdkIndexText, /\bVIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS\b/);
|
||||
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS\b/);
|
||||
assert.match(sdkIndexText, /\bVIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES\b/);
|
||||
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_COMMAND_SCRIPT_FIXTURES\b/);
|
||||
assert.match(sdkIndexText, /\bVIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY\b/);
|
||||
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY\b/);
|
||||
assert.match(sdkIndexText, /\bVIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES\b/);
|
||||
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES\b/);
|
||||
assert.match(sdkIndexText, /\bVIRTUAL_HAL_PROJECT_PIN_GROUPS\b/);
|
||||
@@ -672,6 +684,10 @@ assert.match(sdkIndexText, /\bVIRTUAL_HAL_SYSTEM_PIN_FAMILIES\b/);
|
||||
assert.match(sdkReadmeText, /\bVIRTUAL_HAL_SYSTEM_PIN_FAMILIES\b/);
|
||||
assert.match(sdkIndexText, /\bexecuteVirtualHalCommand\b/);
|
||||
assert.match(sdkReadmeText, /\bexecuteVirtualHalCommand\b/);
|
||||
assert.match(sdkIndexText, /\bapplyVirtualHalMillturnUserMProcessState\b/);
|
||||
assert.match(sdkReadmeText, /\bapplyVirtualHalMillturnUserMProcessState\b/);
|
||||
assert.match(sdkIndexText, /\bcreateVirtualHalMillturnUserMProcessBoundaryReport\b/);
|
||||
assert.match(sdkReadmeText, /\bcreateVirtualHalMillturnUserMProcessBoundaryReport\b/);
|
||||
assert.match(sdkIndexText, /\bexecuteVirtualHalcmd\b/);
|
||||
assert.match(sdkReadmeText, /\bexecuteVirtualHalcmd\b/);
|
||||
assert.match(sdkIndexText, /\bcreateVirtualHalCommandScriptFixtureReport\b/);
|
||||
@@ -781,6 +797,38 @@ assert.equal(virtualHalReport.pinRegistry.byName["spindle.0.speed-out"].value, 1
|
||||
assert.equal(virtualHalReport.integrity.complete, true);
|
||||
const virtualHalRuntime = createLinuxCncVirtualHalRuntime(sdkVirtualHal);
|
||||
assert.equal(virtualHalRuntime.getProjectReport({ availableFunctions: VIRTUAL_HAL_WASM_BRIDGE_FUNCTIONS }).ready, true);
|
||||
const millturnUserMBoundaryReport = createVirtualHalMillturnUserMProcessBoundaryReport({ manifestText: sourceManifestText });
|
||||
assert.equal(millturnUserMBoundaryReport.apiName, "linuxcnc-wasm-virtual-hal-millturn-user-m-process-boundary-report");
|
||||
assert.equal(millturnUserMBoundaryReport.boundaryClass, "L4-USER-M-PROCESS");
|
||||
assert.equal(millturnUserMBoundaryReport.complete, true);
|
||||
assert.equal(millturnUserMBoundaryReport.webSimulationSatisfied, true);
|
||||
assert.equal(millturnUserMBoundaryReport.executionEnabled, false);
|
||||
assert.equal(millturnUserMBoundaryReport.promotionAllowed, false);
|
||||
assert.equal(millturnUserMBoundaryReport.processExecutionReady, false);
|
||||
assert.equal(millturnUserMBoundaryReport.inventoryBaselineUnchanged, true);
|
||||
assert.equal(millturnUserMBoundaryReport.missingManifestFiles.length, 0);
|
||||
assert.equal(millturnUserMBoundaryReport.rows.some(({ userMCode, remapCode }) => userMCode === "M128" && remapCode === "M428"), true);
|
||||
assert.equal(millturnUserMBoundaryReport.rows.some(({ userMCode, remapCode }) => userMCode === "M129" && remapCode === "M429"), true);
|
||||
assert.equal(millturnUserMBoundaryReport.rows.every(({ stateTargetCount }) => stateTargetCount === 12), true);
|
||||
assert.equal(millturnUserMBoundaryReport.rows.every(({ executionEnabled, promotionAllowed }) => executionEnabled === false && promotionAllowed === false), true);
|
||||
let millturnStateResult = applyVirtualHalMillturnUserMProcessState(virtualHalRuntime.getState(), "M128", { manifestText: sourceManifestText });
|
||||
assert.equal(millturnStateResult.apiName, "linuxcnc-wasm-virtual-hal-millturn-user-m-process-state-result");
|
||||
assert.equal(millturnStateResult.ok, true);
|
||||
assert.equal(millturnStateResult.userMCode, "M128");
|
||||
assert.equal(millturnStateResult.executionEnabled, false);
|
||||
assert.equal(millturnStateResult.promotionAllowed, false);
|
||||
assert.equal(readVirtualHalPin(millturnStateResult.state, "motion.switchkins-type").value, 0);
|
||||
assert.equal(readVirtualHalPin(millturnStateResult.state, "ini.x.min_limit").value, -300);
|
||||
assert.equal(readVirtualHalPin(millturnStateResult.state, "ini.z.max_limit").value, 0);
|
||||
millturnStateResult = virtualHalRuntime.applyMillturnUserMProcessState("M129", { manifestText: sourceManifestText });
|
||||
assert.equal(millturnStateResult.userMCode, "M129");
|
||||
assert.equal(readVirtualHalPin(virtualHalRuntime.getState(), "motion.switchkins-type").value, 1);
|
||||
assert.equal(readVirtualHalPin(virtualHalRuntime.getState(), "motion.analog-out-03").value, 1);
|
||||
assert.equal(readVirtualHalPin(virtualHalRuntime.getState(), "kinstype.is-0").value, 0);
|
||||
assert.equal(readVirtualHalPin(virtualHalRuntime.getState(), "kinstype.is-1").value, 1);
|
||||
assert.equal(readVirtualHalPin(virtualHalRuntime.getState(), "ini.x.max_limit").value, 0);
|
||||
assert.equal(readVirtualHalPin(virtualHalRuntime.getState(), "ini.z.max_limit").value, 300);
|
||||
assert.equal(virtualHalRuntime.getMillturnUserMProcessBoundaryReport({ manifestText: sourceManifestText }).complete, true);
|
||||
const virtualHalcmdResult = virtualHalRuntime.executeHalCommand(`
|
||||
loadrt trivkins
|
||||
addf motion-controller servo-thread
|
||||
@@ -1365,6 +1413,8 @@ assert.equal(virtualHalSessionPayload.simConfigSourceCoverage.complete, true);
|
||||
assert.equal(virtualHalSessionPayload.simConfigPromotionCandidates.complete, true);
|
||||
assert.equal(virtualHalSessionPayload.simConfigEvidenceExpansion.complete, true);
|
||||
assert.equal(virtualHalSessionPayload.simConfigMacroLoadFixtures.complete, true);
|
||||
assert.equal(virtualHalSessionPayload.millturnUserMProcessBoundary.complete, true);
|
||||
assert.equal(virtualHalSessionPayload.millturnUserMProcessBoundary.boundaryClass, "L4-USER-M-PROCESS");
|
||||
assert.equal(virtualHalSessionPayload.commandScriptFixtures.complete, true);
|
||||
assert.equal(virtualHalSessionPayload.motionControllerMatrix.complete, true);
|
||||
const virtualHalSessionSnapshot = createSessionSnapshot(
|
||||
@@ -1404,6 +1454,7 @@ const browserDiagnosticsArtifact = {
|
||||
inventoryBaseline: "executed=82 passed=82 skipped=77 unexpected_fail=0",
|
||||
},
|
||||
virtualHalSimConfigMacroLoadFixtures: simConfigMacroLoadFixtureReport,
|
||||
virtualHalMillturnUserMProcessBoundary: millturnUserMBoundaryReport,
|
||||
virtualHalCommandScriptFixtures: commandScriptFixtureReport,
|
||||
virtualHalMotionControllerMatrix: manifestCheckedMotionControllerMatrixReport,
|
||||
};
|
||||
@@ -1435,6 +1486,8 @@ assert.equal(browserDiagnosticsArtifactValidation.promotionCandidateSummaryReady
|
||||
assert.equal(browserDiagnosticsArtifactValidation.hasPromotionCandidateSummary, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.macroLoadFixturesReady, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.hasMacroLoadFixtures, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.millturnUserMProcessBoundaryReady, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.hasMillturnUserMProcessBoundary, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.commandScriptFixturesReady, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.motionControllerMatrixReady, true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.hasSessionDiagnostics, true);
|
||||
@@ -1453,6 +1506,19 @@ assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc
|
||||
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/configs/sim/axis/rose_engine/rcone.ngc"), true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini"), true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc"), true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M128"), true);
|
||||
assert.equal(browserDiagnosticsArtifactValidation.sourceFiles.includes("linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M129"), true);
|
||||
assert.equal(createProjectReleaseBrowserDiagnosticsArtifactValidation({
|
||||
...browserDiagnosticsArtifact,
|
||||
virtualHalMillturnUserMProcessBoundary: undefined,
|
||||
}).missing.includes("virtualHalMillturnUserMProcessBoundary"), true);
|
||||
assert.equal(createProjectReleaseBrowserDiagnosticsArtifactValidation({
|
||||
...browserDiagnosticsArtifact,
|
||||
virtualHalMillturnUserMProcessBoundary: {
|
||||
...millturnUserMBoundaryReport,
|
||||
promotionAllowed: true,
|
||||
},
|
||||
}).millturnUserMProcessBoundaryReady, false);
|
||||
assert.equal(createProjectReleaseBrowserDiagnosticsArtifactValidation({
|
||||
...browserDiagnosticsArtifact,
|
||||
virtualHalPromotionCandidateSummary: undefined,
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
import {
|
||||
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
|
||||
createVirtualHalCommandScriptFixtureReport,
|
||||
createVirtualHalMillturnUserMProcessBoundaryReport,
|
||||
createVirtualHalMotionControllerMatrixReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
@@ -1473,6 +1474,16 @@ const releaseReadinessMacroLoadFixtures = createVirtualHalSimConfigMacroLoadFixt
|
||||
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc",
|
||||
],
|
||||
});
|
||||
const releaseReadinessMillturnUserMProcessBoundary = createVirtualHalMillturnUserMProcessBoundaryReport({
|
||||
manifestEntries: [
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/millturn.ini",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/example.ngc",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M128",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/mcodes/M129",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/remap_subs/428remap.ngc",
|
||||
"linuxcnc/configs/sim/axis/vismach/millturn/remap_subs/429remap.ngc",
|
||||
],
|
||||
});
|
||||
const pythonRemapRuntimeProof = {
|
||||
nativeLifecycleReady: true,
|
||||
nativeProbeStatus: "runtime_lifecycle_probe_passed",
|
||||
@@ -1524,6 +1535,7 @@ const browserDiagnosticsArtifact = {
|
||||
inventoryBaseline: "executed=82 passed=82 skipped=77 unexpected_fail=0",
|
||||
},
|
||||
virtualHalSimConfigMacroLoadFixtures: releaseReadinessMacroLoadFixtures,
|
||||
virtualHalMillturnUserMProcessBoundary: releaseReadinessMillturnUserMProcessBoundary,
|
||||
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport({ halState: browserDiagnosticsVirtualHalState }),
|
||||
virtualHalMotionControllerMatrix: releaseReadinessMotionControllerMatrix,
|
||||
};
|
||||
@@ -1957,6 +1969,8 @@ assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.hasPromotionCandid
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.promotionCandidatesReady, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.hasMacroLoadFixtures, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.macroLoadFixturesReady, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.hasMillturnUserMProcessBoundary, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.millturnUserMProcessBoundaryReady, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.hasSessionDiagnostics, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.sessionDiagnosticsReady, true);
|
||||
assert.equal(
|
||||
@@ -2111,7 +2125,7 @@ assert.equal(
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "hard-block-runtime-locked-preview")?.value,
|
||||
"L4-PYTHON-REMAP:axis/laser/raster_test.ngc, L4-PYTHON-REMAP:axis/laser/vector_test.ngc, L4-PYTHON-REMAP:axis/laser/vector_test2.ngc",
|
||||
"L4-USER-M-PROCESS:axis/vismach/millturn/example.ngc",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "hard-block-runtime-promotion-allowed")?.value,
|
||||
@@ -2841,7 +2855,7 @@ const releaseArtifactUrlWorkflowMountResult =
|
||||
rowsNode: releaseArtifactUrlWorkflowRowsNode,
|
||||
});
|
||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true);
|
||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 57);
|
||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 53);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"),
|
||||
true,
|
||||
@@ -2891,7 +2905,7 @@ assert.equal(
|
||||
true,
|
||||
);
|
||||
assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true);
|
||||
assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 57);
|
||||
assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 53);
|
||||
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||
artifactUrl: "/project-release-readiness.json",
|
||||
fetchRef: async () => ({
|
||||
|
||||
Reference in New Issue
Block a user