diff --git a/text13.txt b/text13.txt index 94df51b..fabfe4b 100644 --- a/text13.txt +++ b/text13.txt @@ -1399,3 +1399,96 @@ host_wasm_opfs_browser_smokes=ok `createIniPanelShellWorkflowOverviewEmbeddingRenderState()` 或等价 helper,把 embedding display view-model 压成稳定 `statusLine/dataset/rows`,供 launch 页面或外部 shell 用同一 DOM renderer 显示 overview embedding report;仍保持只读,不新增控制按钮,不解析 G-code。 + +十三、2026-06-15 继续执行记录:INI panel workflow overview embedding render-state + +本轮按 `text13.txt` 执行,不扩展 `text12.txt`。继续推进 browser/UI workflow,新增只读 +workflow-overview embedding render-state,把 embedding display view-model 压成稳定 +`statusLine/dataset/rows`,供 launch 页面、workflow overview 页面或外部 shell 复用同一种 +DOM renderer 数据结构显示 overview embedding report。 + +完成内容: + +- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingRenderState()`; +- render-state 输出: + - `apiName: "ini-panel-shell-workflow-overview-embedding-render-state"`; + - `renderStateVersion: 1`; + - `phase`; + - `ready`; + - `title`; + - `statusText`; + - `detailText`; + - `statusLine`; + - `rows`; + - `dataset.handoffPhase`; + - `dataset.handoffReady`; + - `dataset.handoffScope: "workflow-overview-embedding"`; +- `createIniPanelLaunchApiManifest().methods` 新增 + `getWorkflowOverviewEmbeddingRenderState`; +- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口 + `getWorkflowOverviewEmbeddingRenderState()`; +- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增 + `getWorkflowOverviewEmbeddingRenderState()`; +- `verify_ini_panel_ui_shell.mjs` 覆盖 render-state blocked shape 与 view-model helper 聚合关系; +- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API; +- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 render-state、 + launch method count 与文档记录; +- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API; +- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 render-state API; +- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的 + embedding render-state; +- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 读取同一 render-state; +- 未新增控制按钮; +- 未执行 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_ini_panel_ui_shell.sh +wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh +wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh +wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh +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。下一批建议新增只读 +`createIniPanelShellWorkflowOverviewEmbeddingDomContract()` 或等价 helper,定义 embedding +report 渲染所需 mount/status/rows selectors、dataset keys 和 render-result fields,并为后续 +真实 DOM renderer 做准备;仍保持只读,不新增控制按钮,不解析 G-code。 diff --git a/wasm-port/docs/panel-entry.md b/wasm-port/docs/panel-entry.md index a7db3bb..068a903 100644 --- a/wasm-port/docs/panel-entry.md +++ b/wasm-port/docs/panel-entry.md @@ -43,6 +43,7 @@ import { createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingRenderState, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -318,6 +319,11 @@ an outer shell needs that report compressed into stable `title`, `statusText`, `detailText`, and read-only label/value rows for direct rendering. The workflow overview page also exposes `linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingDisplayViewModel()`. +Use `createIniPanelShellWorkflowOverviewEmbeddingRenderState()` or +`linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingRenderState()` when an +outer shell needs that display view-model compressed into stable `statusLine`, +`dataset`, and rows for a shared DOM renderer. The workflow overview page also +exposes `linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingRenderState()`. 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 857c0f9..c47ea40 100644 --- a/wasm-port/runtime/ui/ini-panel/launch.html +++ b/wasm-port/runtime/ui/ini-panel/launch.html @@ -285,6 +285,9 @@ getWorkflowOverviewEmbeddingDisplayViewModel: (report) => ( shellViewModel.createWorkflowOverviewEmbeddingDisplayViewModel(report) ), + getWorkflowOverviewEmbeddingRenderState: (displayViewModel) => ( + shellViewModel.createWorkflowOverviewEmbeddingRenderState(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 ddee9ac..871c22a 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -161,6 +161,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr "mountWorkflowOverviewEmbedding", "getWorkflowOverviewEmbeddingReport", "getWorkflowOverviewEmbeddingDisplayViewModel", + "getWorkflowOverviewEmbeddingRenderState", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -1909,6 +1910,38 @@ export function createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel( }; } +export function createIniPanelShellWorkflowOverviewEmbeddingRenderState( + displayViewModel = createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel(), +) { + 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-render-state", + renderStateVersion: 1, + phase: ready ? "ready" : "blocked", + ready, + title: displayViewModel?.title ?? "Workflow overview embedding", + statusText, + detailText, + statusLine: `${statusText}: ${detailText}`, + rows, + dataset: { + handoffPhase: ready ? "ready" : "blocked", + handoffReady: ready ? "true" : "false", + handoffScope: "workflow-overview-embedding", + }, + }; +} + export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) { const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries); const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest); @@ -2069,6 +2102,7 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries mountWorkflowOverviewEmbedding: mountIniPanelShellWorkflowOverviewEmbedding, createWorkflowOverviewEmbeddingReport: createIniPanelShellWorkflowOverviewEmbeddingReport, createWorkflowOverviewEmbeddingDisplayViewModel: createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, + createWorkflowOverviewEmbeddingRenderState: createIniPanelShellWorkflowOverviewEmbeddingRenderState, 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 ca4f9ef..7dc7980 100644 --- a/wasm-port/runtime/ui/ini-panel/workflow-overview.html +++ b/wasm-port/runtime/ui/ini-panel/workflow-overview.html @@ -91,6 +91,7 @@ createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingRenderState, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -139,6 +140,9 @@ getWorkflowOverviewEmbeddingDisplayViewModel: (report) => ( createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel(report) ), + getWorkflowOverviewEmbeddingRenderState: (displayViewModel) => ( + createIniPanelShellWorkflowOverviewEmbeddingRenderState(displayViewModel) + ), }; diff --git a/wasm-port/tests/browser/ini_panel_launch_smoke.html b/wasm-port/tests/browser/ini_panel_launch_smoke.html index 12173d4..c8db255 100644 --- a/wasm-port/tests/browser/ini_panel_launch_smoke.html +++ b/wasm-port/tests/browser/ini_panel_launch_smoke.html @@ -105,6 +105,7 @@ !launchApi?.mountWorkflowOverviewEmbedding || !launchApi?.getWorkflowOverviewEmbeddingReport || !launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel || + !launchApi?.getWorkflowOverviewEmbeddingRenderState || !launchApi?.isSupportedShellSessionHandoffPackage || !launchApi?.getLauncherLinks || !launchApi?.getControlPageApiMethods @@ -631,7 +632,8 @@ !workflowOverviewApi?.getWorkflowOverviewReadinessFromApi || !workflowOverviewApi?.mountWorkflowOverviewEmbedding || !workflowOverviewApi?.getWorkflowOverviewEmbeddingReport || - !workflowOverviewApi?.getWorkflowOverviewEmbeddingDisplayViewModel + !workflowOverviewApi?.getWorkflowOverviewEmbeddingDisplayViewModel || + !workflowOverviewApi?.getWorkflowOverviewEmbeddingRenderState ) { throw new Error("workflow overview API namespace did not expose shell helpers"); } @@ -647,6 +649,9 @@ const workflowOverviewEmbeddingDisplay = launchApi.getWorkflowOverviewEmbeddingDisplayViewModel( workflowOverviewEmbeddingReport, ); + const workflowOverviewEmbeddingRenderState = launchApi.getWorkflowOverviewEmbeddingRenderState( + workflowOverviewEmbeddingDisplay, + ); assertEqual(workflowOverviewApi.getWorkflowOverviewContract().pageHref, "./workflow-overview.html", "workflow overview page contract"); assertEqual(workflowOverviewReadiness.ready, true, "workflow overview readiness"); assertEqual(workflowOverviewReadiness.missing.join(","), "", "workflow overview readiness missing"); @@ -665,12 +670,16 @@ assertEqual(workflowOverviewEmbeddingDisplay.title, "Workflow overview embedding", "workflow overview embedding display title"); assertEqual(workflowOverviewEmbeddingDisplay.statusText, "Blocked", "workflow overview embedding display status"); assertEqual(workflowOverviewEmbeddingDisplay.rows.length, 6, "workflow overview embedding display rows"); + assertEqual(workflowOverviewEmbeddingRenderState.statusLine, "Blocked: embedding:blocked, mount:blocked", "workflow overview embedding render-state status"); + assertEqual(workflowOverviewEmbeddingRenderState.dataset.handoffScope, "workflow-overview-embedding", "workflow overview embedding render-state scope"); assertEqual( - workflowOverviewApi.getWorkflowOverviewEmbeddingDisplayViewModel( - workflowOverviewApi.getWorkflowOverviewEmbeddingReport(workflowOverviewEmbedding), - ).rows.length, - workflowOverviewEmbeddingDisplay.rows.length, - "workflow overview self embedding display", + workflowOverviewApi.getWorkflowOverviewEmbeddingRenderState( + workflowOverviewApi.getWorkflowOverviewEmbeddingDisplayViewModel( + workflowOverviewApi.getWorkflowOverviewEmbeddingReport(workflowOverviewEmbedding), + ), + ).dataset.handoffScope, + workflowOverviewEmbeddingRenderState.dataset.handoffScope, + "workflow overview self embedding render-state", ); status.textContent = "browser_ini_launch_smoke=ok"; console.log("browser_ini_launch_smoke=ok"); 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 e29a90e..3c0a4b9 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 @@ -107,6 +107,7 @@ TOOL_TABLE = browser-shell-tool.tbl !launchApi?.mountWorkflowOverviewEmbedding || !launchApi?.getWorkflowOverviewEmbeddingReport || !launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel || + !launchApi?.getWorkflowOverviewEmbeddingRenderState || !launchApi?.isSupportedShellSessionHandoffPackage ) { throw new Error("launch API namespace did not expose shell integration helpers"); @@ -296,6 +297,9 @@ TOOL_TABLE = browser-shell-tool.tbl const workflowOverviewEmbeddingDisplay = launchApi.getWorkflowOverviewEmbeddingDisplayViewModel( workflowOverviewEmbeddingReport, ); + const workflowOverviewEmbeddingRenderState = launchApi.getWorkflowOverviewEmbeddingRenderState( + workflowOverviewEmbeddingDisplay, + ); 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"); @@ -308,6 +312,8 @@ TOOL_TABLE = browser-shell-tool.tbl assertEqual(workflowOverviewEmbeddingReport.error, null, "shell workflow overview embedding report error"); assertEqual(workflowOverviewEmbeddingDisplay.statusText, "Blocked", "shell workflow overview embedding display status"); assertEqual(workflowOverviewEmbeddingDisplay.rows.length, 6, "shell workflow overview embedding display rows"); + assertEqual(workflowOverviewEmbeddingRenderState.dataset.handoffScope, "workflow-overview-embedding", "shell workflow overview embedding render-state scope"); + assertEqual(workflowOverviewEmbeddingRenderState.rows.length, 6, "shell workflow overview embedding render-state rows"); 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 cb83933..9ad6b34 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -37,7 +37,8 @@ !workflowApi?.mountWorkflowOverview || !workflowApi?.createWorkflowOverviewRenderState || !workflowApi?.getWorkflowOverviewEmbeddingReport || - !workflowApi?.getWorkflowOverviewEmbeddingDisplayViewModel + !workflowApi?.getWorkflowOverviewEmbeddingDisplayViewModel || + !workflowApi?.getWorkflowOverviewEmbeddingRenderState ) { throw new Error("workflow overview API namespace did not expose overview helpers"); } @@ -62,6 +63,7 @@ error: null, }); const embeddingDisplay = workflowApi.getWorkflowOverviewEmbeddingDisplayViewModel(embeddingReport); + const embeddingRenderState = workflowApi.getWorkflowOverviewEmbeddingRenderState(embeddingDisplay); assertEqual(summary.summaryVersion, 1, "workflow overview summary version"); assertEqual(displayViewModel.title, "Shell handoff workflow", "workflow overview display title"); @@ -80,6 +82,8 @@ assertEqual(embeddingDisplay.title, "Workflow overview embedding", "workflow overview embedding display title"); assertEqual(embeddingDisplay.statusText, "Blocked", "workflow overview embedding display status"); assertEqual(embeddingDisplay.rows.length, 6, "workflow overview embedding display rows"); + assertEqual(embeddingRenderState.statusLine, "Blocked: embedding:blocked, mount:blocked", "workflow overview embedding render-state status"); + assertEqual(embeddingRenderState.dataset.handoffScope, "workflow-overview-embedding", "workflow overview embedding render-state scope"); 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 d7fa07b..eece29b 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 @@ -41,6 +41,7 @@ import { createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingRenderState, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -124,6 +125,7 @@ const requiredShellExports = [ "createIniPanelShellWorkflowOverviewReadiness", "createIniPanelShellWorkflowOverviewEmbeddingReport", "createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel", + "createIniPanelShellWorkflowOverviewEmbeddingRenderState", "mountIniPanelShellWorkflowOverviewEmbedding", "renderIniPanelShellSessionHandoffWorkflowState", "mountIniPanelShellSessionHandoffWorkflow", @@ -426,6 +428,7 @@ assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSumm assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSummarySchema\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingReport\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingRenderState\b/); assert.match(shellText, /\bexport function isSupportedIniPanelControlPageApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelLaunchApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/); @@ -456,6 +459,7 @@ assert.match(launchText, /\bgetShellSessionHandoffPackage\b/); assert.match(launchText, /\bgetShellSessionHandoffPackageReport\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingRenderState\b/); assert.match(launchText, /\bisSupportedShellSessionHandoffPackage\b/); assert.match(launchText, /\bdata-handoff-shell\b/); assert.match(launchText, /\bdata-handoff-status\b/); @@ -491,6 +495,7 @@ assert.match(docText, /\bcreateIniPanelShellSessionHandoffSummary\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffSummarySchema\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingReport\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingRenderState\b/); assert.match(docText, /\bisSupportedIniPanelControlPageApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelLaunchApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/); @@ -516,6 +521,7 @@ assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getShellSessionHandoffPackag assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getShellSessionHandoffPackageReport\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingReport\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingRenderState\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 e8e6527..ce409ec 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 @@ -81,6 +81,7 @@ assert.deepEqual(manifest, { "mountWorkflowOverviewEmbedding", "getWorkflowOverviewEmbeddingReport", "getWorkflowOverviewEmbeddingDisplayViewModel", + "getWorkflowOverviewEmbeddingRenderState", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -226,6 +227,7 @@ assert.match(launchText, /\bgetWorkflowOverviewReadiness\b/); assert.match(launchText, /\bmountWorkflowOverviewEmbedding\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingRenderState\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 632ec9f..857674d 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 @@ -37,6 +37,7 @@ import { createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingRenderState, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -166,7 +167,7 @@ assert.deepEqual(readiness, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 44, + launchMethods: 45, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -228,7 +229,7 @@ assert.deepEqual(handoffSummary, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 44, + launchMethods: 45, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -776,6 +777,14 @@ assert.equal( ).title, "Workflow overview embedding", ); +assert.equal( + createIniPanelShellWorkflowOverviewEmbeddingRenderState( + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel( + createIniPanelShellWorkflowOverviewEmbeddingReport(), + ), + ).dataset.handoffScope, + "workflow-overview-embedding", +); assert.deepEqual( createIniPanelShellWorkflowOverviewReadiness({ overviewApi: { @@ -1204,7 +1213,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), { counts: { pages: 3, launcherLinks: 3, - launchMethods: 44, + launchMethods: 45, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -1388,6 +1397,7 @@ assert.match(shellText, /\bexport function mountIniPanelShellSessionHandoffWorkf assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageReport\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingReport\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageSchema\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffRenderState\b/); @@ -1427,6 +1437,7 @@ assert.match(docText, /\bmountIniPanelShellSessionHandoffWorkflow\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffPackageReport\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingReport\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingRenderState\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 60e2f51..caa31e3 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 @@ -37,6 +37,7 @@ import { createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingRenderState, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -125,6 +126,7 @@ assert.equal(typeof createIniPanelShellWorkflowOverviewContract, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewReadiness, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingReport, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingRenderState, "function"); assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbedding, "function"); assert.equal(typeof renderIniPanelShellSessionHandoffWorkflowState, "function"); assert.equal(typeof mountIniPanelShellSessionHandoffWorkflow, "function"); @@ -799,6 +801,10 @@ assert.equal( shellViewModel.createWorkflowOverviewEmbeddingDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, ); +assert.equal( + shellViewModel.createWorkflowOverviewEmbeddingRenderState, + createIniPanelShellWorkflowOverviewEmbeddingRenderState, +); assert.equal(shellViewModel.createShellSessionHandoffPackageReport, createIniPanelShellSessionHandoffPackageReport); assert.equal(shellViewModel.createShellSessionHandoffPackageSchema, createIniPanelShellSessionHandoffPackageSchema); assert.equal(shellViewModel.isSupportedShellSessionHandoffPackage, isSupportedIniPanelShellSessionHandoffPackage); @@ -1245,6 +1251,27 @@ assert.deepEqual( rows: workflowOverviewEmbeddingReport.rows, }, ); +assert.deepEqual( + createIniPanelShellWorkflowOverviewEmbeddingRenderState( + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel(workflowOverviewEmbeddingReport), + ), + { + apiName: "ini-panel-shell-workflow-overview-embedding-render-state", + renderStateVersion: 1, + phase: "blocked", + ready: false, + title: "Workflow overview embedding", + statusText: "Blocked", + detailText: "embedding:blocked, mount:blocked", + statusLine: "Blocked: embedding:blocked, mount:blocked", + rows: workflowOverviewEmbeddingReport.rows, + dataset: { + handoffPhase: "blocked", + handoffReady: "false", + handoffScope: "workflow-overview-embedding", + }, + }, +); assert.deepEqual( mountIniPanelShellWorkflowOverviewEmbedding({ overviewApi: null }).readiness.missing, shellViewModel.shellWorkflowOverviewContract.methodNames,