diff --git a/text13.txt b/text13.txt index 147f3c6..406241a 100644 --- a/text13.txt +++ b/text13.txt @@ -1948,3 +1948,93 @@ host_wasm_opfs_browser_smokes=ok `createIniPanelShellWorkflowOverviewEmbeddingMountRenderState()` 或等价 helper,把 mount display view-model 压缩成 stable `statusLine`、`dataset` 与 rows,作为后续共享 DOM renderer 的输入;仍保持只读, 不新增控制按钮,不解析 G-code。 + +十九、2026-06-15 继续执行记录:INI panel workflow overview embedding mount render-state + +本轮按 `text13.txt` 执行,不扩展 `text12.txt`。继续推进 browser/UI workflow,新增只读 +workflow-overview embedding mount render-state,把 mount display view-model 压缩成 stable +`statusLine`、`dataset` 与 rows,作为后续共享 DOM renderer 的输入。 + +完成内容: + +- `ui-shell.js` 新增 + `createIniPanelShellWorkflowOverviewEmbeddingMountRenderState()`; +- mount render-state 输出: + - `apiName: "ini-panel-shell-workflow-overview-embedding-mount-render-state"`; + - `renderStateVersion: 1`; + - `phase: "ready" | "blocked"`; + - `ready`; + - `title`; + - `statusText`; + - `detailText`; + - `statusLine`; + - `rows`; + - `dataset.handoffPhase`; + - `dataset.handoffReady`; + - `dataset.handoffScope: "workflow-overview-embedding-mount"`; +- `createIniPanelLaunchApiManifest().methods` 新增 + `getWorkflowOverviewEmbeddingMountRenderState`; +- `createIniPanelShellViewModel()` 暴露 + `createWorkflowOverviewEmbeddingMountRenderState`; +- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口 + `getWorkflowOverviewEmbeddingMountRenderState()`; +- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser + 入口 `getWorkflowOverviewEmbeddingMountRenderState()`; +- `verify_ini_panel_ui_shell.mjs` 覆盖 mount render-state 的 statusLine、dataset 与 rows; +- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API; +- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、launch method count 与文档记录; +- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API; +- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 mount render-state; +- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 从自定义 embedding DOM mount + display view-model 生成 mount render-state; +- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 render-state helper; +- 未新增控制按钮; +- 未执行 action-plan; +- 未解析 G-code; +- 未解释 canonical events; +- 未新增 JS CNC 语义; +- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或 + LinuxCNC-owned runtime semantics。 + +验证已通过: + +```bash +git diff --check +wasm-port/tests/ui/node/verify_ui_node_smokes.sh +SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh +wasm-port/tools/verify_vendor_sync.sh +wasm-port/tools/verify_no_standalone_cnc_semantics.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh +SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh +wasm-port/tests/host/verify_host_smokes.sh +``` + +关键输出: + +```text +ini_panel_ui_shell_node_smoke=ok +ini_panel_launch_api_manifest_node_smoke=ok +ini_panel_shell_integration_manifest_node_smoke=ok +ini_panel_entry_docs_node_smoke=ok +ui_node_smokes=ok +browser_ini_opfs_smoke=ok +browser_ini_control_page_smoke=ok +browser_ini_launch_smoke=ok +browser_ini_workflow_overview_smoke=ok +browser_ini_shell_integration_workflow_smoke=ok +vendor sync up to date +standalone CNC semantics guard complete +interp_wasm_node_smoke=ok +sim_configs_wasm_node_inventory_executed=28 +sim_configs_wasm_node_inventory_passed=28 +sim_configs_wasm_node_inventory_skipped=131 +sim_configs_wasm_node_inventory_unexpected_fail=0 +host_wasm_opfs_browser_smokes=ok +``` + +下一步建议: + +继续推进 browser/UI workflow。下一批建议新增只读 +`createIniPanelShellWorkflowOverviewEmbeddingMountDomContract()` 或等价 helper,为 mount render-state +定义 mount/status/rows selectors、dataset keys 与 render-result fields,给后续 DOM readiness 和 renderer +提供稳定契约;仍保持只读,不新增控制按钮,不解析 G-code。 diff --git a/wasm-port/docs/panel-entry.md b/wasm-port/docs/panel-entry.md index fa9a8a2..e788775 100644 --- a/wasm-port/docs/panel-entry.md +++ b/wasm-port/docs/panel-entry.md @@ -50,6 +50,7 @@ import { renderIniPanelShellWorkflowOverviewEmbeddingState, mountIniPanelShellWorkflowOverviewEmbeddingState, createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, renderIniPanelShellSessionHandoffMountState, @@ -358,6 +359,12 @@ when an outer shell needs that mount workflow result compressed into stable `title`, `statusText`, `detailText`, and read-only label/value rows. The workflow overview page also exposes `linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingMountDisplayViewModel()`. +Use `createIniPanelShellWorkflowOverviewEmbeddingMountRenderState()` or +`linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingMountRenderState()` when +an outer shell needs that mount display view-model compressed into stable +`statusLine`, `dataset`, and rows for a shared DOM renderer. The workflow +overview page also exposes +`linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingMountRenderState()`. Use `renderIniPanelShellSessionHandoffMountState()` or `linuxCncIniPanelLaunchApi.renderShellSessionHandoffMountState()` when an outer diff --git a/wasm-port/runtime/ui/ini-panel/launch.html b/wasm-port/runtime/ui/ini-panel/launch.html index da5865d..16cbf93 100644 --- a/wasm-port/runtime/ui/ini-panel/launch.html +++ b/wasm-port/runtime/ui/ini-panel/launch.html @@ -305,6 +305,9 @@ getWorkflowOverviewEmbeddingMountDisplayViewModel: (mountResult) => ( shellViewModel.createWorkflowOverviewEmbeddingMountDisplayViewModel(mountResult) ), + getWorkflowOverviewEmbeddingMountRenderState: (displayViewModel) => ( + shellViewModel.createWorkflowOverviewEmbeddingMountRenderState(displayViewModel) + ), isSupportedShellSessionHandoffPackage: shellViewModel.isSupportedShellSessionHandoffPackage, getLauncherLinks: () => shellViewModel.launcherLinks, getControlPageApiMethods: () => shellViewModel.controlPage.browserApiMethods, diff --git a/wasm-port/runtime/ui/ini-panel/ui-shell.js b/wasm-port/runtime/ui/ini-panel/ui-shell.js index 0600508..6ff4061 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -167,6 +167,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr "renderWorkflowOverviewEmbeddingState", "mountWorkflowOverviewEmbeddingState", "getWorkflowOverviewEmbeddingMountDisplayViewModel", + "getWorkflowOverviewEmbeddingMountRenderState", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -2193,6 +2194,38 @@ export function createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewMode }; } +export function createIniPanelShellWorkflowOverviewEmbeddingMountRenderState( + displayViewModel = createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel(), +) { + const rows = Array.isArray(displayViewModel?.rows) + ? displayViewModel.rows.map(({ id, label, value }) => ({ + id, + label, + value: value == null ? "" : String(value), + })) + : []; + const ready = displayViewModel?.phase === "ready" && displayViewModel?.statusText === "Ready"; + const statusText = displayViewModel?.statusText ?? (ready ? "Ready" : "Blocked"); + const detailText = displayViewModel?.detailText ?? "No blocking reasons"; + + return { + apiName: "ini-panel-shell-workflow-overview-embedding-mount-render-state", + renderStateVersion: 1, + phase: ready ? "ready" : "blocked", + ready, + title: displayViewModel?.title ?? "Workflow overview embedding mount", + statusText, + detailText, + statusLine: `${statusText}: ${detailText}`, + rows, + dataset: { + handoffPhase: ready ? "ready" : "blocked", + handoffReady: ready ? "true" : "false", + handoffScope: "workflow-overview-embedding-mount", + }, + }; +} + export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) { const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries); const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest); @@ -2360,6 +2393,8 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries mountWorkflowOverviewEmbeddingState: mountIniPanelShellWorkflowOverviewEmbeddingState, createWorkflowOverviewEmbeddingMountDisplayViewModel: createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, + createWorkflowOverviewEmbeddingMountRenderState: + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, isSupportedShellSessionHandoffPackage: isSupportedIniPanelShellSessionHandoffPackage, controlPage: { browserApiSchema: createControlPageBrowserApiSchema(), diff --git a/wasm-port/runtime/ui/ini-panel/workflow-overview.html b/wasm-port/runtime/ui/ini-panel/workflow-overview.html index 42c7023..681541e 100644 --- a/wasm-port/runtime/ui/ini-panel/workflow-overview.html +++ b/wasm-port/runtime/ui/ini-panel/workflow-overview.html @@ -98,6 +98,7 @@ renderIniPanelShellWorkflowOverviewEmbeddingState, mountIniPanelShellWorkflowOverviewEmbeddingState, createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, } from "./ui-shell.js"; @@ -165,6 +166,9 @@ getWorkflowOverviewEmbeddingMountDisplayViewModel: (mountResult) => ( createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel(mountResult) ), + getWorkflowOverviewEmbeddingMountRenderState: (displayViewModel) => ( + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState(displayViewModel) + ), }; diff --git a/wasm-port/tests/browser/ini_panel_launch_smoke.html b/wasm-port/tests/browser/ini_panel_launch_smoke.html index 14f3c09..2e05040 100644 --- a/wasm-port/tests/browser/ini_panel_launch_smoke.html +++ b/wasm-port/tests/browser/ini_panel_launch_smoke.html @@ -111,6 +111,7 @@ !launchApi?.renderWorkflowOverviewEmbeddingState || !launchApi?.mountWorkflowOverviewEmbeddingState || !launchApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || + !launchApi?.getWorkflowOverviewEmbeddingMountRenderState || !launchApi?.isSupportedShellSessionHandoffPackage || !launchApi?.getLauncherLinks || !launchApi?.getControlPageApiMethods @@ -643,7 +644,8 @@ !workflowOverviewApi?.getWorkflowOverviewEmbeddingDomReadiness || !workflowOverviewApi?.renderWorkflowOverviewEmbeddingState || !workflowOverviewApi?.mountWorkflowOverviewEmbeddingState || - !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel + !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || + !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountRenderState ) { throw new Error("workflow overview API namespace did not expose shell helpers"); } 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 5f34dae..0500437 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 @@ -117,6 +117,7 @@ TOOL_TABLE = browser-shell-tool.tbl !launchApi?.renderWorkflowOverviewEmbeddingState || !launchApi?.mountWorkflowOverviewEmbeddingState || !launchApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || + !launchApi?.getWorkflowOverviewEmbeddingMountRenderState || !launchApi?.isSupportedShellSessionHandoffPackage ) { throw new Error("launch API namespace did not expose shell integration helpers"); @@ -336,6 +337,9 @@ TOOL_TABLE = browser-shell-tool.tbl const workflowOverviewEmbeddingMountDisplay = launchApi.getWorkflowOverviewEmbeddingMountDisplayViewModel( workflowOverviewEmbeddingMountState, ); + const workflowOverviewEmbeddingMountRenderState = launchApi.getWorkflowOverviewEmbeddingMountRenderState( + workflowOverviewEmbeddingMountDisplay, + ); assertEqual(workflowOverviewReadiness.ready, true, "shell workflow overview iframe readiness"); assertEqual(workflowOverviewReadiness.missing.join(","), "", "shell workflow overview iframe missing methods"); assertEqual(workflowOverviewEmbedding.apiName, "ini-panel-shell-workflow-overview-embedding", "shell workflow overview embedding API"); @@ -368,6 +372,8 @@ TOOL_TABLE = browser-shell-tool.tbl assertEqual(workflowOverviewEmbeddingMountDisplay.title, "Workflow overview embedding mount", "shell workflow overview embedding mount display title"); assertEqual(workflowOverviewEmbeddingMountDisplay.rows.length, 7, "shell workflow overview embedding mount display rows"); assertEqual(workflowOverviewEmbeddingMountDisplay.detailText, "mount:blocked", "shell workflow overview embedding mount display detail"); + assertEqual(workflowOverviewEmbeddingMountRenderState.statusLine, "Blocked: mount:blocked", "shell workflow overview embedding mount render status"); + assertEqual(workflowOverviewEmbeddingMountRenderState.dataset.handoffScope, "workflow-overview-embedding-mount", "shell workflow overview embedding mount render scope"); const controlDoc = await loadFrame(`../../runtime/ui/ini-panel/${controlTarget.href.slice(2)}`); const controlPageApi = controlDoc.defaultView.linuxCncIniPanelControlPageApi; 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 ef3f149..e913b3a 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -43,7 +43,8 @@ !workflowApi?.getWorkflowOverviewEmbeddingDomReadiness || !workflowApi?.renderWorkflowOverviewEmbeddingState || !workflowApi?.mountWorkflowOverviewEmbeddingState || - !workflowApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel + !workflowApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || + !workflowApi?.getWorkflowOverviewEmbeddingMountRenderState ) { throw new Error("workflow overview API namespace did not expose overview helpers"); } @@ -110,6 +111,9 @@ const embeddingMountDisplay = workflowApi.getWorkflowOverviewEmbeddingMountDisplayViewModel( embeddingMountState, ); + const embeddingMountRenderState = workflowApi.getWorkflowOverviewEmbeddingMountRenderState( + embeddingMountDisplay, + ); assertEqual(embeddingRenderResult.rendered, true, "workflow overview embedding render result"); assertEqual(embeddingRenderResult.rowCount, 6, "workflow overview embedding render row count"); assertEqual(embeddingRenderResult.dataset.handoffScope, "workflow-overview-embedding", "workflow overview embedding render scope"); @@ -119,6 +123,8 @@ assertEqual(embeddingMountState.renderResult.rowCount, 6, "workflow overview embedding mount row count"); assertEqual(embeddingMountDisplay.statusText, "Blocked", "workflow overview embedding mount display status"); assertEqual(embeddingMountDisplay.rows.length, 7, "workflow overview embedding mount display rows"); + assertEqual(embeddingMountRenderState.statusLine, "Blocked: mount:blocked", "workflow overview embedding mount render status"); + assertEqual(embeddingMountRenderState.rows.length, 7, "workflow overview embedding mount render rows"); assertEqual( workflowDoc.querySelector("[data-handoff-workflow]").dataset.handoffScope, "workflow", 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 84cb789..a2f1591 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 @@ -48,6 +48,7 @@ import { renderIniPanelShellWorkflowOverviewEmbeddingState, mountIniPanelShellWorkflowOverviewEmbeddingState, createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, renderIniPanelShellSessionHandoffMountState, @@ -137,6 +138,7 @@ const requiredShellExports = [ "renderIniPanelShellWorkflowOverviewEmbeddingState", "mountIniPanelShellWorkflowOverviewEmbeddingState", "createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel", + "createIniPanelShellWorkflowOverviewEmbeddingMountRenderState", "renderIniPanelShellSessionHandoffWorkflowState", "mountIniPanelShellSessionHandoffWorkflow", "renderIniPanelShellSessionHandoffMountState", @@ -444,6 +446,7 @@ assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEm assert.match(shellText, /\bexport function renderIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(shellText, /\bexport function mountIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(shellText, /\bexport function isSupportedIniPanelControlPageApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelLaunchApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/); @@ -480,6 +483,7 @@ assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDomReadiness\b/); assert.match(launchText, /\brenderWorkflowOverviewEmbeddingState\b/); assert.match(launchText, /\bmountWorkflowOverviewEmbeddingState\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(launchText, /\bisSupportedShellSessionHandoffPackage\b/); assert.match(launchText, /\bdata-handoff-shell\b/); assert.match(launchText, /\bdata-handoff-status\b/); @@ -521,6 +525,7 @@ assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingDomReadines assert.match(docText, /\brenderIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\bmountIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(docText, /\bisSupportedIniPanelControlPageApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelLaunchApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/); @@ -552,6 +557,7 @@ assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbedding assert.match(docText, /\blinuxCncIniPanelLaunchApi\.renderWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.mountWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.isSupportedShellSessionHandoffPackage\b/); assert.match(docText, /\bdata-handoff-shell\b/); assert.match(docText, /\bdata-handoff-status\b/); 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 efaec30..080c615 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 @@ -87,6 +87,7 @@ assert.deepEqual(manifest, { "renderWorkflowOverviewEmbeddingState", "mountWorkflowOverviewEmbeddingState", "getWorkflowOverviewEmbeddingMountDisplayViewModel", + "getWorkflowOverviewEmbeddingMountRenderState", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -238,6 +239,7 @@ assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDomReadiness\b/); assert.match(launchText, /\brenderWorkflowOverviewEmbeddingState\b/); assert.match(launchText, /\bmountWorkflowOverviewEmbeddingState\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(launchText, /\bisSupportedShellSessionHandoffPackage\b/); assert.match(launchText, /\bdata-handoff-workflow\b/); assert.match(launchText, /\bdata-handoff-workflow-status\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 c912f58..8cadb88 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 @@ -44,6 +44,7 @@ import { renderIniPanelShellWorkflowOverviewEmbeddingState, mountIniPanelShellWorkflowOverviewEmbeddingState, createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, createIniPanelShellSessionHandoffPackageReport, @@ -172,7 +173,7 @@ assert.deepEqual(readiness, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 50, + launchMethods: 51, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -234,7 +235,7 @@ assert.deepEqual(handoffSummary, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 50, + launchMethods: 51, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -798,6 +799,7 @@ assert.equal(createIniPanelShellWorkflowOverviewEmbeddingDomReadiness().ready, f assert.equal(typeof renderIniPanelShellWorkflowOverviewEmbeddingState, "function"); assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingState, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, "function"); assert.deepEqual( createIniPanelShellWorkflowOverviewReadiness({ overviewApi: { @@ -1226,7 +1228,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), { counts: { pages: 3, launcherLinks: 3, - launchMethods: 50, + launchMethods: 51, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -1416,6 +1418,7 @@ assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEm assert.match(shellText, /\bexport function renderIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(shellText, /\bexport function mountIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageSchema\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffRenderState\b/); @@ -1461,6 +1464,7 @@ assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingDomReadines assert.match(docText, /\brenderIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\bmountIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffPackageRenderState\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffPackageSchema\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffRenderState\b/); 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 a5387fa..d9a308b 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 @@ -44,6 +44,7 @@ import { renderIniPanelShellWorkflowOverviewEmbeddingState, mountIniPanelShellWorkflowOverviewEmbeddingState, createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, renderIniPanelShellSessionHandoffMountState, @@ -138,6 +139,7 @@ assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbedding, "function"); assert.equal(typeof renderIniPanelShellWorkflowOverviewEmbeddingState, "function"); assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingState, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, "function"); assert.equal(typeof renderIniPanelShellSessionHandoffWorkflowState, "function"); assert.equal(typeof mountIniPanelShellSessionHandoffWorkflow, "function"); assert.equal(typeof renderIniPanelShellSessionHandoffMountState, "function"); @@ -835,6 +837,10 @@ assert.equal( shellViewModel.createWorkflowOverviewEmbeddingMountDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, ); +assert.equal( + shellViewModel.createWorkflowOverviewEmbeddingMountRenderState, + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, +); assert.equal(shellViewModel.createShellSessionHandoffPackageReport, createIniPanelShellSessionHandoffPackageReport); assert.equal(shellViewModel.createShellSessionHandoffPackageSchema, createIniPanelShellSessionHandoffPackageSchema); assert.equal(shellViewModel.isSupportedShellSessionHandoffPackage, isSupportedIniPanelShellSessionHandoffPackage); @@ -1484,6 +1490,63 @@ assert.deepEqual( value: "document, mount, status, rows", }, ); +assert.deepEqual( + createIniPanelShellWorkflowOverviewEmbeddingMountRenderState( + createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel(workflowOverviewEmbeddingMountResult), + ), + { + apiName: "ini-panel-shell-workflow-overview-embedding-mount-render-state", + renderStateVersion: 1, + phase: "blocked", + ready: false, + title: "Workflow overview embedding mount", + statusText: "Blocked", + detailText: "mount:blocked", + statusLine: "Blocked: mount:blocked", + rows: [ + { + id: "mount-ready", + label: "Mount readiness", + value: "blocked", + }, + { + id: "dom-readiness", + label: "DOM readiness", + value: "ready", + }, + { + id: "missing-dom", + label: "Missing DOM", + value: "none", + }, + { + id: "render-state", + label: "Render state", + value: "Blocked: embedding:blocked, mount:blocked", + }, + { + id: "render-result", + label: "Render result", + value: "rendered", + }, + { + id: "render-row-count", + label: "Render row count", + value: "6", + }, + { + id: "error", + label: "Error", + value: "none", + }, + ], + dataset: { + handoffPhase: "blocked", + handoffReady: "false", + handoffScope: "workflow-overview-embedding-mount", + }, + }, +); assert.deepEqual( mountIniPanelShellWorkflowOverviewEmbedding({ overviewApi: null }).readiness.missing, shellViewModel.shellWorkflowOverviewContract.methodNames,