Files
cnc_wams/wasm-port/docs/panel-entry.md
wangdequan 24e1fc18b1 上传真实浏览器仿真推进
结论:新增 LinuxCNC WASM 驱动的真实浏览器仿真页面,接入 browser smoke、release gate、SDK 与项目交付文档,并完成当前推进批次的验收记录。
2026-06-16 20:59:21 +08:00

35 KiB

INI Panel Entry

This page is the short entry map for the INI panel UI shell.

For the project-level acceptance path that references this UI surface, start with docs/project-release-handoff.md. Stable SDK imports for external callers are documented in runtime/sdk/README.md and should come from runtime/sdk/src/index.js. The workflow overview embedding helpers below are the read-only external-shell path for embedding and mounting overview state.

Shell Module

Use the shell-facing module when an outer UI needs entry links or a read-only control view:

import {
  INI_PANEL_ENTRIES,
  createControlPageBrowserApiManifest,
  createControlPageBrowserApiMethods,
  createControlPageBrowserApiSchema,
  createIniPanelLaunchApiManifest,
  createIniPanelLaunchApiSchema,
  createIniPanelLauncherLinkViewModel,
  createIniPanelShellControlPageContract,
  createIniPanelShellIntegrationManifest,
  createIniPanelShellIntegrationReadiness,
  createIniPanelShellIntegrationSchema,
  createIniPanelShellIntegrationWorkflowPlan,
  createIniPanelShellSessionHandoffActionPlan,
  createIniPanelShellSessionHandoffChecklist,
  createIniPanelShellSessionHandoffCompatibilityReport,
  createIniPanelShellSessionHandoffDisplayViewModel,
  createIniPanelShellSessionHandoffPackage,
  createIniPanelShellSessionHandoffPackageDisplayViewModel,
  createIniPanelShellSessionHandoffPackageMountDisplayViewModel,
  createIniPanelShellSessionHandoffPackageMountRenderState,
  createIniPanelShellSessionHandoffPackageMountState,
  createIniPanelShellSessionHandoffMountDomContract,
  createIniPanelShellSessionHandoffMountDomReadiness,
  mountIniPanelShellSessionHandoff,
  mountIniPanelShellSessionHandoffFromControlPage,
  createIniPanelShellSessionHandoffWorkflowSummary,
  createIniPanelShellSessionReadinessWorkflowReport,
  createIniPanelShellApiSurfaceInventory,
  createIniPanelShellSessionHandoffWorkflowDisplayViewModel,
  createIniPanelShellSessionHandoffWorkflowRenderState,
  createIniPanelShellSessionHandoffWorkflowDomContract,
  createIniPanelShellSessionHandoffWorkflowDomReadiness,
  createIniPanelShellWorkflowOverviewContract,
  createIniPanelShellWorkflowOverviewReadiness,
  createIniPanelShellWorkflowOverviewEmbeddingReport,
  createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel,
  createIniPanelShellWorkflowOverviewEmbeddingRenderState,
  createIniPanelShellWorkflowOverviewEmbeddingDomContract,
  createIniPanelShellWorkflowOverviewEmbeddingDomReadiness,
  mountIniPanelShellWorkflowOverviewEmbedding,
  renderIniPanelShellWorkflowOverviewEmbeddingState,
  mountIniPanelShellWorkflowOverviewEmbeddingState,
  createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel,
  createIniPanelShellWorkflowOverviewEmbeddingMountRenderState,
  createIniPanelShellWorkflowOverviewEmbeddingMountDomContract,
  createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
  renderIniPanelShellWorkflowOverviewEmbeddingMountState,
  mountIniPanelShellWorkflowOverviewEmbeddingMountState,
  validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
  loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
  createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
  createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
  createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
  createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
  renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
  mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
  renderIniPanelShellSessionHandoffWorkflowState,
  mountIniPanelShellSessionHandoffWorkflow,
  renderIniPanelShellSessionHandoffMountState,
  createIniPanelShellSessionHandoffPackageReport,
  createIniPanelShellSessionHandoffPackageRenderState,
  createIniPanelShellSessionHandoffPackageSchema,
  createIniPanelShellSessionHandoffRenderState,
  createIniPanelShellSessionHandoffSnapshot,
  createIniPanelShellSessionHandoffSummary,
  createIniPanelShellSessionHandoffSummarySchema,
  createIniPanelShellViewModel,
  getIniPanelEntryByHref,
  getVisibleIniPanelEntries,
  createMachineSessionPersistenceDisplayViewModel,
  createMachineSessionPersistenceRenderState,
  createMachineSessionPersistenceSummary,
  createMachineSessionControlPageController,
  createMachineSessionReadonlyStatus,
  createMachineSessionReadonlyStatusApiManifest,
  createMachineSessionReadinessFieldState,
  machineSessionReadinessLogLines,
  readMachineSessionReadinessWorkflow,
  readMachineSessionReadonlyStatus,
  loadMachineSessionForControlPageWorkflow,
  createControlPageSessionLoadState,
  refreshMachineSessionControlPage,
  controlPageStatusText,
  renderMachineSessionControlView,
  isSupportedIniPanelControlPageApiManifest,
  isSupportedIniPanelLaunchApiManifest,
  isSupportedIniPanelShellIntegrationManifest,
  isSupportedIniPanelShellSessionHandoffPackage,
  isSupportedIniPanelShellSessionHandoffSummary,
} from "../runtime/ui/ini-panel/ui-shell.js";

