53 个 Python-remap inventory rows 批量提升为 PASS

结论:53 个 Python-remap inventory rows 已完成 row proof、browser proof 与 inventory baseline promotion,当前 inventory baseline 为 PASS=82 / SKIP=77 / unexpected_fail=0。
This commit is contained in:
2026-06-20 05:53:49 +08:00
parent ac52b48d62
commit b057f8038b
29 changed files with 1701 additions and 245 deletions

View File

@@ -126,9 +126,9 @@ export const VIRTUAL_HAL_SIM_CONFIG_SOURCE_TARGETS = Object.freeze([
]);
export const VIRTUAL_HAL_SIM_CONFIG_INVENTORY_BASELINE = Object.freeze({
executed: 29,
passed: 29,
skipped: 130,
executed: 82,
passed: 82,
skipped: 77,
unexpectedFail: 0,
});

View File

@@ -79,9 +79,9 @@ const REQUIRED_RELEASE_GATES = [
];
const DEFAULT_SIM_CONFIG_INVENTORY_BASELINE = {
executed: 29,
passed: 29,
skipped: 130,
executed: 82,
passed: 82,
skipped: 77,
unexpectedFail: 0,
};
@@ -163,7 +163,7 @@ function createPromotionCandidateArtifactSummary({
const artifactEvidenceReadyCount = artifactEvidenceReadyRows.length;
const inventoryReadyCount = artifactInventoryReadyRows.length > 0
? artifactInventoryReadyRows.length
: 19;
: 2;
const evidenceExpansionCandidateCount = evidenceExpansionArtifactRows.length > 0
? evidenceExpansionArtifactRows.length
: 14;
@@ -698,7 +698,7 @@ function isVirtualHalPromotionCandidateSummaryReady(summary) {
summaryObject.preferredIniPath === "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/qtdragon_xyyz.ini" &&
summaryObject.preferredGcodePath === "linuxcnc/configs/sim/qtdragon/qtdragon_multi_joint/on_abort.ngc" &&
summaryObject.explicitBrowserDiagnosticsCount === 8 &&
summaryObject.inventoryBaseline === "executed=29 passed=29 skipped=130 unexpected_fail=0" &&
summaryObject.inventoryBaseline === "executed=82 passed=82 skipped=77 unexpected_fail=0" &&
arrayOrEmpty(summaryObject.blockedCandidateIds).length === 0;
}

View File

@@ -127,10 +127,22 @@ export function createLinuxCncPythonRemapBrowserWorkerAdapter({
return lifecycleRequest("finishGenerator", payload);
},
async stageNgcRemapAsset(payload) {
return lifecycleRequest("stageNgcRemapAsset", payload);
},
async rejectNgcOnlyStandalone(payload) {
return lifecycleRequest("rejectNgcOnlyStandalone", payload);
},
async exportInterpreterState(payload) {
return lifecycleRequest("exportInterpreterState", payload);
},
async exportCanonicalEvents(payload) {
return lifecycleRequest("exportCanonicalEvents", payload);
},
async exportDiagnostics(payload) {
return lifecycleRequest("exportDiagnostics", payload);
},

View File

@@ -2662,15 +2662,15 @@ M2
preferredGcodePath: preferredCandidate?.gcodePath ?? null,
blockedCandidateIds: blockedRows.map((row) => row.id),
explicitBrowserDiagnosticsCount: explicitBrowserRows.length,
inventoryBaseline: "executed=29 passed=29 skipped=130 unexpected_fail=0",
inventoryBaseline: "executed=82 passed=82 skipped=77 unexpected_fail=0",
sourceFiles,
rows: [
{ id: "candidate-count", label: "Candidates", value: `${readyRows.length}/${rows.length} ready` },
{ id: "family-count", label: "Families", value: `${familyRows.length}` },
{ id: "preferred-candidate", label: "First case", value: preferredCandidate?.id ?? "missing" },
{ id: "candidate-layers", label: "Layers", value: `evidence-ready=${readyRows.length} inventory-ready=19` },
{ id: "candidate-layers", label: "Layers", value: `evidence-ready=${readyRows.length} inventory-ready=2` },
{ id: "source-files", label: "Source files", value: `${sourceFiles.length}` },
{ id: "inventory-baseline", label: "Inventory", value: "28/28 pass; 131 skip unchanged" },
{ id: "inventory-baseline", label: "Inventory", value: "82/82 pass; 77 skip" },
{ id: "promotion-allowed", label: "Allowed", value: "0 baseline changes" },
{ id: "blocked-candidates", label: "Hard blocks", value: blockedRows.length === 0 ? "excluded" : blockedRows.map((row) => row.id).join(", ") },
{ id: "browser-evidence", label: "Browser evidence", value: `${explicitBrowserRows.length}/${rows.length} explicit` },

View File

@@ -69,7 +69,10 @@ self.addEventListener("message", async (event) => {
"invokeGenerator",
"observeFirstYield",
"finishGenerator",
"stageNgcRemapAsset",
"rejectNgcOnlyStandalone",
"exportInterpreterState",
"exportCanonicalEvents",
"exportDiagnostics",
];
const providerReady = requiredMethods.every((method) => typeof provider?.[method] === "function");