From 543609cbe70d73dfd192389ff8f6d6328bd0a39a Mon Sep 17 00:00:00 2001 From: wangdequan Date: Mon, 15 Jun 2026 21:48:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E8=BF=9B=20INI=20=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=20workflow=20overview=20embedding=20mount=20DOM=20readiness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PROJECT_COMPLETION_TRACKER.md | 8 +- text14.txt | 91 +++++++++++++++++++ wasm-port/docs/panel-entry.md | 6 ++ wasm-port/runtime/ui/ini-panel/launch.html | 3 + wasm-port/runtime/ui/ini-panel/ui-shell.js | 34 +++++++ .../ui/ini-panel/workflow-overview.html | 4 + .../tests/browser/ini_panel_launch_smoke.html | 4 +- ...anel_shell_integration_workflow_smoke.html | 7 ++ .../ini_panel_workflow_overview_smoke.html | 17 +++- .../ui/node/verify_ini_panel_entry_docs.mjs | 6 ++ .../verify_ini_panel_launch_api_manifest.mjs | 2 + ...y_ini_panel_shell_integration_manifest.mjs | 10 +- .../ui/node/verify_ini_panel_ui_shell.mjs | 47 ++++++++++ 13 files changed, 230 insertions(+), 9 deletions(-) diff --git a/PROJECT_COMPLETION_TRACKER.md b/PROJECT_COMPLETION_TRACKER.md index 86e8887..d8aad2a 100644 --- a/PROJECT_COMPLETION_TRACKER.md +++ b/PROJECT_COMPLETION_TRACKER.md @@ -9,8 +9,8 @@ turn-by-turn continuation notes and next-batch execution records. ## Current Status - Active continuation file: `text14.txt` -- Latest completed batch: workflow overview embedding mount DOM contract -- Latest relevant commit: `861c854 推进 INI 面板 workflow overview embedding mount DOM contract` +- Latest completed batch: workflow overview embedding mount DOM readiness +- 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 @@ -44,7 +44,7 @@ The project is complete for the current scope when all of the following are true | OPFS/session persistence | In progress | Browser smoke passes; final project needs explicit project-level summary/report. | | SDK/API surface | In progress | Many UI helpers exist; final project needs SDK export/readme consolidation. | | Browser/UI workflow | In progress | Current focus: workflow overview embedding mount DOM readiness/renderer/mount closure. | -| Workflow overview embedding | In progress | Report/display/render, DOM contract/readiness/renderer, mount result/display/render, mount DOM contract exist. | +| Workflow overview embedding | In progress | Report/display/render, DOM contract/readiness/renderer, mount result/display/render, mount DOM contract/readiness exist. | | Host/runtime boundary proof | In progress | Host smoke passes; runtime families below remain blocked. | | Documentation/release gate | In progress | `text14.txt` has roadmap; README/docs final pass still pending. | @@ -74,7 +74,7 @@ Execute these in order unless a later user request explicitly changes priority. Current next task: -- Add `createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()`. +- Add mount render-state DOM renderer. Then complete the closure: diff --git a/text14.txt b/text14.txt index 27950a9..88d7177 100644 --- a/text14.txt +++ b/text14.txt @@ -618,3 +618,94 @@ host_wasm_opfs_browser_smokes=ok `createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()` 或等价 helper,检查 mount render-state contract 所需 document/mount/status/rows 节点是否存在,输出 missing/checks, 为后续 renderer 和 mount workflow 提供稳定前置 gate;仍保持只读,不新增控制按钮,不解析 G-code。 + +九、2026-06-15 继续执行记录:INI panel workflow overview embedding mount DOM readiness + +本轮按 `text14.txt` 执行,继续推进 Browser/UI workflow 收口批次。新增只读 +workflow-overview embedding mount DOM readiness,检查 mount render-state contract 所需 +document/mount/status/rows 节点是否存在,输出 missing/checks,为后续 renderer 和 mount workflow +提供稳定前置 gate。 + +完成内容: + +- `ui-shell.js` 新增 + `createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()`; +- mount DOM readiness 输出: + - `apiName: "ini-panel-shell-workflow-overview-embedding-mount-dom-readiness"`; + - `readinessVersion: 1`; + - `phase: "ready" | "blocked"`; + - `ready`; + - `missing`; + - `checks.document`; + - `checks.mount`; + - `checks.status`; + - `checks.rows`; + - `checks.rowDatasetPrefix`; + - `contract`; +- 支持传入自定义 contract、documentRef、mountNode、statusNode、rowsNode; +- `createIniPanelLaunchApiManifest().methods` 新增 + `getWorkflowOverviewEmbeddingMountDomReadiness`; +- `createIniPanelShellViewModel()` 暴露 + `createWorkflowOverviewEmbeddingMountDomReadiness`; +- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口 + `getWorkflowOverviewEmbeddingMountDomReadiness()`; +- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增真实 browser + 入口 `getWorkflowOverviewEmbeddingMountDomReadiness()`; +- `verify_ini_panel_ui_shell.mjs` 覆盖 missing document/nodes 与 ready nodes 两种 shape; +- `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` 动态创建 mount render-state DOM 节点并校验 ready readiness; +- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell 自定义 mount DOM contract 的 blocked readiness; +- `ini_panel_launch_smoke.html` 校验 launch API 与 workflow overview iframe API 暴露新 readiness helper; +- `PROJECT_COMPLETION_TRACKER.md` 同步当前完成批次与下一步任务; +- 未新增控制按钮; +- 未执行 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 收口批次。下一批建议新增只读 +`renderIniPanelShellWorkflowOverviewEmbeddingMountState()` 或等价 helper,使用 mount render-state 与 +mount DOM readiness/contract 渲染 status 与 rows,并返回结构化 render result;仍保持只读, +不新增控制按钮,不解析 G-code。 diff --git a/wasm-port/docs/panel-entry.md b/wasm-port/docs/panel-entry.md index 4978439..0e71791 100644 --- a/wasm-port/docs/panel-entry.md +++ b/wasm-port/docs/panel-entry.md @@ -52,6 +52,7 @@ import { createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, renderIniPanelShellSessionHandoffMountState, @@ -372,6 +373,11 @@ an outer shell needs the required mount/status/rows selectors, mount dataset keys, row dataset keys, and render-result fields before rendering the mount render-state. The workflow overview page also exposes `linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingMountDomContract()`. +Use `createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness()` or +`linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingMountDomReadiness()` to +check that the required document and mount render-state DOM nodes exist before +calling a renderer. The workflow overview page also exposes +`linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingMountDomReadiness()`. 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 aa2e7f6..df3bda7 100644 --- a/wasm-port/runtime/ui/ini-panel/launch.html +++ b/wasm-port/runtime/ui/ini-panel/launch.html @@ -311,6 +311,9 @@ getWorkflowOverviewEmbeddingMountDomContract: (options) => ( shellViewModel.createWorkflowOverviewEmbeddingMountDomContract(options) ), + getWorkflowOverviewEmbeddingMountDomReadiness: (options) => ( + shellViewModel.createWorkflowOverviewEmbeddingMountDomReadiness(options) + ), 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 5f940ee..b17964c 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -169,6 +169,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr "getWorkflowOverviewEmbeddingMountDisplayViewModel", "getWorkflowOverviewEmbeddingMountRenderState", "getWorkflowOverviewEmbeddingMountDomContract", + "getWorkflowOverviewEmbeddingMountDomReadiness", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -2253,6 +2254,37 @@ export function createIniPanelShellWorkflowOverviewEmbeddingMountDomContract({ }; } +export function createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness({ + rowDatasetPrefix = "workflowOverviewEmbeddingMount", + contract = createIniPanelShellWorkflowOverviewEmbeddingMountDomContract({ rowDatasetPrefix }), + documentRef = globalThis.document, + mountNode = documentRef?.querySelector?.(contract.selectors.mount), + statusNode = documentRef?.querySelector?.(contract.selectors.status), + rowsNode = documentRef?.querySelector?.(contract.selectors.rows), +} = {}) { + const checks = { + document: Boolean(documentRef?.createElement), + mount: Boolean(mountNode), + status: Boolean(statusNode), + rows: Boolean(rowsNode), + rowDatasetPrefix: Boolean(contract.rowDatasetPrefix), + }; + const missing = Object.entries(checks) + .filter(([, passed]) => !passed) + .map(([name]) => name); + const ready = missing.length === 0; + + return { + apiName: "ini-panel-shell-workflow-overview-embedding-mount-dom-readiness", + readinessVersion: 1, + phase: ready ? "ready" : "blocked", + ready, + missing, + checks, + contract, + }; +} + export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) { const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries); const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest); @@ -2424,6 +2456,8 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, createWorkflowOverviewEmbeddingMountDomContract: createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, + createWorkflowOverviewEmbeddingMountDomReadiness: + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, 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 79e8005..7379885 100644 --- a/wasm-port/runtime/ui/ini-panel/workflow-overview.html +++ b/wasm-port/runtime/ui/ini-panel/workflow-overview.html @@ -100,6 +100,7 @@ createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, } from "./ui-shell.js"; @@ -173,6 +174,9 @@ getWorkflowOverviewEmbeddingMountDomContract: (options) => ( createIniPanelShellWorkflowOverviewEmbeddingMountDomContract(options) ), + getWorkflowOverviewEmbeddingMountDomReadiness: (options) => ( + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness(options ?? { documentRef: document }) + ), }; diff --git a/wasm-port/tests/browser/ini_panel_launch_smoke.html b/wasm-port/tests/browser/ini_panel_launch_smoke.html index 311a6c5..2c4c790 100644 --- a/wasm-port/tests/browser/ini_panel_launch_smoke.html +++ b/wasm-port/tests/browser/ini_panel_launch_smoke.html @@ -113,6 +113,7 @@ !launchApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || !launchApi?.getWorkflowOverviewEmbeddingMountRenderState || !launchApi?.getWorkflowOverviewEmbeddingMountDomContract || + !launchApi?.getWorkflowOverviewEmbeddingMountDomReadiness || !launchApi?.isSupportedShellSessionHandoffPackage || !launchApi?.getLauncherLinks || !launchApi?.getControlPageApiMethods @@ -647,7 +648,8 @@ !workflowOverviewApi?.mountWorkflowOverviewEmbeddingState || !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountRenderState || - !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountDomContract + !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountDomContract || + !workflowOverviewApi?.getWorkflowOverviewEmbeddingMountDomReadiness ) { 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 c112adf..1dc1382 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 @@ -119,6 +119,7 @@ TOOL_TABLE = browser-shell-tool.tbl !launchApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || !launchApi?.getWorkflowOverviewEmbeddingMountRenderState || !launchApi?.getWorkflowOverviewEmbeddingMountDomContract || + !launchApi?.getWorkflowOverviewEmbeddingMountDomReadiness || !launchApi?.isSupportedShellSessionHandoffPackage ) { throw new Error("launch API namespace did not expose shell integration helpers"); @@ -349,6 +350,10 @@ TOOL_TABLE = browser-shell-tool.tbl rows: "[data-external-overview-embedding-mount-rows]", }, }); + const workflowOverviewEmbeddingMountDomReadiness = launchApi.getWorkflowOverviewEmbeddingMountDomReadiness({ + contract: workflowOverviewEmbeddingMountDomContract, + documentRef: document, + }); 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"); @@ -385,6 +390,8 @@ TOOL_TABLE = browser-shell-tool.tbl assertEqual(workflowOverviewEmbeddingMountRenderState.dataset.handoffScope, "workflow-overview-embedding-mount", "shell workflow overview embedding mount render scope"); assertEqual(workflowOverviewEmbeddingMountDomContract.selectors.rows, "[data-external-overview-embedding-mount-rows]", "shell workflow overview embedding mount DOM rows selector"); assertEqual(workflowOverviewEmbeddingMountDomContract.rowDatasetKeys.detail[0], "externalOverviewEmbeddingMountValue", "shell workflow overview embedding mount DOM detail key"); + assertEqual(workflowOverviewEmbeddingMountDomReadiness.ready, false, "shell workflow overview embedding mount DOM readiness"); + assertEqual(workflowOverviewEmbeddingMountDomReadiness.missing.join(","), "mount,status,rows", "shell workflow overview embedding mount DOM missing"); 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 303dc74..5849351 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -45,7 +45,8 @@ !workflowApi?.mountWorkflowOverviewEmbeddingState || !workflowApi?.getWorkflowOverviewEmbeddingMountDisplayViewModel || !workflowApi?.getWorkflowOverviewEmbeddingMountRenderState || - !workflowApi?.getWorkflowOverviewEmbeddingMountDomContract + !workflowApi?.getWorkflowOverviewEmbeddingMountDomContract || + !workflowApi?.getWorkflowOverviewEmbeddingMountDomReadiness ) { throw new Error("workflow overview API namespace did not expose overview helpers"); } @@ -116,6 +117,7 @@ embeddingMountDisplay, ); const embeddingMountDomContract = workflowApi.getWorkflowOverviewEmbeddingMountDomContract(); + const embeddingMountDomReadinessMissing = workflowApi.getWorkflowOverviewEmbeddingMountDomReadiness(); 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"); @@ -129,6 +131,19 @@ assertEqual(embeddingMountRenderState.rows.length, 7, "workflow overview embedding mount render rows"); assertEqual(embeddingMountDomContract.selectors.mount, "[data-workflow-overview-embedding-mount]", "workflow overview embedding mount DOM selector"); assertEqual(embeddingMountDomContract.rowDatasetKeys.term[0], "workflowOverviewEmbeddingMountRow", "workflow overview embedding mount row key"); + assertEqual(embeddingMountDomReadinessMissing.ready, false, "workflow overview embedding mount missing DOM readiness"); + assertEqual(embeddingMountDomReadinessMissing.missing.join(","), "mount,status,rows", "workflow overview embedding mount missing DOM nodes"); + const embeddingMountStateNode = workflowDoc.createElement("section"); + embeddingMountStateNode.dataset.workflowOverviewEmbeddingMount = ""; + const embeddingMountStatus = workflowDoc.createElement("p"); + embeddingMountStatus.dataset.workflowOverviewEmbeddingMountStatus = ""; + const embeddingMountRows = workflowDoc.createElement("dl"); + embeddingMountRows.dataset.workflowOverviewEmbeddingMountRows = ""; + embeddingMountStateNode.append(embeddingMountStatus, embeddingMountRows); + workflowDoc.body.append(embeddingMountStateNode); + const embeddingMountDomReadinessReady = workflowApi.getWorkflowOverviewEmbeddingMountDomReadiness(); + assertEqual(embeddingMountDomReadinessReady.ready, true, "workflow overview embedding mount ready DOM readiness"); + assertEqual(embeddingMountDomReadinessReady.missing.join(","), "", "workflow overview embedding mount ready DOM missing"); 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 44ea4f2..34dabe4 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 @@ -50,6 +50,7 @@ import { createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, renderIniPanelShellSessionHandoffMountState, @@ -141,6 +142,7 @@ const requiredShellExports = [ "createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel", "createIniPanelShellWorkflowOverviewEmbeddingMountRenderState", "createIniPanelShellWorkflowOverviewEmbeddingMountDomContract", + "createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness", "renderIniPanelShellSessionHandoffWorkflowState", "mountIniPanelShellSessionHandoffWorkflow", "renderIniPanelShellSessionHandoffMountState", @@ -450,6 +452,7 @@ assert.match(shellText, /\bexport function mountIniPanelShellWorkflowOverviewEmb assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness\b/); assert.match(shellText, /\bexport function isSupportedIniPanelControlPageApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelLaunchApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/); @@ -488,6 +491,7 @@ assert.match(launchText, /\bmountWorkflowOverviewEmbeddingState\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDomReadiness\b/); assert.match(launchText, /\bisSupportedShellSessionHandoffPackage\b/); assert.match(launchText, /\bdata-handoff-shell\b/); assert.match(launchText, /\bdata-handoff-status\b/); @@ -531,6 +535,7 @@ assert.match(docText, /\bmountIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness\b/); assert.match(docText, /\bisSupportedIniPanelControlPageApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelLaunchApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/); @@ -564,6 +569,7 @@ assert.match(docText, /\blinuxCncIniPanelLaunchApi\.mountWorkflowOverviewEmbeddi assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingMountDomReadiness\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 58881e8..20c86bf 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 @@ -89,6 +89,7 @@ assert.deepEqual(manifest, { "getWorkflowOverviewEmbeddingMountDisplayViewModel", "getWorkflowOverviewEmbeddingMountRenderState", "getWorkflowOverviewEmbeddingMountDomContract", + "getWorkflowOverviewEmbeddingMountDomReadiness", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -242,6 +243,7 @@ assert.match(launchText, /\bmountWorkflowOverviewEmbeddingState\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingMountDomReadiness\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 25bdfcc..94cd641 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 @@ -46,6 +46,7 @@ import { createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, createIniPanelShellSessionHandoffPackageReport, @@ -174,7 +175,7 @@ assert.deepEqual(readiness, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 52, + launchMethods: 53, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -236,7 +237,7 @@ assert.deepEqual(handoffSummary, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 52, + launchMethods: 53, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -802,6 +803,7 @@ assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingState, "function" assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, "function"); assert.deepEqual( createIniPanelShellWorkflowOverviewReadiness({ overviewApi: { @@ -1230,7 +1232,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), { counts: { pages: 3, launcherLinks: 3, - launchMethods: 52, + launchMethods: 53, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -1422,6 +1424,7 @@ assert.match(shellText, /\bexport function mountIniPanelShellWorkflowOverviewEmb assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageSchema\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffRenderState\b/); @@ -1469,6 +1472,7 @@ assert.match(docText, /\bmountIniPanelShellWorkflowOverviewEmbeddingState\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountRenderState\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDomContract\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness\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 e4062bc..3cd3a11 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 @@ -46,6 +46,7 @@ import { createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, renderIniPanelShellSessionHandoffMountState, @@ -142,6 +143,7 @@ assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingState, "function" assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountRenderState, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, "function"); assert.equal(typeof renderIniPanelShellSessionHandoffWorkflowState, "function"); assert.equal(typeof mountIniPanelShellSessionHandoffWorkflow, "function"); assert.equal(typeof renderIniPanelShellSessionHandoffMountState, "function"); @@ -847,6 +849,10 @@ assert.equal( shellViewModel.createWorkflowOverviewEmbeddingMountDomContract, createIniPanelShellWorkflowOverviewEmbeddingMountDomContract, ); +assert.equal( + shellViewModel.createWorkflowOverviewEmbeddingMountDomReadiness, + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness, +); assert.equal(shellViewModel.createShellSessionHandoffPackageReport, createIniPanelShellSessionHandoffPackageReport); assert.equal(shellViewModel.createShellSessionHandoffPackageSchema, createIniPanelShellSessionHandoffPackageSchema); assert.equal(shellViewModel.isSupportedShellSessionHandoffPackage, isSupportedIniPanelShellSessionHandoffPackage); @@ -1581,6 +1587,47 @@ assert.deepEqual( }).rowDatasetKeys.detail, ["externalEmbeddingMountValue", "externalEmbeddingMountStatus"], ); +assert.deepEqual( + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness({ documentRef: null }), + { + apiName: "ini-panel-shell-workflow-overview-embedding-mount-dom-readiness", + readinessVersion: 1, + phase: "blocked", + ready: false, + missing: ["document", "mount", "status", "rows"], + checks: { + document: false, + mount: false, + status: false, + rows: false, + rowDatasetPrefix: true, + }, + contract: createIniPanelShellWorkflowOverviewEmbeddingMountDomContract(), + }, +); +assert.deepEqual( + createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness({ + documentRef: mountDocument, + mountNode, + statusNode: mountStatusNode, + rowsNode: mountRowsNode, + }), + { + apiName: "ini-panel-shell-workflow-overview-embedding-mount-dom-readiness", + readinessVersion: 1, + phase: "ready", + ready: true, + missing: [], + checks: { + document: true, + mount: true, + status: true, + rows: true, + rowDatasetPrefix: true, + }, + contract: createIniPanelShellWorkflowOverviewEmbeddingMountDomContract(), + }, +); assert.deepEqual( mountIniPanelShellWorkflowOverviewEmbedding({ overviewApi: null }).readiness.missing, shellViewModel.shellWorkflowOverviewContract.methodNames,