ui-shell.js re-exports the entry manifest, the read-only control-page controller, the unified read-only status API, the readonly-status API manifest, and the control-view renderer. It does not implement CNC behavior.

Pages

Page Path Role
Launch runtime/ui/ini-panel/launch.html Read-only entry page for available panel surfaces.
Edit and run runtime/ui/ini-panel/index.html Editable INI panel and existing run workflow surface.
Read-only control view runtime/ui/ini-panel/control-page.html Read-only control view backed by the panel API.
Workflow overview runtime/ui/ini-panel/workflow-overview.html Read-only shell handoff workflow overview surface.

Visible Entries

The visible launch entries come from getVisibleIniPanelEntries():

Entry id Href Title
edit-run ./index.html Open edit and run panel
control-view ./control-page.html Open read-only control view
workflow-overview ./workflow-overview.html Open shell handoff overview

Launcher pages can render links from createIniPanelLauncherLinkViewModel() without reading manifest field names directly. Each item has entryId, href, and label.

Outer shells can call createIniPanelShellViewModel() when they need one read-only model with pages, launcherLinks, and controlPage helpers for mounting the existing control-page controller, refresh workflow, and renderer. Use controlPage.readStatus or readMachineSessionReadonlyStatus() when an outer shell needs one stable read of stateBundle, workflowStatus, overview, controlView, sessionReadiness, session, runReadiness, and run. Use createMachineSessionReadonlyStatusApiManifest() or controlPage.readonlyStatusApiManifest when you only need the API shape and method names. Use readMachineSessionReadinessWorkflow() when an outer shell or panel flow needs a read-only ready/blocked readiness report before loading a machine session into WASM. createMachineSessionReadinessFieldState() and machineSessionReadinessLogLines() turn that report into stable fields and status text without parsing G-code or executing LinuxCNC behavior. Use createMachineSessionPersistenceSummary() or linuxCncIniPanelApi.getMachineSessionPersistenceSummary() when a browser panel or outer shell needs one read-only OPFS/session persistence summary with machine-file, session snapshot, session readiness, session load, readonly status, and handoff readiness rows. The launch page exposes the same helper as linuxCncIniPanelLaunchApi.getMachineSessionPersistenceSummary(), and the workflow overview page exposes it as linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewPersistenceSummary(). Use validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson() or linuxCncIniPanelWorkflowOverviewApi.validateWorkflowOverviewReleaseReadinessArtifactJson() when an outer shell needs to validate a project release readiness artifact JSON through the same read-only workflow overview surface. It parses the artifact, returns stable validation rows, and does not execute release gates or CNC behavior. Use runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow() or linuxCncIniPanelWorkflowOverviewApi.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow() when the shell already has artifact JSON and needs parse, validation, summary, action-plan, and gate execution summary output in one workflow result. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel() or linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel() when the shell needs the artifact's release gate execution summary rows. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness(), renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(), or mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState() when the shell needs to render those per-gate rows into caller-owned DOM. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel() or linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel() when the shell needs stable status text and rows for that JSON workflow. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan() or linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan() when the shell needs the JSON workflow next-command plan without inspecting internal workflow fields. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness(), renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(), or mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState() when the shell needs to render that JSON workflow state into caller-owned DOM. Use loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl() or linuxCncIniPanelWorkflowOverviewApi.loadWorkflowOverviewReleaseReadinessArtifactUrl() 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 createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness(), renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(), or mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState() when the shell needs to render that URL workflow state into caller-owned DOM. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan() or linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan() when the shell needs the ordered next-action/next-command plan for that URL workflow without executing release gates. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel() or linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel() when the shell needs stable artifact validation status text and dashboard rows without interpreting validation flags itself. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan() or linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan() when direct artifact JSON validation needs its own ordered next-command plan without executing release gates. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness(), renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(), or mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState() when the shell needs to render that validation action plan into caller-owned DOM. Use createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract(), createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness(), renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(), or mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState() when that validation needs to be rendered into caller-owned DOM. The workflow overview page exposes equivalent methods with the getWorkflowOverview..., renderWorkflowOverview..., and mountWorkflowOverview... prefixes. Use createMachineSessionPersistenceDisplayViewModel() and createMachineSessionPersistenceRenderState() when that summary needs stable display text, rows, status line, and dataset fields for caller-owned DOM. Use createIniPanelShellControlPageContract() or controlPage.contract when an outer shell needs a fast contract check for createController, loadSessionState, readStatus, refresh, renderView, the readonly status manifest, and its status fields before mounting the embedded panel. The contract lists readonly status fields for stateBundle, workflowStatus, overview, controlView, report, runReadiness, run, session, and status. The browser control page also exposes this contract through linuxCncIniPanelControlPageApi.getControlPageContract(), so real iframe-based smokes can verify the same API shape before reading the embedded panel state. Use linuxCncIniPanelControlPageApi.getControlPageApiMethods() when a browser outer page needs the exact exposed method list before calling the read-only control page API. Use createControlPageBrowserApiSchema(), createControlPageBrowserApiManifest(), or linuxCncIniPanelControlPageApi.getControlPageApiSchema() and linuxCncIniPanelControlPageApi.getControlPageApiManifest() when a browser outer page needs a versioned control-page API description before reading the embedded panel. Use isSupportedIniPanelControlPageApiManifest() or linuxCncIniPanelControlPageApi.isSupportedControlPageApiManifest() for a read-only compatibility predicate before consuming that manifest. Use linuxCncIniPanelControlPageApi.readControlPageStatus() when a browser outer page needs the same readonly status snapshot from the real embedded control page after save/load session workflows. The launch page exposes linuxCncIniPanelLaunchApi.getControlPageApiMethods() from the same shell view-model so entry pages can consume the available read-only control-page API list without loading the control-page iframe first. Use createIniPanelLaunchApiManifest() or linuxCncIniPanelLaunchApi.getLaunchApiManifest() when an outer shell needs a single read-only description of launch methods, visible entries, target pages, the control-page browser API methods, and OPFS/session persistence capabilities for machine files, session snapshots, and read-only status. Use createIniPanelLaunchApiSchema(), linuxCncIniPanelLaunchApi.getLaunchApiSchema(), or manifestVersion when an outer shell needs to check launch manifest compatibility before consuming these fields. Use isSupportedIniPanelLaunchApiManifest() or linuxCncIniPanelLaunchApi.isSupportedLaunchApiManifest() for a read-only compatibility predicate before using a launch manifest. Use createIniPanelShellIntegrationSchema(), createIniPanelShellIntegrationManifest(), linuxCncIniPanelLaunchApi.getShellIntegrationSchema(), or linuxCncIniPanelLaunchApi.getShellIntegrationManifest() when an outer shell needs one versioned read of pages, launcher links, launch API metadata, control-page API metadata, OPFS/session persistence capabilities, and current compatibility status. Use isSupportedIniPanelShellIntegrationManifest() when the outer shell needs to check that integration manifest before consuming it. Use createIniPanelShellIntegrationReadiness() or linuxCncIniPanelLaunchApi.getShellIntegrationReadiness() when the outer shell needs a read-only ready/blocked status, failed check names, API names, and counts for pages, methods, and persistence capabilities before mounting any embedded control page. Use createIniPanelShellIntegrationWorkflowPlan() when the outer shell needs a Node-testable read-only plan for the control-page target, required launch and control-page API methods, readiness gate, and readonly status handoff fields before opening a browser frame. Use createIniPanelShellSessionHandoffSummary() when the outer shell needs one read-only display summary of readiness, target page, persistence capabilities, readonly status fields, handoff methods, and blocking reasons. Browser shells can read the same summary through linuxCncIniPanelLaunchApi.getShellSessionHandoffSummary(). Use createIniPanelShellSessionHandoffSummarySchema() or linuxCncIniPanelLaunchApi.getShellSessionHandoffSummarySchema() for the versioned summary shape, and isSupportedIniPanelShellSessionHandoffSummary() or linuxCncIniPanelLaunchApi.isSupportedShellSessionHandoffSummary() before consuming a summary from a browser shell. Use createIniPanelShellSessionHandoffCompatibilityReport() or linuxCncIniPanelLaunchApi.getShellSessionHandoffCompatibilityReport() when an outer shell needs display-ready diagnostics for schema support, missing fields, api/version mismatches, and current blocking reasons before consuming the handoff summary. Use createIniPanelShellSessionHandoffDisplayViewModel() or linuxCncIniPanelLaunchApi.getShellSessionHandoffDisplayViewModel() when an outer shell needs the same diagnostics as stable read-only label/value rows for DOM display. Use createIniPanelShellSessionHandoffSnapshot() or linuxCncIniPanelLaunchApi.getShellSessionHandoffSnapshot() when an outer shell needs one read-only API read that includes readiness, handoff summary, compatibility report, and display view-model together. Use createIniPanelShellSessionHandoffRenderState() or linuxCncIniPanelLaunchApi.getShellSessionHandoffRenderState() when an outer shell needs the snapshot compressed into launch-side DOM state with a status line, stable rows, and [data-handoff-shell] phase/readiness flags. The launch page renders [data-handoff-status] and [data-handoff-rows] from this helper without adding control actions. Use createIniPanelShellSessionHandoffActionPlan() or linuxCncIniPanelLaunchApi.getShellSessionHandoffActionPlan() when an outer shell needs a read-only next-step description derived from the same snapshot: target page, required readonly methods, blocking reasons, display rows, and ready/blocked next step ids. The action plan describes what an outer shell can do next; it does not execute actions or add controls. Use createIniPanelShellSessionHandoffChecklist() or linuxCncIniPanelLaunchApi.getShellSessionHandoffChecklist() when an outer shell needs the same handoff state as stable health rows for display: render state, target page, load-session method, read-status method, blocking reasons, display rows, and next step ids. The checklist is read-only and does not execute the action plan. Use createIniPanelShellSessionHandoffPackage() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackage() when an outer shell needs one browser API read containing the launch/control method manifests, snapshot, render-state, action-plan, and checklist. The package is a read-only handoff artifact and does not execute action-plan steps. Use createIniPanelShellSessionHandoffPackageSchema() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageSchema() for the versioned package shape, and isSupportedIniPanelShellSessionHandoffPackage() or linuxCncIniPanelLaunchApi.isSupportedShellSessionHandoffPackage() before consuming a package from a browser shell. Use createIniPanelShellSessionHandoffPackageReport() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageReport() when an outer shell needs display-ready diagnostics for package schema support, missing package fields, missing manifest fields, api/version mismatches, and checklist blocking reasons. Use createIniPanelShellSessionHandoffPackageDisplayViewModel() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageDisplayViewModel() when an outer shell needs the package report compressed into stable read-only label/value rows for DOM display. Use createIniPanelShellSessionHandoffPackageRenderState() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageRenderState() when an outer shell needs the package display view-model compressed into launch-side DOM state. The launch page renders [data-handoff-status] and [data-handoff-rows] from the package render-state so the first page shows package-level schema/report status. Use createIniPanelShellSessionHandoffPackageMountState() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageMountState() when an outer shell needs one read-only mount-state that combines package render-state, the control-page target, required readonly methods, and the current control-page session readiness snapshot. Use createIniPanelShellSessionHandoffPackageMountDisplayViewModel() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageMountDisplayViewModel() when an outer shell needs mount-state checks as stable read-only label/value rows. Use createIniPanelShellSessionHandoffPackageMountRenderState() or linuxCncIniPanelLaunchApi.getShellSessionHandoffPackageMountRenderState() when those rows need a status line and [data-handoff-shell] style dataset flags for DOM rendering. Use createIniPanelShellSessionHandoffMountDomContract() or linuxCncIniPanelLaunchApi.getShellSessionHandoffMountDomContract() when an outer shell needs the required mount/status/rows selectors, mount dataset keys, row dataset keys, and render-result fields before rendering into shell-owned DOM. Use createIniPanelShellSessionHandoffMountDomReadiness() or linuxCncIniPanelLaunchApi.getShellSessionHandoffMountDomReadiness() to check that the required document and nodes exist before calling the renderer. Use mountIniPanelShellSessionHandoff() or linuxCncIniPanelLaunchApi.mountShellSessionHandoff() when an outer shell needs one browser-side workflow result containing the contract, DOM readiness, mount render-state, renderer result, and any mount error as data. Use mountIniPanelShellSessionHandoffFromControlPage() or linuxCncIniPanelLaunchApi.mountShellSessionHandoffFromControlPage() when an outer shell has a control-page API or already-observed session-load state and needs one read-only result containing the derived mount-state, mount display view-model, mount render-state, and DOM mount workflow result. Use readIniPanelShellSessionHandoffStatusFromControlPage() or linuxCncIniPanelLaunchApi.readShellSessionHandoffStatusFromControlPage() when an outer shell needs to read the control-page readonly status and verify the expected handoff status fields as a structured ready/blocked result. Use createIniPanelShellSessionHandoffWorkflowSummary() or linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowSummary() when an outer shell needs one stable end-to-end summary that combines mount workflow, control-page mount workflow, readonly status result, machine-session ready/blocked state, and current blocking reasons into display rows. Use createIniPanelShellSessionReadinessWorkflowReport() or linuxCncIniPanelLaunchApi.getShellSessionReadinessWorkflowReport() when an outer shell needs a machine-readable report for just the session readiness phase, missing reasons, and stable rows. The workflow overview page exposes the same report through linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewSessionReadinessReport(). Use createIniPanelShellApiSurfaceInventory() or linuxCncIniPanelLaunchApi.getShellApiSurfaceInventory() when an outer shell needs a machine-readable inventory of launch, control-page, workflow overview, persistence capabilities, session readiness report rows, and persistence summary rows. The workflow overview page exposes the same inventory through linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewApiSurfaceInventory(). When provided to createIniPanelShellSessionHandoffWorkflowSummary(), the inventory is also rendered as the read-only api-surface-inventory workflow summary row for browser overview pages and external shells. The same workflow summary accepts persistenceSummary from createMachineSessionPersistenceSummary() and renders it as the persistence-summary row, so a shell overview can show API coverage and OPFS/session persistence state together. Use createIniPanelShellSessionHandoffWorkflowDisplayViewModel() or linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowDisplayViewModel() when an outer shell needs that end-to-end summary compressed into stable title, statusText, detailText, and rows for direct display. Use createIniPanelShellSessionHandoffWorkflowRenderState() or linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowRenderState() when an outer shell needs that workflow display-model compressed into stable dataset, statusLine, and rows for direct DOM rendering. Use createIniPanelShellSessionHandoffWorkflowDomContract() or linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowDomContract() when an outer shell needs the required workflow mount/status/rows selectors, mount dataset keys, and row dataset keys before rendering workflow overview DOM. Use createIniPanelShellSessionHandoffWorkflowDomReadiness() or linuxCncIniPanelLaunchApi.getShellSessionHandoffWorkflowDomReadiness() to check that those workflow DOM nodes exist before rendering. Use renderIniPanelShellSessionHandoffWorkflowState() or linuxCncIniPanelLaunchApi.renderShellSessionHandoffWorkflowState() when an outer shell needs the shared read-only DOM renderer for workflow overview rows. Use mountIniPanelShellSessionHandoffWorkflow() or linuxCncIniPanelLaunchApi.mountShellSessionHandoffWorkflow() when an outer shell needs one structured workflow DOM mount result containing contract, readiness, render-state, render result, and any mount error as data. Use createIniPanelShellWorkflowOverviewContract() or linuxCncIniPanelLaunchApi.getWorkflowOverviewContract() when an outer shell needs the workflow-overview.html page href, browser API namespace, and method names before embedding that page. Use createIniPanelShellWorkflowOverviewReadiness() or linuxCncIniPanelLaunchApi.getWorkflowOverviewReadiness() to check whether a loaded workflow overview iframe exposes the expected read-only API. Use mountIniPanelShellWorkflowOverviewEmbedding() or linuxCncIniPanelLaunchApi.mountWorkflowOverviewEmbedding() when an outer shell needs one structured embedding result containing contract readiness, render-state, workflow overview mount result, and any mount error as data. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.mountWorkflowOverviewEmbedding() for the same read-only embedding path from inside the iframe. Use createIniPanelShellWorkflowOverviewEmbeddingReport() or linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingReport() when an outer shell needs display-ready diagnostics for overview API readiness, missing methods, embedding readiness, mount phase, render row count, and embedding errors. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingReport() for the same report shape. Use createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel() or linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingDisplayViewModel() when 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 createIniPanelShellWorkflowOverviewEmbeddingDomContract() or linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingDomContract() when an outer shell needs the required embedding report mount/status/rows selectors, mount dataset keys, row dataset keys, and render-result fields before adding a DOM renderer. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingDomContract(). Use createIniPanelShellWorkflowOverviewEmbeddingDomReadiness() or linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingDomReadiness() to check that the required document and embedding report DOM nodes exist before calling a renderer. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingDomReadiness(). Use renderIniPanelShellWorkflowOverviewEmbeddingState() or linuxCncIniPanelLaunchApi.renderWorkflowOverviewEmbeddingState() when an outer shell needs to render an embedding report render-state into existing mount/status/rows nodes and receive a structured read-only render result. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.renderWorkflowOverviewEmbeddingState(). Use mountIniPanelShellWorkflowOverviewEmbeddingState() or linuxCncIniPanelLaunchApi.mountWorkflowOverviewEmbeddingState() when an outer shell needs a non-throwing workflow result that combines embedding DOM readiness, render-state, render result, and any render error as structured data. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.mountWorkflowOverviewEmbeddingState(). Use createIniPanelShellWorkflowOverviewEmbeddingMountDisplayViewModel() or linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingMountDisplayViewModel() 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 createIniPanelShellWorkflowOverviewEmbeddingMountDomContract() or linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingMountDomContract() when 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 renderIniPanelShellWorkflowOverviewEmbeddingMountState() or linuxCncIniPanelLaunchApi.renderWorkflowOverviewEmbeddingMountState() when an outer shell needs to render a mount render-state into existing mount/status/rows nodes and receive a structured read-only render result. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.renderWorkflowOverviewEmbeddingMountState(). Use mountIniPanelShellWorkflowOverviewEmbeddingMountState() or linuxCncIniPanelLaunchApi.mountWorkflowOverviewEmbeddingMountState() when an outer shell needs a non-throwing mount workflow result for the mount render-state DOM. The workflow overview page also exposes linuxCncIniPanelWorkflowOverviewApi.mountWorkflowOverviewEmbeddingMountState(). Use renderIniPanelShellSessionHandoffMountState() or linuxCncIniPanelLaunchApi.renderShellSessionHandoffMountState() when an outer shell needs the shared read-only DOM renderer for those rows. The launch page renders the default waiting mount state into [data-handoff-mount], [data-handoff-mount-status], and [data-handoff-mount-rows] without opening the control page. The launch page also renders a default workflow overview into [data-handoff-workflow], [data-handoff-workflow-status], and [data-handoff-workflow-rows]. The browser workflow smoke tests/browser/ini_panel_shell_integration_workflow_smoke.html verifies the same external shell handoff: read integration manifest, pass readiness gate, open the control page target, mount waiting and ready mount-state into an external shell-owned [data-external-shell-mount] DOM region through the shared mount workflows, then read and validate readonly machine-session status through the shared status workflow.

The control-page refresh workflow lives in runtime/ui/ini-panel/control-page-refresh-workflow.js. Use refreshMachineSessionControlPage() when an outer shell needs a structured refresh result with phase, statusText, view, renderResult, and error. controlPageStatusText() formats the already-observed panel status fields for the read-only status line, and createControlPageRefreshState() is the stable state-shape helper used by the workflow.

The control-page session workflow lives in runtime/ui/ini-panel/control-page-session-workflow.js. Use loadMachineSessionForControlPageWorkflow() when an outer shell needs a read-only readiness snapshot for the embedded panel API, machine-session ready/blocked state, and first control view. createControlPageSessionLoadState() is the stable state-shape helper for waiting-panel, waiting-api, waiting-session, ready, and error phases.

Boundary

The entry shell only links pages and renders already-observed panel state. It does not parse G-code, infer canonical events, or implement LinuxCNC-owned tool, parameter, planner, or kinematics behavior.

Release validation for this surface is covered by verify_ui_node_smokes.sh, verify_ini_panel_browser.sh, and the project handoff docs smoke verify_project_release_handoff_docs.sh.