# INI Panel Entry This page is the short entry map for the INI panel UI shell. ## Shell Module Use the shell-facing module when an outer UI needs entry links or a read-only control view: ```js import { INI_PANEL_ENTRIES, createControlPageBrowserApiMethods, createIniPanelLauncherLinkViewModel, createIniPanelShellControlPageContract, createIniPanelShellViewModel, getIniPanelEntryByHref, getVisibleIniPanelEntries, createMachineSessionControlPageController, createMachineSessionReadonlyStatus, createMachineSessionReadonlyStatusApiManifest, readMachineSessionReadonlyStatus, loadMachineSessionForControlPageWorkflow, createControlPageSessionLoadState, refreshMachineSessionControlPage, controlPageStatusText, renderMachineSessionControlView, } 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. | ## 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 | 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`, `session`, `runReadiness`, and `run`. Use `createMachineSessionReadonlyStatusApiManifest()` or `controlPage.readonlyStatusApiManifest` when you only need the API shape and method names. 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 `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. 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 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.