上传真实浏览器仿真推进
结论:新增 LinuxCNC WASM 驱动的真实浏览器仿真页面,接入 browser smoke、release gate、SDK 与项目交付文档,并完成当前推进批次的验收记录。
This commit is contained in:
@@ -22,6 +22,22 @@
|
||||
<p data-external-release-artifact-status>waiting</p>
|
||||
<dl data-external-release-artifact-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-json-workflow>
|
||||
<p data-external-release-artifact-json-workflow-status>waiting</p>
|
||||
<dl data-external-release-artifact-json-workflow-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-url-workflow>
|
||||
<p data-external-release-artifact-url-workflow-status>waiting</p>
|
||||
<dl data-external-release-artifact-url-workflow-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-gate-execution-summary>
|
||||
<p data-external-release-artifact-gate-execution-summary-status>waiting</p>
|
||||
<dl data-external-release-artifact-gate-execution-summary-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-validation-action-plan>
|
||||
<p data-external-release-artifact-validation-action-plan-status>waiting</p>
|
||||
<dl data-external-release-artifact-validation-action-plan-rows></dl>
|
||||
</section>
|
||||
<script type="module">
|
||||
function assertEqual(actual, expected, label) {
|
||||
if (actual !== expected) {
|
||||
@@ -115,9 +131,36 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
!launchApi?.getWorkflowOverviewContract ||
|
||||
!launchApi?.getWorkflowOverviewReadiness ||
|
||||
!launchApi?.mountWorkflowOverviewEmbedding ||
|
||||
!launchApi?.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!launchApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!launchApi?.getWorkflowOverviewEmbeddingReport ||
|
||||
!launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel ||
|
||||
!launchApi?.getWorkflowOverviewEmbeddingRenderState ||
|
||||
@@ -320,6 +363,77 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
.then((response) => response.text());
|
||||
const workflowOverviewReleaseArtifactValidation = workflowOverviewApi
|
||||
.validateWorkflowOverviewReleaseReadinessArtifactJson(workflowOverviewReleaseArtifactJson);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflow = workflowOverviewApi
|
||||
.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: workflowOverviewReleaseArtifactJson,
|
||||
});
|
||||
const launchReleaseArtifactJsonWorkflow = launchApi
|
||||
.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: workflowOverviewReleaseArtifactJson,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactJsonWorkflowSummary = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
launchReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowActionPlan = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactJsonWorkflowActionPlan = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(
|
||||
launchReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowSummary,
|
||||
);
|
||||
const launchReleaseArtifactJsonWorkflowRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(
|
||||
launchReleaseArtifactJsonWorkflowSummary,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactJsonWorkflow",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-json-workflow]",
|
||||
status: "[data-external-release-artifact-json-workflow-status]",
|
||||
rows: "[data-external-release-artifact-json-workflow-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: workflowOverviewReleaseArtifactJsonWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactJsonWorkflowDomReadiness = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactJsonWorkflowMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: launchReleaseArtifactJsonWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
@@ -328,6 +442,106 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlan = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const launchReleaseArtifactValidationActionPlan = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
workflowOverviewReleaseArtifactValidationActionPlan,
|
||||
);
|
||||
const launchReleaseArtifactValidationActionPlanRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
launchReleaseArtifactValidationActionPlan,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactValidationActionPlan",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-validation-action-plan]",
|
||||
status: "[data-external-release-artifact-validation-action-plan-status]",
|
||||
rows: "[data-external-release-artifact-validation-action-plan-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: workflowOverviewReleaseArtifactValidationActionPlanRenderState,
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactValidationActionPlanMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: launchReleaseArtifactValidationActionPlanRenderState,
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const launchReleaseArtifactGateExecutionSummary = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummary,
|
||||
);
|
||||
const launchReleaseArtifactGateExecutionSummaryRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
launchReleaseArtifactGateExecutionSummary,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactGateExecutionSummary",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-gate-execution-summary]",
|
||||
status: "[data-external-release-artifact-gate-execution-summary-status]",
|
||||
rows: "[data-external-release-artifact-gate-execution-summary-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: workflowOverviewReleaseArtifactGateExecutionSummaryRenderState,
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactGateExecutionSummaryMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: launchReleaseArtifactGateExecutionSummaryRenderState,
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactDisplay = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(workflowOverviewReleaseArtifactValidation);
|
||||
const workflowOverviewReleaseArtifactRenderState = workflowOverviewApi
|
||||
@@ -381,6 +595,64 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(
|
||||
launchReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowActionPlan = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(
|
||||
workflowOverviewReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactUrlWorkflowActionPlan = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(
|
||||
launchReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowSummary,
|
||||
);
|
||||
const launchReleaseArtifactUrlWorkflowRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(
|
||||
launchReleaseArtifactUrlWorkflowSummary,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactUrlWorkflow",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-url-workflow]",
|
||||
status: "[data-external-release-artifact-url-workflow-status]",
|
||||
rows: "[data-external-release-artifact-url-workflow-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: workflowOverviewReleaseArtifactUrlWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactUrlWorkflowMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: launchReleaseArtifactUrlWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactUrlGateExecutionSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactUrlGateExecutionSummary = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(
|
||||
launchReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
|
||||
overviewApi: workflowOverviewApi,
|
||||
});
|
||||
@@ -452,6 +724,86 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
true,
|
||||
"shell workflow overview release artifact validation readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"shell workflow overview release artifact JSON workflow",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflow.statusLine,
|
||||
workflowOverviewReleaseArtifactJsonWorkflow.statusLine,
|
||||
"launch release artifact JSON workflow",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"shell workflow overview release artifact JSON workflow summary",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowSummary.statusLine,
|
||||
workflowOverviewReleaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"launch release artifact JSON workflow summary",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"shell workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
workflowOverviewReleaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"launch release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
"shell workflow overview release artifact JSON workflow render state",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderState.statusLine,
|
||||
"launch release artifact JSON workflow render state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact JSON workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowDomReadiness.ready,
|
||||
true,
|
||||
"launch release artifact JSON workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderResult.rowCount,
|
||||
5,
|
||||
"shell workflow overview release artifact JSON workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderResult.rowIds.includes("gate-execution-summary"),
|
||||
true,
|
||||
"shell workflow overview release artifact JSON workflow gate row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact JSON workflow mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowMountResult.ready,
|
||||
true,
|
||||
"launch release artifact JSON workflow mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-json-workflow-status]").textContent,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"shell workflow overview release artifact JSON workflow rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow.actionPlan.nextCommand,
|
||||
null,
|
||||
"shell workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactSummary.statusLine,
|
||||
"Ready: Artifact evidence complete",
|
||||
@@ -462,6 +814,96 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
workflowOverviewReleaseArtifactSummary.statusLine,
|
||||
"launch release artifact validation summary",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"shell workflow overview release artifact validation action plan",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactValidationActionPlan.shellScript,
|
||||
workflowOverviewReleaseArtifactValidationActionPlan.shellScript,
|
||||
"launch release artifact validation action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"shell workflow overview release artifact validation action-plan render state",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"launch release artifact validation action-plan render state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact validation action-plan DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderResult.rowIds.includes("next-command"),
|
||||
true,
|
||||
"shell workflow overview release artifact validation action-plan next-command row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact validation action-plan mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactValidationActionPlanMountResult.ready,
|
||||
true,
|
||||
"launch release artifact validation action-plan mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-validation-action-plan-status]").textContent,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"shell workflow overview release artifact validation action-plan rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"shell workflow overview release artifact gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactGateExecutionSummary.statusLine,
|
||||
workflowOverviewReleaseArtifactGateExecutionSummary.statusLine,
|
||||
"launch release artifact gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderState.rows.length,
|
||||
17,
|
||||
"shell workflow overview release artifact gate execution summary render rows",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactGateExecutionSummaryRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderState.statusLine,
|
||||
"launch release artifact gate execution summary render-state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact gate execution summary DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderResult.rowIds.includes("gate-ui-node-smokes"),
|
||||
true,
|
||||
"shell workflow overview release artifact gate execution summary SDK row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact gate execution summary mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactGateExecutionSummaryMountResult.ready,
|
||||
true,
|
||||
"launch release artifact gate execution summary mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-gate-execution-summary-status]").textContent,
|
||||
"Ready: All release gate evidence present",
|
||||
"shell workflow overview release artifact gate execution summary rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactDomReadiness.ready,
|
||||
true,
|
||||
@@ -522,6 +964,66 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
workflowOverviewReleaseArtifactUrlWorkflowSummary.statusLine,
|
||||
"launch release artifact URL workflow summary view model",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-url-workflow",
|
||||
"shell workflow overview release artifact URL workflow render-state scope",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlWorkflowRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderState.statusLine,
|
||||
"launch release artifact URL workflow render-state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact URL workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowCount,
|
||||
8,
|
||||
"shell workflow overview release artifact URL workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||
true,
|
||||
"shell workflow overview release artifact URL workflow mount row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact URL workflow DOM mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlWorkflowMountResult.ready,
|
||||
true,
|
||||
"launch release artifact URL workflow DOM mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-url-workflow-status]").textContent,
|
||||
"Ready: Artifact URL workflow complete",
|
||||
"shell workflow overview release artifact URL workflow rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact URL workflow is already ready.\n",
|
||||
"shell workflow overview release artifact URL workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
workflowOverviewReleaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
"launch release artifact URL workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"shell workflow overview release artifact URL gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
workflowOverviewReleaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
"launch release artifact URL gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-status]").textContent,
|
||||
"Ready: No blocking reasons",
|
||||
|
||||
@@ -35,9 +35,36 @@
|
||||
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
|
||||
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
|
||||
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
|
||||
!workflowApi?.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!workflowApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomContract ||
|
||||
@@ -77,8 +104,23 @@
|
||||
const releaseArtifactValidation = workflowApi.validateWorkflowOverviewReleaseReadinessArtifactJson(
|
||||
releaseArtifactJson,
|
||||
);
|
||||
const releaseArtifactJsonWorkflow = workflowApi.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: releaseArtifactJson,
|
||||
});
|
||||
const releaseArtifactJsonWorkflowSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(releaseArtifactJsonWorkflow);
|
||||
const releaseArtifactJsonWorkflowActionPlan = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(releaseArtifactJsonWorkflow);
|
||||
const releaseArtifactJsonWorkflowRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(releaseArtifactJsonWorkflowSummary);
|
||||
const releaseArtifactValidationSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(releaseArtifactValidation);
|
||||
const releaseArtifactValidationActionPlan = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(releaseArtifactValidation);
|
||||
const releaseArtifactValidationActionPlanRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
releaseArtifactValidationActionPlan,
|
||||
);
|
||||
const releaseArtifactDisplay = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||
releaseArtifactValidation,
|
||||
);
|
||||
@@ -87,6 +129,8 @@
|
||||
);
|
||||
const releaseArtifactDomContract = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomContract();
|
||||
const releaseArtifactDomReadinessMissing = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomReadiness();
|
||||
const releaseArtifactJsonWorkflowDomReadinessMissing = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness();
|
||||
const domContract = workflowApi.getWorkflowOverviewDomContract();
|
||||
const domReadiness = workflowApi.getWorkflowOverviewDomReadiness();
|
||||
const renderResult = workflowApi.renderWorkflowOverview();
|
||||
@@ -138,7 +182,7 @@
|
||||
"workflow overview release artifact validation API name",
|
||||
);
|
||||
assertEqual(releaseArtifactValidation.ready, true, "workflow overview release artifact validation readiness");
|
||||
assertEqual(releaseArtifactValidation.gateCount, 11, "workflow overview release artifact validation gates");
|
||||
assertEqual(releaseArtifactValidation.gateCount, 12, "workflow overview release artifact validation gates");
|
||||
assertEqual(
|
||||
releaseArtifactValidationSummary.statusLine,
|
||||
"Ready: Artifact evidence complete",
|
||||
@@ -254,12 +298,102 @@
|
||||
const releaseArtifactMountResult = workflowApi.mountWorkflowOverviewReleaseReadinessArtifactState({
|
||||
renderState: releaseArtifactRenderState,
|
||||
});
|
||||
const releaseArtifactValidationActionPlanNode = workflowDoc.createElement("section");
|
||||
releaseArtifactValidationActionPlanNode.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlan = "";
|
||||
const releaseArtifactValidationActionPlanStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactValidationActionPlanStatus.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlanStatus = "";
|
||||
const releaseArtifactValidationActionPlanRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactValidationActionPlanRows.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlanRows = "";
|
||||
releaseArtifactValidationActionPlanNode.append(
|
||||
releaseArtifactValidationActionPlanStatus,
|
||||
releaseArtifactValidationActionPlanRows,
|
||||
);
|
||||
workflowDoc.body.append(releaseArtifactValidationActionPlanNode);
|
||||
const releaseArtifactValidationActionPlanDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness();
|
||||
const releaseArtifactValidationActionPlanRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
||||
releaseArtifactValidationActionPlanRenderState,
|
||||
);
|
||||
const releaseArtifactValidationActionPlanMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: releaseArtifactValidationActionPlanRenderState,
|
||||
});
|
||||
const releaseArtifactJsonWorkflowNode = workflowDoc.createElement("section");
|
||||
releaseArtifactJsonWorkflowNode.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflow = "";
|
||||
const releaseArtifactJsonWorkflowStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactJsonWorkflowStatus.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflowStatus = "";
|
||||
const releaseArtifactJsonWorkflowRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactJsonWorkflowRows.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflowRows = "";
|
||||
releaseArtifactJsonWorkflowNode.append(releaseArtifactJsonWorkflowStatus, releaseArtifactJsonWorkflowRows);
|
||||
workflowDoc.body.append(releaseArtifactJsonWorkflowNode);
|
||||
const releaseArtifactJsonWorkflowDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness();
|
||||
const releaseArtifactJsonWorkflowRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
||||
releaseArtifactJsonWorkflowRenderState,
|
||||
);
|
||||
const releaseArtifactJsonWorkflowMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: releaseArtifactJsonWorkflowRenderState,
|
||||
});
|
||||
const releaseArtifactUrlWorkflow = await workflowApi.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
||||
mount: true,
|
||||
});
|
||||
const releaseArtifactUrlWorkflowSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(releaseArtifactUrlWorkflow);
|
||||
const releaseArtifactUrlWorkflowActionPlan = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(releaseArtifactUrlWorkflow);
|
||||
const releaseArtifactUrlWorkflowRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(releaseArtifactUrlWorkflowSummary);
|
||||
const releaseArtifactUrlWorkflowNode = workflowDoc.createElement("section");
|
||||
releaseArtifactUrlWorkflowNode.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflow = "";
|
||||
const releaseArtifactUrlWorkflowStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactUrlWorkflowStatus.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflowStatus = "";
|
||||
const releaseArtifactUrlWorkflowRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactUrlWorkflowRows.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflowRows = "";
|
||||
releaseArtifactUrlWorkflowNode.append(releaseArtifactUrlWorkflowStatus, releaseArtifactUrlWorkflowRows);
|
||||
workflowDoc.body.append(releaseArtifactUrlWorkflowNode);
|
||||
const releaseArtifactUrlWorkflowDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness();
|
||||
const releaseArtifactUrlWorkflowRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
||||
releaseArtifactUrlWorkflowRenderState,
|
||||
);
|
||||
const releaseArtifactUrlWorkflowMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: releaseArtifactUrlWorkflowRenderState,
|
||||
});
|
||||
const releaseArtifactGateExecutionSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(releaseArtifactValidation);
|
||||
const releaseArtifactGateExecutionSummaryRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
releaseArtifactGateExecutionSummary,
|
||||
);
|
||||
const releaseArtifactGateExecutionSummaryNode = workflowDoc.createElement("section");
|
||||
releaseArtifactGateExecutionSummaryNode.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummary = "";
|
||||
const releaseArtifactGateExecutionSummaryStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactGateExecutionSummaryStatus.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummaryStatus = "";
|
||||
const releaseArtifactGateExecutionSummaryRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactGateExecutionSummaryRows.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummaryRows = "";
|
||||
releaseArtifactGateExecutionSummaryNode.append(
|
||||
releaseArtifactGateExecutionSummaryStatus,
|
||||
releaseArtifactGateExecutionSummaryRows,
|
||||
);
|
||||
workflowDoc.body.append(releaseArtifactGateExecutionSummaryNode);
|
||||
const releaseArtifactGateExecutionSummaryDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness();
|
||||
const releaseArtifactGateExecutionSummaryRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
||||
releaseArtifactGateExecutionSummaryRenderState,
|
||||
);
|
||||
const releaseArtifactGateExecutionSummaryMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: releaseArtifactGateExecutionSummaryRenderState,
|
||||
});
|
||||
const releaseArtifactUrlGateExecutionSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(releaseArtifactUrlWorkflow);
|
||||
assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness");
|
||||
assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result");
|
||||
assertEqual(releaseArtifactRenderResult.rowCount, 8, "workflow overview release artifact render row count");
|
||||
@@ -275,6 +409,36 @@
|
||||
);
|
||||
assertEqual(releaseArtifactMountResult.ready, true, "workflow overview release artifact mount readiness");
|
||||
assertEqual(releaseArtifactMountResult.renderResult.rowCount, 8, "workflow overview release artifact mount rows");
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowDomReadinessMissing.missing.join(","),
|
||||
"mount,status,rows",
|
||||
"workflow overview release artifact JSON workflow missing DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact JSON workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowRenderResult.rowCount,
|
||||
5,
|
||||
"workflow overview release artifact JSON workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowRenderResult.rowIds.includes("gate-execution-summary"),
|
||||
true,
|
||||
"workflow overview release artifact JSON workflow gate row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact JSON workflow mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowStatus.textContent,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"workflow overview release artifact JSON workflow rendered status",
|
||||
);
|
||||
assertEqual(releaseArtifactUrlWorkflow.ready, true, "workflow overview release artifact URL workflow readiness");
|
||||
assertEqual(releaseArtifactUrlWorkflow.httpStatus, 200, "workflow overview release artifact URL workflow status");
|
||||
assertEqual(
|
||||
@@ -287,6 +451,136 @@
|
||||
"Ready: Artifact URL workflow complete",
|
||||
"workflow overview release artifact URL workflow summary view model",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-url-workflow",
|
||||
"workflow overview release artifact URL workflow render scope",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact URL workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowRenderResult.rowCount,
|
||||
8,
|
||||
"workflow overview release artifact URL workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||
true,
|
||||
"workflow overview release artifact URL workflow mount row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact URL workflow DOM mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowStatus.textContent,
|
||||
"Ready: Artifact URL workflow complete",
|
||||
"workflow overview release artifact URL workflow rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflow.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"workflow overview release artifact JSON workflow",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"workflow overview release artifact JSON workflow summary",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
"workflow overview release artifact JSON workflow render state scope",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflow.gateExecutionSummaryViewModel.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact JSON workflow gate summary",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflow.actionPlan.nextCommand,
|
||||
null,
|
||||
"workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact URL workflow is already ready.\n",
|
||||
"workflow overview release artifact URL workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"workflow overview release artifact validation action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"workflow overview release artifact validation action-plan render state",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact validation action-plan DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanRenderResult.rowIds.includes("next-command"),
|
||||
true,
|
||||
"workflow overview release artifact validation action-plan next-command row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact validation action-plan mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanStatus.textContent,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"workflow overview release artifact validation action-plan rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryRenderState.rows.length,
|
||||
17,
|
||||
"workflow overview release artifact gate execution summary render rows",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact gate execution summary DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryRenderResult.rowIds.includes("gate-ui-node-smokes"),
|
||||
true,
|
||||
"workflow overview release artifact gate execution summary SDK row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact gate execution summary mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryStatus.textContent,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact gate execution summary rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact URL gate execution summary",
|
||||
);
|
||||
assertEqual(releaseArtifactUrlWorkflow.mountResult.ready, true, "workflow overview release artifact URL workflow mount");
|
||||
assertEqual(releaseArtifactStatus.textContent, releaseArtifactRenderState.statusLine, "workflow overview release artifact rendered status");
|
||||
assertEqual(
|
||||
|
||||
83
wasm-port/tests/browser/real_simulation_page_smoke.html
Normal file
83
wasm-port/tests/browser/real_simulation_page_smoke.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>LinuxCNC Real Simulation Page Smoke</title>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="status">running</pre>
|
||||
<script type="module">
|
||||
const status = document.getElementById("status");
|
||||
|
||||
async function loadFrame(src) {
|
||||
const frame = document.createElement("iframe");
|
||||
frame.src = src;
|
||||
frame.width = "1280";
|
||||
frame.height = "800";
|
||||
document.body.appendChild(frame);
|
||||
await new Promise((resolve, reject) => {
|
||||
frame.addEventListener("load", resolve, { once: true });
|
||||
frame.addEventListener("error", reject, { once: true });
|
||||
});
|
||||
return frame;
|
||||
}
|
||||
|
||||
async function waitForState(frame) {
|
||||
for (let i = 0; i < 200; i += 1) {
|
||||
const state = frame.contentWindow?.linuxCncRealSimulationState;
|
||||
if (state?.summary?.ready) {
|
||||
return state;
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||
}
|
||||
throw new Error("real simulation page did not expose ready state");
|
||||
}
|
||||
|
||||
try {
|
||||
const frame = await loadFrame("../../runtime/ui/simulation/index.html");
|
||||
const doc = frame.contentDocument;
|
||||
const state = await waitForState(frame);
|
||||
const polyline = doc.querySelector("[data-toolpath-polyline]");
|
||||
const rows = [...doc.querySelectorAll("[data-motion-row]")];
|
||||
const programRows = [...doc.querySelectorAll("[data-program-line]")];
|
||||
const canonicalOutput = doc.querySelector("[data-canonical-output]")?.textContent ?? "";
|
||||
|
||||
if (doc.body.dataset.simulationReady !== "true") {
|
||||
throw new Error("simulation body readiness flag not true");
|
||||
}
|
||||
if (state.apiName !== "real-browser-simulation-state") {
|
||||
throw new Error("simulation state API name drift");
|
||||
}
|
||||
if (state.summary.motionEventCount < 5) {
|
||||
throw new Error("simulation motion event count too low");
|
||||
}
|
||||
if (!canonicalOutput.includes("canon_event=STRAIGHT_FEED line=2 x=1 y=0 z=0")) {
|
||||
throw new Error("simulation canonical output missing LinuxCNC feed event");
|
||||
}
|
||||
if (!polyline?.getAttribute("points")?.includes("1,0")) {
|
||||
throw new Error("simulation toolpath polyline missing expected point");
|
||||
}
|
||||
if (rows.length !== state.motion.length) {
|
||||
throw new Error("simulation motion table row count drift");
|
||||
}
|
||||
if (programRows.length < 6) {
|
||||
throw new Error("simulation program rows missing");
|
||||
}
|
||||
if (doc.querySelector('[data-axis="x"]')?.textContent !== "0.000") {
|
||||
throw new Error("simulation final X axis drift");
|
||||
}
|
||||
if (doc.querySelector('[data-axis="y"]')?.textContent !== "0.000") {
|
||||
throw new Error("simulation final Y axis drift");
|
||||
}
|
||||
if (!doc.querySelector("[data-toolpath-svg]")?.getAttribute("viewBox")) {
|
||||
throw new Error("simulation SVG viewBox missing");
|
||||
}
|
||||
|
||||
status.textContent = "browser_real_simulation_page_smoke=ok";
|
||||
} catch (error) {
|
||||
status.textContent = `browser_real_simulation_page_smoke=fail ${error.stack || error.message}`;
|
||||
throw error;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,7 +68,7 @@
|
||||
);
|
||||
assertEqual(readyWorkflow.ready, true, "ready workflow readiness");
|
||||
assertEqual(readyWorkflow.httpStatus, 200, "ready workflow HTTP status");
|
||||
assertEqual(readyWorkflow.validation.gateCount, 11, "ready workflow gate count");
|
||||
assertEqual(readyWorkflow.validation.gateCount, 12, "ready workflow gate count");
|
||||
assertEqual(
|
||||
readyWorkflow.validationSummaryViewModel.statusLine,
|
||||
"Ready: Artifact evidence complete",
|
||||
|
||||
78
wasm-port/tests/browser/verify_real_simulation_browser.sh
Executable file
78
wasm-port/tests/browser/verify_real_simulation_browser.sh
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
CHROMIUM="${CHROMIUM:-$(command -v chromium || command -v chromium-browser || command -v google-chrome || command -v google-chrome-stable || true)}"
|
||||
|
||||
if [[ -z "$CHROMIUM" ]]; then
|
||||
echo "missing Chromium-compatible browser; set CHROMIUM=/path/to/browser" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${SKIP_INTERP_BUILD:-0}" != "1" ]]; then
|
||||
"$ROOT_DIR/tools/build_wasm_core.sh"
|
||||
fi
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
PORT_FILE="$TMP_DIR/port"
|
||||
SERVER_LOG="$TMP_DIR/server.log"
|
||||
CHROME_PROFILE="$TMP_DIR/chrome-profile"
|
||||
mkdir -p "$CHROME_PROFILE"
|
||||
|
||||
cleanup() {
|
||||
if [[ -n "${SERVER_PID:-}" ]]; then
|
||||
kill "$SERVER_PID" 2>/dev/null || true
|
||||
wait "$SERVER_PID" 2>/dev/null || true
|
||||
fi
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
python3 - <<'PY' "$ROOT_DIR" "$PORT_FILE" >"$SERVER_LOG" 2>&1 &
|
||||
import functools
|
||||
import http.server
|
||||
import pathlib
|
||||
import socketserver
|
||||
import sys
|
||||
|
||||
root = pathlib.Path(sys.argv[1])
|
||||
port_file = pathlib.Path(sys.argv[2])
|
||||
|
||||
handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=str(root))
|
||||
with socketserver.TCPServer(("127.0.0.1", 0), handler) as httpd:
|
||||
port_file.write_text(str(httpd.server_address[1]), encoding="ascii")
|
||||
httpd.serve_forever()
|
||||
PY
|
||||
SERVER_PID=$!
|
||||
|
||||
for _ in $(seq 1 100); do
|
||||
[[ -s "$PORT_FILE" ]] && break
|
||||
sleep 0.05
|
||||
done
|
||||
|
||||
if [[ ! -s "$PORT_FILE" ]]; then
|
||||
echo "real simulation browser smoke HTTP server did not start" >&2
|
||||
cat "$SERVER_LOG" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PORT="$(cat "$PORT_FILE")"
|
||||
URL="http://127.0.0.1:$PORT/tests/browser/real_simulation_page_smoke.html"
|
||||
OUT="$TMP_DIR/chromium-real-simulation.out"
|
||||
|
||||
"$CHROMIUM" \
|
||||
--headless=new \
|
||||
--disable-gpu \
|
||||
--no-sandbox \
|
||||
--user-data-dir="$CHROME_PROFILE" \
|
||||
--virtual-time-budget=10000 \
|
||||
--dump-dom \
|
||||
"$URL" >"$OUT" 2>&1
|
||||
|
||||
if ! grep -Fq "browser_real_simulation_page_smoke=ok" "$OUT"; then
|
||||
echo "browser real simulation page smoke failed" >&2
|
||||
sed -n '1,260p' "$OUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "browser_real_simulation_page_smoke=ok"
|
||||
@@ -14,6 +14,10 @@ const handoffText = readFileSync(resolve(root, "docs/project-release-handoff.md"
|
||||
const readmeText = readFileSync(resolve(root, "README.md"), "utf8");
|
||||
const panelEntryText = readFileSync(resolve(root, "docs/panel-entry.md"), "utf8");
|
||||
const sdkReadmeText = readFileSync(resolve(root, "runtime/sdk/README.md"), "utf8");
|
||||
const realBrowserSimulationPriorityText = readFileSync(
|
||||
resolve(root, "docs/real-browser-simulation-priority.md"),
|
||||
"utf8",
|
||||
);
|
||||
const sourceReuseText = readFileSync(resolve(root, "docs/source-reuse-map.md"), "utf8");
|
||||
const driftText = readFileSync(resolve(root, "docs/drift-report.md"), "utf8");
|
||||
const hostSmokeText = readFileSync(resolve(root, "tests/host/verify_host_smokes.sh"), "utf8");
|
||||
@@ -25,12 +29,18 @@ for (const phrase of [
|
||||
"docs/panel-entry.md",
|
||||
"runtime/sdk/README.md",
|
||||
"docs/opfs-session-persistence.md",
|
||||
"docs/real-browser-simulation-priority.md",
|
||||
"docs/sim-configs-coverage-handoff.md",
|
||||
"docs/host-runtime-boundary-handoff.md",
|
||||
"docs/source-reuse-map.md",
|
||||
"docs/drift-report.md",
|
||||
"PROJECT_COMPLETION_TRACKER.md",
|
||||
"runtime/sdk/src/index.js",
|
||||
"real browser CNC simulation page",
|
||||
"runtime/ui/simulation/index.html",
|
||||
"verify_real_simulation_browser.sh",
|
||||
"LinuxCNC-backed interpreter execution",
|
||||
"toolpath/preview area",
|
||||
"createProjectReleaseGateManifest()",
|
||||
"createProjectReleaseGateResultMatrix()",
|
||||
"createProjectReleaseGateActionPlan()",
|
||||
@@ -46,9 +56,48 @@ for (const phrase of [
|
||||
"loadProjectReleaseReadinessArtifactUrlWorkflow()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceCapabilityMatrix()",
|
||||
"createProjectBatchAcceptanceWorkflow()",
|
||||
"createProjectBatchAcceptanceChecklist()",
|
||||
"createProjectBatchAcceptanceReport()",
|
||||
"createProjectBatchAcceptanceReportValidation()",
|
||||
"createProjectBatchAcceptanceReportValidationSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportValidationActionPlan()",
|
||||
"createProjectBatchAcceptanceReportJsonWorkflow()",
|
||||
"loadProjectBatchAcceptanceReportUrlWorkflow()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowActionPlan()",
|
||||
"write_project_batch_acceptance_artifact.mjs",
|
||||
"verify_project_batch_acceptance_artifact.sh",
|
||||
"embedded gate manifest, execution manifest, result matrix, and",
|
||||
"validateWorkflowOverviewReleaseReadinessArtifactJson()",
|
||||
"runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"loadWorkflowOverviewReleaseReadinessArtifactUrl()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()",
|
||||
"render-state",
|
||||
"DOM readiness",
|
||||
@@ -61,15 +110,21 @@ for (const phrase of [
|
||||
"build/project-release-readiness.json",
|
||||
"verify_project_release_readiness_artifact.sh",
|
||||
"verify_project_release_artifact_url_workflow.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_real_browser_simulation_priority_docs.sh",
|
||||
"verify_opfs_session_workflow_browser.sh",
|
||||
"host_wasm_opfs_browser_smokes=ok",
|
||||
"project_release_readiness_artifact_node_smoke=ok",
|
||||
"project_release_artifact_url_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_artifact_node_smoke=ok",
|
||||
"real_browser_simulation_priority_docs_node_smoke=ok",
|
||||
"project_release_gate=ok",
|
||||
"sim_configs_wasm_node_inventory_unexpected_fail=0",
|
||||
"browser_ini_shell_integration_workflow_smoke=ok",
|
||||
"browser_opfs_session_workflow_smoke=ok",
|
||||
"browser_release_artifact_url_workflow_smoke=ok",
|
||||
"browser_real_simulation_page_smoke=ok",
|
||||
"project_release_handoff_docs_node_smoke=ok",
|
||||
"L4-USER-M-PROCESS",
|
||||
"L4-TOOL-DB",
|
||||
@@ -80,7 +135,9 @@ for (const phrase of [
|
||||
|
||||
for (const phrase of [
|
||||
"docs/project-release-handoff.md",
|
||||
"docs/real-browser-simulation-priority.md",
|
||||
"project_release_handoff_docs_node_smoke=ok",
|
||||
"real_browser_simulation_priority_docs_node_smoke=ok",
|
||||
]) {
|
||||
assert.match(readmeText, literalRegExp(phrase));
|
||||
assert.match(hostSmokeText, literalRegExp("verify_project_release_handoff_docs.sh"));
|
||||
@@ -95,11 +152,15 @@ for (const phrase of [
|
||||
"verify_ini_panel_browser.sh",
|
||||
"verify_opfs_session_workflow_browser.sh",
|
||||
"verify_release_artifact_url_workflow_browser.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_real_browser_simulation_priority_docs.sh",
|
||||
"verify_ui_node_smokes.sh",
|
||||
"verify_host_smokes.sh",
|
||||
"write_project_release_readiness_artifact.mjs",
|
||||
"verify_project_release_readiness_artifact.sh",
|
||||
"verify_project_release_artifact_url_workflow.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_real_browser_simulation_priority_docs.sh",
|
||||
"project_release_gate=ok",
|
||||
]) {
|
||||
assert.match(projectReleaseGateText, literalRegExp(phrase));
|
||||
@@ -136,8 +197,51 @@ for (const phrase of [
|
||||
"loadProjectReleaseReadinessArtifactUrlWorkflow()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceCapabilityMatrix()",
|
||||
"createProjectBatchAcceptanceWorkflow()",
|
||||
"createProjectBatchAcceptanceChecklist()",
|
||||
"createProjectBatchAcceptanceReport()",
|
||||
"createProjectBatchAcceptanceReportValidation()",
|
||||
"createProjectBatchAcceptanceReportValidationSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportValidationActionPlan()",
|
||||
"createProjectBatchAcceptanceReportJsonWorkflow()",
|
||||
"loadProjectBatchAcceptanceReportUrlWorkflow()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowActionPlan()",
|
||||
"createProjectBatchAcceptanceSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"verify_project_release_artifact_url_workflow.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_project_batch_acceptance_artifact.sh",
|
||||
"project_release_artifact_url_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_artifact_node_smoke=ok",
|
||||
"build/project-release-readiness.json",
|
||||
"INI panel shell handoff exports",
|
||||
"createIniPanelShellApiSurfaceInventory()",
|
||||
@@ -148,7 +252,10 @@ for (const phrase of [
|
||||
|
||||
assert.match(sourceReuseText, literalRegExp("docs/project-release-handoff.md"));
|
||||
assert.match(driftText, literalRegExp("docs/project-release-handoff.md"));
|
||||
assert.match(realBrowserSimulationPriorityText, literalRegExp("first priority is to deliver a real browser CNC simulation page"));
|
||||
assert.match(realBrowserSimulationPriorityText, literalRegExp("must not implement CNC semantics in JavaScript"));
|
||||
assert.match(trackerText, /Documentation\/release gate/);
|
||||
assert.match(trackerText, /Real browser simulation priority/);
|
||||
assert.match(trackerText, /Project release gate wrapper/);
|
||||
assert.match(trackerText, /Final Acceptance Checklist/);
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const root = resolve(__dirname, "../../..");
|
||||
|
||||
function literalRegExp(text) {
|
||||
return new RegExp(text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
||||
}
|
||||
|
||||
const priorityText = readFileSync(resolve(root, "docs/real-browser-simulation-priority.md"), "utf8");
|
||||
const handoffText = readFileSync(resolve(root, "docs/project-release-handoff.md"), "utf8");
|
||||
const readmeText = readFileSync(resolve(root, "README.md"), "utf8");
|
||||
const trackerText = readFileSync(resolve(root, "../PROJECT_COMPLETION_TRACKER.md"), "utf8");
|
||||
const hostSmokeText = readFileSync(resolve(root, "tests/host/verify_host_smokes.sh"), "utf8");
|
||||
const releaseGateText = readFileSync(resolve(root, "tests/host/verify_project_release_gate.sh"), "utf8");
|
||||
const simulationHtmlText = readFileSync(resolve(root, "runtime/ui/simulation/index.html"), "utf8");
|
||||
const simulationSmokeText = readFileSync(resolve(root, "tests/browser/verify_real_simulation_browser.sh"), "utf8");
|
||||
|
||||
for (const phrase of [
|
||||
"Real Browser Simulation Priority",
|
||||
"first priority is to deliver a real browser CNC simulation page",
|
||||
"machine/session loader",
|
||||
"G-code program view",
|
||||
"LinuxCNC-backed interpreter execution",
|
||||
"toolpath/preview area",
|
||||
"browser smoke coverage",
|
||||
"must not implement CNC semantics in JavaScript",
|
||||
"vendored LinuxCNC source",
|
||||
"wasm-port/tests/docs/node/verify_real_browser_simulation_priority_docs.sh",
|
||||
"runtime/ui/simulation/index.html",
|
||||
"wasm-port/tests/browser/verify_real_simulation_browser.sh",
|
||||
]) {
|
||||
assert.match(priorityText, literalRegExp(phrase));
|
||||
}
|
||||
|
||||
for (const text of [handoffText, readmeText, trackerText]) {
|
||||
assert.match(text, literalRegExp("docs/real-browser-simulation-priority.md"));
|
||||
assert.match(text, /real browser CNC simulation page|真实 UI\/browser 数控仿真页面/);
|
||||
assert.match(text, /LinuxCNC semantic boundary|LinuxCNC 语义边界|LinuxCNC-backed/);
|
||||
}
|
||||
|
||||
assert.match(hostSmokeText, /verify_real_browser_simulation_priority_docs\.sh/);
|
||||
assert.match(hostSmokeText, /verify_real_simulation_browser\.sh/);
|
||||
assert.match(releaseGateText, /verify_real_simulation_browser\.sh/);
|
||||
assert.match(simulationHtmlText, /LinuxCNC Browser Simulation/);
|
||||
assert.match(simulationHtmlText, /data-toolpath-svg/);
|
||||
assert.match(simulationHtmlText, /data-program-lines/);
|
||||
assert.match(simulationSmokeText, /browser_real_simulation_page_smoke=ok/);
|
||||
|
||||
console.log("real_browser_simulation_priority_docs_node_smoke=ok");
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../../.." && pwd)"
|
||||
|
||||
node "$ROOT_DIR/tests/docs/node/verify_real_browser_simulation_priority_docs.mjs"
|
||||
@@ -25,7 +25,7 @@
|
||||
"gateManifest": {
|
||||
"apiName": "project-release-gate-manifest",
|
||||
"manifestVersion": 1,
|
||||
"gateCount": 11,
|
||||
"gateCount": 12,
|
||||
"gateIds": [
|
||||
"diff-check",
|
||||
"vendor-sync",
|
||||
@@ -35,6 +35,7 @@
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"release-artifact-url-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate"
|
||||
@@ -88,6 +89,12 @@
|
||||
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh",
|
||||
"expectedOutput": "browser_release_artifact_url_workflow_smoke=ok"
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok"
|
||||
},
|
||||
{
|
||||
"id": "ui-node-smokes",
|
||||
"label": "UI Node smokes",
|
||||
@@ -113,14 +120,14 @@
|
||||
"manifestVersion": 1,
|
||||
"phase": "ready",
|
||||
"ready": true,
|
||||
"gateCount": 11,
|
||||
"passedCount": 11,
|
||||
"gateCount": 12,
|
||||
"passedCount": 12,
|
||||
"unknownCount": 0,
|
||||
"missingGateIds": [],
|
||||
"manifest": {
|
||||
"apiName": "project-release-gate-manifest",
|
||||
"manifestVersion": 1,
|
||||
"gateCount": 11,
|
||||
"gateCount": 12,
|
||||
"gateIds": [
|
||||
"diff-check",
|
||||
"vendor-sync",
|
||||
@@ -130,6 +137,7 @@
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"release-artifact-url-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate"
|
||||
@@ -183,6 +191,12 @@
|
||||
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh",
|
||||
"expectedOutput": "browser_release_artifact_url_workflow_smoke=ok"
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok"
|
||||
},
|
||||
{
|
||||
"id": "ui-node-smokes",
|
||||
"label": "UI Node smokes",
|
||||
@@ -210,7 +224,7 @@
|
||||
"command": "git diff --check",
|
||||
"expectedOutput": null,
|
||||
"observedOutput": null,
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "explicit-result"
|
||||
@@ -221,7 +235,7 @@
|
||||
"command": "wasm-port/tools/verify_vendor_sync.sh",
|
||||
"expectedOutput": "vendor sync up to date",
|
||||
"observedOutput": "vendor sync up to date",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -232,7 +246,7 @@
|
||||
"command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh",
|
||||
"expectedOutput": "standalone CNC semantics guard complete",
|
||||
"observedOutput": "standalone CNC semantics guard complete",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -243,7 +257,7 @@
|
||||
"command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh",
|
||||
"expectedOutput": "interp_wasm_node_smoke=ok",
|
||||
"observedOutput": "interp_wasm_node_smoke=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -254,7 +268,7 @@
|
||||
"command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh",
|
||||
"expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0",
|
||||
"observedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -265,7 +279,7 @@
|
||||
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh",
|
||||
"expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok",
|
||||
"observedOutput": "browser_ini_shell_integration_workflow_smoke=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -276,7 +290,7 @@
|
||||
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh",
|
||||
"expectedOutput": "browser_opfs_session_workflow_smoke=ok",
|
||||
"observedOutput": "browser_opfs_session_workflow_smoke=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -287,7 +301,18 @@
|
||||
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh",
|
||||
"expectedOutput": "browser_release_artifact_url_workflow_smoke=ok",
|
||||
"observedOutput": "browser_release_artifact_url_workflow_smoke=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"observedOutput": "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -298,7 +323,7 @@
|
||||
"command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh",
|
||||
"expectedOutput": "ui_node_smokes=ok",
|
||||
"observedOutput": "ui_node_smokes=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -309,7 +334,7 @@
|
||||
"command": "wasm-port/tests/host/verify_host_smokes.sh",
|
||||
"expectedOutput": "host_wasm_opfs_browser_smokes=ok",
|
||||
"observedOutput": "host_wasm_opfs_browser_smokes=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -320,7 +345,7 @@
|
||||
"command": "wasm-port/tests/host/verify_project_release_gate.sh",
|
||||
"expectedOutput": "project_release_gate=ok",
|
||||
"observedOutput": "project_release_gate=ok",
|
||||
"observedOutputCount": 10,
|
||||
"observedOutputCount": 11,
|
||||
"status": "passed",
|
||||
"passed": true,
|
||||
"evidence": "expected-output"
|
||||
@@ -336,20 +361,20 @@
|
||||
"statusText": "Ready",
|
||||
"detailText": "All release gate evidence present",
|
||||
"statusLine": "Ready: All release gate evidence present",
|
||||
"gateCount": 11,
|
||||
"passedCount": 11,
|
||||
"gateCount": 12,
|
||||
"passedCount": 12,
|
||||
"unknownCount": 0,
|
||||
"missingGateIds": [],
|
||||
"nextGateId": null,
|
||||
"evidenceCounts": {
|
||||
"explicit-result": 1,
|
||||
"expected-output": 10
|
||||
"expected-output": 11
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"id": "gate-results",
|
||||
"label": "Release gate evidence",
|
||||
"value": "11/11 passed"
|
||||
"value": "12/12 passed"
|
||||
},
|
||||
{
|
||||
"id": "unknown-gates",
|
||||
@@ -364,7 +389,7 @@
|
||||
{
|
||||
"id": "expected-output-evidence",
|
||||
"label": "Expected-output evidence",
|
||||
"value": "10"
|
||||
"value": "11"
|
||||
},
|
||||
{
|
||||
"id": "explicit-result-evidence",
|
||||
@@ -458,6 +483,16 @@
|
||||
"status": "passed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"observedOutput": "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"evidence": "expected-output",
|
||||
"status": "passed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "ui-node-smokes",
|
||||
"label": "UI Node smokes",
|
||||
@@ -495,14 +530,14 @@
|
||||
"matrixVersion": 1,
|
||||
"phase": "ready",
|
||||
"ready": true,
|
||||
"gateCount": 11,
|
||||
"passedCount": 11,
|
||||
"gateCount": 12,
|
||||
"passedCount": 12,
|
||||
"unknownCount": 0,
|
||||
"missingGateIds": [],
|
||||
"manifest": {
|
||||
"apiName": "project-release-gate-manifest",
|
||||
"manifestVersion": 1,
|
||||
"gateCount": 11,
|
||||
"gateCount": 12,
|
||||
"gateIds": [
|
||||
"diff-check",
|
||||
"vendor-sync",
|
||||
@@ -512,6 +547,7 @@
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"release-artifact-url-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate"
|
||||
@@ -565,6 +601,12 @@
|
||||
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh",
|
||||
"expectedOutput": "browser_release_artifact_url_workflow_smoke=ok"
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok"
|
||||
},
|
||||
{
|
||||
"id": "ui-node-smokes",
|
||||
"label": "UI Node smokes",
|
||||
@@ -650,6 +692,14 @@
|
||||
"status": "passed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"status": "passed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "ui-node-smokes",
|
||||
"label": "UI Node smokes",
|
||||
@@ -681,8 +731,8 @@
|
||||
"planVersion": 1,
|
||||
"phase": "ready",
|
||||
"ready": true,
|
||||
"gateCount": 11,
|
||||
"completedCount": 11,
|
||||
"gateCount": 12,
|
||||
"completedCount": 12,
|
||||
"pendingCount": 0,
|
||||
"completedGateIds": [
|
||||
"diff-check",
|
||||
@@ -693,6 +743,7 @@
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"release-artifact-url-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate"
|
||||
@@ -769,6 +820,14 @@
|
||||
"status": "passed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "project-batch-acceptance",
|
||||
"label": "Project batch acceptance workflow smoke",
|
||||
"command": "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
"expectedOutput": "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"status": "passed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"id": "ui-node-smokes",
|
||||
"label": "UI Node smokes",
|
||||
|
||||
@@ -18,8 +18,10 @@ SKIP_TP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_tp_wasm.sh"
|
||||
"$ROOT_DIR/tests/docs/node/verify_sim_configs_coverage_docs.sh"
|
||||
"$ROOT_DIR/tests/docs/node/verify_host_runtime_boundary_docs.sh"
|
||||
"$ROOT_DIR/tests/docs/node/verify_project_release_handoff_docs.sh"
|
||||
"$ROOT_DIR/tests/docs/node/verify_real_browser_simulation_priority_docs.sh"
|
||||
"$ROOT_DIR/tests/ui/node/verify_ui_node_smokes.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_ini_panel_browser.sh"
|
||||
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_real_simulation_browser.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_opfs_session_workflow_browser.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_interp_browser.sh"
|
||||
|
||||
|
||||
@@ -12,10 +12,13 @@ git diff --check
|
||||
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_interp_wasm.sh"
|
||||
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/wasm/node/verify_sim_configs_inventory_wasm.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_ini_panel_browser.sh"
|
||||
SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_real_simulation_browser.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_opfs_session_workflow_browser.sh"
|
||||
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 "$ROOT_DIR/tests/browser/verify_release_artifact_url_workflow_browser.sh"
|
||||
"$ROOT_DIR/tests/sdk/node/verify_project_batch_acceptance_workflow.sh"
|
||||
"$ROOT_DIR/tests/ui/node/verify_ui_node_smokes.sh"
|
||||
"$ROOT_DIR/tests/sdk/node/verify_project_release_artifact_url_workflow.sh"
|
||||
"$ROOT_DIR/tests/docs/node/verify_real_browser_simulation_priority_docs.sh"
|
||||
"$ROOT_DIR/tests/host/verify_host_smokes.sh"
|
||||
|
||||
node "$ROOT_DIR/tests/host/write_project_release_readiness_artifact.mjs"
|
||||
|
||||
@@ -20,8 +20,8 @@ assert.equal(validation.phase, "ready");
|
||||
assert.deepEqual(validation.missing, []);
|
||||
assert.equal(validation.artifactApiName, "project-release-readiness-report");
|
||||
assert.equal(validation.artifactVersion, 1);
|
||||
assert.equal(validation.gateCount, 11);
|
||||
assert.equal(validation.expectedGateCount, 11);
|
||||
assert.equal(validation.gateCount, 12);
|
||||
assert.equal(validation.expectedGateCount, 12);
|
||||
assert.equal(validation.gateManifestReady, true);
|
||||
assert.equal(validation.gateExecutionManifestReady, true);
|
||||
assert.equal(validation.gateExecutionSummaryReady, true);
|
||||
@@ -36,15 +36,16 @@ assert.deepEqual(validation.expectedGateIds, [
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"release-artifact-url-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate",
|
||||
]);
|
||||
assert.equal(artifact.gateManifest.apiName, "project-release-gate-manifest");
|
||||
assert.equal(artifact.gateExecutionManifest.apiName, "project-release-gate-execution-manifest");
|
||||
assert.equal(artifact.gateExecutionManifest.passedCount, 11);
|
||||
assert.equal(artifact.gateExecutionManifest.passedCount, 12);
|
||||
assert.equal(artifact.gateExecutionSummaryViewModel.apiName, "project-release-gate-execution-summary-view-model");
|
||||
assert.equal(artifact.gateExecutionSummaryViewModel.rows[0].value, "11/11 passed");
|
||||
assert.equal(artifact.gateExecutionSummaryViewModel.rows[0].value, "12/12 passed");
|
||||
assert.equal(artifact.gateResultMatrix.apiName, "project-release-gate-result-matrix");
|
||||
assert.equal(artifact.gateActionPlan.apiName, "project-release-gate-action-plan");
|
||||
assert.equal(artifact.gateActionPlan.pendingCount, 0);
|
||||
|
||||
@@ -17,6 +17,7 @@ const passedGateResults = {
|
||||
"ini-panel-browser": true,
|
||||
"opfs-session-browser": true,
|
||||
"release-artifact-url-browser": true,
|
||||
"project-batch-acceptance": true,
|
||||
"ui-node-smokes": true,
|
||||
"host-smokes": true,
|
||||
"project-release-gate": true,
|
||||
@@ -32,6 +33,7 @@ const report = createProjectReleaseReadinessReport({
|
||||
"browser_ini_shell_integration_workflow_smoke=ok",
|
||||
"browser_opfs_session_workflow_smoke=ok",
|
||||
"browser_release_artifact_url_workflow_smoke=ok",
|
||||
"project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"ui_node_smokes=ok",
|
||||
"host_wasm_opfs_browser_smokes=ok",
|
||||
"project_release_gate=ok",
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
import {
|
||||
createProjectBatchAcceptanceReportJsonWorkflow,
|
||||
createProjectBatchAcceptanceReportValidationActionPlan,
|
||||
createProjectBatchAcceptanceReportValidationSummaryViewModel,
|
||||
createProjectBatchAcceptanceReportValidation,
|
||||
} from "../../../runtime/sdk/src/index.js";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const root = resolve(__dirname, "../../..");
|
||||
const artifactPath = process.argv[2] ?? resolve(root, "build/project-batch-acceptance.json");
|
||||
const artifactJson = readFileSync(artifactPath, "utf8");
|
||||
const jsonWorkflow = createProjectBatchAcceptanceReportJsonWorkflow({ reportJson: artifactJson });
|
||||
const validation = createProjectBatchAcceptanceReportValidation(jsonWorkflow.report);
|
||||
const validationSummary = createProjectBatchAcceptanceReportValidationSummaryViewModel(validation);
|
||||
const validationActionPlan = createProjectBatchAcceptanceReportValidationActionPlan(validation);
|
||||
|
||||
assert.equal(jsonWorkflow.apiName, "project-batch-acceptance-report-json-workflow");
|
||||
assert.equal(jsonWorkflow.ready, true);
|
||||
assert.equal(jsonWorkflow.phase, "ready");
|
||||
assert.equal(jsonWorkflow.parsed, true);
|
||||
assert.equal(jsonWorkflow.parseError, null);
|
||||
assert.deepEqual(jsonWorkflow.missing, []);
|
||||
assert.equal(validation.apiName, "project-batch-acceptance-report-validation");
|
||||
assert.equal(validation.ready, true);
|
||||
assert.equal(validation.phase, "ready");
|
||||
assert.deepEqual(validation.missing, []);
|
||||
assert.equal(validation.batchId, "project-batch-acceptance-artifact");
|
||||
assert.equal(jsonWorkflow.report.apiName, "project-batch-acceptance-report");
|
||||
assert.equal(jsonWorkflow.report.reportVersion, 1);
|
||||
assert.equal(jsonWorkflow.report.ready, true);
|
||||
assert.equal(jsonWorkflow.report.capabilityMatrix.ready, true);
|
||||
assert.deepEqual(jsonWorkflow.report.capabilityMatrix.capabilityTypes, ["workflow", "gate"]);
|
||||
assert.equal(jsonWorkflow.report.workflow.ready, true);
|
||||
assert.equal(jsonWorkflow.report.summaryViewModel.statusLine, "Ready: Batch acceptance evidence complete");
|
||||
assert.equal(jsonWorkflow.report.actionPlan.nextCommand, null);
|
||||
assert.equal(jsonWorkflow.report.checklist.passedCount, 3);
|
||||
assert.equal(jsonWorkflow.report.rows.find(({ id }) => id === "checklist")?.value, "3/3 passed");
|
||||
assert.equal(validationSummary.apiName, "project-batch-acceptance-report-validation-summary-view-model");
|
||||
assert.equal(validationSummary.statusLine, "Ready: Batch acceptance report evidence complete");
|
||||
assert.equal(validationSummary.rows.find(({ id }) => id === "validation")?.value, "ready");
|
||||
assert.equal(validationActionPlan.apiName, "project-batch-acceptance-report-validation-action-plan");
|
||||
assert.equal(validationActionPlan.ready, true);
|
||||
assert.equal(validationActionPlan.nextCommand, null);
|
||||
assert.equal(validationActionPlan.shellScript, "# Project batch acceptance report validation is already ready.\n");
|
||||
|
||||
console.log("project_batch_acceptance_artifact_node_smoke=ok");
|
||||
6
wasm-port/tests/sdk/node/verify_project_batch_acceptance_artifact.sh
Executable file
6
wasm-port/tests/sdk/node/verify_project_batch_acceptance_artifact.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../../.." && pwd)"
|
||||
|
||||
node "$ROOT_DIR/tests/sdk/node/verify_project_batch_acceptance_artifact.mjs" "$@"
|
||||
@@ -0,0 +1,507 @@
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import {
|
||||
createProjectBatchAcceptanceActionPlan,
|
||||
createProjectBatchAcceptanceCapabilityMatrix,
|
||||
createProjectBatchAcceptanceChecklist,
|
||||
createProjectBatchAcceptanceReport,
|
||||
createProjectBatchAcceptanceReportJsonWorkflow,
|
||||
createProjectBatchAcceptanceReportUrlWorkflowActionPlan,
|
||||
createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel,
|
||||
createProjectBatchAcceptanceReportValidationActionPlan,
|
||||
createProjectBatchAcceptanceReportValidationSummaryViewModel,
|
||||
createProjectBatchAcceptanceReportValidation,
|
||||
createProjectBatchAcceptanceSummaryViewModel,
|
||||
createProjectBatchAcceptanceWorkflow,
|
||||
loadProjectBatchAcceptanceReportUrlWorkflow,
|
||||
} from "../../../runtime/sdk/src/index.js";
|
||||
|
||||
const readyCapabilityMatrix = createProjectBatchAcceptanceCapabilityMatrix({
|
||||
capabilities: [
|
||||
{
|
||||
id: "callable-api",
|
||||
type: "api",
|
||||
label: "Callable API",
|
||||
evidence: "createProjectBatchAcceptanceCapabilityMatrix",
|
||||
},
|
||||
{
|
||||
id: "browser-smoke",
|
||||
type: "browser",
|
||||
label: "Browser smoke",
|
||||
evidence: "browser smoke output",
|
||||
},
|
||||
{
|
||||
id: "docs-only-note",
|
||||
type: "docs",
|
||||
label: "Docs-only note",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
assert.equal(readyCapabilityMatrix.apiName, "project-batch-acceptance-capability-matrix");
|
||||
assert.equal(readyCapabilityMatrix.matrixVersion, 1);
|
||||
assert.equal(readyCapabilityMatrix.phase, "ready");
|
||||
assert.equal(readyCapabilityMatrix.ready, true);
|
||||
assert.deepEqual(readyCapabilityMatrix.acceptedCapabilityTypes, ["api", "workflow", "gate", "browser"]);
|
||||
assert.deepEqual(readyCapabilityMatrix.capabilityTypes, ["api", "browser"]);
|
||||
assert.equal(readyCapabilityMatrix.capabilityCount, 2);
|
||||
assert.equal(readyCapabilityMatrix.acceptedCount, 2);
|
||||
assert.equal(readyCapabilityMatrix.rejectedCount, 1);
|
||||
assert.deepEqual(readyCapabilityMatrix.countsByType, {
|
||||
api: 1,
|
||||
workflow: 0,
|
||||
gate: 0,
|
||||
browser: 1,
|
||||
});
|
||||
assert.equal(readyCapabilityMatrix.rejectedCapabilities[0].type, "docs");
|
||||
assert.deepEqual(readyCapabilityMatrix.missing, []);
|
||||
assert.deepEqual(
|
||||
readyCapabilityMatrix.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["accepted-capabilities", "2"],
|
||||
["accepted-types", "api, browser"],
|
||||
["rejected-capabilities", "1"],
|
||||
["missing", "none"],
|
||||
],
|
||||
);
|
||||
|
||||
const blockedCapabilityMatrix = createProjectBatchAcceptanceCapabilityMatrix({
|
||||
capabilities: [
|
||||
{
|
||||
id: "docs-only-note",
|
||||
type: "docs",
|
||||
label: "Docs-only note",
|
||||
},
|
||||
],
|
||||
});
|
||||
assert.equal(blockedCapabilityMatrix.phase, "blocked");
|
||||
assert.equal(blockedCapabilityMatrix.ready, false);
|
||||
assert.equal(blockedCapabilityMatrix.acceptedCount, 0);
|
||||
assert.equal(blockedCapabilityMatrix.rejectedCount, 1);
|
||||
assert.deepEqual(blockedCapabilityMatrix.missing, ["batch-capability"]);
|
||||
|
||||
const readyWorkflow = createProjectBatchAcceptanceWorkflow({
|
||||
batchId: "batch-acceptance-workflow",
|
||||
capabilities: [
|
||||
{
|
||||
id: "project-batch-acceptance-workflow-api",
|
||||
type: "api",
|
||||
label: "Project batch acceptance workflow API",
|
||||
evidence: "createProjectBatchAcceptanceWorkflow",
|
||||
},
|
||||
{
|
||||
id: "project-batch-acceptance-node-gate",
|
||||
type: "gate",
|
||||
label: "Project batch acceptance Node gate",
|
||||
evidence: "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
command: "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
},
|
||||
],
|
||||
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
||||
});
|
||||
|
||||
assert.equal(readyWorkflow.apiName, "project-batch-acceptance-workflow");
|
||||
assert.equal(readyWorkflow.workflowVersion, 1);
|
||||
assert.equal(readyWorkflow.phase, "ready");
|
||||
assert.equal(readyWorkflow.ready, true);
|
||||
assert.equal(readyWorkflow.batchId, "batch-acceptance-workflow");
|
||||
assert.deepEqual(readyWorkflow.acceptedCapabilityTypes, ["api", "workflow", "gate", "browser"]);
|
||||
assert.deepEqual(readyWorkflow.capabilityTypes, ["api", "gate"]);
|
||||
assert.equal(readyWorkflow.capabilityCount, 2);
|
||||
assert.equal(readyWorkflow.capabilityMatrix.apiName, "project-batch-acceptance-capability-matrix");
|
||||
assert.equal(readyWorkflow.capabilityMatrix.ready, true);
|
||||
assert.deepEqual(readyWorkflow.missing, []);
|
||||
assert.equal(
|
||||
readyWorkflow.gateResultMatrix.rows.find(({ id }) => id === "project-batch-acceptance")?.passed,
|
||||
true,
|
||||
);
|
||||
assert.deepEqual(
|
||||
readyWorkflow.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["batch", "batch-acceptance-workflow"],
|
||||
["capabilities", "api, gate"],
|
||||
["project-batch-acceptance", "passed"],
|
||||
["missing", "none"],
|
||||
],
|
||||
);
|
||||
|
||||
const readySummary = createProjectBatchAcceptanceSummaryViewModel(readyWorkflow);
|
||||
assert.equal(readySummary.apiName, "project-batch-acceptance-summary-view-model");
|
||||
assert.equal(readySummary.phase, "ready");
|
||||
assert.equal(readySummary.statusLine, "Ready: Batch acceptance evidence complete");
|
||||
assert.equal(readySummary.rows.find(({ id }) => id === "capability-count")?.value, "2");
|
||||
|
||||
const readyActionPlan = createProjectBatchAcceptanceActionPlan(readyWorkflow);
|
||||
assert.equal(readyActionPlan.apiName, "project-batch-acceptance-action-plan");
|
||||
assert.equal(readyActionPlan.phase, "ready");
|
||||
assert.equal(readyActionPlan.ready, true);
|
||||
assert.equal(readyActionPlan.commandCount, 0);
|
||||
assert.equal(readyActionPlan.nextCommand, null);
|
||||
assert.equal(readyActionPlan.shellScript, "# Project batch acceptance workflow is already ready.\n");
|
||||
|
||||
const readyChecklist = createProjectBatchAcceptanceChecklist({
|
||||
workflow: readyWorkflow,
|
||||
actionPlan: readyActionPlan,
|
||||
});
|
||||
assert.equal(readyChecklist.apiName, "project-batch-acceptance-checklist");
|
||||
assert.equal(readyChecklist.checklistVersion, 1);
|
||||
assert.equal(readyChecklist.phase, "ready");
|
||||
assert.equal(readyChecklist.ready, true);
|
||||
assert.equal(readyChecklist.batchId, "batch-acceptance-workflow");
|
||||
assert.equal(readyChecklist.passedCount, 3);
|
||||
assert.equal(readyChecklist.blockedCount, 0);
|
||||
assert.deepEqual(
|
||||
readyChecklist.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["accepted-capability", "pass: api, gate"],
|
||||
["batch-acceptance-gate", "pass: passed"],
|
||||
["next-action", "pass: none"],
|
||||
],
|
||||
);
|
||||
|
||||
const readyReport = createProjectBatchAcceptanceReport({
|
||||
batchId: "batch-acceptance-workflow",
|
||||
capabilities: readyWorkflow.capabilities,
|
||||
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
||||
});
|
||||
assert.equal(readyReport.apiName, "project-batch-acceptance-report");
|
||||
assert.equal(readyReport.reportVersion, 1);
|
||||
assert.equal(readyReport.phase, "ready");
|
||||
assert.equal(readyReport.ready, true);
|
||||
assert.equal(readyReport.batchId, "batch-acceptance-workflow");
|
||||
assert.deepEqual(readyReport.missing, []);
|
||||
assert.equal(readyReport.capabilityMatrix.apiName, "project-batch-acceptance-capability-matrix");
|
||||
assert.equal(readyReport.workflow.apiName, "project-batch-acceptance-workflow");
|
||||
assert.equal(readyReport.summaryViewModel.statusLine, "Ready: Batch acceptance evidence complete");
|
||||
assert.equal(readyReport.actionPlan.nextCommand, null);
|
||||
assert.equal(readyReport.checklist.passedCount, 3);
|
||||
assert.deepEqual(
|
||||
readyReport.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["summary", "Ready: Batch acceptance evidence complete"],
|
||||
["capabilities", "api, gate"],
|
||||
["checklist", "3/3 passed"],
|
||||
["next-command", "none"],
|
||||
],
|
||||
);
|
||||
|
||||
const readyReportValidation = createProjectBatchAcceptanceReportValidation(readyReport);
|
||||
const readyReportValidationSummary = createProjectBatchAcceptanceReportValidationSummaryViewModel(
|
||||
readyReportValidation,
|
||||
);
|
||||
const readyReportValidationActionPlan = createProjectBatchAcceptanceReportValidationActionPlan(
|
||||
readyReportValidation,
|
||||
);
|
||||
assert.equal(readyReportValidation.apiName, "project-batch-acceptance-report-validation");
|
||||
assert.equal(readyReportValidation.validationVersion, 1);
|
||||
assert.equal(readyReportValidation.phase, "ready");
|
||||
assert.equal(readyReportValidation.ready, true);
|
||||
assert.deepEqual(readyReportValidation.missing, []);
|
||||
assert.equal(readyReportValidation.batchId, "batch-acceptance-workflow");
|
||||
assert.deepEqual(
|
||||
readyReportValidation.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["report", "project-batch-acceptance-report"],
|
||||
["capability-matrix", "ready"],
|
||||
["workflow", "ready"],
|
||||
["checklist", "ready"],
|
||||
["missing", "none"],
|
||||
],
|
||||
);
|
||||
assert.equal(
|
||||
readyReportValidationSummary.statusLine,
|
||||
"Ready: Batch acceptance report evidence complete",
|
||||
);
|
||||
assert.deepEqual(
|
||||
readyReportValidationSummary.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["report", "project-batch-acceptance-report"],
|
||||
["batch", "batch-acceptance-workflow"],
|
||||
["validation", "ready"],
|
||||
["missing", "none"],
|
||||
],
|
||||
);
|
||||
assert.deepEqual(readyReportValidationActionPlan, {
|
||||
apiName: "project-batch-acceptance-report-validation-action-plan",
|
||||
planVersion: 1,
|
||||
phase: "ready",
|
||||
ready: true,
|
||||
missing: [],
|
||||
missingCount: 0,
|
||||
commandCount: 0,
|
||||
nextActionId: null,
|
||||
nextCommand: null,
|
||||
commands: [],
|
||||
shellScript: "# Project batch acceptance report validation is already ready.\n",
|
||||
rows: [
|
||||
["report-validation", "Report validation", "ready"],
|
||||
["missing", "Missing report evidence", "none"],
|
||||
["next-command", "Next command", "none"],
|
||||
].map(([id, label, value]) => ({ id, label, value })),
|
||||
});
|
||||
|
||||
const readyReportJsonWorkflow = createProjectBatchAcceptanceReportJsonWorkflow({
|
||||
reportJson: JSON.stringify(readyReport),
|
||||
});
|
||||
assert.equal(readyReportJsonWorkflow.apiName, "project-batch-acceptance-report-json-workflow");
|
||||
assert.equal(readyReportJsonWorkflow.workflowVersion, 1);
|
||||
assert.equal(readyReportJsonWorkflow.phase, "ready");
|
||||
assert.equal(readyReportJsonWorkflow.ready, true);
|
||||
assert.equal(readyReportJsonWorkflow.parsed, true);
|
||||
assert.equal(readyReportJsonWorkflow.parseError, null);
|
||||
assert.equal(readyReportJsonWorkflow.validation.ready, true);
|
||||
assert.deepEqual(readyReportJsonWorkflow.missing, []);
|
||||
|
||||
let fetchedReportUrl = null;
|
||||
const readyReportUrlWorkflow = await loadProjectBatchAcceptanceReportUrlWorkflow({
|
||||
reportUrl: "/project-batch-acceptance.json",
|
||||
fetchRef: async (url) => {
|
||||
fetchedReportUrl = url;
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => JSON.stringify(readyReport),
|
||||
};
|
||||
},
|
||||
});
|
||||
const readyReportUrlSummary = createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel(
|
||||
readyReportUrlWorkflow,
|
||||
);
|
||||
const readyReportUrlActionPlan = createProjectBatchAcceptanceReportUrlWorkflowActionPlan(
|
||||
readyReportUrlWorkflow,
|
||||
);
|
||||
|
||||
assert.equal(fetchedReportUrl, "/project-batch-acceptance.json");
|
||||
assert.equal(readyReportUrlWorkflow.apiName, "project-batch-acceptance-report-url-workflow");
|
||||
assert.equal(readyReportUrlWorkflow.workflowVersion, 1);
|
||||
assert.equal(readyReportUrlWorkflow.phase, "ready");
|
||||
assert.equal(readyReportUrlWorkflow.ready, true);
|
||||
assert.equal(readyReportUrlWorkflow.fetched, true);
|
||||
assert.equal(readyReportUrlWorkflow.httpStatus, 200);
|
||||
assert.equal(readyReportUrlWorkflow.fetchError, null);
|
||||
assert.equal(readyReportUrlWorkflow.jsonWorkflow.ready, true);
|
||||
assert.equal(readyReportUrlWorkflow.validation.ready, true);
|
||||
assert.deepEqual(readyReportUrlWorkflow.missing, []);
|
||||
assert.equal(
|
||||
readyReportUrlSummary.statusLine,
|
||||
"Ready: Batch report URL workflow complete",
|
||||
);
|
||||
assert.deepEqual(
|
||||
readyReportUrlSummary.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["report-url", "/project-batch-acceptance.json"],
|
||||
["fetch", "ready (200)"],
|
||||
["json-workflow", "ready"],
|
||||
["report-validation", "ready"],
|
||||
["missing", "none"],
|
||||
],
|
||||
);
|
||||
assert.deepEqual(readyReportUrlActionPlan, {
|
||||
apiName: "project-batch-acceptance-report-url-workflow-action-plan",
|
||||
planVersion: 1,
|
||||
phase: "ready",
|
||||
ready: true,
|
||||
missing: [],
|
||||
actionCount: 0,
|
||||
commandCount: 0,
|
||||
nextActionId: null,
|
||||
nextCommand: null,
|
||||
actions: [],
|
||||
commands: [],
|
||||
shellScript: "# Project batch acceptance report URL workflow is already ready.\n",
|
||||
rows: [],
|
||||
});
|
||||
|
||||
const blockedWorkflow = createProjectBatchAcceptanceWorkflow({
|
||||
batchId: "docs-only-batch",
|
||||
capabilities: [
|
||||
{
|
||||
id: "docs-only-note",
|
||||
type: "docs",
|
||||
label: "Docs-only note",
|
||||
},
|
||||
],
|
||||
});
|
||||
assert.equal(blockedWorkflow.phase, "blocked");
|
||||
assert.equal(blockedWorkflow.ready, false);
|
||||
assert.deepEqual(blockedWorkflow.capabilityTypes, []);
|
||||
assert.equal(blockedWorkflow.rejectedCapabilities[0].type, "docs");
|
||||
assert.deepEqual(blockedWorkflow.missing, ["batch-capability", "project-batch-acceptance"]);
|
||||
|
||||
const blockedSummary = createProjectBatchAcceptanceSummaryViewModel(blockedWorkflow);
|
||||
assert.equal(blockedSummary.statusLine, "Blocked: batch-capability, project-batch-acceptance");
|
||||
|
||||
const blockedActionPlan = createProjectBatchAcceptanceActionPlan(blockedWorkflow);
|
||||
assert.equal(blockedActionPlan.phase, "blocked");
|
||||
assert.equal(blockedActionPlan.ready, false);
|
||||
assert.equal(blockedActionPlan.commandCount, 1);
|
||||
assert.equal(blockedActionPlan.nextActionId, "project-batch-acceptance");
|
||||
assert.equal(
|
||||
blockedActionPlan.nextCommand,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
assert.match(blockedActionPlan.shellScript, /verify_project_batch_acceptance_workflow\.sh/);
|
||||
|
||||
const blockedChecklist = createProjectBatchAcceptanceChecklist({
|
||||
workflow: blockedWorkflow,
|
||||
actionPlan: blockedActionPlan,
|
||||
});
|
||||
assert.equal(blockedChecklist.phase, "blocked");
|
||||
assert.equal(blockedChecklist.ready, false);
|
||||
assert.equal(blockedChecklist.passedCount, 0);
|
||||
assert.equal(blockedChecklist.blockedCount, 3);
|
||||
assert.deepEqual(
|
||||
blockedChecklist.items.map(({ id, status }) => [id, status]),
|
||||
[
|
||||
["accepted-capability", "blocked"],
|
||||
["batch-acceptance-gate", "blocked"],
|
||||
["next-action", "blocked"],
|
||||
],
|
||||
);
|
||||
|
||||
const blockedReport = createProjectBatchAcceptanceReport({
|
||||
batchId: "docs-only-batch",
|
||||
capabilities: blockedWorkflow.rejectedCapabilities,
|
||||
});
|
||||
assert.equal(blockedReport.phase, "blocked");
|
||||
assert.equal(blockedReport.ready, false);
|
||||
assert.deepEqual(blockedReport.missing, ["batch-capability", "project-batch-acceptance"]);
|
||||
assert.equal(blockedReport.checklist.blockedCount, 3);
|
||||
assert.equal(
|
||||
blockedReport.rows.find(({ id }) => id === "next-command")?.value,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
|
||||
const blockedReportValidation = createProjectBatchAcceptanceReportValidation(blockedReport);
|
||||
const blockedReportValidationSummary = createProjectBatchAcceptanceReportValidationSummaryViewModel(
|
||||
blockedReportValidation,
|
||||
);
|
||||
const blockedReportValidationActionPlan = createProjectBatchAcceptanceReportValidationActionPlan(
|
||||
blockedReportValidation,
|
||||
);
|
||||
assert.equal(blockedReportValidation.phase, "blocked");
|
||||
assert.equal(blockedReportValidation.ready, false);
|
||||
assert.deepEqual(blockedReportValidation.missing, [
|
||||
"phase",
|
||||
"ready",
|
||||
"missing",
|
||||
"capabilityMatrix",
|
||||
"workflow",
|
||||
"summaryViewModel",
|
||||
"actionPlan",
|
||||
"checklist",
|
||||
"rows.checklist",
|
||||
]);
|
||||
assert.match(blockedReportValidationSummary.statusLine, /^Blocked: phase, ready, missing/);
|
||||
assert.equal(blockedReportValidationSummary.rows.find(({ id }) => id === "validation")?.value, "blocked");
|
||||
assert.equal(blockedReportValidationActionPlan.phase, "blocked");
|
||||
assert.equal(blockedReportValidationActionPlan.ready, false);
|
||||
assert.equal(blockedReportValidationActionPlan.commandCount, 1);
|
||||
assert.equal(
|
||||
blockedReportValidationActionPlan.nextCommand,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
assert.equal(
|
||||
blockedReportValidationActionPlan.commands[0].expectedOutput,
|
||||
"project_batch_acceptance_artifact_node_smoke=ok",
|
||||
);
|
||||
|
||||
const invalidReportJsonWorkflow = createProjectBatchAcceptanceReportJsonWorkflow({
|
||||
reportJson: "{not-json",
|
||||
});
|
||||
assert.equal(invalidReportJsonWorkflow.phase, "blocked");
|
||||
assert.equal(invalidReportJsonWorkflow.ready, false);
|
||||
assert.equal(invalidReportJsonWorkflow.parsed, false);
|
||||
assert.match(invalidReportJsonWorkflow.parseError, /JSON/);
|
||||
assert.equal(invalidReportJsonWorkflow.missing[0], "report-json");
|
||||
|
||||
const missingInputReportUrlWorkflow = await loadProjectBatchAcceptanceReportUrlWorkflow({
|
||||
reportUrl: "",
|
||||
fetchRef: null,
|
||||
});
|
||||
const missingInputReportUrlActionPlan = createProjectBatchAcceptanceReportUrlWorkflowActionPlan(
|
||||
missingInputReportUrlWorkflow,
|
||||
);
|
||||
assert.equal(missingInputReportUrlWorkflow.ready, false);
|
||||
assert.equal(missingInputReportUrlWorkflow.fetched, false);
|
||||
assert.deepEqual(missingInputReportUrlWorkflow.missing.slice(0, 2), ["report-url", "fetch"]);
|
||||
assert.match(
|
||||
createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel(
|
||||
missingInputReportUrlWorkflow,
|
||||
).statusLine,
|
||||
/^Blocked: report-url, fetch/,
|
||||
);
|
||||
assert.equal(missingInputReportUrlActionPlan.actionCount, 3);
|
||||
assert.equal(missingInputReportUrlActionPlan.commandCount, 1);
|
||||
assert.equal(missingInputReportUrlActionPlan.nextActionId, "provide-report-url");
|
||||
assert.equal(
|
||||
missingInputReportUrlActionPlan.nextCommand,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
assert.deepEqual(
|
||||
missingInputReportUrlActionPlan.actions.slice(0, 2).map(({ id, kind, command }) => [id, kind, command]),
|
||||
[
|
||||
["provide-report-url", "input", null],
|
||||
["provide-fetch", "input", null],
|
||||
],
|
||||
);
|
||||
|
||||
const httpFailureReportUrlWorkflow = await loadProjectBatchAcceptanceReportUrlWorkflow({
|
||||
reportUrl: "/missing-batch-report.json",
|
||||
fetchRef: async () => ({
|
||||
ok: false,
|
||||
status: 404,
|
||||
text: async () => "",
|
||||
}),
|
||||
});
|
||||
const httpFailureReportUrlActionPlan = createProjectBatchAcceptanceReportUrlWorkflowActionPlan(
|
||||
httpFailureReportUrlWorkflow,
|
||||
);
|
||||
assert.equal(httpFailureReportUrlWorkflow.ready, false);
|
||||
assert.equal(httpFailureReportUrlWorkflow.fetched, false);
|
||||
assert.equal(httpFailureReportUrlWorkflow.httpStatus, 404);
|
||||
assert.match(httpFailureReportUrlWorkflow.fetchError, /404/);
|
||||
assert.equal(httpFailureReportUrlWorkflow.missing[0], "report-fetch");
|
||||
assert.match(
|
||||
createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel(
|
||||
httpFailureReportUrlWorkflow,
|
||||
).statusLine,
|
||||
/^Blocked: report-fetch/,
|
||||
);
|
||||
assert.equal(httpFailureReportUrlActionPlan.nextActionId, "verify-report-url-fetch");
|
||||
assert.equal(httpFailureReportUrlActionPlan.commands.length, 1);
|
||||
|
||||
const thrownFetchReportUrlWorkflow = await loadProjectBatchAcceptanceReportUrlWorkflow({
|
||||
reportUrl: "/throws-batch-report.json",
|
||||
fetchRef: async () => {
|
||||
throw new Error("batch report network unavailable");
|
||||
},
|
||||
});
|
||||
assert.equal(thrownFetchReportUrlWorkflow.ready, false);
|
||||
assert.equal(thrownFetchReportUrlWorkflow.fetched, false);
|
||||
assert.equal(thrownFetchReportUrlWorkflow.httpStatus, null);
|
||||
assert.equal(thrownFetchReportUrlWorkflow.fetchError, "batch report network unavailable");
|
||||
assert.equal(thrownFetchReportUrlWorkflow.missing[0], "report-fetch");
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReportUrlWorkflowActionPlan(
|
||||
thrownFetchReportUrlWorkflow,
|
||||
).nextActionId,
|
||||
"verify-report-url-fetch",
|
||||
);
|
||||
|
||||
const capabilityOnlyWorkflow = createProjectBatchAcceptanceWorkflow({
|
||||
capabilities: [
|
||||
{
|
||||
id: "callable-helper",
|
||||
type: "api",
|
||||
label: "Callable helper",
|
||||
},
|
||||
],
|
||||
});
|
||||
assert.deepEqual(capabilityOnlyWorkflow.missing, ["project-batch-acceptance"]);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceActionPlan(capabilityOnlyWorkflow).nextCommand,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
|
||||
console.log("project_batch_acceptance_workflow_node_smoke=ok");
|
||||
9
wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh
Executable file
9
wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../../.." && pwd)"
|
||||
ARTIFACT_PATH="${1:-$ROOT_DIR/build/project-batch-acceptance.json}"
|
||||
|
||||
node "$ROOT_DIR/tests/sdk/node/verify_project_batch_acceptance_workflow.mjs"
|
||||
node "$ROOT_DIR/tests/sdk/node/write_project_batch_acceptance_artifact.mjs" "$ARTIFACT_PATH"
|
||||
"$ROOT_DIR/tests/sdk/node/verify_project_batch_acceptance_artifact.sh" "$ARTIFACT_PATH"
|
||||
@@ -20,7 +20,7 @@ const manifest = createProjectReleaseGateManifest();
|
||||
|
||||
assert.equal(manifest.apiName, "project-release-gate-manifest");
|
||||
assert.equal(manifest.manifestVersion, 1);
|
||||
assert.equal(manifest.gateCount, 11);
|
||||
assert.equal(manifest.gateCount, 12);
|
||||
assert.deepEqual(manifest.gateIds, [
|
||||
"diff-check",
|
||||
"vendor-sync",
|
||||
@@ -30,6 +30,7 @@ assert.deepEqual(manifest.gateIds, [
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"release-artifact-url-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate",
|
||||
@@ -45,6 +46,7 @@ assert.deepEqual(
|
||||
"browser_ini_shell_integration_workflow_smoke=ok",
|
||||
"browser_opfs_session_workflow_smoke=ok",
|
||||
"browser_release_artifact_url_workflow_smoke=ok",
|
||||
"project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"ui_node_smokes=ok",
|
||||
"host_wasm_opfs_browser_smokes=ok",
|
||||
"project_release_gate=ok",
|
||||
@@ -58,6 +60,10 @@ assert.equal(
|
||||
manifest.gates.find(({ id }) => id === "opfs-session-browser")?.command,
|
||||
"SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_opfs_session_workflow_browser.sh",
|
||||
);
|
||||
assert.equal(
|
||||
manifest.gates.find(({ id }) => id === "project-batch-acceptance")?.command,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
|
||||
const partialMatrix = createProjectReleaseGateResultMatrix({
|
||||
gateResults: {
|
||||
@@ -72,15 +78,16 @@ assert.equal(partialMatrix.apiName, "project-release-gate-result-matrix");
|
||||
assert.equal(partialMatrix.matrixVersion, 1);
|
||||
assert.equal(partialMatrix.phase, "waiting");
|
||||
assert.equal(partialMatrix.ready, false);
|
||||
assert.equal(partialMatrix.gateCount, 11);
|
||||
assert.equal(partialMatrix.gateCount, 12);
|
||||
assert.equal(partialMatrix.passedCount, 3);
|
||||
assert.equal(partialMatrix.unknownCount, 8);
|
||||
assert.equal(partialMatrix.unknownCount, 9);
|
||||
assert.deepEqual(partialMatrix.missingGateIds, [
|
||||
"standalone-cnc-semantics",
|
||||
"interp-wasm",
|
||||
"sim-config-inventory",
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate",
|
||||
@@ -107,9 +114,9 @@ assert.equal(partialExecutionManifest.apiName, "project-release-gate-execution-m
|
||||
assert.equal(partialExecutionManifest.manifestVersion, 1);
|
||||
assert.equal(partialExecutionManifest.phase, "waiting");
|
||||
assert.equal(partialExecutionManifest.ready, false);
|
||||
assert.equal(partialExecutionManifest.gateCount, 11);
|
||||
assert.equal(partialExecutionManifest.gateCount, 12);
|
||||
assert.equal(partialExecutionManifest.passedCount, 3);
|
||||
assert.equal(partialExecutionManifest.unknownCount, 8);
|
||||
assert.equal(partialExecutionManifest.unknownCount, 9);
|
||||
assert.deepEqual(partialExecutionManifest.missingGateIds, partialMatrix.missingGateIds);
|
||||
assert.deepEqual(
|
||||
partialExecutionManifest.rows.filter(({ passed }) => passed).map(({ id, evidence }) => [id, evidence]),
|
||||
@@ -132,25 +139,25 @@ assert.equal(partialExecutionSummary.apiName, "project-release-gate-execution-su
|
||||
assert.equal(partialExecutionSummary.viewModelVersion, 1);
|
||||
assert.equal(partialExecutionSummary.phase, "waiting");
|
||||
assert.equal(partialExecutionSummary.ready, false);
|
||||
assert.equal(partialExecutionSummary.statusLine, "Waiting: standalone-cnc-semantics, interp-wasm, sim-config-inventory, ini-panel-browser, opfs-session-browser, ui-node-smokes, host-smokes, project-release-gate");
|
||||
assert.equal(partialExecutionSummary.gateCount, 11);
|
||||
assert.equal(partialExecutionSummary.statusLine, "Waiting: standalone-cnc-semantics, interp-wasm, sim-config-inventory, ini-panel-browser, opfs-session-browser, project-batch-acceptance, ui-node-smokes, host-smokes, project-release-gate");
|
||||
assert.equal(partialExecutionSummary.gateCount, 12);
|
||||
assert.equal(partialExecutionSummary.passedCount, 3);
|
||||
assert.equal(partialExecutionSummary.unknownCount, 8);
|
||||
assert.equal(partialExecutionSummary.unknownCount, 9);
|
||||
assert.equal(partialExecutionSummary.nextGateId, "standalone-cnc-semantics");
|
||||
assert.deepEqual(partialExecutionSummary.evidenceCounts, {
|
||||
"explicit-result": 1,
|
||||
"expected-output": 2,
|
||||
missing: 8,
|
||||
missing: 9,
|
||||
});
|
||||
assert.deepEqual(
|
||||
partialExecutionSummary.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["gate-results", "3/11 passed"],
|
||||
["unknown-gates", "8"],
|
||||
["gate-results", "3/12 passed"],
|
||||
["unknown-gates", "9"],
|
||||
["next-gate", "standalone-cnc-semantics"],
|
||||
["expected-output-evidence", "2"],
|
||||
["explicit-result-evidence", "1"],
|
||||
["missing", "standalone-cnc-semantics, interp-wasm, sim-config-inventory, ini-panel-browser, opfs-session-browser, ui-node-smokes, host-smokes, project-release-gate"],
|
||||
["missing", "standalone-cnc-semantics, interp-wasm, sim-config-inventory, ini-panel-browser, opfs-session-browser, project-batch-acceptance, ui-node-smokes, host-smokes, project-release-gate"],
|
||||
],
|
||||
);
|
||||
assert.equal(partialExecutionSummary.gateRows.length, manifest.gateCount);
|
||||
@@ -164,9 +171,9 @@ assert.equal(partialActionPlan.apiName, "project-release-gate-action-plan");
|
||||
assert.equal(partialActionPlan.planVersion, 1);
|
||||
assert.equal(partialActionPlan.phase, "waiting");
|
||||
assert.equal(partialActionPlan.ready, false);
|
||||
assert.equal(partialActionPlan.gateCount, 11);
|
||||
assert.equal(partialActionPlan.gateCount, 12);
|
||||
assert.equal(partialActionPlan.completedCount, 3);
|
||||
assert.equal(partialActionPlan.pendingCount, 8);
|
||||
assert.equal(partialActionPlan.pendingCount, 9);
|
||||
assert.deepEqual(partialActionPlan.completedGateIds, [
|
||||
"diff-check",
|
||||
"vendor-sync",
|
||||
@@ -178,13 +185,14 @@ assert.deepEqual(partialActionPlan.pendingGateIds, [
|
||||
"sim-config-inventory",
|
||||
"ini-panel-browser",
|
||||
"opfs-session-browser",
|
||||
"project-batch-acceptance",
|
||||
"ui-node-smokes",
|
||||
"host-smokes",
|
||||
"project-release-gate",
|
||||
]);
|
||||
assert.equal(partialActionPlan.nextGateId, "standalone-cnc-semantics");
|
||||
assert.equal(partialActionPlan.nextCommand, "wasm-port/tools/verify_no_standalone_cnc_semantics.sh");
|
||||
assert.equal(partialActionPlan.commands.length, 8);
|
||||
assert.equal(partialActionPlan.commands.length, 9);
|
||||
assert.equal(partialActionPlan.commands[0].step, 1);
|
||||
assert.equal(partialActionPlan.commands[0].gateId, "standalone-cnc-semantics");
|
||||
assert.equal(partialActionPlan.rows[0].id, "standalone-cnc-semantics");
|
||||
@@ -200,7 +208,7 @@ assert.equal(report.gateExecutionManifest.ready, true);
|
||||
assert.equal(report.gateExecutionManifest.passedCount, manifest.gateCount);
|
||||
assert.equal(report.gateExecutionSummaryViewModel.apiName, "project-release-gate-execution-summary-view-model");
|
||||
assert.equal(report.gateExecutionSummaryViewModel.statusLine, "Ready: All release gate evidence present");
|
||||
assert.equal(report.gateExecutionSummaryViewModel.rows[0].value, "11/11 passed");
|
||||
assert.equal(report.gateExecutionSummaryViewModel.rows[0].value, "12/12 passed");
|
||||
assert.equal(report.gateExecutionSummaryViewModel.nextGateId, null);
|
||||
assert.equal(report.gateResultMatrix.ready, true);
|
||||
assert.equal(report.gateResultMatrix.passedCount, manifest.gateCount);
|
||||
@@ -223,7 +231,7 @@ assert.deepEqual(createProjectReleaseReadinessSummaryViewModel(report), {
|
||||
{
|
||||
id: "gate-results",
|
||||
label: "Release gates",
|
||||
value: "11/11 passed",
|
||||
value: "12/12 passed",
|
||||
},
|
||||
{
|
||||
id: "unknown-gates",
|
||||
@@ -289,7 +297,7 @@ assert.deepEqual(
|
||||
artifactValidationSummary.rows.map(({ id, value }) => [id, value]),
|
||||
[
|
||||
["artifact", "project-release-readiness-report"],
|
||||
["gate-count", "11/11"],
|
||||
["gate-count", "12/12"],
|
||||
["gate-manifest", "ready"],
|
||||
["gate-execution-manifest", "ready"],
|
||||
["gate-execution-summary", "ready"],
|
||||
|
||||
@@ -25,8 +25,12 @@ import {
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
||||
createLinuxCncIniSdk,
|
||||
createLinuxCncInterpSdk,
|
||||
@@ -34,6 +38,18 @@ import {
|
||||
createMachineSessionPersistenceDisplayViewModel,
|
||||
createMachineSessionPersistenceRenderState,
|
||||
createMachineSessionPersistenceSummary,
|
||||
createProjectBatchAcceptanceActionPlan,
|
||||
createProjectBatchAcceptanceCapabilityMatrix,
|
||||
createProjectBatchAcceptanceChecklist,
|
||||
createProjectBatchAcceptanceReport,
|
||||
createProjectBatchAcceptanceReportJsonWorkflow,
|
||||
createProjectBatchAcceptanceReportUrlWorkflowActionPlan,
|
||||
createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel,
|
||||
createProjectBatchAcceptanceReportValidationActionPlan,
|
||||
createProjectBatchAcceptanceReportValidationSummaryViewModel,
|
||||
createProjectBatchAcceptanceReportValidation,
|
||||
createProjectBatchAcceptanceSummaryViewModel,
|
||||
createProjectBatchAcceptanceWorkflow,
|
||||
createProjectReleaseGateActionPlan,
|
||||
createProjectReleaseGateExecutionManifest,
|
||||
createProjectReleaseGateExecutionSummaryViewModel,
|
||||
@@ -60,6 +76,30 @@ import {
|
||||
isSupportedIniPanelLaunchApiManifest,
|
||||
isSupportedIniPanelShellIntegrationManifest,
|
||||
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||
loadProjectBatchAcceptanceReportUrlWorkflow,
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
loadProjectReleaseReadinessArtifactUrlWorkflow,
|
||||
loadMachineSessionFromOpfs,
|
||||
loadMachineSessionSnapshot,
|
||||
@@ -97,6 +137,30 @@ const trackerText = readFileSync(resolve(root, "../PROJECT_COMPLETION_TRACKER.md
|
||||
const requiredExports = [
|
||||
["createLinuxCncIniSdk", createLinuxCncIniSdk],
|
||||
["createLinuxCncInterpSdk", createLinuxCncInterpSdk],
|
||||
["createProjectBatchAcceptanceActionPlan", createProjectBatchAcceptanceActionPlan],
|
||||
["createProjectBatchAcceptanceCapabilityMatrix", createProjectBatchAcceptanceCapabilityMatrix],
|
||||
["createProjectBatchAcceptanceChecklist", createProjectBatchAcceptanceChecklist],
|
||||
["createProjectBatchAcceptanceReport", createProjectBatchAcceptanceReport],
|
||||
["createProjectBatchAcceptanceReportJsonWorkflow", createProjectBatchAcceptanceReportJsonWorkflow],
|
||||
[
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowActionPlan",
|
||||
createProjectBatchAcceptanceReportUrlWorkflowActionPlan,
|
||||
],
|
||||
[
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel",
|
||||
createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel,
|
||||
],
|
||||
[
|
||||
"createProjectBatchAcceptanceReportValidationActionPlan",
|
||||
createProjectBatchAcceptanceReportValidationActionPlan,
|
||||
],
|
||||
[
|
||||
"createProjectBatchAcceptanceReportValidationSummaryViewModel",
|
||||
createProjectBatchAcceptanceReportValidationSummaryViewModel,
|
||||
],
|
||||
["createProjectBatchAcceptanceReportValidation", createProjectBatchAcceptanceReportValidation],
|
||||
["createProjectBatchAcceptanceSummaryViewModel", createProjectBatchAcceptanceSummaryViewModel],
|
||||
["createProjectBatchAcceptanceWorkflow", createProjectBatchAcceptanceWorkflow],
|
||||
["createProjectReleaseGateActionPlan", createProjectReleaseGateActionPlan],
|
||||
["createProjectReleaseGateExecutionManifest", createProjectReleaseGateExecutionManifest],
|
||||
["createProjectReleaseGateExecutionSummaryViewModel", createProjectReleaseGateExecutionSummaryViewModel],
|
||||
@@ -127,10 +191,103 @@ const requiredExports = [
|
||||
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||
],
|
||||
[
|
||||
"runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow",
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness,
|
||||
],
|
||||
[
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
],
|
||||
[
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness,
|
||||
],
|
||||
[
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
],
|
||||
[
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness,
|
||||
],
|
||||
[
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
],
|
||||
[
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness,
|
||||
],
|
||||
[
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
],
|
||||
[
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
],
|
||||
[
|
||||
"loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||
],
|
||||
["loadProjectBatchAcceptanceReportUrlWorkflow", loadProjectBatchAcceptanceReportUrlWorkflow],
|
||||
["loadProjectReleaseReadinessArtifactUrlWorkflow", loadProjectReleaseReadinessArtifactUrlWorkflow],
|
||||
["planIniFileContextStaging", planIniFileContextStaging],
|
||||
["planSimConfigStaging", planSimConfigStaging],
|
||||
@@ -194,10 +351,26 @@ const requiredExports = [
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel,
|
||||
],
|
||||
[
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||
@@ -246,6 +419,106 @@ assert.equal(normalizeOpfsPath("linuxcnc/machines/sdk-mill/tool.tbl"), "linuxcnc
|
||||
assert.equal(gcodeFilenameFromProgramPath("linuxcnc/gcode/demo.ngc"), "demo.ngc");
|
||||
|
||||
const releaseReadinessWaiting = createProjectReleaseReadinessReport();
|
||||
const batchCapabilityMatrix = createProjectBatchAcceptanceCapabilityMatrix({
|
||||
capabilities: [
|
||||
{
|
||||
id: "sdk-surface-api",
|
||||
type: "api",
|
||||
label: "SDK surface API",
|
||||
},
|
||||
],
|
||||
});
|
||||
assert.equal(batchCapabilityMatrix.ready, true);
|
||||
assert.equal(batchCapabilityMatrix.countsByType.api, 1);
|
||||
const batchAcceptanceWorkflow = createProjectBatchAcceptanceWorkflow({
|
||||
batchId: "sdk-surface-batch",
|
||||
capabilities: [
|
||||
{
|
||||
id: "sdk-surface-api",
|
||||
type: "api",
|
||||
label: "SDK surface API",
|
||||
},
|
||||
],
|
||||
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
||||
});
|
||||
assert.equal(batchAcceptanceWorkflow.ready, true);
|
||||
assert.equal(batchAcceptanceWorkflow.capabilityTypes[0], "api");
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceSummaryViewModel(batchAcceptanceWorkflow).statusLine,
|
||||
"Ready: Batch acceptance evidence complete",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceActionPlan(batchAcceptanceWorkflow).shellScript,
|
||||
"# Project batch acceptance workflow is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceChecklist({ workflow: batchAcceptanceWorkflow }).rows[0].value,
|
||||
"pass: api",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReport({
|
||||
batchId: "sdk-surface-batch",
|
||||
capabilities: batchAcceptanceWorkflow.capabilities,
|
||||
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
||||
}).rows.find(({ id }) => id === "checklist")?.value,
|
||||
"3/3 passed",
|
||||
);
|
||||
const batchAcceptanceReport = createProjectBatchAcceptanceReport({
|
||||
batchId: "sdk-surface-batch",
|
||||
capabilities: batchAcceptanceWorkflow.capabilities,
|
||||
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
||||
});
|
||||
assert.equal(createProjectBatchAcceptanceReportValidation(batchAcceptanceReport).ready, true);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReportValidationSummaryViewModel(
|
||||
createProjectBatchAcceptanceReportValidation(batchAcceptanceReport),
|
||||
).statusLine,
|
||||
"Ready: Batch acceptance report evidence complete",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReportValidationActionPlan(
|
||||
createProjectBatchAcceptanceReportValidation(batchAcceptanceReport),
|
||||
).shellScript,
|
||||
"# Project batch acceptance report validation is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReportJsonWorkflow({
|
||||
reportJson: JSON.stringify(batchAcceptanceReport),
|
||||
}).ready,
|
||||
true,
|
||||
);
|
||||
const batchAcceptanceReportUrlWorkflow = await loadProjectBatchAcceptanceReportUrlWorkflow({
|
||||
reportUrl: "/project-batch-acceptance.json",
|
||||
fetchRef: async () => ({
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => JSON.stringify(batchAcceptanceReport),
|
||||
}),
|
||||
});
|
||||
assert.equal(batchAcceptanceReportUrlWorkflow.ready, true);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel(
|
||||
batchAcceptanceReportUrlWorkflow,
|
||||
).statusLine,
|
||||
"Ready: Batch report URL workflow complete",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceReportUrlWorkflowActionPlan(
|
||||
batchAcceptanceReportUrlWorkflow,
|
||||
).shellScript,
|
||||
"# Project batch acceptance report URL workflow is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
(await loadProjectBatchAcceptanceReportUrlWorkflow({
|
||||
reportUrl: "/missing-project-batch-acceptance.json",
|
||||
fetchRef: async () => ({ ok: false, status: 404, text: async () => "" }),
|
||||
})).missing[0],
|
||||
"report-fetch",
|
||||
);
|
||||
assert.equal(
|
||||
createProjectBatchAcceptanceActionPlan(createProjectBatchAcceptanceWorkflow()).nextCommand,
|
||||
"wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
);
|
||||
assert.equal(releaseReadinessWaiting.apiName, "project-release-readiness-report");
|
||||
assert.equal(releaseReadinessWaiting.ready, false);
|
||||
assert.deepEqual(releaseReadinessWaiting.missing, ["project-release-gate"]);
|
||||
@@ -446,6 +719,44 @@ assert.equal(
|
||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)).ready,
|
||||
true,
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)),
|
||||
).shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: JSON.stringify(releaseReadinessArtifact),
|
||||
}).statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: JSON.stringify(releaseReadinessArtifact),
|
||||
}),
|
||||
).statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: JSON.stringify(releaseReadinessArtifact),
|
||||
}),
|
||||
).nextCommand,
|
||||
null,
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: JSON.stringify(releaseReadinessArtifact),
|
||||
}),
|
||||
),
|
||||
).dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
);
|
||||
const releaseReadinessArtifactUrlWorkflow = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||
artifactUrl: "/project-release-readiness.json",
|
||||
fetchRef: async () => ({
|
||||
@@ -465,6 +776,12 @@ assert.equal(
|
||||
).statusLine,
|
||||
"Ready: Artifact URL workflow complete",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(
|
||||
releaseReadinessArtifactUrlWorkflow,
|
||||
).shellScript,
|
||||
"# Project release readiness artifact URL workflow is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||
|
||||
@@ -6,3 +6,4 @@ ROOT_DIR="$(cd "$(dirname "$0")/../../.." && pwd)"
|
||||
node "$ROOT_DIR/tests/sdk/node/verify_sdk_surface.mjs"
|
||||
"$ROOT_DIR/tests/sdk/node/verify_project_release_gate_manifest.sh"
|
||||
"$ROOT_DIR/tests/sdk/node/verify_project_release_artifact_url_workflow.sh"
|
||||
"$ROOT_DIR/tests/sdk/node/verify_project_batch_acceptance_workflow.sh"
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import { mkdirSync, renameSync, writeFileSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
import { createProjectBatchAcceptanceReport } from "../../../runtime/sdk/src/index.js";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const root = resolve(__dirname, "../../..");
|
||||
const outputPath = process.argv[2] ?? resolve(root, "build/project-batch-acceptance.json");
|
||||
|
||||
const report = createProjectBatchAcceptanceReport({
|
||||
batchId: "project-batch-acceptance-artifact",
|
||||
capabilities: [
|
||||
{
|
||||
id: "project-batch-acceptance-report-artifact",
|
||||
type: "workflow",
|
||||
label: "Project batch acceptance report artifact",
|
||||
evidence: "project_batch_acceptance_artifact_node_smoke=ok",
|
||||
command: "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
},
|
||||
{
|
||||
id: "project-batch-acceptance-workflow-gate",
|
||||
type: "gate",
|
||||
label: "Project batch acceptance workflow gate",
|
||||
evidence: "project_batch_acceptance_workflow_node_smoke=ok",
|
||||
command: "wasm-port/tests/sdk/node/verify_project_batch_acceptance_workflow.sh",
|
||||
},
|
||||
],
|
||||
observedOutputs: ["project_batch_acceptance_workflow_node_smoke=ok"],
|
||||
});
|
||||
|
||||
mkdirSync(dirname(outputPath), { recursive: true });
|
||||
writeFileSync(`${outputPath}.tmp`, `${JSON.stringify(report, null, 2)}\n`);
|
||||
renameSync(`${outputPath}.tmp`, outputPath);
|
||||
|
||||
console.log(`project_batch_acceptance_artifact=${outputPath}`);
|
||||
@@ -163,9 +163,34 @@ const requiredShellExports = [
|
||||
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
||||
"runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||
|
||||
@@ -82,9 +82,36 @@ assert.deepEqual(manifest, {
|
||||
"getWorkflowOverviewContract",
|
||||
"getWorkflowOverviewReadiness",
|
||||
"mountWorkflowOverviewEmbedding",
|
||||
"runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"getWorkflowOverviewEmbeddingReport",
|
||||
"getWorkflowOverviewEmbeddingDisplayViewModel",
|
||||
"getWorkflowOverviewEmbeddingRenderState",
|
||||
@@ -244,9 +271,36 @@ assert.match(launchText, /\bmountShellSessionHandoffWorkflow\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewContract\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReadiness\b/);
|
||||
assert.match(launchText, /\bmountWorkflowOverviewEmbedding\b/);
|
||||
assert.match(launchText, /\brunWorkflowOverviewReleaseReadinessArtifactJsonWorkflow\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness\b/);
|
||||
assert.match(launchText, /\brenderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState\b/);
|
||||
assert.match(launchText, /\bmountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState\b/);
|
||||
assert.match(launchText, /\bloadWorkflowOverviewReleaseReadinessArtifactUrl\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness\b/);
|
||||
assert.match(launchText, /\brenderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState\b/);
|
||||
assert.match(launchText, /\bmountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactValidationActionPlan\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness\b/);
|
||||
assert.match(launchText, /\brenderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState\b/);
|
||||
assert.match(launchText, /\bmountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness\b/);
|
||||
assert.match(launchText, /\brenderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState\b/);
|
||||
assert.match(launchText, /\bmountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/);
|
||||
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingRenderState\b/);
|
||||
|
||||
@@ -52,9 +52,36 @@ import {
|
||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||
@@ -189,7 +216,7 @@ assert.deepEqual(readiness, {
|
||||
counts: {
|
||||
pages: 3,
|
||||
launcherLinks: 3,
|
||||
launchMethods: 61,
|
||||
launchMethods: 88,
|
||||
controlPageMethods: 11,
|
||||
persistenceCapabilities: 3,
|
||||
},
|
||||
@@ -252,7 +279,7 @@ assert.deepEqual(handoffSummary, {
|
||||
counts: {
|
||||
pages: 3,
|
||||
launcherLinks: 3,
|
||||
launchMethods: 61,
|
||||
launchMethods: 88,
|
||||
controlPageMethods: 11,
|
||||
persistenceCapabilities: 3,
|
||||
},
|
||||
@@ -791,9 +818,36 @@ assert.deepEqual(createIniPanelShellWorkflowOverviewContract(), {
|
||||
"getWorkflowOverviewApiSurfaceInventory",
|
||||
"getWorkflowOverviewPersistenceSummary",
|
||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||
"runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||
@@ -838,9 +892,36 @@ assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDomReadines
|
||||
assert.equal(typeof renderIniPanelShellWorkflowOverviewEmbeddingMountState, "function");
|
||||
assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingMountState, "function");
|
||||
assert.equal(typeof validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, "function");
|
||||
assert.equal(typeof runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness, "function");
|
||||
assert.equal(typeof renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState, "function");
|
||||
assert.equal(typeof mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState, "function");
|
||||
assert.equal(typeof loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness, "function");
|
||||
assert.equal(typeof renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState, "function");
|
||||
assert.equal(typeof mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness, "function");
|
||||
assert.equal(typeof renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState, "function");
|
||||
assert.equal(typeof mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness, "function");
|
||||
assert.equal(typeof renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState, "function");
|
||||
assert.equal(typeof mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, "function");
|
||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, "function");
|
||||
@@ -872,9 +953,36 @@ assert.deepEqual(
|
||||
"getWorkflowOverviewSummary",
|
||||
"getWorkflowOverviewPersistenceSummary",
|
||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||
"runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||
@@ -1300,7 +1408,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), {
|
||||
counts: {
|
||||
pages: 3,
|
||||
launcherLinks: 3,
|
||||
launchMethods: 61,
|
||||
launchMethods: 88,
|
||||
controlPageMethods: 11,
|
||||
persistenceCapabilities: 3,
|
||||
},
|
||||
|
||||
@@ -57,9 +57,36 @@ import {
|
||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||
runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState,
|
||||
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness,
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||
@@ -690,9 +717,36 @@ assert.deepEqual(shellViewModel.shellWorkflowOverviewContract, {
|
||||
"getWorkflowOverviewApiSurfaceInventory",
|
||||
"getWorkflowOverviewPersistenceSummary",
|
||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||
"runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState",
|
||||
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||
@@ -1300,13 +1354,104 @@ const releaseReadinessArtifactJson = JSON.stringify(createProjectReleaseReadines
|
||||
const releaseArtifactValidation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(
|
||||
releaseReadinessArtifactJson,
|
||||
);
|
||||
const releaseArtifactJsonWorkflow = runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: releaseReadinessArtifactJson,
|
||||
});
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflow.apiName,
|
||||
"ini-panel-shell-workflow-overview-release-readiness-artifact-json-workflow",
|
||||
);
|
||||
assert.equal(releaseArtifactJsonWorkflow.ready, true);
|
||||
assert.equal(releaseArtifactJsonWorkflow.parsed, true);
|
||||
assert.equal(releaseArtifactJsonWorkflow.statusLine, "Ready: Artifact JSON workflow complete");
|
||||
assert.equal(releaseArtifactJsonWorkflow.actionPlan.nextCommand, null);
|
||||
assert.equal(releaseArtifactJsonWorkflow.gateExecutionSummaryViewModel.statusLine, "Ready: All release gate evidence present");
|
||||
const releaseArtifactJsonWorkflowSummary =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
releaseArtifactJsonWorkflow,
|
||||
);
|
||||
const releaseArtifactJsonWorkflowActionPlan =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(
|
||||
releaseArtifactJsonWorkflow,
|
||||
);
|
||||
const releaseArtifactJsonWorkflowRenderState =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(
|
||||
releaseArtifactJsonWorkflowSummary,
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflowSummary.rows.find(({ id }) => id === "action-plan")?.value,
|
||||
"ready",
|
||||
);
|
||||
assert.equal(releaseArtifactJsonWorkflowRenderState.statusLine, "Ready: Artifact JSON workflow complete");
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract().selectors.mount,
|
||||
"[data-workflow-overview-release-readiness-artifact-json-workflow]",
|
||||
);
|
||||
assert.equal(createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness().ready, false);
|
||||
const releaseArtifactJsonWorkflowMountNode = mountDocument.createElement("section");
|
||||
releaseArtifactJsonWorkflowMountNode.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflow = "";
|
||||
const releaseArtifactJsonWorkflowStatusNode = mountDocument.createElement("p");
|
||||
releaseArtifactJsonWorkflowStatusNode.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflowStatus = "";
|
||||
const releaseArtifactJsonWorkflowRowsNode = {
|
||||
...mountDocument.createElement("dl"),
|
||||
children: [],
|
||||
replaceChildren() {
|
||||
this.children = [];
|
||||
},
|
||||
append(...nodes) {
|
||||
this.children.push(...nodes);
|
||||
},
|
||||
};
|
||||
releaseArtifactJsonWorkflowRowsNode.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflowRows = "";
|
||||
const releaseArtifactJsonWorkflowRenderResult =
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
||||
releaseArtifactJsonWorkflowRenderState,
|
||||
{
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactJsonWorkflowMountNode,
|
||||
statusNode: releaseArtifactJsonWorkflowStatusNode,
|
||||
rowsNode: releaseArtifactJsonWorkflowRowsNode,
|
||||
},
|
||||
);
|
||||
const releaseArtifactJsonWorkflowMountResult =
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: releaseArtifactJsonWorkflowRenderState,
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactJsonWorkflowMountNode,
|
||||
statusNode: releaseArtifactJsonWorkflowStatusNode,
|
||||
rowsNode: releaseArtifactJsonWorkflowRowsNode,
|
||||
});
|
||||
assert.equal(releaseArtifactJsonWorkflowRenderResult.rendered, true);
|
||||
assert.equal(releaseArtifactJsonWorkflowRenderResult.rowCount, 5);
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflowRenderResult.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactJsonWorkflowRenderResult.rowIds.includes("gate-execution-summary"),
|
||||
true,
|
||||
);
|
||||
assert.equal(releaseArtifactJsonWorkflowMountResult.ready, true);
|
||||
assert.equal(releaseArtifactJsonWorkflowMountResult.renderResult.rowCount, 5);
|
||||
assert.equal(
|
||||
releaseArtifactValidation.apiName,
|
||||
"ini-panel-shell-workflow-overview-release-readiness-artifact-validation",
|
||||
);
|
||||
assert.equal(releaseArtifactValidation.ready, true);
|
||||
assert.equal(releaseArtifactValidation.validation.ready, true);
|
||||
assert.equal(releaseArtifactValidation.gateCount, 11);
|
||||
assert.equal(releaseArtifactValidation.gateCount, 12);
|
||||
const releaseArtifactValidationSummary =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(
|
||||
releaseArtifactValidation,
|
||||
@@ -1316,6 +1461,150 @@ assert.equal(
|
||||
"project-release-readiness-artifact-validation-summary-view-model",
|
||||
);
|
||||
assert.equal(releaseArtifactValidationSummary.statusLine, "Ready: Artifact evidence complete");
|
||||
assert.equal(releaseArtifactValidation.actionPlan.ready, true);
|
||||
assert.equal(releaseArtifactValidation.actionPlan.nextCommand, null);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
releaseArtifactValidation,
|
||||
).shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
);
|
||||
const releaseArtifactValidationActionPlan =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
releaseArtifactValidation,
|
||||
);
|
||||
const releaseArtifactValidationActionPlanRenderState =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
releaseArtifactValidationActionPlan,
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
);
|
||||
assert.equal(releaseArtifactValidationActionPlanRenderState.rows.length, 3);
|
||||
assert.equal(
|
||||
releaseArtifactValidationActionPlanRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-validation-action-plan",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract().selectors.mount,
|
||||
"[data-workflow-overview-release-readiness-artifact-validation-action-plan]",
|
||||
);
|
||||
assert.equal(createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness().ready, false);
|
||||
const releaseArtifactValidationActionPlanMountNode = mountDocument.createElement("section");
|
||||
releaseArtifactValidationActionPlanMountNode.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlan = "";
|
||||
const releaseArtifactValidationActionPlanStatusNode = mountDocument.createElement("p");
|
||||
releaseArtifactValidationActionPlanStatusNode.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlanStatus = "";
|
||||
const releaseArtifactValidationActionPlanRowsNode = {
|
||||
...mountDocument.createElement("dl"),
|
||||
children: [],
|
||||
replaceChildren() {
|
||||
this.children = [];
|
||||
},
|
||||
append(...nodes) {
|
||||
this.children.push(...nodes);
|
||||
},
|
||||
};
|
||||
releaseArtifactValidationActionPlanRowsNode.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlanRows = "";
|
||||
const releaseArtifactValidationActionPlanRenderResult =
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
||||
releaseArtifactValidationActionPlanRenderState,
|
||||
{
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactValidationActionPlanMountNode,
|
||||
statusNode: releaseArtifactValidationActionPlanStatusNode,
|
||||
rowsNode: releaseArtifactValidationActionPlanRowsNode,
|
||||
},
|
||||
);
|
||||
const releaseArtifactValidationActionPlanMountResult =
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: releaseArtifactValidationActionPlanRenderState,
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactValidationActionPlanMountNode,
|
||||
statusNode: releaseArtifactValidationActionPlanStatusNode,
|
||||
rowsNode: releaseArtifactValidationActionPlanRowsNode,
|
||||
});
|
||||
assert.equal(releaseArtifactValidationActionPlanRenderResult.rendered, true);
|
||||
assert.equal(releaseArtifactValidationActionPlanRenderResult.rowCount, 3);
|
||||
assert.equal(
|
||||
releaseArtifactValidationActionPlanRenderResult.rowIds.includes("next-command"),
|
||||
true,
|
||||
);
|
||||
assert.equal(releaseArtifactValidationActionPlanMountResult.ready, true);
|
||||
assert.equal(releaseArtifactValidationActionPlanMountResult.renderResult.rowCount, 3);
|
||||
const releaseArtifactGateExecutionSummary =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
||||
releaseArtifactValidation,
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactGateExecutionSummary.apiName,
|
||||
"project-release-gate-execution-summary-view-model",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
);
|
||||
assert.equal(releaseArtifactGateExecutionSummary.rows[0].value, "12/12 passed");
|
||||
const releaseArtifactGateExecutionSummaryRenderState =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
releaseArtifactGateExecutionSummary,
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactGateExecutionSummaryRenderState.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
);
|
||||
assert.equal(releaseArtifactGateExecutionSummaryRenderState.rows.length, 18);
|
||||
assert.equal(releaseArtifactGateExecutionSummaryRenderState.gateRows.length, 12);
|
||||
assert.equal(
|
||||
releaseArtifactGateExecutionSummaryRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-gate-execution-summary",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract().selectors.mount,
|
||||
"[data-workflow-overview-release-readiness-artifact-gate-execution-summary]",
|
||||
);
|
||||
assert.equal(createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness().ready, false);
|
||||
const releaseArtifactGateExecutionSummaryMountNode = mountDocument.createElement("section");
|
||||
releaseArtifactGateExecutionSummaryMountNode.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummary = "";
|
||||
const releaseArtifactGateExecutionSummaryStatusNode = mountDocument.createElement("p");
|
||||
releaseArtifactGateExecutionSummaryStatusNode.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummaryStatus = "";
|
||||
const releaseArtifactGateExecutionSummaryRowsNode = {
|
||||
...mountDocument.createElement("dl"),
|
||||
children: [],
|
||||
replaceChildren() {
|
||||
this.children = [];
|
||||
},
|
||||
append(...nodes) {
|
||||
this.children.push(...nodes);
|
||||
},
|
||||
};
|
||||
releaseArtifactGateExecutionSummaryRowsNode.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummaryRows = "";
|
||||
const releaseArtifactGateExecutionSummaryRenderResult =
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
||||
releaseArtifactGateExecutionSummaryRenderState,
|
||||
{
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactGateExecutionSummaryMountNode,
|
||||
statusNode: releaseArtifactGateExecutionSummaryStatusNode,
|
||||
rowsNode: releaseArtifactGateExecutionSummaryRowsNode,
|
||||
},
|
||||
);
|
||||
const releaseArtifactGateExecutionSummaryMountResult =
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: releaseArtifactGateExecutionSummaryRenderState,
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactGateExecutionSummaryMountNode,
|
||||
statusNode: releaseArtifactGateExecutionSummaryStatusNode,
|
||||
rowsNode: releaseArtifactGateExecutionSummaryRowsNode,
|
||||
});
|
||||
assert.equal(releaseArtifactGateExecutionSummaryRenderResult.rendered, true);
|
||||
assert.equal(releaseArtifactGateExecutionSummaryRenderResult.rowCount, 18);
|
||||
assert.equal(
|
||||
releaseArtifactGateExecutionSummaryRenderResult.rowIds.includes("gate-ui-node-smokes"),
|
||||
true,
|
||||
);
|
||||
assert.equal(releaseArtifactGateExecutionSummaryMountResult.ready, true);
|
||||
assert.equal(releaseArtifactGateExecutionSummaryMountResult.renderResult.rowCount, 18);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel().phase,
|
||||
"blocked",
|
||||
@@ -1435,6 +1724,86 @@ assert.equal(
|
||||
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "validation-summary")?.value,
|
||||
"Ready: Artifact evidence complete",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "gate-execution-summary")?.value,
|
||||
"Ready: All release gate evidence present",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "action-plan")?.value,
|
||||
"ready",
|
||||
);
|
||||
assert.equal(releaseArtifactUrlWorkflow.actionPlan.ready, true);
|
||||
assert.equal(releaseArtifactUrlWorkflow.actionPlan.nextCommand, null);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(
|
||||
releaseArtifactUrlWorkflow,
|
||||
).shellScript,
|
||||
"# Project release readiness artifact URL workflow is already ready.\n",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(
|
||||
releaseArtifactUrlWorkflow,
|
||||
).statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
);
|
||||
const releaseArtifactUrlWorkflowRenderState =
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(
|
||||
releaseArtifactUrlWorkflowSummary,
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowRenderState.statusLine,
|
||||
"Ready: Artifact URL workflow complete",
|
||||
);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-url-workflow",
|
||||
);
|
||||
assert.equal(
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract().selectors.mount,
|
||||
"[data-workflow-overview-release-readiness-artifact-url-workflow]",
|
||||
);
|
||||
assert.equal(createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness().ready, false);
|
||||
const releaseArtifactUrlWorkflowMountNode = mountDocument.createElement("section");
|
||||
releaseArtifactUrlWorkflowMountNode.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflow = "";
|
||||
const releaseArtifactUrlWorkflowStatusNode = mountDocument.createElement("p");
|
||||
releaseArtifactUrlWorkflowStatusNode.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflowStatus = "";
|
||||
const releaseArtifactUrlWorkflowRowsNode = {
|
||||
...mountDocument.createElement("dl"),
|
||||
children: [],
|
||||
replaceChildren() {
|
||||
this.children = [];
|
||||
},
|
||||
append(...nodes) {
|
||||
this.children.push(...nodes);
|
||||
},
|
||||
};
|
||||
releaseArtifactUrlWorkflowRowsNode.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflowRows = "";
|
||||
const releaseArtifactUrlWorkflowRenderResult =
|
||||
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
||||
releaseArtifactUrlWorkflowRenderState,
|
||||
{
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactUrlWorkflowMountNode,
|
||||
statusNode: releaseArtifactUrlWorkflowStatusNode,
|
||||
rowsNode: releaseArtifactUrlWorkflowRowsNode,
|
||||
},
|
||||
);
|
||||
const releaseArtifactUrlWorkflowMountResult =
|
||||
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: releaseArtifactUrlWorkflowRenderState,
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactUrlWorkflowMountNode,
|
||||
statusNode: releaseArtifactUrlWorkflowStatusNode,
|
||||
rowsNode: releaseArtifactUrlWorkflowRowsNode,
|
||||
});
|
||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true);
|
||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 8);
|
||||
assert.equal(
|
||||
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||
true,
|
||||
);
|
||||
assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true);
|
||||
assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 8);
|
||||
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||
artifactUrl: "/project-release-readiness.json",
|
||||
fetchRef: async () => ({
|
||||
@@ -1473,9 +1842,80 @@ const workflowOverviewApi = {
|
||||
getWorkflowOverviewApiSurfaceInventory: () => shellViewModel.shellApiSurfaceInventory,
|
||||
getWorkflowOverviewPersistenceSummary: () => shellViewModel.shellPersistenceSummary,
|
||||
validateWorkflowOverviewReleaseReadinessArtifactJson: () => ({ ready: true }),
|
||||
runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow: () => releaseArtifactJsonWorkflow,
|
||||
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel: () => releaseArtifactJsonWorkflowSummary,
|
||||
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan: () => releaseArtifactJsonWorkflowActionPlan,
|
||||
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState: () => releaseArtifactJsonWorkflowRenderState,
|
||||
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract:
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract,
|
||||
getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness: () => (
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness({
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactJsonWorkflowMountNode,
|
||||
statusNode: releaseArtifactJsonWorkflowStatusNode,
|
||||
rowsNode: releaseArtifactJsonWorkflowRowsNode,
|
||||
})
|
||||
),
|
||||
renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState: () => releaseArtifactJsonWorkflowRenderResult,
|
||||
mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState: () => releaseArtifactJsonWorkflowMountResult,
|
||||
loadWorkflowOverviewReleaseReadinessArtifactUrl: loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel: () => releaseArtifactUrlWorkflowSummary,
|
||||
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan: () => releaseArtifactUrlWorkflow.actionPlan,
|
||||
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState: () => releaseArtifactUrlWorkflowRenderState,
|
||||
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract:
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract,
|
||||
getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness: () => (
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness({
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactUrlWorkflowMountNode,
|
||||
statusNode: releaseArtifactUrlWorkflowStatusNode,
|
||||
rowsNode: releaseArtifactUrlWorkflowRowsNode,
|
||||
})
|
||||
),
|
||||
renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState: () => releaseArtifactUrlWorkflowRenderResult,
|
||||
mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState: () => releaseArtifactUrlWorkflowMountResult,
|
||||
getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel: () => releaseArtifactValidationSummary,
|
||||
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan: () => releaseArtifactValidation.actionPlan,
|
||||
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel: () => releaseArtifactGateExecutionSummary,
|
||||
getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel: () => releaseArtifactGateExecutionSummary,
|
||||
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState: () => (
|
||||
releaseArtifactValidationActionPlanRenderState
|
||||
),
|
||||
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract:
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract,
|
||||
getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness: () => (
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness({
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactValidationActionPlanMountNode,
|
||||
statusNode: releaseArtifactValidationActionPlanStatusNode,
|
||||
rowsNode: releaseArtifactValidationActionPlanRowsNode,
|
||||
})
|
||||
),
|
||||
renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState: () => (
|
||||
releaseArtifactValidationActionPlanRenderResult
|
||||
),
|
||||
mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState: () => (
|
||||
releaseArtifactValidationActionPlanMountResult
|
||||
),
|
||||
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState: () => (
|
||||
releaseArtifactGateExecutionSummaryRenderState
|
||||
),
|
||||
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract:
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract,
|
||||
getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness: () => (
|
||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness({
|
||||
documentRef: mountDocument,
|
||||
mountNode: releaseArtifactGateExecutionSummaryMountNode,
|
||||
statusNode: releaseArtifactGateExecutionSummaryStatusNode,
|
||||
rowsNode: releaseArtifactGateExecutionSummaryRowsNode,
|
||||
})
|
||||
),
|
||||
renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState: () => (
|
||||
releaseArtifactGateExecutionSummaryRenderResult
|
||||
),
|
||||
mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState: () => (
|
||||
releaseArtifactGateExecutionSummaryMountResult
|
||||
),
|
||||
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: () => releaseArtifactDisplay,
|
||||
getWorkflowOverviewReleaseReadinessArtifactRenderState: () => releaseArtifactRenderState,
|
||||
getWorkflowOverviewReleaseReadinessArtifactDomContract: createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||
|
||||
Reference in New Issue
Block a user