按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:
2026-06-18 17:20:29 +08:00
parent 014081f1f9
commit 1c94ea4527
29 changed files with 8500 additions and 121 deletions

View File

@@ -28,6 +28,8 @@ assert.equal(validation.gateExecutionSummaryReady, true);
assert.equal(validation.gateResultMatrixReady, true);
assert.equal(validation.gateActionPlanReady, true);
assert.equal(validation.virtualHalSimConfigSourceCoverageReady, true);
assert.equal(validation.virtualHalSimConfigPromotionCandidatesReady, true);
assert.equal(validation.virtualHalSimConfigMacroLoadFixturesReady, true);
assert.equal(validation.virtualHalMotionControllerMatrixReady, true);
assert.equal(validation.axisScreenshotArtifactSummaryReady, true);
assert.ok(validation.axisScreenshotArtifactCount === 0 || validation.axisScreenshotArtifactCount === 4);
@@ -60,6 +62,105 @@ assert.equal(artifact.virtualHalSimConfigSourceCoverage.webSimulationSatisfied,
assert.equal(artifact.virtualHalSimConfigSourceCoverageReady, true);
assert.equal(artifact.virtualHalSimConfigSourceCoverage.sourceFiles.includes("linuxcnc/configs/sim/axis/foam/axis_foam.ini"), true);
assert.equal(artifact.virtualHalSimConfigSourceCoverage.sourceFiles.includes("linuxcnc/configs/sim/qtdragon/qtdragon_xyz/on_abort.ngc"), true);
assert.equal(artifact.virtualHalSimConfigPromotionCandidates.apiName, "linuxcnc-wasm-virtual-hal-sim-config-promotion-candidate-report");
assert.equal(artifact.virtualHalSimConfigPromotionCandidates.complete, true);
assert.equal(artifact.virtualHalSimConfigPromotionCandidatesReady, true);
assert.equal(
artifact.virtualHalPromotionFamilySummary,
"qtdragon-on-abort: 6/6 ready; vismach-remap-sims: 1/1 ready; rose-engine-rcone-demo: 1/1 ready",
);
assert.deepEqual(
artifact.virtualHalPromotionFamilyRows.map(({ id, value }) => [id, value]),
[
["qtdragon-on-abort", "6/6 ready; sources=12; diagnostics=ready"],
["vismach-remap-sims", "1/1 ready; sources=3; diagnostics=ready"],
["rose-engine-rcone-demo", "1/1 ready; sources=2; diagnostics=ready"],
],
);
assert.equal(
artifact.virtualHalSimConfigPromotionCandidates.familyRows.some((row) =>
row.id === "qtdragon-on-abort" &&
row.candidateCount === 6 &&
row.completeCount === 6 &&
row.explicitBrowserDiagnosticsCount === 6 &&
row.explicitBrowserDiagnosticsReady === true &&
row.complete === true
),
true,
);
assert.equal(
artifact.virtualHalSimConfigPromotionCandidates.rows.some((row) =>
row.id === "rose-engine-rcone-demo" &&
row.currentMatrixBrowserStatus === "explicit-browser-diagnostics" &&
row.sourceFiles.includes("linuxcnc/configs/sim/axis/rose_engine/rcone_demo.ngc")
),
true,
);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.apiName, "linuxcnc-wasm-virtual-hal-sim-config-macro-load-fixture-report");
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.complete, true);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixturesReady, true);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.declarationEvidenceViolations.length, 0);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.missingAuditRows.length, 0);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.blockedBoundaryEvidenceViolations.length, 0);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.auditPromotionViolations.length, 0);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.auditBoundaryEvidenceViolations.length, 0);
assert.equal(artifact.virtualHalSimConfigMacroLoadFixtures.auditPromotionAllowedViolations.length, 0);
assert.equal(
artifact.virtualHalSimConfigMacroLoadFixtures.rows.some((row) =>
row.id === "rose-engine-rcone-macro-load" &&
row.requiresDeclarationEvidence === true &&
row.declarationEvidenceReady === true &&
row.declarationEvidence.sourceFile === "linuxcnc/configs/sim/axis/rose_engine/rose_engine.ini" &&
row.declarationEvidence.key === "NGCGUI_SUBFILE" &&
row.declarationEvidence.value === "rcone.ngc" &&
row.declarationEvidence.line === 34
),
true,
);
assert.equal(
artifact.virtualHalSimConfigMacroLoadFixtures.rows.some((row) =>
row.id === "external-offsets-queuebuster-macro-load" &&
row.requiresDeclarationEvidence === true &&
row.declarationEvidenceReady === true &&
row.declarationEvidence.sourceFile === "linuxcnc/configs/sim/axis/external_offsets/eoffsets.ini" &&
row.declarationEvidence.key === "NGCGUI_SUBFILE" &&
row.declarationEvidence.value === "queuebuster.ngc" &&
row.declarationEvidence.line === 40
),
true,
);
assert.equal(
artifact.virtualHalSimConfigMacroLoadFixtures.auditRows.some((row) =>
row.id === "gscreen-industrial-lathe-wear-toolchange-audit" &&
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.dependencies.includes("missing_vendored_ini:configs/sim/gscreen/industrial_lathe_wear/industrial_lathe_wear.ini") &&
row.boundaryEvidence.iniBoundarySummary.vendored === 0
),
true,
);
assert.equal(
artifact.virtualHalSimConfigMacroLoadFixtures.blockedRows.some((row) =>
row.id === "silverdragon-tool-sensor-python-ui-boundary" &&
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.dependencies.includes("missing_vendored_ini:configs/sim/gscreen/silverdragon/silverdragon.ini") &&
row.boundaryEvidence.iniBoundarySummary.vendored === 0
),
true,
);
assert.equal(artifact.virtualHalMotionControllerMatrix.apiName, "linuxcnc-wasm-virtual-hal-motion-controller-matrix-report");
assert.equal(artifact.virtualHalMotionControllerMatrix.complete, true);
assert.equal(artifact.virtualHalMotionControllerMatrix.manifestChecked, true);

