推进 workflow overview 发布 artifact DOM workflow

This commit is contained in:
2026-06-16 10:03:23 +08:00
parent 23f337834b
commit b63669588c
15 changed files with 644 additions and 4 deletions

View File

@@ -18,6 +18,10 @@
<p data-external-overview-embedding-status>waiting</p>
<dl data-external-overview-embedding-rows></dl>
</section>
<section data-external-release-artifact>
<p data-external-release-artifact-status>waiting</p>
<dl data-external-release-artifact-rows></dl>
</section>
<script type="module">
function assertEqual(actual, expected, label) {
if (actual !== expected) {
@@ -342,6 +346,38 @@ TOOL_TABLE = browser-shell-tool.tbl
},
],
}));
const workflowOverviewReleaseArtifactDisplay = workflowOverviewApi
.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(workflowOverviewReleaseArtifactValidation);
const workflowOverviewReleaseArtifactRenderState = workflowOverviewApi
.getWorkflowOverviewReleaseReadinessArtifactRenderState(workflowOverviewReleaseArtifactDisplay);
const workflowOverviewReleaseArtifactDomContract = workflowOverviewApi
.getWorkflowOverviewReleaseReadinessArtifactDomContract({
rowDatasetPrefix: "externalReleaseArtifact",
selectors: {
mount: "[data-external-release-artifact]",
status: "[data-external-release-artifact-status]",
rows: "[data-external-release-artifact-rows]",
},
});
const workflowOverviewReleaseArtifactDomReadiness = workflowOverviewApi
.getWorkflowOverviewReleaseReadinessArtifactDomReadiness({
contract: workflowOverviewReleaseArtifactDomContract,
documentRef: document,
});
const workflowOverviewReleaseArtifactRenderResult = workflowOverviewApi
.renderWorkflowOverviewReleaseReadinessArtifactState(
workflowOverviewReleaseArtifactRenderState,
{
contract: workflowOverviewReleaseArtifactDomContract,
documentRef: document,
},
);
const workflowOverviewReleaseArtifactMountResult = workflowOverviewApi
.mountWorkflowOverviewReleaseReadinessArtifactState({
renderState: workflowOverviewReleaseArtifactRenderState,
contract: workflowOverviewReleaseArtifactDomContract,
documentRef: document,
});
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
overviewApi: workflowOverviewApi,
});
@@ -413,6 +449,26 @@ TOOL_TABLE = browser-shell-tool.tbl
true,
"shell workflow overview release artifact validation readiness",
);
assertEqual(
workflowOverviewReleaseArtifactDomReadiness.ready,
true,
"shell workflow overview release artifact DOM readiness",
);
assertEqual(
workflowOverviewReleaseArtifactRenderResult.rowCount,
3,
"shell workflow overview release artifact render rows",
);
assertEqual(
workflowOverviewReleaseArtifactMountResult.ready,
true,
"shell workflow overview release artifact mount readiness",
);
assertEqual(
document.querySelector("[data-external-release-artifact-status]").textContent,
"Ready: No blocking reasons",
"shell workflow overview release artifact rendered status",
);
assertEqual(workflowOverviewEmbedding.apiName, "ini-panel-shell-workflow-overview-embedding", "shell workflow overview embedding API");
assertEqual(workflowOverviewEmbedding.renderState.dataset.handoffScope, "workflow", "shell workflow overview embedding scope");
assertEqual(workflowOverviewEmbedding.mountResult.renderResult.rowCount, 8, "shell workflow overview embedding rows");

View File

@@ -35,6 +35,12 @@
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel ||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState ||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomContract ||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomReadiness ||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactState ||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactState ||
!workflowApi?.getWorkflowOverviewDomContract ||
!workflowApi?.getWorkflowOverviewDomReadiness ||
!workflowApi?.renderWorkflowOverview ||
@@ -95,6 +101,14 @@
},
],
}));
const releaseArtifactDisplay = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
releaseArtifactValidation,
);
const releaseArtifactRenderState = workflowApi.getWorkflowOverviewReleaseReadinessArtifactRenderState(
releaseArtifactDisplay,
);
const releaseArtifactDomContract = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomContract();
const releaseArtifactDomReadinessMissing = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomReadiness();
const domContract = workflowApi.getWorkflowOverviewDomContract();
const domReadiness = workflowApi.getWorkflowOverviewDomReadiness();
const renderResult = workflowApi.renderWorkflowOverview();
@@ -147,6 +161,19 @@
);
assertEqual(releaseArtifactValidation.ready, true, "workflow overview release artifact validation readiness");
assertEqual(releaseArtifactValidation.gateCount, 9, "workflow overview release artifact validation gates");
assertEqual(releaseArtifactDisplay.statusText, "Ready", "workflow overview release artifact display status");
assertEqual(releaseArtifactRenderState.statusLine, "Ready: No blocking reasons", "workflow overview release artifact render status");
assertEqual(
releaseArtifactRenderState.dataset.handoffScope,
"workflow-overview-release-readiness-artifact",
"workflow overview release artifact render scope",
);
assertEqual(
releaseArtifactDomContract.selectors.mount,
"[data-workflow-overview-release-readiness-artifact]",
"workflow overview release artifact DOM mount selector",
);
assertEqual(releaseArtifactDomReadinessMissing.ready, false, "workflow overview release artifact missing DOM readiness");
assertEqual(displayViewModel.title, "Shell handoff workflow", "workflow overview display title");
assertEqual(renderState.renderStateVersion, 1, "workflow overview render-state version");
assertEqual(renderState.dataset.handoffScope, "workflow", "workflow overview render-state scope");
@@ -229,6 +256,27 @@
assertEqual(embeddingMountDomMount.renderResult.rowCount, 7, "workflow overview embedding mount DOM mount row count");
assertEqual(embeddingMountDomMount.error, null, "workflow overview embedding mount DOM mount error");
assertEqual(embeddingMountStatus.textContent, embeddingMountRenderState.statusLine, "workflow overview embedding mount rendered status");
const releaseArtifactNode = workflowDoc.createElement("section");
releaseArtifactNode.dataset.workflowOverviewReleaseReadinessArtifact = "";
const releaseArtifactStatus = workflowDoc.createElement("p");
releaseArtifactStatus.dataset.workflowOverviewReleaseReadinessArtifactStatus = "";
const releaseArtifactRows = workflowDoc.createElement("dl");
releaseArtifactRows.dataset.workflowOverviewReleaseReadinessArtifactRows = "";
releaseArtifactNode.append(releaseArtifactStatus, releaseArtifactRows);
workflowDoc.body.append(releaseArtifactNode);
const releaseArtifactDomReadinessReady = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomReadiness();
const releaseArtifactRenderResult = workflowApi.renderWorkflowOverviewReleaseReadinessArtifactState(
releaseArtifactRenderState,
);
const releaseArtifactMountResult = workflowApi.mountWorkflowOverviewReleaseReadinessArtifactState({
renderState: releaseArtifactRenderState,
});
assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness");
assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result");
assertEqual(releaseArtifactRenderResult.rowCount, 3, "workflow overview release artifact render row count");
assertEqual(releaseArtifactMountResult.ready, true, "workflow overview release artifact mount readiness");
assertEqual(releaseArtifactMountResult.renderResult.rowCount, 3, "workflow overview release artifact mount rows");
assertEqual(releaseArtifactStatus.textContent, releaseArtifactRenderState.statusLine, "workflow overview release artifact rendered status");
assertEqual(
workflowDoc.querySelector("[data-handoff-workflow]").dataset.handoffScope,
"workflow",