From 7dcd8da7076d748fb5010a749080f70bbcd534af Mon Sep 17 00:00:00 2001 From: wangdequan Date: Thu, 18 Jun 2026 20:08:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E9=A6=96=E4=B8=AAevidence?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E5=80=99=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:release URL workflow 和 workflow overview 现在展示首个 evidence-expansion 候选 woodpecker-on-abort 的G-code路径与source count;promotion_allowed仍为0,baseline保持28/28/131/0,hard block不解锁。 --- .../sdk/src/project-release-readiness.js | 21 +++++++++++++ wasm-port/runtime/ui/ini-panel/ui-shell.js | 25 ++++++++++++++++ ...anel_shell_integration_workflow_smoke.html | 15 ++++++++++ .../ini_panel_workflow_overview_smoke.html | 30 +++++++++++++++++++ ..._project_release_artifact_url_workflow.mjs | 15 ++++++++++ .../verify_project_release_gate_manifest.mjs | 3 ++ .../ui/node/verify_ini_panel_ui_shell.mjs | 28 +++++++++++++++-- 7 files changed, 135 insertions(+), 2 deletions(-) diff --git a/wasm-port/runtime/sdk/src/project-release-readiness.js b/wasm-port/runtime/sdk/src/project-release-readiness.js index 22cf3be..e65d971 100644 --- a/wasm-port/runtime/sdk/src/project-release-readiness.js +++ b/wasm-port/runtime/sdk/src/project-release-readiness.js @@ -2844,6 +2844,10 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel const promotionCandidateArtifactSummary = objectOrEmpty(workflow?.validation?.promotionCandidateArtifactSummary); const promotionCandidateArtifactSummaryReady = workflow?.validation?.promotionCandidateArtifactSummaryReady === true; + const evidenceExpansionRows = arrayOrEmpty( + workflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows, + ); + const preferredEvidenceExpansion = evidenceExpansionRows[0] ?? {}; const ready = workflow?.ready === true; const statusText = ready ? "Ready" : "Blocked"; const detailText = ready @@ -2926,6 +2930,23 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel ? (promotionCandidateArtifactSummary.evidenceExpansion.baselineChanging ? "yes" : "no") : "not provided", }, + { + id: "evidence-expansion-preferred-candidate", + label: "Evidence expansion preferred candidate", + value: preferredEvidenceExpansion.id ?? "not provided", + }, + { + id: "evidence-expansion-preferred-gcode", + label: "Evidence expansion preferred G-code", + value: preferredEvidenceExpansion.gcodePath ?? "not provided", + }, + { + id: "evidence-expansion-preferred-source-count", + label: "Evidence expansion preferred source count", + value: Array.isArray(preferredEvidenceExpansion.sourceFiles) + ? `${preferredEvidenceExpansion.sourceFiles.length}` + : "not provided", + }, { id: "evidence-expansion-artifact", label: "Evidence expansion artifact", diff --git a/wasm-port/runtime/ui/ini-panel/ui-shell.js b/wasm-port/runtime/ui/ini-panel/ui-shell.js index 40aaa24..b38290d 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -2568,6 +2568,14 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo ?? {} ); const evidenceExpansion = promotionCandidateArtifactSummary.evidenceExpansion ?? {}; + const evidenceExpansionRows = ( + workflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows + ?? workflow?.urlWorkflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows + ?? [] + ); + const preferredEvidenceExpansion = Array.isArray(evidenceExpansionRows) + ? (evidenceExpansionRows[0] ?? {}) + : {}; const ready = workflow?.ready === true; const promotionFamilyRows = ( workflow?.validation?.virtualHalPromotionFamilyRows @@ -2683,6 +2691,23 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo ? "yes" : (evidenceExpansion.baselineChanging === false ? "no" : "not provided"), }, + { + id: "evidence-expansion-preferred-candidate", + label: "Evidence expansion preferred candidate", + value: preferredEvidenceExpansion.id ?? "not provided", + }, + { + id: "evidence-expansion-preferred-gcode", + label: "Evidence expansion preferred G-code", + value: preferredEvidenceExpansion.gcodePath ?? "not provided", + }, + { + id: "evidence-expansion-preferred-source-count", + label: "Evidence expansion preferred source count", + value: Array.isArray(preferredEvidenceExpansion.sourceFiles) + ? `${preferredEvidenceExpansion.sourceFiles.length}` + : "not provided", + }, { id: "hard-block-runtime-lock", label: "Hard-block runtime lock", diff --git a/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html b/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html index c713142..66335cc 100644 --- a/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html +++ b/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html @@ -1009,6 +1009,21 @@ TOOL_TABLE = browser-shell-tool.tbl "no", "shell workflow overview release artifact URL workflow evidence expansion baseline unchanged", ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-candidate")?.value, + "woodpecker-on-abort", + "shell workflow overview release artifact URL workflow evidence expansion preferred candidate", + ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-gcode")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc", + "shell workflow overview release artifact URL workflow evidence expansion preferred gcode", + ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, + "3", + "shell workflow overview release artifact URL workflow evidence expansion preferred source count", + ); assertEqual( workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowIds.includes("hard-block-runtime-lock"), true, diff --git a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html index cc7f07c..e8af5db 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -660,6 +660,21 @@ "no", "workflow overview release artifact URL workflow evidence expansion baseline unchanged", ); + assertEqual( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-candidate")?.value, + "woodpecker-on-abort", + "workflow overview release artifact URL workflow evidence expansion preferred candidate", + ); + assertEqual( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-gcode")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc", + "workflow overview release artifact URL workflow evidence expansion preferred gcode", + ); + assertEqual( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, + "3", + "workflow overview release artifact URL workflow evidence expansion preferred source count", + ); assertEqual( releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value, "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", @@ -861,6 +876,21 @@ "no", "workflow overview fixed URL workflow form evidence expansion baseline row", ); + assertEqual( + workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="evidence-expansion-preferred-candidate"]').textContent, + "woodpecker-on-abort", + "workflow overview fixed URL workflow form evidence expansion preferred candidate row", + ); + assertEqual( + workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="evidence-expansion-preferred-gcode"]').textContent, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc", + "workflow overview fixed URL workflow form evidence expansion preferred gcode row", + ); + assertEqual( + workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="evidence-expansion-preferred-source-count"]').textContent, + "3", + "workflow overview fixed URL workflow form evidence expansion preferred source count row", + ); assertEqual( workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="virtual-hal-promotion-source-file-count"]').textContent, "17 source files", diff --git a/wasm-port/tests/sdk/node/verify_project_release_artifact_url_workflow.mjs b/wasm-port/tests/sdk/node/verify_project_release_artifact_url_workflow.mjs index 40966ab..30c38ed 100644 --- a/wasm-port/tests/sdk/node/verify_project_release_artifact_url_workflow.mjs +++ b/wasm-port/tests/sdk/node/verify_project_release_artifact_url_workflow.mjs @@ -210,6 +210,18 @@ assert.equal( readySummary.rows.find(({ id }) => id === "evidence-expansion-baseline-changing")?.value, "no", ); +assert.equal( + readySummary.rows.find(({ id }) => id === "evidence-expansion-preferred-candidate")?.value, + "woodpecker-on-abort", +); +assert.equal( + readySummary.rows.find(({ id }) => id === "evidence-expansion-preferred-gcode")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc", +); +assert.equal( + readySummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, + "3", +); assert.equal( readySummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value, "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", @@ -249,6 +261,9 @@ assert.deepEqual( ["evidence-expansion-candidates", "13"], ["evidence-expansion-next-evidence", "browser-diagnostics-binding"], ["evidence-expansion-baseline-changing", "no"], + ["evidence-expansion-preferred-candidate", "woodpecker-on-abort"], + ["evidence-expansion-preferred-gcode", "linuxcnc/configs/sim/woodpecker/on_abort.ngc"], + ["evidence-expansion-preferred-source-count", "3"], ["evidence-expansion-artifact", "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv"], ["promotion-candidate-allowed", "0"], ...expectedPromotionFamilyRows, diff --git a/wasm-port/tests/sdk/node/verify_project_release_gate_manifest.mjs b/wasm-port/tests/sdk/node/verify_project_release_gate_manifest.mjs index 7ffa4b3..f5f3513 100644 --- a/wasm-port/tests/sdk/node/verify_project_release_gate_manifest.mjs +++ b/wasm-port/tests/sdk/node/verify_project_release_gate_manifest.mjs @@ -499,6 +499,9 @@ assert.deepEqual( ["evidence-expansion-candidates", "13"], ["evidence-expansion-next-evidence", "browser-diagnostics-binding"], ["evidence-expansion-baseline-changing", "no"], + ["evidence-expansion-preferred-candidate", "not provided"], + ["evidence-expansion-preferred-gcode", "not provided"], + ["evidence-expansion-preferred-source-count", "not provided"], ["evidence-expansion-artifact", "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv"], ["promotion-candidate-allowed", "0"], ...expectedPromotionFamilyRows, diff --git a/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs b/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs index f1c82f7..a9f57f2 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs @@ -1989,6 +1989,18 @@ assert.equal( releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-baseline-changing")?.value, "no", ); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-candidate")?.value, + "woodpecker-on-abort", +); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-gcode")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc", +); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, + "3", +); assert.equal( releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "virtual-hal-promotion-candidate-baseline")?.value, "executed=28 passed=28 skipped=131 unexpected_fail=0", @@ -2649,7 +2661,7 @@ const releaseArtifactUrlWorkflowMountResult = rowsNode: releaseArtifactUrlWorkflowRowsNode, }); assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true); -assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 29); +assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 32); assert.equal( releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"), true, @@ -2670,12 +2682,24 @@ assert.equal( releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-baseline-changing"), true, ); +assert.equal( + releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-preferred-candidate"), + true, +); +assert.equal( + releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-preferred-gcode"), + true, +); +assert.equal( + releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-preferred-source-count"), + true, +); assert.equal( releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"), true, ); assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true); -assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 29); +assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 32); const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({ artifactUrl: "/project-release-readiness.json", fetchRef: async () => ({