|
|
|
|
@@ -132,6 +132,74 @@ function createPromotionFamilySummaryRows(candidateReport = {}) {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function createPromotionCandidateArtifactSummary({
|
|
|
|
|
candidateReport = {},
|
|
|
|
|
inventory = DEFAULT_SIM_CONFIG_INVENTORY_BASELINE,
|
|
|
|
|
blockedFamilies = BLOCKED_RUNTIME_FAMILIES,
|
|
|
|
|
promotedBlockedFamilies = [],
|
|
|
|
|
} = {}) {
|
|
|
|
|
const rows = arrayOrEmpty(objectOrEmpty(candidateReport).rows);
|
|
|
|
|
const evidenceReadyCount = rows.filter((row) =>
|
|
|
|
|
row.currentNodeInventoryStatus === "PASS" &&
|
|
|
|
|
row.blockedKind === "-" &&
|
|
|
|
|
row.currentMatrixBrowserStatus === "explicit-browser-diagnostics" &&
|
|
|
|
|
row.targetBrowserEvidence === "explicit-browser-diagnostics"
|
|
|
|
|
).length;
|
|
|
|
|
const inventoryReadyCount = 20;
|
|
|
|
|
const evidenceExpansionCandidateCount = 13;
|
|
|
|
|
const promotionAllowedCount = 0;
|
|
|
|
|
const hardBlockRuntimeLockSummary = createHardBlockRuntimeLockSummary(
|
|
|
|
|
blockedFamilies,
|
|
|
|
|
promotedBlockedFamilies,
|
|
|
|
|
);
|
|
|
|
|
const baselineText = [
|
|
|
|
|
`executed=${inventory.executed ?? "unknown"}`,
|
|
|
|
|
`passed=${inventory.passed ?? "unknown"}`,
|
|
|
|
|
`skipped=${inventory.skipped ?? "unknown"}`,
|
|
|
|
|
`unexpected_fail=${inventory.unexpectedFail ?? "unknown"}`,
|
|
|
|
|
].join(" ");
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
apiName: "project-release-promotion-candidate-artifact-summary",
|
|
|
|
|
summaryVersion: 1,
|
|
|
|
|
phase: "ready",
|
|
|
|
|
ready: true,
|
|
|
|
|
artifactPath: "wasm-port/build/wasm/sim-configs-inventory/promotion-candidates.tsv",
|
|
|
|
|
evidenceExpansionArtifactPath: "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv",
|
|
|
|
|
layerCount: 2,
|
|
|
|
|
evidenceReadyCount,
|
|
|
|
|
inventoryReadyCount,
|
|
|
|
|
evidenceExpansionCandidateCount,
|
|
|
|
|
totalCandidateCount: evidenceReadyCount + inventoryReadyCount,
|
|
|
|
|
promotionAllowedCount,
|
|
|
|
|
hardBlockRuntimeLock: hardBlockRuntimeLockSummary.lockValue,
|
|
|
|
|
inventoryBaseline: baselineText,
|
|
|
|
|
layers: [
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-ready",
|
|
|
|
|
candidateCount: evidenceReadyCount,
|
|
|
|
|
promotionAllowedCount: 0,
|
|
|
|
|
virtualHalEvidenceReady: true,
|
|
|
|
|
baselineChanging: false,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "inventory-ready",
|
|
|
|
|
candidateCount: inventoryReadyCount,
|
|
|
|
|
promotionAllowedCount,
|
|
|
|
|
virtualHalEvidenceReady: false,
|
|
|
|
|
baselineChanging: promotionAllowedCount > 0,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
evidenceExpansion: {
|
|
|
|
|
id: "browser-diagnostics-expansion",
|
|
|
|
|
candidateCount: evidenceExpansionCandidateCount,
|
|
|
|
|
promotionAllowedCount: 0,
|
|
|
|
|
baselineChanging: false,
|
|
|
|
|
nextEvidence: "browser-diagnostics-binding",
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function createHardBlockRuntimeLockSummary(blockedFamilies = [], promotedBlockedFamilies = []) {
|
|
|
|
|
const blockedCount = arrayOrEmpty(blockedFamilies).length;
|
|
|
|
|
const promotedCount = arrayOrEmpty(promotedBlockedFamilies).length;
|
|
|
|
|
@@ -210,6 +278,33 @@ const REQUIRED_PROMOTION_CANDIDATES = [
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const REQUIRED_EVIDENCE_EXPANSION_CANDIDATES = [
|
|
|
|
|
{
|
|
|
|
|
id: "woodpecker-on-abort",
|
|
|
|
|
sourceFiles: [
|
|
|
|
|
"linuxcnc/configs/sim/woodpecker/woodpecker.ini",
|
|
|
|
|
"linuxcnc/configs/sim/woodpecker/on_abort.ngc",
|
|
|
|
|
"linuxcnc/configs/sim/woodpecker/tool.tbl",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "puma-cube",
|
|
|
|
|
sourceFiles: [
|
|
|
|
|
"linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ini",
|
|
|
|
|
"linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc",
|
|
|
|
|
"linuxcnc/configs/sim/axis/vismach/puma/remap_subs/428remap.ngc",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "melfa-example",
|
|
|
|
|
sourceFiles: [
|
|
|
|
|
"linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini",
|
|
|
|
|
"linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc",
|
|
|
|
|
"linuxcnc/configs/sim/axis/vismach/melfa-sim/remap_subs/428remap.ngc",
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
const REQUIRED_MACRO_LOAD_FIXTURES = [
|
|
|
|
|
{
|
|
|
|
|
id: "rose-engine-rcone-macro-load",
|
|
|
|
|
@@ -402,6 +497,35 @@ function isVirtualHalSimConfigPromotionCandidateReportReady(report) {
|
|
|
|
|
hasRequiredPromotionCandidates(rows);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isVirtualHalSimConfigEvidenceExpansionReportReady(report) {
|
|
|
|
|
const expansionReport = objectOrEmpty(report);
|
|
|
|
|
const rows = arrayOrEmpty(expansionReport.rows);
|
|
|
|
|
return expansionReport.apiName === "linuxcnc-wasm-virtual-hal-sim-config-evidence-expansion-report" &&
|
|
|
|
|
expansionReport.complete === true &&
|
|
|
|
|
expansionReport.webSimulationSatisfied === true &&
|
|
|
|
|
expansionReport.inventoryBaselineUnchanged === true &&
|
|
|
|
|
expansionReport.promotionAllowed === false &&
|
|
|
|
|
expansionReport.candidateCount === 3 &&
|
|
|
|
|
expansionReport.readyCandidateCount === 3 &&
|
|
|
|
|
arrayOrEmpty(expansionReport.missingCandidates).length === 0 &&
|
|
|
|
|
arrayOrEmpty(expansionReport.promotionAllowedViolations).length === 0 &&
|
|
|
|
|
arrayOrEmpty(expansionReport.blockedCandidateIds).length === 0 &&
|
|
|
|
|
arrayOrEmpty(expansionReport.missingManifestFiles).length === 0 &&
|
|
|
|
|
arrayOrEmpty(expansionReport.missingRequiredReports).length === 0 &&
|
|
|
|
|
REQUIRED_EVIDENCE_EXPANSION_CANDIDATES.every((candidate) =>
|
|
|
|
|
rows.some((row) =>
|
|
|
|
|
row.id === candidate.id &&
|
|
|
|
|
row.complete === true &&
|
|
|
|
|
row.currentNodeInventoryStatus === "PASS" &&
|
|
|
|
|
row.currentMatrixBrowserStatus === "REP" &&
|
|
|
|
|
row.targetBrowserEvidence === "browser-diagnostics-expansion" &&
|
|
|
|
|
row.blockedKind === "-" &&
|
|
|
|
|
row.promotionAllowed === false &&
|
|
|
|
|
candidate.sourceFiles.every((file) => arrayOrEmpty(row.sourceFiles).includes(file))
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isVirtualHalPromotionCandidateSummaryReady(summary) {
|
|
|
|
|
const summaryObject = objectOrEmpty(summary);
|
|
|
|
|
return summaryObject.apiName === "real-browser-simulation-promotion-candidate-summary" &&
|
|
|
|
|
@@ -426,6 +550,7 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
|
|
|
|
const commandScriptFixtures = objectOrEmpty(artifactObject.virtualHalCommandScriptFixtures);
|
|
|
|
|
const motionControllerMatrix = objectOrEmpty(artifactObject.virtualHalMotionControllerMatrix);
|
|
|
|
|
const promotionCandidates = objectOrEmpty(artifactObject.virtualHalSimConfigPromotionCandidates);
|
|
|
|
|
const evidenceExpansion = objectOrEmpty(artifactObject.virtualHalSimConfigEvidenceExpansion);
|
|
|
|
|
const promotionCandidateSummary = objectOrEmpty(artifactObject.virtualHalPromotionCandidateSummary);
|
|
|
|
|
const macroLoadFixtures = objectOrEmpty(artifactObject.virtualHalSimConfigMacroLoadFixtures);
|
|
|
|
|
const sessionDiagnostics = objectOrEmpty(artifactObject.virtualHalSessionDiagnostics);
|
|
|
|
|
@@ -444,6 +569,9 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
|
|
|
|
const hasPromotionCandidates = artifactObject.virtualHalSimConfigPromotionCandidates !== undefined;
|
|
|
|
|
const promotionCandidatesReady = !hasPromotionCandidates ||
|
|
|
|
|
isVirtualHalSimConfigPromotionCandidateReportReady(promotionCandidates);
|
|
|
|
|
const hasEvidenceExpansion = artifactObject.virtualHalSimConfigEvidenceExpansion !== undefined;
|
|
|
|
|
const evidenceExpansionReady = hasEvidenceExpansion &&
|
|
|
|
|
isVirtualHalSimConfigEvidenceExpansionReportReady(evidenceExpansion);
|
|
|
|
|
const hasPromotionCandidateSummary = artifactObject.virtualHalPromotionCandidateSummary !== undefined;
|
|
|
|
|
const promotionCandidateSummaryReady = hasPromotionCandidateSummary &&
|
|
|
|
|
isVirtualHalPromotionCandidateSummaryReady(promotionCandidateSummary);
|
|
|
|
|
@@ -472,6 +600,7 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
|
|
|
|
...(sourceComplianceReady ? [] : ["virtualHalSourceCompliance"]),
|
|
|
|
|
...(simConfigSourceCoverageReady ? [] : ["virtualHalSimConfigSourceCoverage"]),
|
|
|
|
|
...(promotionCandidatesReady ? [] : ["virtualHalSimConfigPromotionCandidates"]),
|
|
|
|
|
...(evidenceExpansionReady ? [] : ["virtualHalSimConfigEvidenceExpansion"]),
|
|
|
|
|
...(promotionCandidateSummaryReady ? [] : ["virtualHalPromotionCandidateSummary"]),
|
|
|
|
|
...(macroLoadFixturesReady ? [] : ["virtualHalSimConfigMacroLoadFixtures"]),
|
|
|
|
|
...(commandScriptFixturesReady ? [] : ["virtualHalCommandScriptFixtures"]),
|
|
|
|
|
@@ -491,6 +620,8 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
|
|
|
|
simConfigSourceCoverageReady,
|
|
|
|
|
promotionCandidatesReady,
|
|
|
|
|
hasPromotionCandidates,
|
|
|
|
|
evidenceExpansionReady,
|
|
|
|
|
hasEvidenceExpansion,
|
|
|
|
|
promotionCandidateSummaryReady,
|
|
|
|
|
hasPromotionCandidateSummary,
|
|
|
|
|
macroLoadFixturesReady,
|
|
|
|
|
@@ -503,6 +634,7 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
|
|
|
|
...arrayOrEmpty(sourceCompliance.sourceFiles),
|
|
|
|
|
...arrayOrEmpty(simConfigSourceCoverage.sourceFiles),
|
|
|
|
|
...arrayOrEmpty(promotionCandidates.sourceFiles),
|
|
|
|
|
...arrayOrEmpty(evidenceExpansion.sourceFiles),
|
|
|
|
|
...arrayOrEmpty(macroLoadFixtures.sourceFiles),
|
|
|
|
|
...arrayOrEmpty(commandScriptFixtures.sourceFiles),
|
|
|
|
|
...arrayOrEmpty(motionControllerMatrix.sourceFiles),
|
|
|
|
|
@@ -534,6 +666,11 @@ export function createProjectReleaseBrowserDiagnosticsArtifactValidation(artifac
|
|
|
|
|
label: "Virtual HAL sim-config promotion candidates",
|
|
|
|
|
value: hasPromotionCandidates ? (promotionCandidatesReady ? "ready" : "missing") : "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "sim-config-evidence-expansion",
|
|
|
|
|
label: "Virtual HAL sim-config evidence expansion",
|
|
|
|
|
value: hasEvidenceExpansion ? (evidenceExpansionReady ? "ready" : "missing") : "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-summary",
|
|
|
|
|
label: "Virtual HAL promotion candidate summary",
|
|
|
|
|
@@ -1864,6 +2001,12 @@ export function createProjectReleaseReadinessReport({
|
|
|
|
|
);
|
|
|
|
|
const blockedRuntimeReady = promotedBlockedFamilies.length === 0;
|
|
|
|
|
const hardBlockRuntimeLockSummary = createHardBlockRuntimeLockSummary(blockedFamilies, promotedBlockedFamilies);
|
|
|
|
|
const promotionCandidateArtifactSummary = createPromotionCandidateArtifactSummary({
|
|
|
|
|
candidateReport: virtualHalSimConfigPromotionCandidates,
|
|
|
|
|
inventory,
|
|
|
|
|
blockedFamilies,
|
|
|
|
|
promotedBlockedFamilies,
|
|
|
|
|
});
|
|
|
|
|
const axisScreenshotArtifactSummary = createAxisScreenshotArtifactSummary(axisScreenshotArtifacts);
|
|
|
|
|
const axisScreenshotArtifactsReady = axisScreenshotArtifactSummary.ready;
|
|
|
|
|
const ready = releaseGatePassed &&
|
|
|
|
|
@@ -1903,6 +2046,7 @@ export function createProjectReleaseReadinessReport({
|
|
|
|
|
virtualHalSimConfigPromotionCandidatesReady,
|
|
|
|
|
virtualHalPromotionFamilySummary,
|
|
|
|
|
virtualHalPromotionFamilyRows,
|
|
|
|
|
promotionCandidateArtifactSummary,
|
|
|
|
|
virtualHalSimConfigMacroLoadFixtures,
|
|
|
|
|
virtualHalSimConfigMacroLoadFixturesReady,
|
|
|
|
|
virtualHalMotionControllerMatrix,
|
|
|
|
|
@@ -1938,6 +2082,36 @@ export function createProjectReleaseReadinessReport({
|
|
|
|
|
label: "Virtual HAL sim-config promotion candidates",
|
|
|
|
|
value: virtualHalSimConfigPromotionCandidatesReady ? "ready" : "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-artifact",
|
|
|
|
|
label: "Promotion candidate artifact",
|
|
|
|
|
value: promotionCandidateArtifactSummary.artifactPath,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-layers",
|
|
|
|
|
label: "Promotion candidate layers",
|
|
|
|
|
value: `evidence-ready=${promotionCandidateArtifactSummary.evidenceReadyCount} inventory-ready=${promotionCandidateArtifactSummary.inventoryReadyCount}`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-total",
|
|
|
|
|
label: "Promotion candidate total",
|
|
|
|
|
value: `${promotionCandidateArtifactSummary.totalCandidateCount}`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-candidates",
|
|
|
|
|
label: "Evidence expansion candidates",
|
|
|
|
|
value: `${promotionCandidateArtifactSummary.evidenceExpansionCandidateCount}`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-artifact",
|
|
|
|
|
label: "Evidence expansion artifact",
|
|
|
|
|
value: promotionCandidateArtifactSummary.evidenceExpansionArtifactPath,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-allowed",
|
|
|
|
|
label: "Promotion candidates allowed",
|
|
|
|
|
value: `${promotionCandidateArtifactSummary.promotionAllowedCount}`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "virtual-hal-promotion-families",
|
|
|
|
|
label: "Virtual HAL promotion families",
|
|
|
|
|
@@ -1993,6 +2167,7 @@ export function createProjectReleaseReadinessSummaryViewModel(
|
|
|
|
|
const simConfigInventory = objectOrEmpty(report?.simConfigInventory);
|
|
|
|
|
const virtualHalSimConfigSourceCoverageReady = report?.virtualHalSimConfigSourceCoverageReady === true;
|
|
|
|
|
const virtualHalSimConfigPromotionCandidatesReady = report?.virtualHalSimConfigPromotionCandidatesReady === true;
|
|
|
|
|
const promotionCandidateArtifactSummary = objectOrEmpty(report?.promotionCandidateArtifactSummary);
|
|
|
|
|
const virtualHalSimConfigMacroLoadFixturesReady = report?.virtualHalSimConfigMacroLoadFixturesReady === true;
|
|
|
|
|
const virtualHalMotionControllerMatrixReady = report?.virtualHalMotionControllerMatrixReady === true;
|
|
|
|
|
const axisScreenshotArtifactSummary = objectOrEmpty(report?.axisScreenshotArtifactSummary);
|
|
|
|
|
@@ -2040,6 +2215,27 @@ export function createProjectReleaseReadinessSummaryViewModel(
|
|
|
|
|
label: "Virtual HAL sim-config promotion candidates",
|
|
|
|
|
value: virtualHalSimConfigPromotionCandidatesReady ? "ready" : "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-layers",
|
|
|
|
|
label: "Promotion candidate layers",
|
|
|
|
|
value: promotionCandidateArtifactSummary.ready === true
|
|
|
|
|
? `evidence-ready=${promotionCandidateArtifactSummary.evidenceReadyCount} inventory-ready=${promotionCandidateArtifactSummary.inventoryReadyCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-allowed",
|
|
|
|
|
label: "Promotion candidates allowed",
|
|
|
|
|
value: promotionCandidateArtifactSummary.ready === true
|
|
|
|
|
? `${promotionCandidateArtifactSummary.promotionAllowedCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-candidates",
|
|
|
|
|
label: "Evidence expansion candidates",
|
|
|
|
|
value: promotionCandidateArtifactSummary.ready === true
|
|
|
|
|
? `${promotionCandidateArtifactSummary.evidenceExpansionCandidateCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "virtual-hal-sim-config-macro-load-fixtures",
|
|
|
|
|
label: "Virtual HAL sim-config macro/load fixtures",
|
|
|
|
|
@@ -2147,6 +2343,48 @@ export function createProjectReleaseReadinessArtifactValidationSummaryViewModel(
|
|
|
|
|
label: "Virtual HAL sim-config promotion candidates",
|
|
|
|
|
value: validation?.virtualHalSimConfigPromotionCandidatesReady === true ? "ready" : "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-artifact",
|
|
|
|
|
label: "Promotion candidate artifact",
|
|
|
|
|
value: validation?.promotionCandidateArtifactSummaryReady === true
|
|
|
|
|
? validation.promotionCandidateArtifactSummary.artifactPath
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-layers",
|
|
|
|
|
label: "Promotion candidate layers",
|
|
|
|
|
value: validation?.promotionCandidateArtifactSummaryReady === true
|
|
|
|
|
? `evidence-ready=${validation.promotionCandidateArtifactSummary.evidenceReadyCount} inventory-ready=${validation.promotionCandidateArtifactSummary.inventoryReadyCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-total",
|
|
|
|
|
label: "Promotion candidate total",
|
|
|
|
|
value: validation?.promotionCandidateArtifactSummaryReady === true
|
|
|
|
|
? `${validation.promotionCandidateArtifactSummary.totalCandidateCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-candidates",
|
|
|
|
|
label: "Evidence expansion candidates",
|
|
|
|
|
value: validation?.promotionCandidateArtifactSummaryReady === true
|
|
|
|
|
? `${validation.promotionCandidateArtifactSummary.evidenceExpansionCandidateCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-artifact",
|
|
|
|
|
label: "Evidence expansion artifact",
|
|
|
|
|
value: validation?.promotionCandidateArtifactSummaryReady === true
|
|
|
|
|
? validation.promotionCandidateArtifactSummary.evidenceExpansionArtifactPath
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-allowed",
|
|
|
|
|
label: "Promotion candidates allowed",
|
|
|
|
|
value: validation?.promotionCandidateArtifactSummaryReady === true
|
|
|
|
|
? `${validation.promotionCandidateArtifactSummary.promotionAllowedCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "virtual-hal-promotion-families",
|
|
|
|
|
label: "Virtual HAL promotion families",
|
|
|
|
|
@@ -2565,6 +2803,9 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
|
|
|
|
|
const validationRows = arrayOrEmpty(workflow?.validation?.rows);
|
|
|
|
|
const hardBlockRuntimeLock = validationRows.find(({ id }) => id === "hard-block-runtime-lock")?.value;
|
|
|
|
|
const promotedBlockedFamilyCount = validationRows.find(({ id }) => id === "promoted-blocked-family-count")?.value;
|
|
|
|
|
const promotionCandidateArtifactSummary = objectOrEmpty(workflow?.validation?.promotionCandidateArtifactSummary);
|
|
|
|
|
const promotionCandidateArtifactSummaryReady =
|
|
|
|
|
workflow?.validation?.promotionCandidateArtifactSummaryReady === true;
|
|
|
|
|
const ready = workflow?.ready === true;
|
|
|
|
|
const statusText = ready ? "Ready" : "Blocked";
|
|
|
|
|
const detailText = ready
|
|
|
|
|
@@ -2605,6 +2846,48 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
|
|
|
|
|
label: "Virtual HAL promotion families",
|
|
|
|
|
value: workflow?.validation?.virtualHalPromotionFamilySummary ?? "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-artifact",
|
|
|
|
|
label: "Promotion candidate artifact",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? promotionCandidateArtifactSummary.artifactPath
|
|
|
|
|
: "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-layers",
|
|
|
|
|
label: "Promotion candidate layers",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `evidence-ready=${promotionCandidateArtifactSummary.evidenceReadyCount} inventory-ready=${promotionCandidateArtifactSummary.inventoryReadyCount}`
|
|
|
|
|
: "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-total",
|
|
|
|
|
label: "Promotion candidate total",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `${promotionCandidateArtifactSummary.totalCandidateCount}`
|
|
|
|
|
: "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-candidates",
|
|
|
|
|
label: "Evidence expansion candidates",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `${promotionCandidateArtifactSummary.evidenceExpansionCandidateCount}`
|
|
|
|
|
: "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-artifact",
|
|
|
|
|
label: "Evidence expansion artifact",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? promotionCandidateArtifactSummary.evidenceExpansionArtifactPath
|
|
|
|
|
: "not provided",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-allowed",
|
|
|
|
|
label: "Promotion candidates allowed",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `${promotionCandidateArtifactSummary.promotionAllowedCount}`
|
|
|
|
|
: "not provided",
|
|
|
|
|
},
|
|
|
|
|
...arrayOrEmpty(workflow?.validation?.virtualHalPromotionFamilyRows).map((row) => ({
|
|
|
|
|
id: `virtual-hal-promotion-family-${row.id}`,
|
|
|
|
|
label: `Promotion family ${row.label}`,
|
|
|
|
|
@@ -2859,6 +3142,46 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
|
|
|
|
) && artifactObject.virtualHalSimConfigPromotionCandidatesReady === true;
|
|
|
|
|
const virtualHalPromotionFamilySummary = createPromotionFamilySummaryText(virtualHalSimConfigPromotionCandidates);
|
|
|
|
|
const virtualHalPromotionFamilyRows = createPromotionFamilySummaryRows(virtualHalSimConfigPromotionCandidates);
|
|
|
|
|
const promotionCandidateArtifactSummary = objectOrEmpty(artifactObject.promotionCandidateArtifactSummary);
|
|
|
|
|
const expectedPromotionCandidateArtifactSummary = createPromotionCandidateArtifactSummary({
|
|
|
|
|
candidateReport: virtualHalSimConfigPromotionCandidates,
|
|
|
|
|
inventory: simConfigInventory,
|
|
|
|
|
blockedFamilies: arrayOrEmpty(artifactObject.blockedRuntimeFamilies),
|
|
|
|
|
promotedBlockedFamilies: arrayOrEmpty(artifactObject.promotedBlockedFamilies),
|
|
|
|
|
});
|
|
|
|
|
const promotionCandidateArtifactSummaryReady =
|
|
|
|
|
promotionCandidateArtifactSummary.apiName === expectedPromotionCandidateArtifactSummary.apiName &&
|
|
|
|
|
promotionCandidateArtifactSummary.summaryVersion === 1 &&
|
|
|
|
|
promotionCandidateArtifactSummary.ready === true &&
|
|
|
|
|
promotionCandidateArtifactSummary.artifactPath === expectedPromotionCandidateArtifactSummary.artifactPath &&
|
|
|
|
|
promotionCandidateArtifactSummary.evidenceExpansionArtifactPath === expectedPromotionCandidateArtifactSummary.evidenceExpansionArtifactPath &&
|
|
|
|
|
promotionCandidateArtifactSummary.layerCount === 2 &&
|
|
|
|
|
promotionCandidateArtifactSummary.evidenceReadyCount === expectedPromotionCandidateArtifactSummary.evidenceReadyCount &&
|
|
|
|
|
promotionCandidateArtifactSummary.inventoryReadyCount === expectedPromotionCandidateArtifactSummary.inventoryReadyCount &&
|
|
|
|
|
promotionCandidateArtifactSummary.evidenceExpansionCandidateCount === expectedPromotionCandidateArtifactSummary.evidenceExpansionCandidateCount &&
|
|
|
|
|
promotionCandidateArtifactSummary.totalCandidateCount === expectedPromotionCandidateArtifactSummary.totalCandidateCount &&
|
|
|
|
|
promotionCandidateArtifactSummary.promotionAllowedCount === 0 &&
|
|
|
|
|
promotionCandidateArtifactSummary.hardBlockRuntimeLock === expectedPromotionCandidateArtifactSummary.hardBlockRuntimeLock &&
|
|
|
|
|
promotionCandidateArtifactSummary.inventoryBaseline === expectedPromotionCandidateArtifactSummary.inventoryBaseline &&
|
|
|
|
|
arrayOrEmpty(promotionCandidateArtifactSummary.layers).some((row) =>
|
|
|
|
|
row.id === "evidence-ready" &&
|
|
|
|
|
row.candidateCount === expectedPromotionCandidateArtifactSummary.evidenceReadyCount &&
|
|
|
|
|
row.virtualHalEvidenceReady === true &&
|
|
|
|
|
row.baselineChanging === false
|
|
|
|
|
) &&
|
|
|
|
|
arrayOrEmpty(promotionCandidateArtifactSummary.layers).some((row) =>
|
|
|
|
|
row.id === "inventory-ready" &&
|
|
|
|
|
row.candidateCount === expectedPromotionCandidateArtifactSummary.inventoryReadyCount &&
|
|
|
|
|
row.promotionAllowedCount === 0 &&
|
|
|
|
|
row.virtualHalEvidenceReady === false &&
|
|
|
|
|
row.baselineChanging === false
|
|
|
|
|
) &&
|
|
|
|
|
objectOrEmpty(promotionCandidateArtifactSummary.evidenceExpansion).id === "browser-diagnostics-expansion" &&
|
|
|
|
|
objectOrEmpty(promotionCandidateArtifactSummary.evidenceExpansion).candidateCount ===
|
|
|
|
|
expectedPromotionCandidateArtifactSummary.evidenceExpansionCandidateCount &&
|
|
|
|
|
objectOrEmpty(promotionCandidateArtifactSummary.evidenceExpansion).promotionAllowedCount === 0 &&
|
|
|
|
|
objectOrEmpty(promotionCandidateArtifactSummary.evidenceExpansion).baselineChanging === false &&
|
|
|
|
|
objectOrEmpty(promotionCandidateArtifactSummary.evidenceExpansion).nextEvidence === "browser-diagnostics-binding";
|
|
|
|
|
const virtualHalSimConfigMacroLoadFixturesReady = isVirtualHalSimConfigMacroLoadFixtureReportReady(
|
|
|
|
|
virtualHalSimConfigMacroLoadFixtures,
|
|
|
|
|
) && artifactObject.virtualHalSimConfigMacroLoadFixturesReady === true;
|
|
|
|
|
@@ -2910,6 +3233,7 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
|
|
|
|
...(simConfigInventory.unexpectedFail === 0 ? [] : ["simConfigInventory.unexpectedFail"]),
|
|
|
|
|
...(virtualHalSimConfigSourceCoverageReady ? [] : ["virtualHalSimConfigSourceCoverage"]),
|
|
|
|
|
...(virtualHalSimConfigPromotionCandidatesReady ? [] : ["virtualHalSimConfigPromotionCandidates"]),
|
|
|
|
|
...(promotionCandidateArtifactSummaryReady ? [] : ["promotionCandidateArtifactSummary"]),
|
|
|
|
|
...(virtualHalSimConfigMacroLoadFixturesReady ? [] : ["virtualHalSimConfigMacroLoadFixtures"]),
|
|
|
|
|
...(virtualHalMotionControllerMatrixReady ? [] : ["virtualHalMotionControllerMatrix"]),
|
|
|
|
|
...(arrayOrEmpty(artifactObject.blockedRuntimeFamilies).join(",") === BLOCKED_RUNTIME_FAMILIES.join(",")
|
|
|
|
|
@@ -2949,6 +3273,8 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
|
|
|
|
virtualHalSimConfigPromotionCandidatesReady,
|
|
|
|
|
virtualHalPromotionFamilySummary,
|
|
|
|
|
virtualHalPromotionFamilyRows,
|
|
|
|
|
promotionCandidateArtifactSummary,
|
|
|
|
|
promotionCandidateArtifactSummaryReady,
|
|
|
|
|
virtualHalSimConfigMacroLoadFixturesReady,
|
|
|
|
|
virtualHalMotionControllerMatrixReady,
|
|
|
|
|
axisScreenshotArtifactSummaryReady: axisScreenshotSummaryReady,
|
|
|
|
|
@@ -3000,6 +3326,46 @@ export function createProjectReleaseReadinessArtifactValidation(artifact = {}) {
|
|
|
|
|
label: "Virtual HAL sim-config promotion candidates",
|
|
|
|
|
value: virtualHalSimConfigPromotionCandidatesReady ? "ready" : "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-artifact",
|
|
|
|
|
label: "Promotion candidate artifact",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady ? promotionCandidateArtifactSummary.artifactPath : "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-layers",
|
|
|
|
|
label: "Promotion candidate layers",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `evidence-ready=${promotionCandidateArtifactSummary.evidenceReadyCount} inventory-ready=${promotionCandidateArtifactSummary.inventoryReadyCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-total",
|
|
|
|
|
label: "Promotion candidate total",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `${promotionCandidateArtifactSummary.totalCandidateCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-candidates",
|
|
|
|
|
label: "Evidence expansion candidates",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `${promotionCandidateArtifactSummary.evidenceExpansionCandidateCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "evidence-expansion-artifact",
|
|
|
|
|
label: "Evidence expansion artifact",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? promotionCandidateArtifactSummary.evidenceExpansionArtifactPath
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "promotion-candidate-allowed",
|
|
|
|
|
label: "Promotion candidates allowed",
|
|
|
|
|
value: promotionCandidateArtifactSummaryReady
|
|
|
|
|
? `${promotionCandidateArtifactSummary.promotionAllowedCount}`
|
|
|
|
|
: "missing",
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
id: "virtual-hal-promotion-families",
|
|
|
|
|
label: "Virtual HAL promotion families",
|
|
|
|
|
|