接入虚拟HAL宏加载非主程序证据

This commit is contained in:
2026-06-18 05:15:02 +08:00
parent e263387cea
commit 506a6357c1
16 changed files with 519 additions and 14 deletions

View File

@@ -8,9 +8,14 @@ import {
toolTablePath,
} from "./path-model.js";
import {
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
cloneVirtualHalState,
createVirtualHalCommandScriptFixtureReport,
createVirtualHalMotionControllerMatrixReport,
createVirtualHalSimConfigMacroLoadFixtureReport,
createVirtualHalSimConfigPromotionCandidateReport,
createVirtualHalSimConfigSourceCoverageReport,
createVirtualHalSimulationReplacementReport,
createVirtualHalSourceComplianceReport,
@@ -66,6 +71,8 @@ function validateVirtualHalSessionPayload(virtualHal) {
assertPlainObject(virtualHal.diagnostics, "virtual HAL session diagnostics");
assertPlainObject(virtualHal.sourceCompliance, "virtual HAL session source compliance");
assertPlainObject(virtualHal.simConfigSourceCoverage, "virtual HAL session sim-config source coverage");
assertPlainObject(virtualHal.simConfigPromotionCandidates, "virtual HAL session sim-config promotion candidates");
assertPlainObject(virtualHal.simConfigMacroLoadFixtures, "virtual HAL session sim-config macro/load fixtures");
assertPlainObject(virtualHal.commandScriptFixtures, "virtual HAL session command script fixtures");
assertPlainObject(virtualHal.motionControllerMatrix, "virtual HAL session motion controller matrix");
if (virtualHal.state.source !== "browser-virtual-hal") {
@@ -77,6 +84,12 @@ function validateVirtualHalSessionPayload(virtualHal) {
if (virtualHal.simConfigSourceCoverage.complete !== true) {
throw new Error("virtual HAL sim-config source coverage is incomplete.");
}
if (virtualHal.simConfigPromotionCandidates.complete !== true) {
throw new Error("virtual HAL sim-config promotion candidates are incomplete.");
}
if (virtualHal.simConfigMacroLoadFixtures.complete !== true) {
throw new Error("virtual HAL sim-config macro/load fixtures are incomplete.");
}
if (virtualHal.commandScriptFixtures.complete !== true) {
throw new Error("virtual HAL command script fixtures are incomplete.");
}
@@ -88,11 +101,44 @@ function validateVirtualHalSessionPayload(virtualHal) {
export function createVirtualHalSessionPayload(halState = createVirtualHalState(), options = {}) {
const state = cloneVirtualHalState(halState);
const diagnostics = options.diagnostics ?? createVirtualHalSimulationReplacementReport(state);
const sourceCompliance = options.sourceCompliance ?? createVirtualHalSourceComplianceReport({ halState: state });
const simConfigSourceCoverage = options.simConfigSourceCoverage ?? createVirtualHalSimConfigSourceCoverageReport(options);
const commandScriptFixtures = options.commandScriptFixtures ?? createVirtualHalCommandScriptFixtureReport({ ...options, halState: state });
const motionControllerMatrix = options.motionControllerMatrix ?? createVirtualHalMotionControllerMatrixReport(options);
const reportOptions = {
...options,
...(
options.manifestText === undefined && options.manifestEntries === undefined
? {
manifestEntries: [
...VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS.flatMap((target) => target.sourceFiles ?? []),
...VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES.flatMap((candidate) => candidate.sourceFiles ?? []),
...VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES.flatMap((fixture) => fixture.sourceFiles ?? []),
],
}
: {}
),
};
const simConfigSourceCoverage = options.simConfigSourceCoverage ?? createVirtualHalSimConfigSourceCoverageReport(reportOptions);
const simConfigMacroLoadFixtures = options.simConfigMacroLoadFixtures ?? createVirtualHalSimConfigMacroLoadFixtureReport(reportOptions);
const commandScriptFixtures = options.commandScriptFixtures ?? createVirtualHalCommandScriptFixtureReport({ ...reportOptions, halState: state });
const motionControllerMatrix = options.motionControllerMatrix ?? createVirtualHalMotionControllerMatrixReport(reportOptions);
const simConfigPromotionCandidates = options.simConfigPromotionCandidates ?? createVirtualHalSimConfigPromotionCandidateReport({
...reportOptions,
simConfigSourceCoverage,
commandScriptFixtures,
motionControllerMatrix,
});
const sourceCompliance = options.sourceCompliance ?? createVirtualHalSourceComplianceReport({
...reportOptions,
halState: state,
simConfigSourceCoverage,
commandScriptFixtures,
motionControllerMatrix,
});
const diagnostics = options.diagnostics ?? createVirtualHalSimulationReplacementReport(state, {
...reportOptions,
sourceCompliance,
simConfigSourceCoverage,
commandScriptFixtures,
motionControllerMatrix,
});
return validateVirtualHalSessionPayload({
apiName: "linuxcnc-wasm-virtual-hal-session-payload",
payloadVersion: 1,
@@ -101,6 +147,8 @@ export function createVirtualHalSessionPayload(halState = createVirtualHalState(
diagnostics,
sourceCompliance,
simConfigSourceCoverage,
simConfigPromotionCandidates,
simConfigMacroLoadFixtures,
commandScriptFixtures,
motionControllerMatrix,
});

View File

@@ -299,8 +299,8 @@ private page state.
`executeHalcmd()`, `stepMotion()`, `stepMotionController()`,
`getSimulationRuntimeReport()`, `getSimulationReplacementReport()`,
`getSourceComplianceReport()`, `getSimConfigPromotionCandidateReport()`,
`getIntegrityReport()`, `getPinInventory()`, `getProjectReport()`, and
`applyToInterpSdk()`.
`getSimConfigMacroLoadFixtureReport()`, `getIntegrityReport()`,
`getPinInventory()`, `getProjectReport()`, and `applyToInterpSdk()`.
- `VIRTUAL_HAL_SIMULATION_RUNTIME_CAPABILITIES`,
`VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS`,
`VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES`,
@@ -327,6 +327,13 @@ private page state.
files, current Node `PASS` evidence, blocked-family exclusions, target
browser diagnostics evidence, and the required virtual HAL reports for
QtDragon on-abort, PUMA seam-weld, and rose-engine promotion planning.
- `VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES` and
`createVirtualHalSimConfigMacroLoadFixtureReport()` expose non-main
macro/load fixture evidence for virtual HAL diagnostics. The report keeps
`nonMainFixture === true`, separates fixture paths from manifest-backed
LinuxCNC source files, and prevents macro/load rows such as rose-engine
`rcone.ngc` or external-offsets `queuebuster.ngc` from being promoted as
standalone browser main programs.
- `createVirtualHalSourceComplianceReport()` is the machine-readable gate for
the virtual HAL source rule. It maps replacement targets, runtime
capabilities, and HAL pin families back to LinuxCNC source files such as

View File

@@ -7,6 +7,7 @@ export {
VIRTUAL_HAL_COVERAGE_STATES,
VIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES,
VIRTUAL_HAL_PROJECT_PIN_GROUPS,
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES,
@@ -31,6 +32,7 @@ export {
createVirtualHalPinInventory,
createVirtualHalPinRegistry,
createVirtualHalProjectReport,
createVirtualHalSimConfigMacroLoadFixtureReport,
createVirtualHalSimConfigPromotionCandidateReport,
createVirtualHalSimConfigSourceCoverageReport,
createVirtualHalSimulationReplacementReport,

View File

@@ -321,6 +321,48 @@ export const VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES = Object.freeze([
}),
]);
export const VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES = Object.freeze([
Object.freeze({
id: "rose-engine-rcone-macro-load",
label: "Rose engine rcone macro/load",
fixturePath: "linuxcnc/configs/sim/axis/rose_engine/rcone.ngc",
sourceFiles: Object.freeze([
"linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini",
"linuxcnc/configs/sim/axis/rose_engine/rcone.ngc",
"linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc",
]),
owningIniPath: "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini",
pairedMainProgram: "linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc",
declarationSource: "NGCGUI_SUBFILE",
currentNodeInventoryStatus: "PASS",
dependencyClass: "macro-load-non-main",
targetBrowserEvidence: "non-main-fixture-diagnostics",
blockedKind: "-",
nonMainFixture: true,
declaredOnly: false,
evidence: "LinuxCNC rose_engine.ini declares rcone.ngc through NGCGUI_SUBFILE; the fixture is validated as a non-main macro/load asset paired with rcone_demo.ngc.",
}),
Object.freeze({
id: "external-offsets-queuebuster-macro-load",
label: "External offsets queuebuster macro/load declaration",
fixturePath: "linuxcnc/configs/sim/axis/external_offsets/queuebuster.ngc",
sourceFiles: Object.freeze([
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini",
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc",
]),
owningIniPath: "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini",
pairedMainProgram: "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc",
declarationSource: "NGCGUI_SUBFILE",
currentNodeInventoryStatus: "NON_MAIN_CLASS",
dependencyClass: "macro-load-non-main-declared-only",
targetBrowserEvidence: "non-main-fixture-diagnostics",
blockedKind: "-",
nonMainFixture: true,
declaredOnly: true,
evidence: "LinuxCNC eoffsets.ini declares queuebuster.ngc through NGCGUI_SUBFILE; the fixture records the owning INI declaration without executing it as a standalone browser main program.",
}),
]);
export const VIRTUAL_HAL_COVERAGE_STATES = Object.freeze({
simulated: "simulated",
bridgeOnly: "bridge-only",
@@ -2808,6 +2850,96 @@ export function createVirtualHalSimConfigPromotionCandidateReport(options = {})
};
}
export function createVirtualHalSimConfigMacroLoadFixtureReport(options = {}) {
const fixtures = options.fixtures ?? VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES;
const manifestProvided = typeof options.manifestText === "string" || Array.isArray(options.manifestEntries);
const manifestSet = new Set([
...sourceManifestSetFromText(options.manifestText ?? ""),
...(options.manifestEntries ?? []).map(normalizeLinuxCncSourcePath),
]);
const blockedKinds = new Set(options.blockedKinds ?? [
"L4-PYTHON-REMAP",
"L4-TOOL-DB",
"L4-USER-M-PROCESS",
"UPSTREAM-DEMO",
]);
const allowedStatuses = new Set(options.allowedStatuses ?? ["PASS", "NON_MAIN_CLASS"]);
const rows = fixtures.map((fixture) => {
const sourceFiles = [...(fixture.sourceFiles ?? [])];
const normalizedSourceFiles = sourceFiles.map(normalizeLinuxCncSourcePath);
const missingManifestFiles = manifestProvided
? sourceFiles.filter((file, index) => !manifestSet.has(normalizedSourceFiles[index]))
: [];
const blockedKindExcluded = !blockedKinds.has(fixture.blockedKind);
const statusReady = allowedStatuses.has(fixture.currentNodeInventoryStatus);
const nonMainFixtureReady = fixture.nonMainFixture === true &&
fixture.targetBrowserEvidence === "non-main-fixture-diagnostics";
const complete = sourceFiles.length > 0 &&
missingManifestFiles.length === 0 &&
blockedKindExcluded &&
statusReady &&
nonMainFixtureReady;
return {
id: fixture.id,
label: fixture.label,
source: "linuxcnc-configs-sim-source-derived-virtual-hal-macro-load-fixture",
fixturePath: fixture.fixturePath,
sourceFiles,
owningIniPath: fixture.owningIniPath,
pairedMainProgram: fixture.pairedMainProgram,
declarationSource: fixture.declarationSource,
currentNodeInventoryStatus: fixture.currentNodeInventoryStatus,
dependencyClass: fixture.dependencyClass,
targetBrowserEvidence: fixture.targetBrowserEvidence,
blockedKind: fixture.blockedKind,
blockedKindExcluded,
nonMainFixture: fixture.nonMainFixture === true,
declaredOnly: fixture.declaredOnly === true,
statusReady,
manifestChecked: manifestProvided,
missingManifestFiles,
evidence: fixture.evidence,
complete,
};
});
const missingFixtures = rows.filter((row) => !row.complete).map((row) => row.id);
const blockedFixtureIds = rows.filter((row) => !row.blockedKindExcluded).map((row) => row.id);
const standaloneMainViolations = rows
.filter((row) => row.nonMainFixture !== true || row.targetBrowserEvidence !== "non-main-fixture-diagnostics")
.map((row) => row.id);
const missingManifestFiles = [...new Set(rows.flatMap((row) => row.missingManifestFiles))];
const complete = rows.length > 0 &&
missingFixtures.length === 0 &&
blockedFixtureIds.length === 0 &&
standaloneMainViolations.length === 0 &&
missingManifestFiles.length === 0;
return {
apiName: "linuxcnc-wasm-virtual-hal-sim-config-macro-load-fixture-report",
reportVersion: 1,
source: "linuxcnc-configs-sim-source-derived-virtual-hal",
phase: complete ? "ready" : "blocked",
complete,
webSimulationSatisfied: complete,
inventoryBaselineUnchanged: true,
manifestChecked: manifestProvided,
fixtureCount: rows.length,
sourceFiles: [...new Set(rows.flatMap((row) => row.sourceFiles))],
fixturePaths: rows.map((row) => row.fixturePath),
missingFixtures,
blockedFixtureIds,
standaloneMainViolations,
missingManifestFiles,
rows,
summaryRows: [
{ id: "fixtures", label: "Macro/load fixtures", value: `${rows.length}` },
{ id: "non-main", label: "Non-main fixture gate", value: standaloneMainViolations.length === 0 ? "passed" : `violations ${standaloneMainViolations.length}` },
{ id: "blocked-family", label: "Blocked-family exclusion", value: blockedFixtureIds.length === 0 ? "passed" : `blocked ${blockedFixtureIds.length}` },
{ id: "manifest", label: "Manifest check", value: manifestProvided ? (missingManifestFiles.length === 0 ? "passed" : "failed") : "not provided" },
{ id: "inventory-baseline", label: "Inventory baseline", value: "unchanged" },
],
};
}
export function createVirtualHalSourceComplianceReport(options = {}) {
const halState = options.halState ?? createVirtualHalState();
const snapshot = options.snapshot ?? createVirtualHalWasmBridgeSnapshot(halState);
@@ -3024,6 +3156,9 @@ export function createLinuxCncVirtualHalRuntime(initialState = createVirtualHalS
getSimConfigPromotionCandidateReport(options = {}) {
return createVirtualHalSimConfigPromotionCandidateReport(options);
},
getSimConfigMacroLoadFixtureReport(options = {}) {
return createVirtualHalSimConfigMacroLoadFixtureReport(options);
},
getCommandScriptFixtureReport(options = {}) {
return createVirtualHalCommandScriptFixtureReport({ ...options, halState: state });
},

View File

@@ -148,6 +148,26 @@ const REQUIRED_PROMOTION_CANDIDATES = [
},
];
const REQUIRED_MACRO_LOAD_FIXTURES = [
{
id: "rose-engine-rcone-macro-load",
fixturePath: "linuxcnc/configs/sim/axis/rose_engine/rcone.ngc",
sourceFiles: [
"linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini",
"linuxcnc/configs/sim/axis/rose_engine/rcone.ngc",
"linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc",
],
},
{
id: "external-offsets-queuebuster-macro-load",
fixturePath: "linuxcnc/configs/sim/axis/external_offsets/queuebuster.ngc",
sourceFiles: [
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini",
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc",
],
},
];
function isVirtualHalSimConfigSourceCoverageReady(report) {
const coverage = objectOrEmpty(report);
return coverage.apiName === "linuxcnc-wasm-virtual-hal-sim-config-source-coverage-report" &&
@@ -176,6 +196,29 @@ function hasRequiredPromotionCandidates(rows) {
);
}
function isVirtualHalSimConfigMacroLoadFixtureReportReady(report) {
const fixtureReport = objectOrEmpty(report);
const rows = arrayOrEmpty(fixtureReport.rows);
return fixtureReport.apiName === "linuxcnc-wasm-virtual-hal-sim-config-macro-load-fixture-report" &&
fixtureReport.complete === true &&
fixtureReport.webSimulationSatisfied === true &&
fixtureReport.inventoryBaselineUnchanged === true &&
arrayOrEmpty(fixtureReport.missingFixtures).length === 0 &&
arrayOrEmpty(fixtureReport.blockedFixtureIds).length === 0 &&
arrayOrEmpty(fixtureReport.standaloneMainViolations).length === 0 &&
arrayOrEmpty(fixtureReport.missingManifestFiles).length === 0 &&
REQUIRED_MACRO_LOAD_FIXTURES.every((fixture) =>
rows.some((row) =>
row.id === fixture.id &&
row.complete === true &&
row.nonMainFixture === true &&
row.targetBrowserEvidence === "non-main-fixture-diagnostics" &&
row.fixturePath === fixture.fixturePath &&
fixture.sourceFiles.every((file) => arrayOrEmpty(row.sourceFiles).includes(file))
)
);
}
function isVirtualHalMotionControllerMatrixReady(report) {
const matrix = objectOrEmpty(report);
return matrix.apiName === "linuxcnc-wasm-virtual-hal-motion-controller-matrix-report" &&
@@ -218,6 +261,7 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
const commandScriptFixtures = objectOrEmpty(artifactObject.virtualHalCommandScriptFixtures);
const motionControllerMatrix = objectOrEmpty(artifactObject.virtualHalMotionControllerMatrix);
const promotionCandidates = objectOrEmpty(artifactObject.virtualHalSimConfigPromotionCandidates);
const macroLoadFixtures = objectOrEmpty(artifactObject.virtualHalSimConfigMacroLoadFixtures);
const sessionDiagnostics = objectOrEmpty(artifactObject.virtualHalSessionDiagnostics);
const replacement = objectOrEmpty(artifactObject.virtualHalSimulationReplacement);
const virtualHal = objectOrEmpty(artifactObject.virtualHal);
@@ -234,6 +278,9 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
const hasPromotionCandidates = artifactObject.virtualHalSimConfigPromotionCandidates !== undefined;
const promotionCandidatesReady = !hasPromotionCandidates ||
isVirtualHalSimConfigPromotionCandidateReportReady(promotionCandidates);
const hasMacroLoadFixtures = artifactObject.virtualHalSimConfigMacroLoadFixtures !== undefined;
const macroLoadFixturesReady = hasMacroLoadFixtures &&
isVirtualHalSimConfigMacroLoadFixtureReportReady(macroLoadFixtures);
const replacementReady = replacement.ready === true &&
replacement.replacesHostRuntimeForSimulation === true &&
objectOrEmpty(replacement.sourceCompliance).webSimulationSatisfied === true &&
@@ -256,6 +303,7 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
...(sourceComplianceReady ? [] : ["virtualHalSourceCompliance"]),
...(simConfigSourceCoverageReady ? [] : ["virtualHalSimConfigSourceCoverage"]),
...(promotionCandidatesReady ? [] : ["virtualHalSimConfigPromotionCandidates"]),
...(macroLoadFixturesReady ? [] : ["virtualHalSimConfigMacroLoadFixtures"]),
...(commandScriptFixturesReady ? [] : ["virtualHalCommandScriptFixtures"]),
...(motionControllerMatrixReady ? [] : ["virtualHalMotionControllerMatrix"]),
...(sessionDiagnosticsReady ? [] : ["virtualHalSessionDiagnostics"]),
@@ -273,6 +321,8 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
simConfigSourceCoverageReady,
promotionCandidatesReady,
hasPromotionCandidates,
macroLoadFixturesReady,
hasMacroLoadFixtures,
commandScriptFixturesReady,
motionControllerMatrixReady,
sessionDiagnosticsReady,
@@ -281,6 +331,7 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
...arrayOrEmpty(sourceCompliance.sourceFiles),
...arrayOrEmpty(simConfigSourceCoverage.sourceFiles),
...arrayOrEmpty(promotionCandidates.sourceFiles),
...arrayOrEmpty(macroLoadFixtures.sourceFiles),
...arrayOrEmpty(commandScriptFixtures.sourceFiles),
...arrayOrEmpty(motionControllerMatrix.sourceFiles),
...arrayOrEmpty(motionControllerMatrix.simConfigSourceFiles),
@@ -311,6 +362,11 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
label: "Virtual HAL sim-config promotion candidates",
value: hasPromotionCandidates ? (promotionCandidatesReady ? "ready" : "missing") : "not provided",
},
{
id: "sim-config-macro-load-fixtures",
label: "Virtual HAL sim-config macro/load fixtures",
value: hasMacroLoadFixtures ? (macroLoadFixturesReady ? "ready" : "missing") : "not provided",
},
{
id: "command-script-fixtures",
label: "Virtual HAL command script fixtures",

View File

@@ -1805,6 +1805,7 @@ M2
import {
DEFAULT_SIMULATION_PROGRAM_ID,
VIRTUAL_HAL_AXES as SHARED_VIRTUAL_HAL_AXES,
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES as SHARED_VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES as SHARED_VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS as SHARED_VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
applyVirtualHalAction as applySharedVirtualHalAction,
@@ -1817,6 +1818,7 @@ M2
createVirtualHalMachineStatusState as createSharedVirtualHalMachineStatusState,
createVirtualHalMotionControllerMatrixReport as createSharedVirtualHalMotionControllerMatrixReport,
createVirtualHalPinRegistry as createSharedVirtualHalPinRegistry,
createVirtualHalSimConfigMacroLoadFixtureReport as createSharedVirtualHalSimConfigMacroLoadFixtureReport,
createVirtualHalSimConfigPromotionCandidateReport as createSharedVirtualHalSimConfigPromotionCandidateReport,
createVirtualHalSimConfigSourceCoverageReport as createSharedVirtualHalSimConfigSourceCoverageReport,
createVirtualHalSimulationReplacementReport as createSharedVirtualHalSimulationReplacementReport,
@@ -1986,6 +1988,7 @@ M2
};
const statusHistory = [];
const VIRTUAL_HAL_AXES = SHARED_VIRTUAL_HAL_AXES;
const VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES = SHARED_VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES;
const VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES = SHARED_VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES;
const VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES = SHARED_VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS.flatMap((target) => target.sourceFiles ?? []);
let virtualHalState = createVirtualHalState();
@@ -2531,6 +2534,15 @@ M2
});
}
function createVirtualHalSimConfigMacroLoadFixtureReport() {
return createSharedVirtualHalSimConfigMacroLoadFixtureReport({
manifestEntries: [
...VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES,
...VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES.flatMap((fixture) => fixture.sourceFiles ?? []),
],
});
}
function createVirtualHalCommandScriptFixtureReport() {
return createSharedVirtualHalCommandScriptFixtureReport({ halState: virtualHalState });
}
@@ -2630,6 +2642,7 @@ M2
virtualHalSourceCompliance: createVirtualHalSourceComplianceReport(),
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
virtualHalSimConfigPromotionCandidates: createVirtualHalSimConfigPromotionCandidateReport(),
virtualHalSimConfigMacroLoadFixtures: createVirtualHalSimConfigMacroLoadFixtureReport(),
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport(),
virtualHalMotionControllerMatrix: createVirtualHalMotionControllerMatrixReport(),
virtualHalSessionDiagnostics: createVirtualHalSessionDiagnosticsArtifact(),
@@ -2665,6 +2678,8 @@ M2
virtualHalSimulationReplacement: virtualHal.diagnostics,
virtualHalSourceCompliance: virtualHal.sourceCompliance,
virtualHalSimConfigSourceCoverage: virtualHal.simConfigSourceCoverage,
virtualHalSimConfigPromotionCandidates: virtualHal.simConfigPromotionCandidates,
virtualHalSimConfigMacroLoadFixtures: virtualHal.simConfigMacroLoadFixtures,
virtualHalCommandScriptFixtures: virtualHal.commandScriptFixtures,
virtualHalMotionControllerMatrix: virtualHal.motionControllerMatrix,
};
@@ -3596,7 +3611,11 @@ M2
async function saveVirtualHalSessionSnapshot(options = {}) {
const session = virtualHalSessionOptions(options);
const virtualHal = createVirtualHalSessionPayload(virtualHalState, {
manifestEntries: VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES,
manifestEntries: [
...VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES,
...VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES.flatMap((candidate) => candidate.sourceFiles ?? []),
...VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES.flatMap((fixture) => fixture.sourceFiles ?? []),
],
});
const payload = createMachineSessionSnapshotPayload(session.machineId, {
...(session.gcodeFilename ? { gcodeFilename: session.gcodeFilename } : {}),
@@ -4062,6 +4081,7 @@ M2
getVirtualHalSourceComplianceReport: () => createVirtualHalSourceComplianceReport(),
getVirtualHalSimConfigSourceCoverageReport: () => createVirtualHalSimConfigSourceCoverageReport(),
getVirtualHalSimConfigPromotionCandidateReport: () => createVirtualHalSimConfigPromotionCandidateReport(),
getVirtualHalSimConfigMacroLoadFixtureReport: () => createVirtualHalSimConfigMacroLoadFixtureReport(),
getVirtualHalCommandScriptFixtureReport: () => createVirtualHalCommandScriptFixtureReport(),
getVirtualHalMotionControllerMatrixReport: () => createVirtualHalMotionControllerMatrixReport(),
getVirtualRealtimeHalRuntimeReport: () => createVirtualHalSimulationReplacementReport(),

View File

@@ -19,6 +19,7 @@ export {
VIRTUAL_HAL_AXES,
VIRTUAL_HAL_AXISUI_PINS,
VIRTUAL_HAL_MOTION_CONTROLLER_MATRIX_FIXTURES,
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS,
@@ -34,6 +35,7 @@ export {
createVirtualHalLimitsHomeState,
createVirtualHalMachineStatusState,
createVirtualHalPinRegistry,
createVirtualHalSimConfigMacroLoadFixtureReport,
createVirtualHalSimConfigPromotionCandidateReport,
createVirtualHalSimConfigSourceCoverageReport,
createVirtualHalSimulationReplacementReport,