接入虚拟HAL仿真配置promotion证据
This commit is contained in:
@@ -99,12 +99,57 @@ function isVirtualHalSimConfigSourceCoverageReady(report) {
|
||||
arrayOrEmpty(coverage.sourceFiles).includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc");
|
||||
}
|
||||
|
||||
function isVirtualHalMotionControllerMatrixReady(report) {
|
||||
const matrix = objectOrEmpty(report);
|
||||
return matrix.apiName === "linuxcnc-wasm-virtual-hal-motion-controller-matrix-report" &&
|
||||
matrix.complete === true &&
|
||||
matrix.webSimulationSatisfied === true &&
|
||||
matrix.manifestChecked === true &&
|
||||
arrayOrEmpty(matrix.missingFixtures).length === 0 &&
|
||||
arrayOrEmpty(matrix.missingSimConfigTargets).length === 0 &&
|
||||
arrayOrEmpty(matrix.missingManifestFiles).length === 0 &&
|
||||
arrayOrEmpty(matrix.requiredPins).includes("motion.distance-to-go") &&
|
||||
arrayOrEmpty(matrix.requiredPins).includes("motion.in-position") &&
|
||||
arrayOrEmpty(matrix.sourceFiles).includes("linuxcnc/src/emc/motion/motion.c") &&
|
||||
arrayOrEmpty(matrix.sourceFiles).includes("linuxcnc/src/emc/motion/axis.c") &&
|
||||
arrayOrEmpty(matrix.simConfigTargets).includes("external-offsets") &&
|
||||
arrayOrEmpty(matrix.simConfigTargets).includes("qtdragon-on-abort") &&
|
||||
arrayOrEmpty(matrix.simConfigTargets).includes("vismach-remap-sims") &&
|
||||
arrayOrEmpty(matrix.simConfigSourceFiles).includes("linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini") &&
|
||||
arrayOrEmpty(matrix.simConfigSourceFiles).includes("linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini") &&
|
||||
arrayOrEmpty(matrix.simConfigSourceFiles).includes("linuxcnc/configs/sim/axis/vismach/puma/puma.ini");
|
||||
}
|
||||
|
||||
function isVirtualHalSimConfigPromotionCandidateReportReady(report) {
|
||||
const candidateReport = objectOrEmpty(report);
|
||||
const rows = arrayOrEmpty(candidateReport.rows);
|
||||
return candidateReport.apiName === "linuxcnc-wasm-virtual-hal-sim-config-promotion-candidate-report" &&
|
||||
candidateReport.complete === true &&
|
||||
candidateReport.webSimulationSatisfied === true &&
|
||||
candidateReport.inventoryBaselineUnchanged === true &&
|
||||
arrayOrEmpty(candidateReport.missingCandidates).length === 0 &&
|
||||
arrayOrEmpty(candidateReport.blockedCandidateIds).length === 0 &&
|
||||
arrayOrEmpty(candidateReport.missingManifestFiles).length === 0 &&
|
||||
arrayOrEmpty(candidateReport.missingRequiredReports).length === 0 &&
|
||||
rows.some((row) =>
|
||||
row.id === "qtdragon-multi-joint-on-abort" &&
|
||||
row.complete === true &&
|
||||
row.currentNodeInventoryStatus === "PASS" &&
|
||||
row.blockedKind === "-" &&
|
||||
row.targetBrowserEvidence === "explicit-browser-diagnostics" &&
|
||||
arrayOrEmpty(row.sourceFiles).includes("linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini") &&
|
||||
arrayOrEmpty(row.sourceFiles).includes("linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc")
|
||||
);
|
||||
}
|
||||
|
||||
export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifact = {}) {
|
||||
const artifactObject = objectOrEmpty(artifact);
|
||||
const sourceCompliance = objectOrEmpty(artifactObject.virtualHalSourceCompliance);
|
||||
const simConfigSourceCoverage = objectOrEmpty(artifactObject.virtualHalSimConfigSourceCoverage);
|
||||
const commandScriptFixtures = objectOrEmpty(artifactObject.virtualHalCommandScriptFixtures);
|
||||
const motionControllerMatrix = objectOrEmpty(artifactObject.virtualHalMotionControllerMatrix);
|
||||
const promotionCandidates = objectOrEmpty(artifactObject.virtualHalSimConfigPromotionCandidates);
|
||||
const sessionDiagnostics = objectOrEmpty(artifactObject.virtualHalSessionDiagnostics);
|
||||
const replacement = objectOrEmpty(artifactObject.virtualHalSimulationReplacement);
|
||||
const virtualHal = objectOrEmpty(artifactObject.virtualHal);
|
||||
const sourceComplianceReady = sourceCompliance.complete === true &&
|
||||
@@ -116,31 +161,35 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
||||
arrayOrEmpty(commandScriptFixtures.coveredActions).includes("loadusr") &&
|
||||
arrayOrEmpty(commandScriptFixtures.coveredActions).includes("stop") &&
|
||||
arrayOrEmpty(commandScriptFixtures.sourceFiles).includes("linuxcnc/src/hal/utils/halcmd_commands.cc");
|
||||
const motionControllerMatrixReady = motionControllerMatrix.complete === true &&
|
||||
motionControllerMatrix.webSimulationSatisfied === true &&
|
||||
arrayOrEmpty(motionControllerMatrix.requiredPins).includes("motion.distance-to-go") &&
|
||||
arrayOrEmpty(motionControllerMatrix.requiredPins).includes("motion.in-position") &&
|
||||
arrayOrEmpty(motionControllerMatrix.sourceFiles).includes("linuxcnc/src/emc/motion/motion.c") &&
|
||||
arrayOrEmpty(motionControllerMatrix.sourceFiles).includes("linuxcnc/src/emc/motion/axis.c") &&
|
||||
arrayOrEmpty(motionControllerMatrix.simConfigTargets).includes("external-offsets") &&
|
||||
arrayOrEmpty(motionControllerMatrix.simConfigTargets).includes("qtdragon-on-abort") &&
|
||||
arrayOrEmpty(motionControllerMatrix.simConfigTargets).includes("vismach-remap-sims") &&
|
||||
arrayOrEmpty(motionControllerMatrix.simConfigSourceFiles).includes("linuxcnc/configs/sim/axis/external_offsets/dynamic_offsets.ini") &&
|
||||
arrayOrEmpty(motionControllerMatrix.simConfigSourceFiles).includes("linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini") &&
|
||||
arrayOrEmpty(motionControllerMatrix.simConfigSourceFiles).includes("linuxcnc/configs/sim/axis/vismach/puma/puma.ini");
|
||||
const motionControllerMatrixReady = isVirtualHalMotionControllerMatrixReady(motionControllerMatrix);
|
||||
const hasPromotionCandidates = artifactObject.virtualHalSimConfigPromotionCandidates !== undefined;
|
||||
const promotionCandidatesReady = !hasPromotionCandidates ||
|
||||
isVirtualHalSimConfigPromotionCandidateReportReady(promotionCandidates);
|
||||
const replacementReady = replacement.ready === true &&
|
||||
replacement.replacesHostRuntimeForSimulation === true &&
|
||||
objectOrEmpty(replacement.sourceCompliance).webSimulationSatisfied === true &&
|
||||
objectOrEmpty(replacement.motionControllerMatrix).complete === true;
|
||||
const virtualHalReady = virtualHal.source === "browser-virtual-hal";
|
||||
const hasSessionDiagnostics = artifactObject.virtualHalSessionDiagnostics !== undefined;
|
||||
const sessionDiagnosticsReady = !hasSessionDiagnostics || (
|
||||
sessionDiagnostics.apiName === "real-browser-simulation-virtual-hal-session-diagnostics" &&
|
||||
sessionDiagnostics.ready === true &&
|
||||
sessionDiagnostics.phase === "release-ready" &&
|
||||
objectOrEmpty(sessionDiagnostics.validation).ready === true &&
|
||||
objectOrEmpty(sessionDiagnostics.diagnosticsArtifact).apiName === "real-browser-simulation-diagnostics-artifact" &&
|
||||
objectOrEmpty(sessionDiagnostics.diagnosticsArtifact?.virtualHalSourceCompliance).complete === true &&
|
||||
objectOrEmpty(sessionDiagnostics.diagnosticsArtifact?.virtualHalMotionControllerMatrix).manifestChecked === true
|
||||
);
|
||||
const missing = [
|
||||
...(artifactObject.apiName === "real-browser-simulation-diagnostics-artifact" ? [] : ["apiName"]),
|
||||
...(virtualHalReady ? [] : ["virtualHal"]),
|
||||
...(replacementReady ? [] : ["virtualHalSimulationReplacement"]),
|
||||
...(sourceComplianceReady ? [] : ["virtualHalSourceCompliance"]),
|
||||
...(simConfigSourceCoverageReady ? [] : ["virtualHalSimConfigSourceCoverage"]),
|
||||
...(promotionCandidatesReady ? [] : ["virtualHalSimConfigPromotionCandidates"]),
|
||||
...(commandScriptFixturesReady ? [] : ["virtualHalCommandScriptFixtures"]),
|
||||
...(motionControllerMatrixReady ? [] : ["virtualHalMotionControllerMatrix"]),
|
||||
...(sessionDiagnosticsReady ? [] : ["virtualHalSessionDiagnostics"]),
|
||||
];
|
||||
return {
|
||||
apiName: "project-release-browser-diagnostics-artifact-validation",
|
||||
@@ -153,11 +202,16 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
||||
replacementReady,
|
||||
sourceComplianceReady,
|
||||
simConfigSourceCoverageReady,
|
||||
promotionCandidatesReady,
|
||||
hasPromotionCandidates,
|
||||
commandScriptFixturesReady,
|
||||
motionControllerMatrixReady,
|
||||
sessionDiagnosticsReady,
|
||||
hasSessionDiagnostics,
|
||||
sourceFiles: [...new Set([
|
||||
...arrayOrEmpty(sourceCompliance.sourceFiles),
|
||||
...arrayOrEmpty(simConfigSourceCoverage.sourceFiles),
|
||||
...arrayOrEmpty(promotionCandidates.sourceFiles),
|
||||
...arrayOrEmpty(commandScriptFixtures.sourceFiles),
|
||||
...arrayOrEmpty(motionControllerMatrix.sourceFiles),
|
||||
...arrayOrEmpty(motionControllerMatrix.simConfigSourceFiles),
|
||||
@@ -183,6 +237,11 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
||||
label: "Virtual HAL sim-config source coverage",
|
||||
value: simConfigSourceCoverageReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "sim-config-promotion-candidates",
|
||||
label: "Virtual HAL sim-config promotion candidates",
|
||||
value: hasPromotionCandidates ? (promotionCandidatesReady ? "ready" : "missing") : "not provided",
|
||||
},
|
||||
{
|
||||
id: "command-script-fixtures",
|
||||
label: "Virtual HAL command script fixtures",
|
||||
@@ -193,6 +252,11 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: motionControllerMatrixReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "session-diagnostics",
|
||||
label: "Saved-session diagnostics",
|
||||
value: hasSessionDiagnostics ? (sessionDiagnosticsReady ? "ready" : "missing") : "not provided",
|
||||
},
|
||||
{
|
||||
id: "missing",
|
||||
label: "Missing diagnostics evidence",
|
||||
@@ -585,6 +649,7 @@ export function createProjectBatchAcceptanceWorkflow({
|
||||
gateResults = {},
|
||||
observedOutputs = [],
|
||||
virtualHalSimConfigSourceCoverage = null,
|
||||
virtualHalMotionControllerMatrix = null,
|
||||
} = {}) {
|
||||
const capabilityMatrix = createProjectBatchAcceptanceCapabilityMatrix({ capabilities });
|
||||
const gateManifest = createProjectReleaseGateManifest();
|
||||
@@ -597,11 +662,17 @@ export function createProjectBatchAcceptanceWorkflow({
|
||||
.find(({ id }) => id === "project-batch-acceptance")?.passed === true;
|
||||
const virtualHalSimConfigSourceCoverageReady = virtualHalSimConfigSourceCoverage === null ||
|
||||
isVirtualHalSimConfigSourceCoverageReady(virtualHalSimConfigSourceCoverage);
|
||||
const ready = capabilityMatrix.ready && batchGatePassed && virtualHalSimConfigSourceCoverageReady;
|
||||
const virtualHalMotionControllerMatrixReady = virtualHalMotionControllerMatrix === null ||
|
||||
isVirtualHalMotionControllerMatrixReady(virtualHalMotionControllerMatrix);
|
||||
const ready = capabilityMatrix.ready &&
|
||||
batchGatePassed &&
|
||||
virtualHalSimConfigSourceCoverageReady &&
|
||||
virtualHalMotionControllerMatrixReady;
|
||||
const missing = [
|
||||
...capabilityMatrix.missing,
|
||||
...(batchGatePassed ? [] : ["project-batch-acceptance"]),
|
||||
...(virtualHalSimConfigSourceCoverageReady ? [] : ["virtual-hal-sim-config-source-coverage"]),
|
||||
...(virtualHalMotionControllerMatrixReady ? [] : ["virtual-hal-motion-controller-matrix"]),
|
||||
];
|
||||
|
||||
return {
|
||||
@@ -618,6 +689,8 @@ export function createProjectBatchAcceptanceWorkflow({
|
||||
rejectedCapabilities: capabilityMatrix.rejectedCapabilities,
|
||||
virtualHalSimConfigSourceCoverage,
|
||||
virtualHalSimConfigSourceCoverageReady,
|
||||
virtualHalMotionControllerMatrix,
|
||||
virtualHalMotionControllerMatrixReady,
|
||||
gateResultMatrix,
|
||||
missing,
|
||||
rows: [
|
||||
@@ -643,6 +716,13 @@ export function createProjectBatchAcceptanceWorkflow({
|
||||
? "not required"
|
||||
: (virtualHalSimConfigSourceCoverageReady ? "ready" : "missing"),
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: virtualHalMotionControllerMatrix === null
|
||||
? "not required"
|
||||
: (virtualHalMotionControllerMatrixReady ? "ready" : "missing"),
|
||||
},
|
||||
{
|
||||
id: "missing",
|
||||
label: "Missing acceptance evidence",
|
||||
@@ -785,6 +865,15 @@ export function createProjectBatchAcceptanceChecklist({
|
||||
? "not required"
|
||||
: (workflow?.virtualHalSimConfigSourceCoverageReady === true ? "ready" : "missing"),
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
status: workflow?.virtualHalMotionControllerMatrixReady !== false ? "pass" : "blocked",
|
||||
passed: workflow?.virtualHalMotionControllerMatrixReady !== false,
|
||||
detail: workflow?.virtualHalMotionControllerMatrix === null
|
||||
? "not required"
|
||||
: (workflow?.virtualHalMotionControllerMatrixReady === true ? "ready" : "missing"),
|
||||
},
|
||||
{
|
||||
id: "next-action",
|
||||
label: "Next acceptance action",
|
||||
@@ -817,6 +906,7 @@ export function createProjectBatchAcceptanceReport({
|
||||
gateResults = {},
|
||||
observedOutputs = [],
|
||||
virtualHalSimConfigSourceCoverage = null,
|
||||
virtualHalMotionControllerMatrix = null,
|
||||
} = {}) {
|
||||
const capabilityMatrix = createProjectBatchAcceptanceCapabilityMatrix({ capabilities });
|
||||
const workflow = createProjectBatchAcceptanceWorkflow({
|
||||
@@ -825,6 +915,7 @@ export function createProjectBatchAcceptanceReport({
|
||||
gateResults,
|
||||
observedOutputs,
|
||||
virtualHalSimConfigSourceCoverage,
|
||||
virtualHalMotionControllerMatrix,
|
||||
});
|
||||
const summaryViewModel = createProjectBatchAcceptanceSummaryViewModel(workflow);
|
||||
const actionPlan = createProjectBatchAcceptanceActionPlan(workflow);
|
||||
@@ -840,6 +931,7 @@ export function createProjectBatchAcceptanceReport({
|
||||
capabilityMatrix,
|
||||
workflow,
|
||||
virtualHalSimConfigSourceCoverage,
|
||||
virtualHalMotionControllerMatrix,
|
||||
summaryViewModel,
|
||||
actionPlan,
|
||||
checklist,
|
||||
@@ -876,11 +968,16 @@ export function createProjectBatchAcceptanceReportValidation(report = {}) {
|
||||
const actionPlan = objectOrEmpty(reportObject.actionPlan);
|
||||
const checklist = objectOrEmpty(reportObject.checklist);
|
||||
const virtualHalSimConfigSourceCoverage = objectOrEmpty(reportObject.virtualHalSimConfigSourceCoverage);
|
||||
const virtualHalMotionControllerMatrix = objectOrEmpty(reportObject.virtualHalMotionControllerMatrix);
|
||||
const rows = arrayOrEmpty(reportObject.rows);
|
||||
const virtualHalSimConfigSourceCoverageRequired = reportObject.virtualHalSimConfigSourceCoverage !== null &&
|
||||
reportObject.virtualHalSimConfigSourceCoverage !== undefined;
|
||||
const virtualHalSimConfigSourceCoverageReady = !virtualHalSimConfigSourceCoverageRequired ||
|
||||
isVirtualHalSimConfigSourceCoverageReady(virtualHalSimConfigSourceCoverage);
|
||||
const virtualHalMotionControllerMatrixRequired = reportObject.virtualHalMotionControllerMatrix !== null &&
|
||||
reportObject.virtualHalMotionControllerMatrix !== undefined;
|
||||
const virtualHalMotionControllerMatrixReady = !virtualHalMotionControllerMatrixRequired ||
|
||||
isVirtualHalMotionControllerMatrixReady(virtualHalMotionControllerMatrix);
|
||||
const missing = [
|
||||
...(reportObject.apiName === "project-batch-acceptance-report" ? [] : ["apiName"]),
|
||||
...(reportObject.reportVersion === 1 ? [] : ["reportVersion"]),
|
||||
@@ -905,7 +1002,8 @@ export function createProjectBatchAcceptanceReportValidation(report = {}) {
|
||||
? []
|
||||
: ["checklist"]),
|
||||
...(virtualHalSimConfigSourceCoverageReady ? [] : ["virtualHalSimConfigSourceCoverage"]),
|
||||
...(rows.find(({ id, value }) => id === "checklist" && /^([34])\/\1 passed$/.test(value))
|
||||
...(virtualHalMotionControllerMatrixReady ? [] : ["virtualHalMotionControllerMatrix"]),
|
||||
...(rows.find(({ id, value }) => id === "checklist" && /^([45])\/\1 passed$/.test(value))
|
||||
? []
|
||||
: ["rows.checklist"]),
|
||||
];
|
||||
@@ -919,6 +1017,8 @@ export function createProjectBatchAcceptanceReportValidation(report = {}) {
|
||||
batchId: reportObject.batchId ?? null,
|
||||
reportApiName: reportObject.apiName ?? null,
|
||||
reportVersion: reportObject.reportVersion ?? null,
|
||||
virtualHalSimConfigSourceCoverageReady,
|
||||
virtualHalMotionControllerMatrixReady,
|
||||
rows: [
|
||||
{
|
||||
id: "report",
|
||||
@@ -947,6 +1047,13 @@ export function createProjectBatchAcceptanceReportValidation(report = {}) {
|
||||
? (virtualHalSimConfigSourceCoverageReady ? "ready" : "missing")
|
||||
: "not required",
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: virtualHalMotionControllerMatrixRequired
|
||||
? (virtualHalMotionControllerMatrixReady ? "ready" : "missing")
|
||||
: "not required",
|
||||
},
|
||||
{
|
||||
id: "missing",
|
||||
label: "Missing report evidence",
|
||||
@@ -1404,6 +1511,7 @@ export function createProjectReleaseReadinessReport({
|
||||
observedOutputs = [],
|
||||
simConfigInventory = DEFAULT_SIM_CONFIG_INVENTORY_BASELINE,
|
||||
virtualHalSimConfigSourceCoverage = null,
|
||||
virtualHalMotionControllerMatrix = null,
|
||||
blockedRuntimeFamilies = BLOCKED_RUNTIME_FAMILIES,
|
||||
promotedRuntimeFamilies = [],
|
||||
axisScreenshotArtifacts = [],
|
||||
@@ -1439,18 +1547,23 @@ export function createProjectReleaseReadinessReport({
|
||||
const virtualHalSimConfigSourceCoverageReady = isVirtualHalSimConfigSourceCoverageReady(
|
||||
virtualHalSimConfigSourceCoverage,
|
||||
);
|
||||
const virtualHalMotionControllerMatrixReady = isVirtualHalMotionControllerMatrixReady(
|
||||
virtualHalMotionControllerMatrix,
|
||||
);
|
||||
const blockedRuntimeReady = promotedBlockedFamilies.length === 0;
|
||||
const axisScreenshotArtifactSummary = createAxisScreenshotArtifactSummary(axisScreenshotArtifacts);
|
||||
const axisScreenshotArtifactsReady = axisScreenshotArtifactSummary.ready;
|
||||
const ready = releaseGatePassed &&
|
||||
inventoryReady &&
|
||||
virtualHalSimConfigSourceCoverageReady &&
|
||||
virtualHalMotionControllerMatrixReady &&
|
||||
blockedRuntimeReady &&
|
||||
axisScreenshotArtifactsReady;
|
||||
const missing = [
|
||||
...(releaseGatePassed ? [] : ["project-release-gate"]),
|
||||
...(inventoryReady ? [] : ["sim-config-inventory"]),
|
||||
...(virtualHalSimConfigSourceCoverageReady ? [] : ["virtual-hal-sim-config-source-coverage"]),
|
||||
...(virtualHalMotionControllerMatrixReady ? [] : ["virtual-hal-motion-controller-matrix"]),
|
||||
...(blockedRuntimeReady ? [] : ["blocked-runtime-families"]),
|
||||
...(axisScreenshotArtifactsReady ? [] : ["axis-screenshot-artifacts"]),
|
||||
];
|
||||
@@ -1469,6 +1582,8 @@ export function createProjectReleaseReadinessReport({
|
||||
simConfigInventory: inventory,
|
||||
virtualHalSimConfigSourceCoverage,
|
||||
virtualHalSimConfigSourceCoverageReady,
|
||||
virtualHalMotionControllerMatrix,
|
||||
virtualHalMotionControllerMatrixReady,
|
||||
blockedRuntimeFamilies: blockedFamilies,
|
||||
promotedRuntimeFamilies: promotedFamilies,
|
||||
promotedBlockedFamilies,
|
||||
@@ -1495,6 +1610,11 @@ export function createProjectReleaseReadinessReport({
|
||||
label: "Virtual HAL sim-config source coverage",
|
||||
value: virtualHalSimConfigSourceCoverageReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: virtualHalMotionControllerMatrixReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "blocked-runtime-families",
|
||||
label: "Blocked runtime families",
|
||||
@@ -1518,6 +1638,7 @@ export function createProjectReleaseReadinessSummaryViewModel(
|
||||
const gateResultMatrix = objectOrEmpty(report?.gateResultMatrix);
|
||||
const simConfigInventory = objectOrEmpty(report?.simConfigInventory);
|
||||
const virtualHalSimConfigSourceCoverageReady = report?.virtualHalSimConfigSourceCoverageReady === true;
|
||||
const virtualHalMotionControllerMatrixReady = report?.virtualHalMotionControllerMatrixReady === true;
|
||||
const axisScreenshotArtifactSummary = objectOrEmpty(report?.axisScreenshotArtifactSummary);
|
||||
const blockedRuntimeFamilies = arrayOrEmpty(report?.blockedRuntimeFamilies);
|
||||
const promotedBlockedFamilies = arrayOrEmpty(report?.promotedBlockedFamilies);
|
||||
@@ -1554,6 +1675,11 @@ export function createProjectReleaseReadinessSummaryViewModel(
|
||||
label: "Virtual HAL sim-config source coverage",
|
||||
value: virtualHalSimConfigSourceCoverageReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: virtualHalMotionControllerMatrixReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "blocked-runtime-families",
|
||||
label: "Blocked runtime families",
|
||||
@@ -1636,6 +1762,11 @@ export function createProjectReleaseReadinessArtifactValidationSummaryViewModel(
|
||||
label: "Virtual HAL sim-config source coverage",
|
||||
value: validation?.virtualHalSimConfigSourceCoverageReady === true ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: validation?.virtualHalMotionControllerMatrixReady === true ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "missing",
|
||||
label: "Missing artifact evidence",
|
||||
@@ -1790,6 +1921,7 @@ export function createProjectReleaseReadinessArtifactJsonWorkflow({ artifactJson
|
||||
export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
artifactUrl = "",
|
||||
diagnosticsUrl = "",
|
||||
requireSavedSessionDiagnostics = false,
|
||||
fetchRef = globalThis.fetch,
|
||||
} = {}) {
|
||||
if (!artifactUrl || typeof fetchRef !== "function") {
|
||||
@@ -1810,6 +1942,7 @@ export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
ready: false,
|
||||
artifactUrl,
|
||||
diagnosticsUrl,
|
||||
requireSavedSessionDiagnostics,
|
||||
fetched: false,
|
||||
diagnosticsFetched: false,
|
||||
httpStatus: null,
|
||||
@@ -1855,6 +1988,7 @@ export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
ready: false,
|
||||
artifactUrl,
|
||||
diagnosticsUrl,
|
||||
requireSavedSessionDiagnostics,
|
||||
fetched: false,
|
||||
diagnosticsFetched: false,
|
||||
httpStatus,
|
||||
@@ -1911,6 +2045,9 @@ export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
const diagnosticsArtifact = JSON.parse(await diagnosticsResponse.text());
|
||||
diagnosticsValidation = createProjectReleaseBrowserDiagnosticsArtifactValidation(diagnosticsArtifact);
|
||||
diagnosticsMissing.push(...diagnosticsValidation.missing.map((item) => `diagnostics.${item}`));
|
||||
if (requireSavedSessionDiagnostics && diagnosticsValidation.hasSessionDiagnostics !== true) {
|
||||
diagnosticsMissing.push("diagnostics.virtualHalSessionDiagnostics");
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
diagnosticsFetchError = error?.message ?? "diagnostics artifact URL fetch error";
|
||||
@@ -1923,7 +2060,7 @@ export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
...diagnosticsMissing,
|
||||
];
|
||||
const ready = jsonWorkflow.ready === true &&
|
||||
(!diagnosticsUrl || diagnosticsValidation?.ready === true);
|
||||
(!diagnosticsUrl || (diagnosticsValidation?.ready === true && diagnosticsMissing.length === 0));
|
||||
return {
|
||||
apiName: "project-release-readiness-artifact-url-workflow",
|
||||
workflowVersion: 1,
|
||||
@@ -1931,6 +2068,7 @@ export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
ready,
|
||||
artifactUrl,
|
||||
diagnosticsUrl,
|
||||
requireSavedSessionDiagnostics,
|
||||
fetched: true,
|
||||
diagnosticsFetched,
|
||||
httpStatus,
|
||||
@@ -1977,6 +2115,7 @@ export async function loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||
ready: false,
|
||||
artifactUrl,
|
||||
diagnosticsUrl,
|
||||
requireSavedSessionDiagnostics,
|
||||
fetched: false,
|
||||
diagnosticsFetched: false,
|
||||
httpStatus: null,
|
||||
@@ -2060,6 +2199,15 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
|
||||
? (workflow?.diagnosticsValidation?.ready === true ? "ready" : "blocked")
|
||||
: "not requested",
|
||||
},
|
||||
{
|
||||
id: "saved-session-diagnostics",
|
||||
label: "Saved-session diagnostics",
|
||||
value: workflow?.diagnosticsUrl
|
||||
? (workflow?.diagnosticsValidation?.hasSessionDiagnostics
|
||||
? (workflow?.diagnosticsValidation?.sessionDiagnosticsReady === true ? "ready" : "blocked")
|
||||
: "not provided")
|
||||
: "not requested",
|
||||
},
|
||||
{
|
||||
id: "next-command",
|
||||
label: "Next command",
|
||||
@@ -2170,6 +2318,7 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
||||
const releaseGate = objectOrEmpty(artifactObject.releaseGate);
|
||||
const simConfigInventory = objectOrEmpty(artifactObject.simConfigInventory);
|
||||
const virtualHalSimConfigSourceCoverage = objectOrEmpty(artifactObject.virtualHalSimConfigSourceCoverage);
|
||||
const virtualHalMotionControllerMatrix = objectOrEmpty(artifactObject.virtualHalMotionControllerMatrix);
|
||||
const gateManifest = objectOrEmpty(artifactObject.gateManifest);
|
||||
const gateExecutionManifest = objectOrEmpty(artifactObject.gateExecutionManifest);
|
||||
const gateExecutionSummaryViewModel = objectOrEmpty(artifactObject.gateExecutionSummaryViewModel);
|
||||
@@ -2218,6 +2367,9 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
||||
const virtualHalSimConfigSourceCoverageReady = isVirtualHalSimConfigSourceCoverageReady(
|
||||
virtualHalSimConfigSourceCoverage,
|
||||
) && artifactObject.virtualHalSimConfigSourceCoverageReady === true;
|
||||
const virtualHalMotionControllerMatrixReady = isVirtualHalMotionControllerMatrixReady(
|
||||
virtualHalMotionControllerMatrix,
|
||||
) && artifactObject.virtualHalMotionControllerMatrixReady === true;
|
||||
const axisScreenshotArtifacts = arrayOrEmpty(axisScreenshotArtifactSummary.artifacts);
|
||||
const axisScreenshotSummaryReady = !axisScreenshotArtifactSummary.apiName
|
||||
|| axisScreenshotArtifacts.length === 0
|
||||
@@ -2256,6 +2408,7 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
||||
...(simConfigInventory.skipped === 131 ? [] : ["simConfigInventory.skipped"]),
|
||||
...(simConfigInventory.unexpectedFail === 0 ? [] : ["simConfigInventory.unexpectedFail"]),
|
||||
...(virtualHalSimConfigSourceCoverageReady ? [] : ["virtualHalSimConfigSourceCoverage"]),
|
||||
...(virtualHalMotionControllerMatrixReady ? [] : ["virtualHalMotionControllerMatrix"]),
|
||||
...(arrayOrEmpty(artifactObject.blockedRuntimeFamilies).join(",") === BLOCKED_RUNTIME_FAMILIES.join(",")
|
||||
? []
|
||||
: ["blockedRuntimeFamilies"]),
|
||||
@@ -2290,6 +2443,7 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
||||
gateResultMatrixReady: matrixReady,
|
||||
gateActionPlanReady: actionPlanReady,
|
||||
virtualHalSimConfigSourceCoverageReady,
|
||||
virtualHalMotionControllerMatrixReady,
|
||||
axisScreenshotArtifactSummaryReady: axisScreenshotSummaryReady,
|
||||
axisScreenshotArtifactCount: axisScreenshotArtifacts.length,
|
||||
blockedRuntimeFamilies: arrayOrEmpty(artifactObject.blockedRuntimeFamilies),
|
||||
@@ -2334,6 +2488,11 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
||||
label: "Virtual HAL sim-config source coverage",
|
||||
value: virtualHalSimConfigSourceCoverageReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "virtual-hal-motion-controller-matrix",
|
||||
label: "Virtual HAL motion controller matrix",
|
||||
value: virtualHalMotionControllerMatrixReady ? "ready" : "missing",
|
||||
},
|
||||
{
|
||||
id: "axis-screenshot-artifacts",
|
||||
label: "AXIS screenshot artifacts",
|
||||
|
||||
Reference in New Issue
Block a user