diff --git a/wasm-port/runtime/sdk/src/project-release-readiness.js b/wasm-port/runtime/sdk/src/project-release-readiness.js index e65d971..57e7590 100644 --- a/wasm-port/runtime/sdk/src/project-release-readiness.js +++ b/wasm-port/runtime/sdk/src/project-release-readiness.js @@ -2848,6 +2848,7 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel workflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows, ); const preferredEvidenceExpansion = evidenceExpansionRows[0] ?? {}; + const evidenceExpansionPreviewRows = evidenceExpansionRows.slice(0, 3); const ready = workflow?.ready === true; const statusText = ready ? "Ready" : "Blocked"; const detailText = ready @@ -2947,6 +2948,29 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel ? `${preferredEvidenceExpansion.sourceFiles.length}` : "not provided", }, + { + id: "evidence-expansion-candidate-list", + label: "Evidence expansion candidate list", + value: evidenceExpansionPreviewRows.length > 0 + ? evidenceExpansionPreviewRows.map((row) => row.id).join(", ") + : "not provided", + }, + { + id: "evidence-expansion-gcode-list", + label: "Evidence expansion G-code list", + value: evidenceExpansionPreviewRows.length > 0 + ? evidenceExpansionPreviewRows.map((row) => row.gcodePath).join(", ") + : "not provided", + }, + { + id: "evidence-expansion-source-count-list", + label: "Evidence expansion source count list", + value: evidenceExpansionPreviewRows.length > 0 + ? evidenceExpansionPreviewRows.map((row) => + Array.isArray(row.sourceFiles) ? `${row.sourceFiles.length}` : "0" + ).join(", ") + : "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 b38290d..3a6ddfc 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -2576,6 +2576,9 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo const preferredEvidenceExpansion = Array.isArray(evidenceExpansionRows) ? (evidenceExpansionRows[0] ?? {}) : {}; + const evidenceExpansionPreviewRows = Array.isArray(evidenceExpansionRows) + ? evidenceExpansionRows.slice(0, 3) + : []; const ready = workflow?.ready === true; const promotionFamilyRows = ( workflow?.validation?.virtualHalPromotionFamilyRows @@ -2708,6 +2711,29 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo ? `${preferredEvidenceExpansion.sourceFiles.length}` : "not provided", }, + { + id: "evidence-expansion-candidate-list", + label: "Evidence expansion candidate list", + value: evidenceExpansionPreviewRows.length > 0 + ? evidenceExpansionPreviewRows.map((row) => row.id).join(", ") + : "not provided", + }, + { + id: "evidence-expansion-gcode-list", + label: "Evidence expansion G-code list", + value: evidenceExpansionPreviewRows.length > 0 + ? evidenceExpansionPreviewRows.map((row) => row.gcodePath).join(", ") + : "not provided", + }, + { + id: "evidence-expansion-source-count-list", + label: "Evidence expansion source count list", + value: evidenceExpansionPreviewRows.length > 0 + ? evidenceExpansionPreviewRows.map((row) => + Array.isArray(row.sourceFiles) ? `${row.sourceFiles.length}` : "0" + ).join(", ") + : "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 66335cc..cca5052 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 @@ -1024,6 +1024,21 @@ TOOL_TABLE = browser-shell-tool.tbl "3", "shell workflow overview release artifact URL workflow evidence expansion preferred source count", ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-candidate-list")?.value, + "woodpecker-on-abort, puma-cube, melfa-example", + "shell workflow overview release artifact URL workflow evidence expansion candidate list", + ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-gcode-list")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc, linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc, linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", + "shell workflow overview release artifact URL workflow evidence expansion gcode list", + ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-source-count-list")?.value, + "3, 3, 3", + "shell workflow overview release artifact URL workflow evidence expansion source count list", + ); 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 e8af5db..504b287 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -675,6 +675,21 @@ "3", "workflow overview release artifact URL workflow evidence expansion preferred source count", ); + assertEqual( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-candidate-list")?.value, + "woodpecker-on-abort, puma-cube, melfa-example", + "workflow overview release artifact URL workflow evidence expansion candidate list", + ); + assertEqual( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-gcode-list")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc, linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc, linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", + "workflow overview release artifact URL workflow evidence expansion gcode list", + ); + assertEqual( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-source-count-list")?.value, + "3, 3, 3", + "workflow overview release artifact URL workflow evidence expansion source count list", + ); assertEqual( releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value, "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", @@ -891,6 +906,21 @@ "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="evidence-expansion-candidate-list"]').textContent, + "woodpecker-on-abort, puma-cube, melfa-example", + "workflow overview fixed URL workflow form evidence expansion candidate list row", + ); + assertEqual( + workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="evidence-expansion-gcode-list"]').textContent, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc, linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc, linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", + "workflow overview fixed URL workflow form evidence expansion gcode list row", + ); + assertEqual( + workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="evidence-expansion-source-count-list"]').textContent, + "3, 3, 3", + "workflow overview fixed URL workflow form evidence expansion source count list 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 30c38ed..fcf8e73 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 @@ -222,6 +222,18 @@ assert.equal( readySummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, "3", ); +assert.equal( + readySummary.rows.find(({ id }) => id === "evidence-expansion-candidate-list")?.value, + "woodpecker-on-abort, puma-cube, melfa-example", +); +assert.equal( + readySummary.rows.find(({ id }) => id === "evidence-expansion-gcode-list")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc, linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc, linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", +); +assert.equal( + readySummary.rows.find(({ id }) => id === "evidence-expansion-source-count-list")?.value, + "3, 3, 3", +); assert.equal( readySummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value, "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", @@ -264,6 +276,9 @@ assert.deepEqual( ["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-candidate-list", "woodpecker-on-abort, puma-cube, melfa-example"], + ["evidence-expansion-gcode-list", "linuxcnc/configs/sim/woodpecker/on_abort.ngc, linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc, linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc"], + ["evidence-expansion-source-count-list", "3, 3, 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 f5f3513..9befc06 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 @@ -502,6 +502,9 @@ assert.deepEqual( ["evidence-expansion-preferred-candidate", "not provided"], ["evidence-expansion-preferred-gcode", "not provided"], ["evidence-expansion-preferred-source-count", "not provided"], + ["evidence-expansion-candidate-list", "not provided"], + ["evidence-expansion-gcode-list", "not provided"], + ["evidence-expansion-source-count-list", "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 a9f57f2..08da8b7 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 @@ -2001,6 +2001,18 @@ assert.equal( releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, "3", ); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-candidate-list")?.value, + "woodpecker-on-abort, puma-cube, melfa-example", +); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-gcode-list")?.value, + "linuxcnc/configs/sim/woodpecker/on_abort.ngc, linuxcnc/configs/sim/axis/vismach/puma/puma_cube.ngc, linuxcnc/configs/sim/axis/vismach/melfa-sim/example.ngc", +); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-source-count-list")?.value, + "3, 3, 3", +); assert.equal( releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "virtual-hal-promotion-candidate-baseline")?.value, "executed=28 passed=28 skipped=131 unexpected_fail=0", @@ -2661,7 +2673,7 @@ const releaseArtifactUrlWorkflowMountResult = rowsNode: releaseArtifactUrlWorkflowRowsNode, }); assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true); -assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 32); +assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 35); assert.equal( releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"), true, @@ -2694,12 +2706,24 @@ assert.equal( releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-preferred-source-count"), true, ); +assert.equal( + releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-candidate-list"), + true, +); +assert.equal( + releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-gcode-list"), + true, +); +assert.equal( + releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-source-count-list"), + true, +); assert.equal( releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"), true, ); assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true); -assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 32); +assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 35); const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({ artifactUrl: "/project-release-readiness.json", fetchRef: async () => ({