按text22收束promotion证据
结论:完成 evidence-ready / inventory-ready 双层 promotion candidate 管理,release/SDK gate 已纳入 virtual HAL promotion summary,baseline 保持 28/28/131/0,Python remap、tool DB、external user-M hard block 继续 locked。
This commit is contained in:
@@ -244,6 +244,8 @@
|
||||
!api?.getVirtualHalSourceComplianceReport ||
|
||||
!api?.getVirtualHalSimConfigSourceCoverageReport ||
|
||||
!api?.getVirtualHalSimConfigPromotionCandidateReport ||
|
||||
!api?.getVirtualHalPromotionCandidateSummary ||
|
||||
!api?.getVirtualHalPromotionFamilyRows ||
|
||||
!api?.getVirtualHalSimConfigMacroLoadFixtureReport ||
|
||||
!api?.getVirtualHalCommandScriptFixtureReport ||
|
||||
!api?.getVirtualHalMotionControllerMatrixReport ||
|
||||
@@ -409,6 +411,7 @@
|
||||
throw new Error(`simulation virtual HAL registry/integrity drift: ${JSON.stringify(initialVirtualHalRegistry)}`);
|
||||
}
|
||||
const diagnosticsArtifact = api.exportDiagnosticsArtifact();
|
||||
const promotionCandidateSummary = api.getVirtualHalPromotionCandidateSummary();
|
||||
const expectedPromotionCandidates = [
|
||||
[
|
||||
"qtdragon-multi-joint-on-abort",
|
||||
@@ -458,6 +461,9 @@
|
||||
"linuxcnc/configs/sim/axis/rose_engine/rcone.ngc",
|
||||
false,
|
||||
"linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini",
|
||||
"rcone.ngc",
|
||||
34,
|
||||
"linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini",
|
||||
"linuxcnc/configs/sim/axis/rose_engine/rcone.ngc",
|
||||
"linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc",
|
||||
],
|
||||
@@ -466,6 +472,9 @@
|
||||
"linuxcnc/configs/sim/axis/external_offsets/queuebuster.ngc",
|
||||
true,
|
||||
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini",
|
||||
"queuebuster.ngc",
|
||||
40,
|
||||
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini",
|
||||
"linuxcnc/configs/sim/axis/external_offsets/eoffsets.ngc",
|
||||
],
|
||||
];
|
||||
@@ -481,6 +490,18 @@
|
||||
"L4-PYTHON-REMAP",
|
||||
],
|
||||
];
|
||||
const expectedMacroLoadAuditCandidates = [
|
||||
[
|
||||
"gscreen-industrial-lathe-wear-toolchange-audit",
|
||||
"linuxcnc/configs/sim/gscreen/industrial_lathe_wear/toolchange.ngc",
|
||||
"blocked-missing-owning-ini",
|
||||
],
|
||||
[
|
||||
"qtvcp-industrial-lathe-wear-toolchange-audit",
|
||||
"linuxcnc/configs/sim/qtvcp_screens/industrial_lathe_wear/toolchange.ngc",
|
||||
"blocked-missing-owning-ini",
|
||||
],
|
||||
];
|
||||
if (
|
||||
diagnosticsArtifact.apiName !== "real-browser-simulation-diagnostics-artifact" ||
|
||||
diagnosticsArtifact.statusHistory.length === 0 ||
|
||||
@@ -495,18 +516,41 @@
|
||||
!diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.sourceFiles?.includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz45/qtdragon_xyza.ini") ||
|
||||
!diagnosticsArtifact.virtualHalSimConfigSourceCoverage?.sourceFiles?.includes("linuxcnc/configs/sim/qtdragon_hd/qtdragon_hd_z_compensation/qtdragon_hd_z_compensation.ini") ||
|
||||
diagnosticsArtifact.virtualHalSimConfigPromotionCandidates?.complete !== true ||
|
||||
diagnosticsArtifact.virtualHalPromotionCandidateSummary?.ready !== true ||
|
||||
diagnosticsArtifact.virtualHalPromotionCandidateSummary?.preferredCandidateId !== "qtdragon-multi-joint-on-abort" ||
|
||||
diagnosticsArtifact.virtualHalPromotionCandidateSummary?.candidateCount !== 8 ||
|
||||
diagnosticsArtifact.virtualHalPromotionCandidateSummary?.readyCandidateCount !== 8 ||
|
||||
diagnosticsArtifact.virtualHalPromotionCandidateSummary?.sourceFileCount !== 17 ||
|
||||
diagnosticsArtifact.virtualHalPromotionCandidateSummary?.inventoryBaseline !== "executed=28 passed=28 skipped=131 unexpected_fail=0" ||
|
||||
promotionCandidateSummary.ready !== true ||
|
||||
promotionCandidateSummary.preferredIniPath !== "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini" ||
|
||||
doc.body.dataset.promotionCandidateReady !== "true" ||
|
||||
doc.body.dataset.promotionCandidatePreferred !== "qtdragon-multi-joint-on-abort" ||
|
||||
doc.querySelector('[data-promotion-candidate-summary-value="preferred-candidate"]')?.textContent !== "qtdragon-multi-joint-on-abort" ||
|
||||
doc.querySelector('[data-promotion-candidate-summary-value="inventory-baseline"]')?.textContent !== "28/28 pass; 131 skip unchanged" ||
|
||||
!diagnosticsArtifact.virtualHalSimConfigPromotionCandidates?.familyRows?.some((row) =>
|
||||
row.id === "qtdragon-on-abort" &&
|
||||
row.candidateCount === 6 &&
|
||||
row.completeCount === 6 &&
|
||||
row.explicitBrowserDiagnosticsCount === 6 &&
|
||||
row.explicitBrowserDiagnosticsReady === true &&
|
||||
row.complete === true
|
||||
) ||
|
||||
!expectedPromotionCandidates.every(([id, ...sourceFiles]) =>
|
||||
diagnosticsArtifact.virtualHalSimConfigPromotionCandidates?.rows?.some((row) =>
|
||||
row.id === id &&
|
||||
row.complete === true &&
|
||||
row.currentNodeInventoryStatus === "PASS" &&
|
||||
row.currentMatrixBrowserStatus === "explicit-browser-diagnostics" &&
|
||||
row.targetBrowserEvidence === "explicit-browser-diagnostics" &&
|
||||
sourceFiles.every((sourceFile) => row.sourceFiles.includes(sourceFile))
|
||||
)
|
||||
) ||
|
||||
diagnosticsArtifact.virtualHalSimConfigMacroLoadFixtures?.complete !== true ||
|
||||
diagnosticsArtifact.virtualHalSimConfigMacroLoadFixtures?.blockedFixturePromotionViolations?.length !== 0 ||
|
||||
!expectedMacroLoadFixtures.every(([id, fixturePath, declaredOnly, ...sourceFiles]) =>
|
||||
diagnosticsArtifact.virtualHalSimConfigMacroLoadFixtures?.blockedBoundaryEvidenceViolations?.length !== 0 ||
|
||||
diagnosticsArtifact.virtualHalSimConfigMacroLoadFixtures?.auditPromotionViolations?.length !== 0 ||
|
||||
!expectedMacroLoadFixtures.every(([id, fixturePath, declaredOnly, declarationSourceFile, declarationValue, declarationLine, ...sourceFiles]) =>
|
||||
diagnosticsArtifact.virtualHalSimConfigMacroLoadFixtures?.rows?.some((row) =>
|
||||
row.id === id &&
|
||||
row.complete === true &&
|
||||
@@ -514,6 +558,12 @@
|
||||
row.targetBrowserEvidence === "non-main-fixture-diagnostics" &&
|
||||
row.fixturePath === fixturePath &&
|
||||
row.declaredOnly === declaredOnly &&
|
||||
row.requiresDeclarationEvidence === true &&
|
||||
row.declarationEvidenceReady === true &&
|
||||
row.declarationEvidence?.sourceFile === declarationSourceFile &&
|
||||
row.declarationEvidence?.key === "NGCGUI_SUBFILE" &&
|
||||
row.declarationEvidence?.value === declarationValue &&
|
||||
row.declarationEvidence?.line === declarationLine &&
|
||||
sourceFiles.every((sourceFile) => row.sourceFiles.includes(sourceFile))
|
||||
)
|
||||
) ||
|
||||
@@ -523,6 +573,38 @@
|
||||
row.fixturePath === fixturePath &&
|
||||
row.blockedKind === blockedKind &&
|
||||
row.excludedFromPositiveFixtures === true &&
|
||||
row.boundaryEvidenceReady === true &&
|
||||
row.boundaryEvidence?.baselineSummary?.executed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.passed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.skipped === 131 &&
|
||||
row.boundaryEvidence?.baselineSummary?.unexpectedFail === 0 &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv"] === "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9" &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv"] === "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" &&
|
||||
row.boundaryEvidence?.boundarySummary?.recommendedBlocked === "UNAVAILABLE" &&
|
||||
row.boundaryEvidence?.boundarySummary?.dependencies?.includes("missing_vendored_ini:") &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.vendored === 0 &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.reportAvailable === 0 &&
|
||||
row.complete === true
|
||||
)
|
||||
) ||
|
||||
!expectedMacroLoadAuditCandidates.every(([id, fixturePath, auditStatus]) =>
|
||||
diagnosticsArtifact.virtualHalSimConfigMacroLoadFixtures?.auditRows?.some((row) =>
|
||||
row.id === id &&
|
||||
row.fixturePath === fixturePath &&
|
||||
row.auditStatus === auditStatus &&
|
||||
row.promotionAllowed === false &&
|
||||
row.excludedFromPositiveFixtures === true &&
|
||||
row.boundaryEvidenceReady === true &&
|
||||
row.boundaryEvidence?.baselineSummary?.executed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.passed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.skipped === 131 &&
|
||||
row.boundaryEvidence?.baselineSummary?.unexpectedFail === 0 &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv"] === "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9" &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv"] === "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" &&
|
||||
row.boundaryEvidence?.boundarySummary?.recommendedBlocked === "UNAVAILABLE" &&
|
||||
row.boundaryEvidence?.boundarySummary?.dependencies?.includes("missing_vendored_ini:") &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.vendored === 0 &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.reportAvailable === 0 &&
|
||||
row.complete === true
|
||||
)
|
||||
) ||
|
||||
@@ -946,6 +1028,7 @@
|
||||
}
|
||||
const virtualHalReplacement = api.getVirtualHalSimulationReplacementReport();
|
||||
const promotionCandidateReport = api.getVirtualHalSimConfigPromotionCandidateReport();
|
||||
const promotionFamilyRows = api.getVirtualHalPromotionFamilyRows();
|
||||
const macroLoadFixtureReport = api.getVirtualHalSimConfigMacroLoadFixtureReport();
|
||||
if (
|
||||
virtualHalReplacement.apiName !== "linuxcnc-wasm-virtual-hal-simulation-replacement-report" ||
|
||||
@@ -966,6 +1049,17 @@
|
||||
!api.getVirtualHalSimConfigSourceCoverageReport().sourceFiles.includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc") ||
|
||||
promotionCandidateReport.complete !== true ||
|
||||
promotionCandidateReport.inventoryBaselineUnchanged !== true ||
|
||||
doc.body.dataset.promotionFamilyReady !== "true" ||
|
||||
doc.body.dataset.promotionFamilyCount !== "3" ||
|
||||
promotionFamilyRows.length !== 3 ||
|
||||
![
|
||||
["qtdragon-on-abort", "6/6 ready; sources=12"],
|
||||
["vismach-remap-sims", "1/1 ready; sources=3"],
|
||||
["rose-engine-rcone-demo", "1/1 ready; sources=2"],
|
||||
].every(([id, value]) =>
|
||||
doc.querySelector(`[data-promotion-family-row="${id}"]`)?.dataset.promotionFamilyReady === "true" &&
|
||||
doc.querySelector(`[data-promotion-family-value="${id}"]`)?.textContent === value
|
||||
) ||
|
||||
!expectedPromotionCandidates.every(([id, ...sourceFiles]) =>
|
||||
promotionCandidateReport.rows.some((row) =>
|
||||
row.id === id &&
|
||||
@@ -978,13 +1072,21 @@
|
||||
macroLoadFixtureReport.inventoryBaselineUnchanged !== true ||
|
||||
macroLoadFixtureReport.standaloneMainViolations.length !== 0 ||
|
||||
macroLoadFixtureReport.blockedFixturePromotionViolations.length !== 0 ||
|
||||
!expectedMacroLoadFixtures.every(([id, fixturePath, declaredOnly, ...sourceFiles]) =>
|
||||
macroLoadFixtureReport.blockedBoundaryEvidenceViolations.length !== 0 ||
|
||||
macroLoadFixtureReport.auditPromotionViolations.length !== 0 ||
|
||||
!expectedMacroLoadFixtures.every(([id, fixturePath, declaredOnly, declarationSourceFile, declarationValue, declarationLine, ...sourceFiles]) =>
|
||||
macroLoadFixtureReport.rows.some((row) =>
|
||||
row.id === id &&
|
||||
row.complete === true &&
|
||||
row.nonMainFixture === true &&
|
||||
row.fixturePath === fixturePath &&
|
||||
row.declaredOnly === declaredOnly &&
|
||||
row.requiresDeclarationEvidence === true &&
|
||||
row.declarationEvidenceReady === true &&
|
||||
row.declarationEvidence?.sourceFile === declarationSourceFile &&
|
||||
row.declarationEvidence?.key === "NGCGUI_SUBFILE" &&
|
||||
row.declarationEvidence?.value === declarationValue &&
|
||||
row.declarationEvidence?.line === declarationLine &&
|
||||
sourceFiles.every((sourceFile) => row.sourceFiles.includes(sourceFile))
|
||||
)
|
||||
) ||
|
||||
@@ -994,6 +1096,38 @@
|
||||
row.fixturePath === fixturePath &&
|
||||
row.blockedKind === blockedKind &&
|
||||
row.excludedFromPositiveFixtures === true &&
|
||||
row.boundaryEvidenceReady === true &&
|
||||
row.boundaryEvidence?.baselineSummary?.executed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.passed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.skipped === 131 &&
|
||||
row.boundaryEvidence?.baselineSummary?.unexpectedFail === 0 &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv"] === "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9" &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv"] === "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" &&
|
||||
row.boundaryEvidence?.boundarySummary?.recommendedBlocked === "UNAVAILABLE" &&
|
||||
row.boundaryEvidence?.boundarySummary?.dependencies?.includes("missing_vendored_ini:") &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.vendored === 0 &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.reportAvailable === 0 &&
|
||||
row.complete === true
|
||||
)
|
||||
) ||
|
||||
!expectedMacroLoadAuditCandidates.every(([id, fixturePath, auditStatus]) =>
|
||||
macroLoadFixtureReport.auditRows.some((row) =>
|
||||
row.id === id &&
|
||||
row.fixturePath === fixturePath &&
|
||||
row.auditStatus === auditStatus &&
|
||||
row.promotionAllowed === false &&
|
||||
row.excludedFromPositiveFixtures === true &&
|
||||
row.boundaryEvidenceReady === true &&
|
||||
row.boundaryEvidence?.baselineSummary?.executed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.passed === 28 &&
|
||||
row.boundaryEvidence?.baselineSummary?.skipped === 131 &&
|
||||
row.boundaryEvidence?.baselineSummary?.unexpectedFail === 0 &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/boundary-summary.tsv"] === "de6cf57b7c07182e3bcb32e22dbdf202b618cabc14620d6dff1ef815587950b9" &&
|
||||
row.boundaryEvidence?.sourceArtifactHashes?.["wasm-port/build/wasm/sim-configs-inventory/ini-boundary-summary.tsv"] === "b0afe27224e97a82fbecbbd75a7c86233c98fe957d9c1ba20f0656f8745a5eae" &&
|
||||
row.boundaryEvidence?.boundarySummary?.recommendedBlocked === "UNAVAILABLE" &&
|
||||
row.boundaryEvidence?.boundarySummary?.dependencies?.includes("missing_vendored_ini:") &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.vendored === 0 &&
|
||||
row.boundaryEvidence?.iniBoundarySummary?.reportAvailable === 0 &&
|
||||
row.complete === true
|
||||
)
|
||||
) ||
|
||||
|
||||
Reference in New Issue
Block a user