diff --git a/PROJECT_COMPLETION_TRACKER.md b/PROJECT_COMPLETION_TRACKER.md index e1b2744..11069d5 100644 --- a/PROJECT_COMPLETION_TRACKER.md +++ b/PROJECT_COMPLETION_TRACKER.md @@ -9,7 +9,7 @@ turn-by-turn continuation notes and next-batch execution records. ## Current Status - Active continuation file: `text14.txt` -- Latest completed batch: workflow overview release artifact URL workflow validation summary +- Latest completed batch: workflow overview release artifact URL workflow summary view-model API - Latest relevant commit: use `git log -1 --oneline` after each committed batch - Working tree at tracker creation: clean - Required policy: LinuxCNC remains the only CNC semantic source diff --git a/text14.txt b/text14.txt index fbcf875..ccb9d56 100644 --- a/text14.txt +++ b/text14.txt @@ -3308,6 +3308,73 @@ ui_node_smokes=ok 继续只做实质能力推进。优先选择可执行 gate、SDK/API surface、或真实 browser workflow; 不要做只整理断言或局部常量化的批次。 +五十、2026-06-16 继续执行记录:workflow overview release artifact URL workflow summary view-model API + +本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进, +把 release readiness artifact URL workflow 封装成外部 browser shell 可直接展示的 summary view-model。 +外部调用方现在可以在 URL fetch/validate/render/mount workflow 之后读取一个稳定 statusLine 和 rows, +不用自行解释 artifact URL、HTTP status、validation summary、render-state、mount-result 或 missing reasons。 + +完成内容: + +- `runtime/ui/ini-panel/ui-shell.js` 新增: + - `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()`; +- 新 summary view-model 返回: + - `apiName: ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow-summary-view-model`; + - `viewModelVersion: 1`; + - `phase/ready`; + - `title/statusText/detailText/statusLine`; + - rows:`artifact-url`、`http-status`、`validation-summary`、`render-state`、`mount-result`、`missing`; +- `createIniPanelShellWorkflowOverviewContract().methodNames` 新增: + - `getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel`; +- `createIniPanelLaunchApiManifest().methods` 新增同名 discovery method; +- `createIniPanelShellViewModel()` 暴露: + - `createWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel`; +- `workflow-overview.html` 暴露: + - `window.linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()`; +- `launch.html` 暴露: + - `window.linuxCncIniPanelLaunchApi.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()`; +- `runtime/sdk/src/index.js` re-export 新 UI helper; +- UI Node smoke、launch manifest smoke、shell integration manifest smoke、entry docs smoke、SDK surface smoke 覆盖新 helper/API; +- Browser smoke 覆盖 workflow overview iframe、launch API 和 standalone release artifact URL workflow summary; +- `docs/panel-entry.md`、`runtime/sdk/README.md`、`docs/project-release-handoff.md`、`verify_project_release_handoff_docs.mjs` + 记录 URL workflow summary view-model API; +- `PROJECT_COMPLETION_TRACKER.md` 同步 latest completed batch; +- 未新增控制按钮; +- 未在 browser/API 中执行 release gate 或 shell command; +- 未解析 G-code; +- 未解释 canonical events; +- 未新增 JS CNC 语义; +- 未运行 opt-in runtime probes; +- 未 promotion blocked runtime family; +- 未改变 LinuxCNC interpreter、tool、parameter、planner、kinematics、remap 或 LinuxCNC-owned + runtime semantics。 + +验证已通过(先行 targeted): + +```bash +wasm-port/tests/ui/node/verify_ui_node_smokes.sh +wasm-port/tests/sdk/node/verify_sdk_surface.sh +wasm-port/tests/docs/node/verify_project_release_handoff_docs.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_release_artifact_url_workflow_browser.sh +``` + +关键输出: + +```text +ui_node_smokes=ok +sdk_surface_node_smoke=ok +project_release_handoff_docs_node_smoke=ok +browser_ini_shell_integration_workflow_smoke=ok +browser_release_artifact_url_workflow_smoke=ok +``` + +下一步工作计划: + +继续只做实质能力推进。优先选择可执行 gate、SDK/API surface、或真实 browser workflow; +不要做只整理断言或局部常量化的批次。 + 四十九、2026-06-16 继续执行记录:workflow overview release artifact URL workflow validation summary 本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进, diff --git a/wasm-port/docs/panel-entry.md b/wasm-port/docs/panel-entry.md index b88b7b3..ce58540 100644 --- a/wasm-port/docs/panel-entry.md +++ b/wasm-port/docs/panel-entry.md @@ -169,6 +169,10 @@ when the shell should fetch the artifact JSON URL, validate it, and optionally mount the render-state into caller-owned DOM without executing gates. The URL workflow result includes `validationSummaryViewModel` so callers can show stable validation status and rows from the same fetch. +Use `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()` or +`linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()` +when the shell needs one stable status line and dashboard rows for the whole +artifact URL fetch/validate/render/mount workflow. Use `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel()` or `linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel()` when the shell needs stable artifact validation status text and dashboard rows diff --git a/wasm-port/docs/project-release-handoff.md b/wasm-port/docs/project-release-handoff.md index 637b857..c48d281 100644 --- a/wasm-port/docs/project-release-handoff.md +++ b/wasm-port/docs/project-release-handoff.md @@ -62,7 +62,10 @@ continuation records are in `../text14.txt`. can also call `linuxCncIniPanelWorkflowOverviewApi.loadWorkflowOverviewReleaseReadinessArtifactUrl()` to fetch the artifact URL, validate it, and optionally mount the resulting - read-only render state. When the outer shell needs DOM output, the workflow + read-only render state. That URL workflow includes a validation summary + view-model and can be summarized with + `getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()`. + When the outer shell needs DOM output, the workflow overview iframe also exposes display, render-state, DOM readiness, renderer, and mount helpers for the same release readiness artifact validation. diff --git a/wasm-port/runtime/sdk/README.md b/wasm-port/runtime/sdk/README.md index 9427cd5..b98d264 100644 --- a/wasm-port/runtime/sdk/README.md +++ b/wasm-port/runtime/sdk/README.md @@ -45,6 +45,7 @@ import { createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, createLinuxCncIniSdk, createLinuxCncInterpSdk, @@ -301,6 +302,8 @@ for external browser shells: browser or shell should fetch the artifact JSON URL, validate it, and optionally mount the resulting render-state into caller-owned DOM. The URL workflow result includes `validationSummaryViewModel` for dashboards. + `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()` + turns the full URL workflow result into stable status text and rows. `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`, `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`, `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel()`, diff --git a/wasm-port/runtime/sdk/src/index.js b/wasm-port/runtime/sdk/src/index.js index 3efe161..e1861c6 100644 --- a/wasm-port/runtime/sdk/src/index.js +++ b/wasm-port/runtime/sdk/src/index.js @@ -103,6 +103,7 @@ export { createIniPanelShellWorkflowOverviewEmbeddingRenderState, createIniPanelShellWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness, diff --git a/wasm-port/runtime/ui/ini-panel/launch.html b/wasm-port/runtime/ui/ini-panel/launch.html index 95ace22..0a7c305 100644 --- a/wasm-port/runtime/ui/ini-panel/launch.html +++ b/wasm-port/runtime/ui/ini-panel/launch.html @@ -300,6 +300,9 @@ loadWorkflowOverviewReleaseReadinessArtifactUrl: (options) => ( shellViewModel.loadWorkflowOverviewReleaseReadinessArtifactUrl(options) ), + getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel: (workflow) => ( + shellViewModel.createWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(workflow) + ), getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel: (validation) => ( shellViewModel.createWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(validation) ), diff --git a/wasm-port/runtime/ui/ini-panel/ui-shell.js b/wasm-port/runtime/ui/ini-panel/ui-shell.js index c0cff5e..a4d2f7b 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -197,6 +197,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr "getWorkflowOverviewReadiness", "mountWorkflowOverviewEmbedding", "loadWorkflowOverviewReleaseReadinessArtifactUrl", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "getWorkflowOverviewEmbeddingReport", "getWorkflowOverviewEmbeddingDisplayViewModel", @@ -1879,6 +1880,7 @@ export function createIniPanelShellWorkflowOverviewContract() { "getWorkflowOverviewPersistenceSummary", "validateWorkflowOverviewReleaseReadinessArtifactJson", "loadWorkflowOverviewReleaseReadinessArtifactUrl", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel", "getWorkflowOverviewReleaseReadinessArtifactRenderState", @@ -2048,6 +2050,61 @@ export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactU } } +export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel( + workflow = {}, +) { + const missing = Array.isArray(workflow?.missing) ? workflow.missing : []; + const ready = workflow?.ready === true; + const statusText = ready ? "Ready" : "Blocked"; + const detailText = ready + ? "Artifact URL workflow complete" + : (missing.length > 0 ? missing.join(", ") : workflow?.error ?? "artifact URL workflow blocked"); + return { + apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow-summary-view-model", + viewModelVersion: 1, + phase: ready ? "ready" : "blocked", + ready, + title: "Release artifact URL workflow", + statusText, + detailText, + statusLine: `${statusText}: ${detailText}`, + rows: [ + { + id: "artifact-url", + label: "Artifact URL", + value: workflow?.artifactUrl || "missing", + }, + { + id: "http-status", + label: "HTTP status", + value: workflow?.httpStatus == null ? "none" : String(workflow.httpStatus), + }, + { + id: "validation-summary", + label: "Validation summary", + value: workflow?.validationSummaryViewModel?.statusLine ?? "missing", + }, + { + id: "render-state", + label: "Render state", + value: workflow?.renderState?.statusLine ?? "missing", + }, + { + id: "mount-result", + label: "Mount result", + value: workflow?.mountResult + ? (workflow.mountResult.ready ? "ready" : workflow.mountResult.statusLine) + : "not requested", + }, + { + id: "missing", + label: "Missing workflow evidence", + value: missing.length > 0 ? missing.join(", ") : "none", + }, + ], + }; +} + export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel( validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{}"), ) { @@ -3292,6 +3349,8 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries createWorkflowOverviewReadiness: createIniPanelShellWorkflowOverviewReadiness, createWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel: createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, + createWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel: + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, loadWorkflowOverviewReleaseReadinessArtifactUrl: loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, mountWorkflowOverviewEmbedding: mountIniPanelShellWorkflowOverviewEmbedding, diff --git a/wasm-port/runtime/ui/ini-panel/workflow-overview.html b/wasm-port/runtime/ui/ini-panel/workflow-overview.html index e876a66..f25a96e 100644 --- a/wasm-port/runtime/ui/ini-panel/workflow-overview.html +++ b/wasm-port/runtime/ui/ini-panel/workflow-overview.html @@ -107,6 +107,7 @@ mountIniPanelShellWorkflowOverviewEmbeddingMountState, validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, @@ -148,6 +149,9 @@ loadWorkflowOverviewReleaseReadinessArtifactUrl: (options) => ( loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl(options) ), + getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel: (workflow) => ( + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(workflow) + ), getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel: (validation) => ( createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(validation) ), diff --git a/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html b/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html index 31f6757..b3def90 100644 --- a/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html +++ b/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html @@ -116,6 +116,7 @@ TOOL_TABLE = browser-shell-tool.tbl !launchApi?.getWorkflowOverviewReadiness || !launchApi?.mountWorkflowOverviewEmbedding || !launchApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl || + !launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel || !launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel || !launchApi?.getWorkflowOverviewEmbeddingReport || !launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel || @@ -372,6 +373,14 @@ TOOL_TABLE = browser-shell-tool.tbl .loadWorkflowOverviewReleaseReadinessArtifactUrl({ artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json", }); + const workflowOverviewReleaseArtifactUrlWorkflowSummary = workflowOverviewApi + .getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel( + workflowOverviewReleaseArtifactUrlWorkflow, + ); + const launchReleaseArtifactUrlWorkflowSummary = launchApi + .getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel( + launchReleaseArtifactUrlWorkflow, + ); const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({ overviewApi: workflowOverviewApi, }); @@ -478,6 +487,11 @@ TOOL_TABLE = browser-shell-tool.tbl "Ready: Artifact evidence complete", "shell workflow overview release artifact URL workflow summary", ); + assertEqual( + workflowOverviewReleaseArtifactUrlWorkflowSummary.statusLine, + "Ready: Artifact URL workflow complete", + "shell workflow overview release artifact URL workflow summary view model", + ); assertEqual( workflowOverviewReleaseArtifactUrlWorkflow.mountResult.ready, true, @@ -493,6 +507,11 @@ TOOL_TABLE = browser-shell-tool.tbl "Ready: Artifact evidence complete", "launch release artifact URL workflow summary", ); + assertEqual( + launchReleaseArtifactUrlWorkflowSummary.statusLine, + workflowOverviewReleaseArtifactUrlWorkflowSummary.statusLine, + "launch release artifact URL workflow summary view model", + ); assertEqual( document.querySelector("[data-external-release-artifact-status]").textContent, "Ready: No blocking reasons", diff --git a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html index 0df1449..90f1bb1 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -36,6 +36,7 @@ !workflowApi?.getWorkflowOverviewPersistenceSummary || !workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson || !workflowApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl || + !workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel || !workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel || !workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel || !workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState || @@ -257,6 +258,8 @@ artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json", mount: true, }); + const releaseArtifactUrlWorkflowSummary = workflowApi + .getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(releaseArtifactUrlWorkflow); assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness"); assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result"); assertEqual(releaseArtifactRenderResult.rowCount, 6, "workflow overview release artifact render row count"); @@ -269,6 +272,11 @@ "Ready: Artifact evidence complete", "workflow overview release artifact URL workflow summary", ); + assertEqual( + releaseArtifactUrlWorkflowSummary.statusLine, + "Ready: Artifact URL workflow complete", + "workflow overview release artifact URL workflow summary view model", + ); assertEqual(releaseArtifactUrlWorkflow.mountResult.ready, true, "workflow overview release artifact URL workflow mount"); assertEqual(releaseArtifactStatus.textContent, releaseArtifactRenderState.statusLine, "workflow overview release artifact rendered status"); assertEqual( diff --git a/wasm-port/tests/browser/release_artifact_url_workflow_smoke.html b/wasm-port/tests/browser/release_artifact_url_workflow_smoke.html index cb613a4..46ef190 100644 --- a/wasm-port/tests/browser/release_artifact_url_workflow_smoke.html +++ b/wasm-port/tests/browser/release_artifact_url_workflow_smoke.html @@ -27,7 +27,10 @@ try { const workflowDoc = await loadWorkflowOverviewFrame(); const workflowApi = workflowDoc.defaultView.linuxCncIniPanelWorkflowOverviewApi; - if (!workflowApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl) { + if ( + !workflowApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl || + !workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel + ) { throw new Error("workflow overview API did not expose release artifact URL workflow"); } @@ -56,6 +59,8 @@ artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json", mount: true, }); + const readyWorkflowSummary = workflowApi + .getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(readyWorkflow); assertEqual( readyWorkflow.apiName, "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow", @@ -69,6 +74,11 @@ "Ready: Artifact evidence complete", "ready workflow validation summary", ); + assertEqual( + readyWorkflowSummary.statusLine, + "Ready: Artifact URL workflow complete", + "ready workflow summary view model", + ); assertEqual(readyWorkflow.renderState.statusLine, "Ready: No blocking reasons", "ready workflow status"); assertEqual(readyWorkflow.mountResult.ready, true, "ready workflow mount readiness"); assertEqual(readyWorkflow.mountResult.renderResult.rowCount, 6, "ready workflow mount rows"); diff --git a/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs b/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs index 694492d..67cdbd2 100644 --- a/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs +++ b/wasm-port/tests/docs/node/verify_project_release_handoff_docs.mjs @@ -42,6 +42,7 @@ for (const phrase of [ "embedded gate manifest, result matrix, and action plan", "validateWorkflowOverviewReleaseReadinessArtifactJson()", "loadWorkflowOverviewReleaseReadinessArtifactUrl()", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()", "render-state", "DOM readiness", "createIniPanelShellApiSurfaceInventory()", diff --git a/wasm-port/tests/sdk/node/verify_sdk_surface.mjs b/wasm-port/tests/sdk/node/verify_sdk_surface.mjs index 587186e..a3f28dc 100644 --- a/wasm-port/tests/sdk/node/verify_sdk_surface.mjs +++ b/wasm-port/tests/sdk/node/verify_sdk_surface.mjs @@ -26,6 +26,7 @@ import { createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, createLinuxCncIniSdk, createLinuxCncInterpSdk, @@ -166,6 +167,10 @@ const requiredExports = [ "createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness", createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, ], + [ + "createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, + ], [ "createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, @@ -365,6 +370,12 @@ assert.equal( releaseReadinessArtifactUrlWorkflow.validationSummaryViewModel.statusLine, "Ready: Artifact evidence complete", ); +assert.equal( + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel( + releaseReadinessArtifactUrlWorkflow, + ).statusLine, + "Ready: Artifact URL workflow complete", +); assert.equal( createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState( createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel( diff --git a/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs b/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs index 468eb4c..35b377a 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs @@ -164,6 +164,7 @@ const requiredShellExports = [ "mountIniPanelShellWorkflowOverviewEmbeddingMountState", "validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson", "loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl", + "createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel", "createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState", diff --git a/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs b/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs index 6157f24..7126498 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs @@ -83,6 +83,7 @@ assert.deepEqual(manifest, { "getWorkflowOverviewReadiness", "mountWorkflowOverviewEmbedding", "loadWorkflowOverviewReleaseReadinessArtifactUrl", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "getWorkflowOverviewEmbeddingReport", "getWorkflowOverviewEmbeddingDisplayViewModel", @@ -244,6 +245,7 @@ assert.match(launchText, /\bgetWorkflowOverviewContract\b/); assert.match(launchText, /\bgetWorkflowOverviewReadiness\b/); assert.match(launchText, /\bmountWorkflowOverviewEmbedding\b/); assert.match(launchText, /\bloadWorkflowOverviewReleaseReadinessArtifactUrl\b/); +assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel\b/); assert.match(launchText, /\bgetWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/); diff --git a/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs b/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs index e1adac8..3d3f8ac 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs @@ -53,6 +53,7 @@ import { mountIniPanelShellWorkflowOverviewEmbeddingMountState, validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, @@ -188,7 +189,7 @@ assert.deepEqual(readiness, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 60, + launchMethods: 61, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -251,7 +252,7 @@ assert.deepEqual(handoffSummary, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 60, + launchMethods: 61, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -791,6 +792,7 @@ assert.deepEqual(createIniPanelShellWorkflowOverviewContract(), { "getWorkflowOverviewPersistenceSummary", "validateWorkflowOverviewReleaseReadinessArtifactJson", "loadWorkflowOverviewReleaseReadinessArtifactUrl", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel", "getWorkflowOverviewReleaseReadinessArtifactRenderState", @@ -837,6 +839,7 @@ assert.equal(typeof renderIniPanelShellWorkflowOverviewEmbeddingMountState, "fun assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingMountState, "function"); assert.equal(typeof validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, "function"); assert.equal(typeof loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, "function"); @@ -852,6 +855,10 @@ assert.equal( createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel().phase, "blocked", ); +assert.equal( + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel().phase, + "blocked", +); assert.deepEqual( createIniPanelShellWorkflowOverviewReadiness({ overviewApi: { @@ -866,6 +873,7 @@ assert.deepEqual( "getWorkflowOverviewPersistenceSummary", "validateWorkflowOverviewReleaseReadinessArtifactJson", "loadWorkflowOverviewReleaseReadinessArtifactUrl", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel", "getWorkflowOverviewReleaseReadinessArtifactRenderState", @@ -1292,7 +1300,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), { counts: { pages: 3, launcherLinks: 3, - launchMethods: 60, + launchMethods: 61, controlPageMethods: 11, persistenceCapabilities: 3, }, diff --git a/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs b/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs index 5815ca1..a31d5fc 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs @@ -58,6 +58,7 @@ import { mountIniPanelShellWorkflowOverviewEmbeddingMountState, validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, @@ -690,6 +691,7 @@ assert.deepEqual(shellViewModel.shellWorkflowOverviewContract, { "getWorkflowOverviewPersistenceSummary", "validateWorkflowOverviewReleaseReadinessArtifactJson", "loadWorkflowOverviewReleaseReadinessArtifactUrl", + "getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel", "getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel", "getWorkflowOverviewReleaseReadinessArtifactRenderState", @@ -1413,6 +1415,18 @@ assert.equal( assert.equal(releaseArtifactUrlWorkflow.renderState.statusLine, "Ready: No blocking reasons"); assert.equal(releaseArtifactUrlWorkflow.mountResult.ready, true); assert.equal(releaseArtifactUrlWorkflow.mountResult.renderResult.rowCount, 6); +const releaseArtifactUrlWorkflowSummary = + createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel( + releaseArtifactUrlWorkflow, + ); +assert.equal( + releaseArtifactUrlWorkflowSummary.statusLine, + "Ready: Artifact URL workflow complete", +); +assert.equal( + releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "validation-summary")?.value, + "Ready: Artifact evidence complete", +); const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({ artifactUrl: "/project-release-readiness.json", fetchRef: async () => ({ @@ -1452,6 +1466,7 @@ const workflowOverviewApi = { getWorkflowOverviewPersistenceSummary: () => shellViewModel.shellPersistenceSummary, validateWorkflowOverviewReleaseReadinessArtifactJson: () => ({ ready: true }), loadWorkflowOverviewReleaseReadinessArtifactUrl: loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, + getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel: () => releaseArtifactUrlWorkflowSummary, getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel: () => releaseArtifactValidationSummary, getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: () => releaseArtifactDisplay, getWorkflowOverviewReleaseReadinessArtifactRenderState: () => releaseArtifactRenderState,