展示首批evidence扩展候选

结论:release URL workflow 和 workflow overview 现在展示首批3条 evidence-expansion 候选 woodpecker-on-abort、puma-cube、melfa-example 及其G-code/source count;baseline保持28/28/131/0,hard block不解锁。
This commit is contained in:
2026-06-18 20:13:55 +08:00
parent 7dcd8da707
commit f101932bf1
7 changed files with 139 additions and 2 deletions

View File

@@ -2848,6 +2848,7 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
workflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows, workflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows,
); );
const preferredEvidenceExpansion = evidenceExpansionRows[0] ?? {}; const preferredEvidenceExpansion = evidenceExpansionRows[0] ?? {};
const evidenceExpansionPreviewRows = evidenceExpansionRows.slice(0, 3);
const ready = workflow?.ready === true; const ready = workflow?.ready === true;
const statusText = ready ? "Ready" : "Blocked"; const statusText = ready ? "Ready" : "Blocked";
const detailText = ready const detailText = ready
@@ -2947,6 +2948,29 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
? `${preferredEvidenceExpansion.sourceFiles.length}` ? `${preferredEvidenceExpansion.sourceFiles.length}`
: "not provided", : "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", id: "evidence-expansion-artifact",
label: "Evidence expansion artifact", label: "Evidence expansion artifact",

View File

@@ -2576,6 +2576,9 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo
const preferredEvidenceExpansion = Array.isArray(evidenceExpansionRows) const preferredEvidenceExpansion = Array.isArray(evidenceExpansionRows)
? (evidenceExpansionRows[0] ?? {}) ? (evidenceExpansionRows[0] ?? {})
: {}; : {};
const evidenceExpansionPreviewRows = Array.isArray(evidenceExpansionRows)
? evidenceExpansionRows.slice(0, 3)
: [];
const ready = workflow?.ready === true; const ready = workflow?.ready === true;
const promotionFamilyRows = ( const promotionFamilyRows = (
workflow?.validation?.virtualHalPromotionFamilyRows workflow?.validation?.virtualHalPromotionFamilyRows
@@ -2708,6 +2711,29 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo
? `${preferredEvidenceExpansion.sourceFiles.length}` ? `${preferredEvidenceExpansion.sourceFiles.length}`
: "not provided", : "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", id: "hard-block-runtime-lock",
label: "Hard-block runtime lock", label: "Hard-block runtime lock",

View File

@@ -1024,6 +1024,21 @@ TOOL_TABLE = browser-shell-tool.tbl
"3", "3",
"shell workflow overview release artifact URL workflow evidence expansion preferred source count", "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( assertEqual(
workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowIds.includes("hard-block-runtime-lock"), workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowIds.includes("hard-block-runtime-lock"),
true, true,

View File

@@ -675,6 +675,21 @@
"3", "3",
"workflow overview release artifact URL workflow evidence expansion preferred source count", "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( assertEqual(
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value, releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value,
"wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv",
@@ -891,6 +906,21 @@
"3", "3",
"workflow overview fixed URL workflow form evidence expansion preferred source count row", "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( assertEqual(
workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="virtual-hal-promotion-source-file-count"]').textContent, workflowDoc.querySelector('[data-workflow-overview-release-readiness-artifact-url-workflow-value="virtual-hal-promotion-source-file-count"]').textContent,
"17 source files", "17 source files",

View File

@@ -222,6 +222,18 @@ assert.equal(
readySummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, readySummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value,
"3", "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( assert.equal(
readySummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value, readySummary.rows.find(({ id }) => id === "evidence-expansion-artifact")?.value,
"wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv", "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-candidate", "woodpecker-on-abort"],
["evidence-expansion-preferred-gcode", "linuxcnc/configs/sim/woodpecker/on_abort.ngc"], ["evidence-expansion-preferred-gcode", "linuxcnc/configs/sim/woodpecker/on_abort.ngc"],
["evidence-expansion-preferred-source-count", "3"], ["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"], ["evidence-expansion-artifact", "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv"],
["promotion-candidate-allowed", "0"], ["promotion-candidate-allowed", "0"],
...expectedPromotionFamilyRows, ...expectedPromotionFamilyRows,

View File

@@ -502,6 +502,9 @@ assert.deepEqual(
["evidence-expansion-preferred-candidate", "not provided"], ["evidence-expansion-preferred-candidate", "not provided"],
["evidence-expansion-preferred-gcode", "not provided"], ["evidence-expansion-preferred-gcode", "not provided"],
["evidence-expansion-preferred-source-count", "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"], ["evidence-expansion-artifact", "wasm-port/build/wasm/sim-configs-inventory/evidence-expansion-candidates.tsv"],
["promotion-candidate-allowed", "0"], ["promotion-candidate-allowed", "0"],
...expectedPromotionFamilyRows, ...expectedPromotionFamilyRows,

View File

@@ -2001,6 +2001,18 @@ assert.equal(
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value, releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-preferred-source-count")?.value,
"3", "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( assert.equal(
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "virtual-hal-promotion-candidate-baseline")?.value, releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "virtual-hal-promotion-candidate-baseline")?.value,
"executed=28 passed=28 skipped=131 unexpected_fail=0", "executed=28 passed=28 skipped=131 unexpected_fail=0",
@@ -2661,7 +2673,7 @@ const releaseArtifactUrlWorkflowMountResult =
rowsNode: releaseArtifactUrlWorkflowRowsNode, rowsNode: releaseArtifactUrlWorkflowRowsNode,
}); });
assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true); assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true);
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 32); assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 35);
assert.equal( assert.equal(
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"), releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"),
true, true,
@@ -2694,12 +2706,24 @@ assert.equal(
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-preferred-source-count"), releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-preferred-source-count"),
true, 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( assert.equal(
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"), releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
true, true,
); );
assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true); assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true);
assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 32); assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 35);
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({ const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
artifactUrl: "/project-release-readiness.json", artifactUrl: "/project-release-readiness.json",
fetchRef: async () => ({ fetchRef: async () => ({