展示首个evidence扩展候选

结论:release URL workflow 和 workflow overview 现在展示首个 evidence-expansion 候选 woodpecker-on-abort 的G-code路径与source count;promotion_allowed仍为0,baseline保持28/28/131/0,hard block不解锁。
This commit is contained in:
2026-06-18 20:08:41 +08:00
parent c67bb23e6a
commit 7dcd8da707
7 changed files with 135 additions and 2 deletions

View File

@@ -2844,6 +2844,10 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
const promotionCandidateArtifactSummary = objectOrEmpty(workflow?.validation?.promotionCandidateArtifactSummary); const promotionCandidateArtifactSummary = objectOrEmpty(workflow?.validation?.promotionCandidateArtifactSummary);
const promotionCandidateArtifactSummaryReady = const promotionCandidateArtifactSummaryReady =
workflow?.validation?.promotionCandidateArtifactSummaryReady === true; workflow?.validation?.promotionCandidateArtifactSummaryReady === true;
const evidenceExpansionRows = arrayOrEmpty(
workflow?.diagnosticsArtifact?.virtualHalSimConfigEvidenceExpansion?.rows,
);
const preferredEvidenceExpansion = evidenceExpansionRows[0] ?? {};
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
@@ -2926,6 +2930,23 @@ export function createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel
? (promotionCandidateArtifactSummary.evidenceExpansion.baselineChanging ? "yes" : "no") ? (promotionCandidateArtifactSummary.evidenceExpansion.baselineChanging ? "yes" : "no")
: "not provided", : "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", id: "evidence-expansion-artifact",
label: "Evidence expansion artifact", label: "Evidence expansion artifact",

View File

@@ -2568,6 +2568,14 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo
?? {} ?? {}
); );
const evidenceExpansion = promotionCandidateArtifactSummary.evidenceExpansion ?? {}; 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 ready = workflow?.ready === true;
const promotionFamilyRows = ( const promotionFamilyRows = (
workflow?.validation?.virtualHalPromotionFamilyRows workflow?.validation?.virtualHalPromotionFamilyRows
@@ -2683,6 +2691,23 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo
? "yes" ? "yes"
: (evidenceExpansion.baselineChanging === false ? "no" : "not provided"), : (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", id: "hard-block-runtime-lock",
label: "Hard-block runtime lock", label: "Hard-block runtime lock",

View File

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

View File

@@ -660,6 +660,21 @@
"no", "no",
"workflow overview release artifact URL workflow evidence expansion baseline unchanged", "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( 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",
@@ -861,6 +876,21 @@
"no", "no",
"workflow overview fixed URL workflow form evidence expansion baseline row", "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( 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

@@ -210,6 +210,18 @@ assert.equal(
readySummary.rows.find(({ id }) => id === "evidence-expansion-baseline-changing")?.value, readySummary.rows.find(({ id }) => id === "evidence-expansion-baseline-changing")?.value,
"no", "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( 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",
@@ -249,6 +261,9 @@ assert.deepEqual(
["evidence-expansion-candidates", "13"], ["evidence-expansion-candidates", "13"],
["evidence-expansion-next-evidence", "browser-diagnostics-binding"], ["evidence-expansion-next-evidence", "browser-diagnostics-binding"],
["evidence-expansion-baseline-changing", "no"], ["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"], ["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

@@ -499,6 +499,9 @@ assert.deepEqual(
["evidence-expansion-candidates", "13"], ["evidence-expansion-candidates", "13"],
["evidence-expansion-next-evidence", "browser-diagnostics-binding"], ["evidence-expansion-next-evidence", "browser-diagnostics-binding"],
["evidence-expansion-baseline-changing", "no"], ["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"], ["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

@@ -1989,6 +1989,18 @@ assert.equal(
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-baseline-changing")?.value, releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "evidence-expansion-baseline-changing")?.value,
"no", "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( 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",
@@ -2649,7 +2661,7 @@ const releaseArtifactUrlWorkflowMountResult =
rowsNode: releaseArtifactUrlWorkflowRowsNode, rowsNode: releaseArtifactUrlWorkflowRowsNode,
}); });
assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true); assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true);
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 29); assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 32);
assert.equal( assert.equal(
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"), releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"),
true, true,
@@ -2670,12 +2682,24 @@ assert.equal(
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-baseline-changing"), releaseArtifactUrlWorkflowRenderResult.rowIds.includes("evidence-expansion-baseline-changing"),
true, 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( 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, 29); assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 32);
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({ const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
artifactUrl: "/project-release-readiness.json", artifactUrl: "/project-release-readiness.json",
fetchRef: async () => ({ fetchRef: async () => ({