收束promotion候选证据
结论:按text22铁律完成promotion-candidates双层证据管理,baseline保持28/28/131/0,Python remap、tool DB、external user-M hard block继续locked。
This commit is contained in:
@@ -8,12 +8,14 @@ import {
|
||||
toolTablePath,
|
||||
} from "./path-model.js";
|
||||
import {
|
||||
VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
|
||||
cloneVirtualHalState,
|
||||
createVirtualHalCommandScriptFixtureReport,
|
||||
createVirtualHalMotionControllerMatrixReport,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalSimConfigPromotionCandidateReport,
|
||||
createVirtualHalSimConfigSourceCoverageReport,
|
||||
@@ -87,6 +89,9 @@ function validateVirtualHalSessionPayload(virtualHal) {
|
||||
if (virtualHal.simConfigPromotionCandidates.complete !== true) {
|
||||
throw new Error("virtual HAL sim-config promotion candidates are incomplete.");
|
||||
}
|
||||
if (virtualHal.simConfigEvidenceExpansion.complete !== true) {
|
||||
throw new Error("virtual HAL sim-config evidence expansion candidates are incomplete.");
|
||||
}
|
||||
if (virtualHal.simConfigMacroLoadFixtures.complete !== true) {
|
||||
throw new Error("virtual HAL sim-config macro/load fixtures are incomplete.");
|
||||
}
|
||||
@@ -109,6 +114,7 @@ export function createVirtualHalSessionPayload(halState = createVirtualHalState(
|
||||
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_EVIDENCE_EXPANSION_CANDIDATES.flatMap((candidate) => candidate.sourceFiles ?? []),
|
||||
...VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES.flatMap((fixture) => fixture.sourceFiles ?? []),
|
||||
],
|
||||
}
|
||||
@@ -125,6 +131,12 @@ export function createVirtualHalSessionPayload(halState = createVirtualHalState(
|
||||
commandScriptFixtures,
|
||||
motionControllerMatrix,
|
||||
});
|
||||
const simConfigEvidenceExpansion = options.simConfigEvidenceExpansion ?? createVirtualHalSimConfigEvidenceExpansionReport({
|
||||
...reportOptions,
|
||||
simConfigSourceCoverage,
|
||||
commandScriptFixtures,
|
||||
motionControllerMatrix,
|
||||
});
|
||||
const sourceCompliance = options.sourceCompliance ?? createVirtualHalSourceComplianceReport({
|
||||
...reportOptions,
|
||||
halState: state,
|
||||
@@ -148,6 +160,7 @@ export function createVirtualHalSessionPayload(halState = createVirtualHalState(
|
||||
sourceCompliance,
|
||||
simConfigSourceCoverage,
|
||||
simConfigPromotionCandidates,
|
||||
simConfigEvidenceExpansion,
|
||||
simConfigMacroLoadFixtures,
|
||||
commandScriptFixtures,
|
||||
motionControllerMatrix,
|
||||
|
||||
@@ -72,6 +72,7 @@ import {
|
||||
VIRTUAL_HAL_PROJECT_PIN_GROUPS,
|
||||
VIRTUAL_HAL_SIM_CONFIG_INVENTORY_ARTIFACT_HASHES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_INVENTORY_BASELINE,
|
||||
VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
|
||||
VIRTUAL_HAL_SOURCE_DERIVED_CAPABILITIES,
|
||||
VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS,
|
||||
@@ -96,6 +97,7 @@ import {
|
||||
createVirtualHalPinInventory,
|
||||
createVirtualHalPinRegistry,
|
||||
createVirtualHalProjectReport,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
createVirtualHalSimConfigSourceCoverageReport,
|
||||
createVirtualHalSimulationReplacementReport,
|
||||
createVirtualHalSimulationRuntimeReport,
|
||||
@@ -329,6 +331,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_EVIDENCE_EXPANSION_CANDIDATES` and
|
||||
`createVirtualHalSimConfigEvidenceExpansionReport()` expose the next
|
||||
browser-diagnostics expansion candidates that already have Node `PASS`,
|
||||
browser `REP`, and source-derived virtual HAL evidence. These rows remain
|
||||
evidence planning artifacts only: they keep the inventory baseline unchanged
|
||||
and do not unlock Python remap, tool DB, external user-M, upstream demo, or
|
||||
asset-only rows.
|
||||
- `VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES`,
|
||||
`VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_BLOCKED_FIXTURES`, and
|
||||
`VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_AUDIT_CANDIDATES` plus
|
||||
|
||||
@@ -10,6 +10,7 @@ export {
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_AUDIT_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_BLOCKED_FIXTURES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_INVENTORY_ARTIFACT_HASHES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_INVENTORY_BASELINE,
|
||||
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
|
||||
@@ -36,6 +37,7 @@ export {
|
||||
createVirtualHalPinInventory,
|
||||
createVirtualHalPinRegistry,
|
||||
createVirtualHalProjectReport,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalSimConfigPromotionCandidateReport,
|
||||
createVirtualHalSimConfigSourceCoverageReport,
|
||||
|
||||
@@ -335,6 +335,66 @@ export const VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES = Object.freeze([
|
||||
}),
|
||||
]);
|
||||
|
||||
export const VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES = Object.freeze([
|
||||
Object.freeze({
|
||||
id: "woodpecker-on-abort",
|
||||
label: "Woodpecker on-abort",
|
||||
simConfigTarget: "woodpecker",
|
||||
sourceFiles: Object.freeze([
|
||||
"linuxcnc/configs/sim/woodpecker/woodpecker.ini",
|
||||
"linuxcnc/configs/sim/woodpecker/on_abort.ngc",
|
||||
"linuxcnc/configs/sim/woodpecker/tool.tbl",
|
||||
]),
|
||||
iniPath: "linuxcnc/configs/sim/woodpecker/woodpecker.ini",
|
||||
gcodePath: "linuxcnc/configs/sim/woodpecker/on_abort.ngc",
|
||||
currentNodeInventoryStatus: "PASS",
|
||||
currentMatrixBrowserStatus: "REP",
|
||||
dependencyClass: "hal_process,ui_process",
|
||||
targetBrowserEvidence: "browser-diagnostics-expansion",
|
||||
promotionAllowed: false,
|
||||
blockedKind: "-",
|
||||
evidence: "Current inventory already covers Woodpecker as a non-hard-block representative; next step is explicit browser diagnostics binding only.",
|
||||
}),
|
||||
Object.freeze({
|
||||
id: "puma-cube",
|
||||
label: "PUMA cube",
|
||||
simConfigTarget: "vismach-remap-sims",
|
||||
sourceFiles: Object.freeze([
|
||||
"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",
|
||||
]),
|
||||
iniPath: "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ini",
|
||||
gcodePath: "linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc",
|
||||
currentNodeInventoryStatus: "PASS",
|
||||
currentMatrixBrowserStatus: "REP",
|
||||
dependencyClass: "hal_process,halui_mdi_process,ui_process",
|
||||
targetBrowserEvidence: "browser-diagnostics-expansion",
|
||||
promotionAllowed: false,
|
||||
blockedKind: "-",
|
||||
evidence: "PUMA cube is already the representative browser row for the PUMA machine context; it remains an expansion candidate, not a baseline promotion.",
|
||||
}),
|
||||
Object.freeze({
|
||||
id: "melfa-example",
|
||||
label: "MELFA example",
|
||||
simConfigTarget: "vismach-remap-sims",
|
||||
sourceFiles: Object.freeze([
|
||||
"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",
|
||||
]),
|
||||
iniPath: "linuxcnc/configs/sim/axis/vismach/melfa-sim/melfa.ini",
|
||||
gcodePath: "linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc",
|
||||
currentNodeInventoryStatus: "PASS",
|
||||
currentMatrixBrowserStatus: "REP",
|
||||
dependencyClass: "hal_process,halui_mdi_process,ui_process",
|
||||
targetBrowserEvidence: "browser-diagnostics-expansion",
|
||||
promotionAllowed: false,
|
||||
blockedKind: "-",
|
||||
evidence: "MELFA example has current representative coverage and can receive explicit browser diagnostics evidence without unlocking any hard runtime family.",
|
||||
}),
|
||||
]);
|
||||
|
||||
export const VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES = Object.freeze([
|
||||
Object.freeze({
|
||||
id: "rose-engine-rcone-macro-load",
|
||||
@@ -3056,6 +3116,110 @@ export function createVirtualHalSimConfigPromotionCandidateReport(options = {})
|
||||
};
|
||||
}
|
||||
|
||||
export function createVirtualHalSimConfigEvidenceExpansionReport(options = {}) {
|
||||
const candidates = options.candidates ?? VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES;
|
||||
const manifestProvided = typeof options.manifestText === "string" || Array.isArray(options.manifestEntries);
|
||||
const manifestSet = new Set([
|
||||
...sourceManifestSetFromText(options.manifestText ?? ""),
|
||||
...(options.manifestEntries ?? []).map(normalizeLinuxCncSourcePath),
|
||||
]);
|
||||
const requiredVirtualHalReports = options.requiredVirtualHalReports ?? [
|
||||
"source-compliance",
|
||||
"sim-config-source-coverage",
|
||||
"command-script-fixtures",
|
||||
"manifest-backed-motion-matrix",
|
||||
];
|
||||
const simConfigCoverage = options.simConfigSourceCoverage ?? createVirtualHalSimConfigSourceCoverageReport(options);
|
||||
const sourceCompliance = options.sourceCompliance ?? createVirtualHalSourceComplianceReport(options);
|
||||
const commandScriptFixtures = options.commandScriptFixtures ?? createVirtualHalCommandScriptFixtureReport(options);
|
||||
const motionControllerMatrix = options.motionControllerMatrix ?? createVirtualHalMotionControllerMatrixReport(options);
|
||||
const availableReports = new Set([
|
||||
...(sourceCompliance.complete ? ["source-compliance"] : []),
|
||||
...(simConfigCoverage.complete ? ["sim-config-source-coverage"] : []),
|
||||
...(commandScriptFixtures.complete ? ["command-script-fixtures"] : []),
|
||||
...(motionControllerMatrix.complete && motionControllerMatrix.manifestChecked ? ["manifest-backed-motion-matrix"] : []),
|
||||
]);
|
||||
const rows = candidates.map((candidate) => {
|
||||
const sourceFiles = [...(candidate.sourceFiles ?? [])];
|
||||
const normalizedSourceFiles = sourceFiles.map(normalizeLinuxCncSourcePath);
|
||||
const missingManifestFiles = manifestProvided
|
||||
? sourceFiles.filter((file, index) => !manifestSet.has(normalizedSourceFiles[index]))
|
||||
: [];
|
||||
const missingRequiredReports = requiredVirtualHalReports
|
||||
.filter((report) => !availableReports.has(report));
|
||||
const sourceReady = sourceFiles.length > 0 &&
|
||||
missingManifestFiles.length === 0 &&
|
||||
missingRequiredReports.length === 0;
|
||||
return {
|
||||
id: candidate.id,
|
||||
label: candidate.label,
|
||||
source: "linuxcnc-configs-sim-source-derived-virtual-hal-evidence-expansion-candidate",
|
||||
simConfigTarget: candidate.simConfigTarget ?? null,
|
||||
sourceFiles,
|
||||
iniPath: candidate.iniPath,
|
||||
gcodePath: candidate.gcodePath,
|
||||
currentNodeInventoryStatus: candidate.currentNodeInventoryStatus,
|
||||
currentMatrixBrowserStatus: candidate.currentMatrixBrowserStatus,
|
||||
dependencyClass: candidate.dependencyClass,
|
||||
targetBrowserEvidence: candidate.targetBrowserEvidence,
|
||||
requiredVirtualHalReports,
|
||||
blockedKind: candidate.blockedKind,
|
||||
promotionAllowed: candidate.promotionAllowed === true,
|
||||
nodeStatusReady: candidate.currentNodeInventoryStatus === "PASS",
|
||||
browserRepresentativeReady: candidate.currentMatrixBrowserStatus === "REP",
|
||||
manifestChecked: manifestProvided,
|
||||
missingManifestFiles,
|
||||
missingRequiredReports,
|
||||
evidence: candidate.evidence,
|
||||
sourceReady,
|
||||
complete: sourceReady &&
|
||||
candidate.blockedKind === "-" &&
|
||||
candidate.promotionAllowed !== true &&
|
||||
candidate.currentNodeInventoryStatus === "PASS" &&
|
||||
candidate.currentMatrixBrowserStatus === "REP",
|
||||
};
|
||||
});
|
||||
const missingCandidates = rows.filter((row) => !row.complete).map((row) => row.id);
|
||||
const promotionAllowedViolations = rows.filter((row) => row.promotionAllowed === true).map((row) => row.id);
|
||||
const blockedCandidateIds = rows.filter((row) => row.blockedKind !== "-").map((row) => row.id);
|
||||
const missingManifestFiles = [...new Set(rows.flatMap((row) => row.missingManifestFiles))];
|
||||
const missingRequiredReports = [...new Set(rows.flatMap((row) => row.missingRequiredReports))];
|
||||
const complete = rows.length > 0 &&
|
||||
missingCandidates.length === 0 &&
|
||||
promotionAllowedViolations.length === 0 &&
|
||||
blockedCandidateIds.length === 0 &&
|
||||
missingManifestFiles.length === 0 &&
|
||||
missingRequiredReports.length === 0;
|
||||
return {
|
||||
apiName: "linuxcnc-wasm-virtual-hal-sim-config-evidence-expansion-report",
|
||||
reportVersion: 1,
|
||||
source: "linuxcnc-configs-sim-source-derived-virtual-hal",
|
||||
phase: complete ? "ready" : "blocked",
|
||||
complete,
|
||||
webSimulationSatisfied: complete,
|
||||
inventoryBaselineUnchanged: true,
|
||||
promotionAllowed: false,
|
||||
manifestChecked: manifestProvided,
|
||||
candidateCount: rows.length,
|
||||
readyCandidateCount: rows.filter((row) => row.complete).length,
|
||||
sourceFiles: [...new Set(rows.flatMap((row) => row.sourceFiles))],
|
||||
requiredVirtualHalReports,
|
||||
availableVirtualHalReports: [...availableReports],
|
||||
missingCandidates,
|
||||
promotionAllowedViolations,
|
||||
blockedCandidateIds,
|
||||
missingManifestFiles,
|
||||
missingRequiredReports,
|
||||
rows,
|
||||
summaryRows: [
|
||||
{ id: "candidates", label: "Expansion candidates", value: `${rows.length}` },
|
||||
{ id: "ready-candidates", label: "Ready candidates", value: `${rows.filter((row) => row.complete).length}` },
|
||||
{ id: "promotion-allowed", label: "Promotion allowed", value: "0" },
|
||||
{ id: "inventory-baseline", label: "Inventory baseline", value: "unchanged" },
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
export function createVirtualHalSimConfigMacroLoadFixtureReport(options = {}) {
|
||||
const fixtures = options.fixtures ?? VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES;
|
||||
const blockedFixtures = options.blockedFixtures ?? VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_BLOCKED_FIXTURES;
|
||||
@@ -3459,6 +3623,9 @@ export function createLinuxCncVirtualHalRuntime(initialState = createVirtualHalS
|
||||
getSimConfigPromotionCandidateReport(options = {}) {
|
||||
return createVirtualHalSimConfigPromotionCandidateReport(options);
|
||||
},
|
||||
getSimConfigEvidenceExpansionReport(options = {}) {
|
||||
return createVirtualHalSimConfigEvidenceExpansionReport(options);
|
||||
},
|
||||
getSimConfigMacroLoadFixtureReport(options = {}) {
|
||||
return createVirtualHalSimConfigMacroLoadFixtureReport(options);
|
||||
},
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -1841,6 +1841,7 @@ M2
|
||||
import {
|
||||
DEFAULT_SIMULATION_PROGRAM_ID,
|
||||
VIRTUAL_HAL_AXES as SHARED_VIRTUAL_HAL_AXES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES as SHARED_VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES,
|
||||
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,
|
||||
@@ -1854,6 +1855,7 @@ M2
|
||||
createVirtualHalMachineStatusState as createSharedVirtualHalMachineStatusState,
|
||||
createVirtualHalMotionControllerMatrixReport as createSharedVirtualHalMotionControllerMatrixReport,
|
||||
createVirtualHalPinRegistry as createSharedVirtualHalPinRegistry,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport as createSharedVirtualHalSimConfigEvidenceExpansionReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport as createSharedVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalSimConfigPromotionCandidateReport as createSharedVirtualHalSimConfigPromotionCandidateReport,
|
||||
createVirtualHalSimConfigSourceCoverageReport as createSharedVirtualHalSimConfigSourceCoverageReport,
|
||||
@@ -2026,6 +2028,7 @@ M2
|
||||
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_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES = SHARED_VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES;
|
||||
const VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES = SHARED_VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS.flatMap((target) => target.sourceFiles ?? []);
|
||||
let virtualHalState = createVirtualHalState();
|
||||
|
||||
@@ -2570,6 +2573,15 @@ M2
|
||||
});
|
||||
}
|
||||
|
||||
function createVirtualHalSimConfigEvidenceExpansionReport() {
|
||||
return createSharedVirtualHalSimConfigEvidenceExpansionReport({
|
||||
manifestEntries: [
|
||||
...VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES,
|
||||
...VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES.flatMap((candidate) => candidate.sourceFiles ?? []),
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
function createVirtualHalSimConfigMacroLoadFixtureReport() {
|
||||
return createSharedVirtualHalSimConfigMacroLoadFixtureReport({
|
||||
manifestEntries: [
|
||||
@@ -2774,6 +2786,7 @@ M2
|
||||
virtualHalSourceCompliance: createVirtualHalSourceComplianceReport(),
|
||||
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
|
||||
virtualHalSimConfigPromotionCandidates: createVirtualHalSimConfigPromotionCandidateReport(),
|
||||
virtualHalSimConfigEvidenceExpansion: createVirtualHalSimConfigEvidenceExpansionReport(),
|
||||
virtualHalPromotionCandidateSummary: createVirtualHalPromotionCandidateSummary(),
|
||||
virtualHalSimConfigMacroLoadFixtures: createVirtualHalSimConfigMacroLoadFixtureReport(),
|
||||
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport(),
|
||||
@@ -2812,6 +2825,7 @@ M2
|
||||
virtualHalSourceCompliance: virtualHal.sourceCompliance,
|
||||
virtualHalSimConfigSourceCoverage: virtualHal.simConfigSourceCoverage,
|
||||
virtualHalSimConfigPromotionCandidates: virtualHal.simConfigPromotionCandidates,
|
||||
virtualHalSimConfigEvidenceExpansion: virtualHal.simConfigEvidenceExpansion,
|
||||
virtualHalSimConfigMacroLoadFixtures: virtualHal.simConfigMacroLoadFixtures,
|
||||
virtualHalCommandScriptFixtures: virtualHal.commandScriptFixtures,
|
||||
virtualHalMotionControllerMatrix: virtualHal.motionControllerMatrix,
|
||||
@@ -3747,6 +3761,7 @@ M2
|
||||
manifestEntries: [
|
||||
...VIRTUAL_HAL_MOTION_MATRIX_MANIFEST_ENTRIES,
|
||||
...VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES.flatMap((candidate) => candidate.sourceFiles ?? []),
|
||||
...VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES.flatMap((candidate) => candidate.sourceFiles ?? []),
|
||||
...VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES.flatMap((fixture) => fixture.sourceFiles ?? []),
|
||||
],
|
||||
});
|
||||
@@ -4214,6 +4229,7 @@ M2
|
||||
getVirtualHalSourceComplianceReport: () => createVirtualHalSourceComplianceReport(),
|
||||
getVirtualHalSimConfigSourceCoverageReport: () => createVirtualHalSimConfigSourceCoverageReport(),
|
||||
getVirtualHalSimConfigPromotionCandidateReport: () => createVirtualHalSimConfigPromotionCandidateReport(),
|
||||
getVirtualHalSimConfigEvidenceExpansionReport: () => createVirtualHalSimConfigEvidenceExpansionReport(),
|
||||
getVirtualHalPromotionCandidateSummary: () => renderPromotionCandidateSummary(),
|
||||
getVirtualHalPromotionFamilyRows: () => renderPromotionFamilyRows(),
|
||||
getVirtualHalSimConfigMacroLoadFixtureReport: () => createVirtualHalSimConfigMacroLoadFixtureReport(),
|
||||
|
||||
@@ -22,6 +22,7 @@ export {
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_AUDIT_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_BLOCKED_FIXTURES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_MACRO_LOAD_FIXTURES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_EVIDENCE_EXPANSION_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_PROMOTION_CANDIDATES,
|
||||
VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS,
|
||||
VIRTUAL_HAL_SIMULATION_REPLACEMENT_TARGETS,
|
||||
@@ -37,6 +38,7 @@ export {
|
||||
createVirtualHalLimitsHomeState,
|
||||
createVirtualHalMachineStatusState,
|
||||
createVirtualHalPinRegistry,
|
||||
createVirtualHalSimConfigEvidenceExpansionReport,
|
||||
createVirtualHalSimConfigMacroLoadFixtureReport,
|
||||
createVirtualHalSimConfigPromotionCandidateReport,
|
||||
createVirtualHalSimConfigSourceCoverageReport,
|
||||
|
||||
Reference in New Issue
Block a user