View File

@@ -5,6 +5,8 @@ import { fileURLToPath } from "node:url";
import {
createProjectReleaseReadinessReport,
createVirtualHalMotionControllerMatrixReport,
createVirtualHalSimConfigMacroLoadFixtureReport,
createVirtualHalSimConfigPromotionCandidateReport,
createVirtualHalSimConfigSourceCoverageReport,
} from "../../runtime/sdk/src/index.js";
@@ -31,6 +33,13 @@ const passedGateResults = {
"project-release-gate": true,
};
const virtualHalSimConfigSourceCoverage = createVirtualHalSimConfigSourceCoverageReport({
manifestText: sourceManifestText,
});
const virtualHalMotionControllerMatrix = createVirtualHalMotionControllerMatrixReport({
manifestText: sourceManifestText,
});
function loadAxisScreenshotArtifacts(directory) {
if (!directory || !existsSync(directory)) {
return [];
@@ -65,12 +74,16 @@ const report = createProjectReleaseReadinessReport({
"host_wasm_opfs_browser_smokes=ok",
"project_release_gate=ok",
],
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport({
manifestText: sourceManifestText,
}),
virtualHalMotionControllerMatrix: createVirtualHalMotionControllerMatrixReport({
virtualHalSimConfigSourceCoverage,
virtualHalSimConfigPromotionCandidates: createVirtualHalSimConfigPromotionCandidateReport({
manifestText: sourceManifestText,
simConfigSourceCoverage: virtualHalSimConfigSourceCoverage,
motionControllerMatrix: virtualHalMotionControllerMatrix,
}),
virtualHalSimConfigMacroLoadFixtures: createVirtualHalSimConfigMacroLoadFixtureReport({
manifestText: sourceManifestText,
}),
virtualHalMotionControllerMatrix,
axisScreenshotArtifacts: loadAxisScreenshotArtifacts(axisScreenshotArtifactDir),
});