推进 workflow overview 发布 artifact DOM workflow
This commit is contained in:
@@ -9,7 +9,7 @@ turn-by-turn continuation notes and next-batch execution records.
|
|||||||
## Current Status
|
## Current Status
|
||||||
|
|
||||||
- Active continuation file: `text14.txt`
|
- Active continuation file: `text14.txt`
|
||||||
- Latest completed batch: workflow overview release readiness artifact browser API
|
- Latest completed batch: workflow overview release readiness artifact DOM workflow
|
||||||
- Latest relevant commit: use `git log -1 --oneline` after each committed batch
|
- Latest relevant commit: use `git log -1 --oneline` after each committed batch
|
||||||
- Working tree at tracker creation: clean
|
- Working tree at tracker creation: clean
|
||||||
- Required policy: LinuxCNC remains the only CNC semantic source
|
- 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
|
|||||||
| Native sim configs baseline | Stable | Last recorded Layer 2: `total 159`, `pass 151`, `expected_fail 8`, `unexpected_fail 0`. |
|
| Native sim configs baseline | Stable | Last recorded Layer 2: `total 159`, `pass 151`, `expected_fail 8`, `unexpected_fail 0`. |
|
||||||
| OPFS/session persistence | Stable for current scope | Browser smoke passes, SDK re-exports OPFS/session helpers including `readMachineSessionReadiness()` and `createMachineSessionPersistenceSummary()`, the UI exposes `getMachineSessionPersistenceSummary()`, and `docs/opfs-session-persistence.md` defines the project-level release gate. |
|
| OPFS/session persistence | Stable for current scope | Browser smoke passes, SDK re-exports OPFS/session helpers including `readMachineSessionReadiness()` and `createMachineSessionPersistenceSummary()`, the UI exposes `getMachineSessionPersistenceSummary()`, and `docs/opfs-session-persistence.md` defines the project-level release gate. |
|
||||||
| SDK/API surface | Stable for current scope | SDK re-exports core, OPFS/session readiness/load helpers, sim-config staging, project release readiness report/artifact validation, INI panel entry/launcher/control-page/shell/workflow overview helpers, the session readiness workflow report, and the shell API surface inventory with a Node surface smoke. |
|
| SDK/API surface | Stable for current scope | SDK re-exports core, OPFS/session readiness/load helpers, sim-config staging, project release readiness report/artifact validation, INI panel entry/launcher/control-page/shell/workflow overview helpers, the session readiness workflow report, and the shell API surface inventory with a Node surface smoke. |
|
||||||
| Browser/UI workflow | Stable for current scope | Workflow overview embedding mount DOM closure is complete, and INI panel session workflows plus read-only control/shell handoff expose, render, and report OPFS/session readiness, OPFS/session persistence summary, release readiness artifact validation, and API surface inventory before loading or reading WASM session state. |
|
| Browser/UI workflow | Stable for current scope | Workflow overview embedding mount DOM closure is complete, and INI panel session workflows plus read-only control/shell handoff expose, render, and report OPFS/session readiness, OPFS/session persistence summary, release readiness artifact validation/rendering, and API surface inventory before loading or reading WASM session state. |
|
||||||
| Workflow overview embedding | Stable for current scope | Report/display/render, DOM contract/readiness/renderer, mount result/display/render, mount DOM contract/readiness/renderer/wrapper exist. |
|
| Workflow overview embedding | Stable for current scope | Report/display/render, DOM contract/readiness/renderer, mount result/display/render, mount DOM contract/readiness/renderer/wrapper exist. |
|
||||||
| Host/runtime boundary proof | Stable blocked state | Host smoke passes; runtime families remain blocked and `docs/host-runtime-boundary-handoff.md` records host readiness, promotion blockers, dispatch, and evidence gates. |
|
| Host/runtime boundary proof | Stable blocked state | Host smoke passes; runtime families remain blocked and `docs/host-runtime-boundary-handoff.md` records host readiness, promotion blockers, dispatch, and evidence gates. |
|
||||||
| Documentation/release gate | Stable for current scope | `docs/project-release-handoff.md` links README, panel entry, SDK, OPFS/session, sim-config, host/runtime, source reuse, drift, tracker acceptance paths, and the machine-readable release readiness report/artifact. |
|
| Documentation/release gate | Stable for current scope | `docs/project-release-handoff.md` links README, panel entry, SDK, OPFS/session, sim-config, host/runtime, source reuse, drift, tracker acceptance paths, and the machine-readable release readiness report/artifact. |
|
||||||
|
|||||||
86
text14.txt
86
text14.txt
@@ -3001,6 +3001,92 @@ project_release_gate=ok
|
|||||||
继续只做实质能力推进。优先选择真实 browser/UI workflow 或外部 shell 可消费能力;
|
继续只做实质能力推进。优先选择真实 browser/UI workflow 或外部 shell 可消费能力;
|
||||||
如果继续 release 路径,必须继续产出可调用 API、可验证 workflow、可执行 gate 或可消费 artifact。
|
如果继续 release 路径,必须继续产出可调用 API、可验证 workflow、可执行 gate 或可消费 artifact。
|
||||||
|
|
||||||
|
三十九、2026-06-16 继续执行记录:workflow overview release readiness artifact DOM workflow
|
||||||
|
|
||||||
|
本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进,
|
||||||
|
把 workflow overview release readiness artifact validation 从“返回数据”推进到可直接渲染和挂载的
|
||||||
|
DOM workflow。外部 shell 现在可以把 release readiness artifact validation 渲染进 caller-owned DOM,
|
||||||
|
并通过 browser smoke 验证真实 iframe 调用链。
|
||||||
|
|
||||||
|
完成内容:
|
||||||
|
|
||||||
|
- `ui-shell.js` 新增 release readiness artifact DOM workflow helpers:
|
||||||
|
- `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`;
|
||||||
|
- `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`;
|
||||||
|
- `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract()`;
|
||||||
|
- `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness()`;
|
||||||
|
- `renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState()`;
|
||||||
|
- `mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState()`;
|
||||||
|
- `createIniPanelShellWorkflowOverviewContract().methodNames` 新增对应 workflow overview iframe API;
|
||||||
|
- `workflow-overview.html` 的 `linuxCncIniPanelWorkflowOverviewApi` 暴露:
|
||||||
|
- `getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`;
|
||||||
|
- `getWorkflowOverviewReleaseReadinessArtifactRenderState()`;
|
||||||
|
- `getWorkflowOverviewReleaseReadinessArtifactDomContract()`;
|
||||||
|
- `getWorkflowOverviewReleaseReadinessArtifactDomReadiness()`;
|
||||||
|
- `renderWorkflowOverviewReleaseReadinessArtifactState()`;
|
||||||
|
- `mountWorkflowOverviewReleaseReadinessArtifactState()`;
|
||||||
|
- 新 DOM workflow 使用独立 scope:
|
||||||
|
- `workflow-overview-release-readiness-artifact`;
|
||||||
|
- 默认 selectors:
|
||||||
|
- `[data-workflow-overview-release-readiness-artifact]`;
|
||||||
|
- `[data-workflow-overview-release-readiness-artifact-status]`;
|
||||||
|
- `[data-workflow-overview-release-readiness-artifact-rows]`;
|
||||||
|
- `runtime/sdk/src/index.js` re-export 新 DOM workflow helpers;
|
||||||
|
- `verify_ini_panel_ui_shell.mjs` 覆盖 display/render/DOM contract/readiness/render/mount;
|
||||||
|
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 methodNames、missing method 和 helper exports;
|
||||||
|
- `ini_panel_workflow_overview_smoke.html` 在真实 workflow overview iframe 中渲染 release artifact validation;
|
||||||
|
- `ini_panel_shell_integration_workflow_smoke.html` 从外部 shell DOM 渲染并挂载 release artifact validation;
|
||||||
|
- `verify_sdk_surface.mjs` 覆盖 SDK export 和 render-state scope;
|
||||||
|
- `docs/panel-entry.md`、`docs/project-release-handoff.md`、`runtime/sdk/README.md` 记录新 DOM workflow;
|
||||||
|
- `PROJECT_COMPLETION_TRACKER.md` 同步 latest completed batch 和 Browser/UI workflow 状态;
|
||||||
|
- 未新增控制按钮;
|
||||||
|
- 未执行 release gate/action-plan;
|
||||||
|
- 未解析 G-code;
|
||||||
|
- 未解释 canonical events;
|
||||||
|
- 未新增 JS CNC 语义;
|
||||||
|
- 未运行 opt-in runtime probes;
|
||||||
|
- 未 promotion blocked runtime family;
|
||||||
|
- 未改变 LinuxCNC interpreter、tool、parameter、planner、kinematics、remap 或 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_shell_integration_manifest.sh
|
||||||
|
wasm-port/tests/sdk/node/verify_sdk_surface.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/tests/docs/node/verify_project_release_handoff_docs.sh
|
||||||
|
wasm-port/tools/verify_vendor_sync.sh
|
||||||
|
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
|
||||||
|
wasm-port/tests/host/verify_project_release_gate.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
关键输出:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ini_panel_ui_shell_node_smoke=ok
|
||||||
|
ini_panel_shell_integration_manifest_node_smoke=ok
|
||||||
|
sdk_surface_node_smoke=ok
|
||||||
|
ini_panel_entry_docs_node_smoke=ok
|
||||||
|
ui_node_smokes=ok
|
||||||
|
browser_ini_workflow_overview_smoke=ok
|
||||||
|
browser_ini_shell_integration_workflow_smoke=ok
|
||||||
|
project_release_handoff_docs_node_smoke=ok
|
||||||
|
vendor sync up to date
|
||||||
|
standalone CNC semantics guard complete
|
||||||
|
project_release_readiness_artifact_node_smoke=ok
|
||||||
|
project_release_gate=ok
|
||||||
|
```
|
||||||
|
|
||||||
|
下一步工作计划:
|
||||||
|
|
||||||
|
继续只做实质能力推进。优先选择真实 browser/UI workflow 或外部 shell 可消费能力;
|
||||||
|
如果继续 release 路径,必须继续产出可调用 API、可验证 workflow、可执行 gate 或可消费 artifact。
|
||||||
|
|
||||||
三十八、2026-06-16 继续执行记录:workflow overview release readiness artifact browser API
|
三十八、2026-06-16 继续执行记录:workflow overview release readiness artifact browser API
|
||||||
|
|
||||||
本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进,
|
本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进,
|
||||||
|
|||||||
@@ -64,6 +64,12 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
renderIniPanelShellSessionHandoffWorkflowState,
|
renderIniPanelShellSessionHandoffWorkflowState,
|
||||||
mountIniPanelShellSessionHandoffWorkflow,
|
mountIniPanelShellSessionHandoffWorkflow,
|
||||||
renderIniPanelShellSessionHandoffMountState,
|
renderIniPanelShellSessionHandoffMountState,
|
||||||
@@ -156,6 +162,15 @@ 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,
|
through the same read-only workflow overview surface. It parses the artifact,
|
||||||
returns stable validation rows, and does not execute release gates or CNC
|
returns stable validation rows, and does not execute release gates or CNC
|
||||||
behavior.
|
behavior.
|
||||||
|
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
|
Use `createMachineSessionPersistenceDisplayViewModel()` and
|
||||||
`createMachineSessionPersistenceRenderState()` when that summary needs stable
|
`createMachineSessionPersistenceRenderState()` when that summary needs stable
|
||||||
display text, rows, status line, and dataset fields for caller-owned DOM.
|
display text, rows, status line, and dataset fields for caller-owned DOM.
|
||||||
|
|||||||
@@ -46,7 +46,10 @@ continuation records are in `../text14.txt`.
|
|||||||
and validate it with `createProjectReleaseReadinessArtifactValidation()`.
|
and validate it with `createProjectReleaseReadinessArtifactValidation()`.
|
||||||
Browser shells can also pass the JSON to
|
Browser shells can also pass the JSON to
|
||||||
`linuxCncIniPanelWorkflowOverviewApi.validateWorkflowOverviewReleaseReadinessArtifactJson()`
|
`linuxCncIniPanelWorkflowOverviewApi.validateWorkflowOverviewReleaseReadinessArtifactJson()`
|
||||||
through the workflow overview iframe and receive stable validation rows.
|
through the workflow overview iframe and receive stable validation rows. When
|
||||||
|
the outer shell needs DOM output, the workflow overview iframe also exposes
|
||||||
|
display, render-state, DOM readiness, renderer, and mount helpers for the
|
||||||
|
same release readiness artifact validation.
|
||||||
- OPFS/session callers can use `createMachineSessionPersistenceSummary()` or
|
- OPFS/session callers can use `createMachineSessionPersistenceSummary()` or
|
||||||
`linuxCncIniPanelApi.getMachineSessionPersistenceSummary()` to inspect
|
`linuxCncIniPanelApi.getMachineSessionPersistenceSummary()` to inspect
|
||||||
machine files, session snapshot, session readiness, session load, readonly
|
machine files, session snapshot, session readiness, session load, readonly
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ import {
|
|||||||
createIniPanelShellWorkflowOverviewContract,
|
createIniPanelShellWorkflowOverviewContract,
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingMountDomContract,
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomContract,
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createLinuxCncIniSdk,
|
createLinuxCncIniSdk,
|
||||||
createLinuxCncInterpSdk,
|
createLinuxCncInterpSdk,
|
||||||
createMachineSessionPersistenceDisplayViewModel,
|
createMachineSessionPersistenceDisplayViewModel,
|
||||||
@@ -68,6 +72,7 @@ import {
|
|||||||
machineFilePaths,
|
machineFilePaths,
|
||||||
machineIniPath,
|
machineIniPath,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
normalizeOpfsPath,
|
normalizeOpfsPath,
|
||||||
parameterFilePath,
|
parameterFilePath,
|
||||||
parseProjectReleaseReadinessArtifactJson,
|
parseProjectReleaseReadinessArtifactJson,
|
||||||
@@ -75,6 +80,7 @@ import {
|
|||||||
planSimConfigStaging,
|
planSimConfigStaging,
|
||||||
readMachineSessionReadiness,
|
readMachineSessionReadiness,
|
||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
restoreMachineParametersFromOpfs,
|
restoreMachineParametersFromOpfs,
|
||||||
saveMachineSessionSnapshot,
|
saveMachineSessionSnapshot,
|
||||||
saveMachineTextFiles,
|
saveMachineTextFiles,
|
||||||
@@ -266,7 +272,14 @@ for external browser shells:
|
|||||||
overview iframe API contract.
|
overview iframe API contract.
|
||||||
- `validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson()` for the
|
- `validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson()` for the
|
||||||
read-only workflow overview artifact validation wrapper exposed by
|
read-only workflow overview artifact validation wrapper exposed by
|
||||||
`workflow-overview.html`.
|
`workflow-overview.html`. Use
|
||||||
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`,
|
||||||
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`,
|
||||||
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract()`,
|
||||||
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness()`,
|
||||||
|
`renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState()`, and
|
||||||
|
`mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState()` when an
|
||||||
|
outer shell needs to render that validation into caller-owned DOM.
|
||||||
- `createIniPanelShellApiSurfaceInventory()` for a machine-readable inventory
|
- `createIniPanelShellApiSurfaceInventory()` for a machine-readable inventory
|
||||||
of launch, control-page, workflow overview, persistence, and session
|
of launch, control-page, workflow overview, persistence, and session
|
||||||
readiness report API counts, including persistence summary row counts.
|
readiness report API counts, including persistence summary row counts.
|
||||||
|
|||||||
@@ -97,6 +97,10 @@ export {
|
|||||||
createIniPanelShellWorkflowOverviewEmbeddingMountRenderState,
|
createIniPanelShellWorkflowOverviewEmbeddingMountRenderState,
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingRenderState,
|
createIniPanelShellWorkflowOverviewEmbeddingRenderState,
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingReport,
|
createIniPanelShellWorkflowOverviewEmbeddingReport,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createIniPanelShellWorkflowOverviewReadiness,
|
createIniPanelShellWorkflowOverviewReadiness,
|
||||||
getIniPanelEntryByHref,
|
getIniPanelEntryByHref,
|
||||||
getIniPanelEntryManifest,
|
getIniPanelEntryManifest,
|
||||||
@@ -111,7 +115,9 @@ export {
|
|||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingState,
|
mountIniPanelShellWorkflowOverviewEmbeddingState,
|
||||||
renderIniPanelShellSessionHandoffMountState,
|
renderIniPanelShellSessionHandoffMountState,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
renderIniPanelShellWorkflowOverviewEmbeddingState,
|
renderIniPanelShellWorkflowOverviewEmbeddingState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
} from "../../ui/ini-panel/ui-shell.js";
|
} from "../../ui/ini-panel/ui-shell.js";
|
||||||
|
|||||||
@@ -1874,6 +1874,12 @@ export function createIniPanelShellWorkflowOverviewContract() {
|
|||||||
"getWorkflowOverviewApiSurfaceInventory",
|
"getWorkflowOverviewApiSurfaceInventory",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomReadiness",
|
||||||
|
"renderWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
"mountWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
"getWorkflowOverviewDomContract",
|
"getWorkflowOverviewDomContract",
|
||||||
"getWorkflowOverviewDomReadiness",
|
"getWorkflowOverviewDomReadiness",
|
||||||
"renderWorkflowOverview",
|
"renderWorkflowOverview",
|
||||||
@@ -1923,6 +1929,240 @@ export function validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJso
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
|
validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{}"),
|
||||||
|
) {
|
||||||
|
const missing = Array.isArray(validation?.missing) ? validation.missing : [];
|
||||||
|
const rows = Array.isArray(validation?.rows)
|
||||||
|
? validation.rows.map(({ id, label, value }) => ({
|
||||||
|
id,
|
||||||
|
label,
|
||||||
|
value: value == null ? "" : String(value),
|
||||||
|
}))
|
||||||
|
: [];
|
||||||
|
return {
|
||||||
|
phase: validation?.phase === "ready" ? "ready" : "blocked",
|
||||||
|
title: "Release readiness artifact",
|
||||||
|
statusText: validation?.ready ? "Ready" : "Blocked",
|
||||||
|
detailText: validation?.ready
|
||||||
|
? "No blocking reasons"
|
||||||
|
: (missing.length > 0 ? missing.join(", ") : validation?.error ?? "artifact validation blocked"),
|
||||||
|
rows,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||||
|
displayViewModel = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(),
|
||||||
|
) {
|
||||||
|
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-release-readiness-artifact-render-state",
|
||||||
|
renderStateVersion: 1,
|
||||||
|
phase: ready ? "ready" : "blocked",
|
||||||
|
ready,
|
||||||
|
title: displayViewModel?.title ?? "Release readiness artifact",
|
||||||
|
statusText,
|
||||||
|
detailText,
|
||||||
|
statusLine: `${statusText}: ${detailText}`,
|
||||||
|
rows,
|
||||||
|
dataset: {
|
||||||
|
handoffPhase: ready ? "ready" : "blocked",
|
||||||
|
handoffReady: ready ? "true" : "false",
|
||||||
|
handoffScope: "workflow-overview-release-readiness-artifact",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract({
|
||||||
|
rowDatasetPrefix = "workflowOverviewReleaseReadinessArtifact",
|
||||||
|
selectors = {},
|
||||||
|
} = {}) {
|
||||||
|
const mountSelector = selectors.mount ?? "[data-workflow-overview-release-readiness-artifact]";
|
||||||
|
const statusSelector = selectors.status ?? "[data-workflow-overview-release-readiness-artifact-status]";
|
||||||
|
const rowsSelector = selectors.rows ?? "[data-workflow-overview-release-readiness-artifact-rows]";
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-dom-contract",
|
||||||
|
contractVersion: 1,
|
||||||
|
requiredNodeIds: ["mount", "status", "rows"],
|
||||||
|
selectors: {
|
||||||
|
mount: mountSelector,
|
||||||
|
status: statusSelector,
|
||||||
|
rows: rowsSelector,
|
||||||
|
},
|
||||||
|
mountDatasetKeys: ["handoffPhase", "handoffReady", "handoffScope"],
|
||||||
|
rowDatasetPrefix,
|
||||||
|
rowDatasetKeys: {
|
||||||
|
term: [`${rowDatasetPrefix}Row`, `${rowDatasetPrefix}Status`],
|
||||||
|
detail: [`${rowDatasetPrefix}Value`, `${rowDatasetPrefix}Status`],
|
||||||
|
},
|
||||||
|
renderResultFields: ["rendered", "statusLine", "rowCount", "rowIds", "dataset"],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness({
|
||||||
|
rowDatasetPrefix = "workflowOverviewReleaseReadinessArtifact",
|
||||||
|
contract = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract({ 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-release-readiness-artifact-dom-readiness",
|
||||||
|
readinessVersion: 1,
|
||||||
|
phase: ready ? "ready" : "blocked",
|
||||||
|
ready,
|
||||||
|
missing,
|
||||||
|
checks,
|
||||||
|
contract,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(
|
||||||
|
renderState = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(),
|
||||||
|
{
|
||||||
|
rowDatasetPrefix = "workflowOverviewReleaseReadinessArtifact",
|
||||||
|
contract = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract({ rowDatasetPrefix }),
|
||||||
|
documentRef = globalThis.document,
|
||||||
|
mountNode = documentRef?.querySelector?.(contract.selectors.mount),
|
||||||
|
statusNode = documentRef?.querySelector?.(contract.selectors.status),
|
||||||
|
rowsNode = documentRef?.querySelector?.(contract.selectors.rows),
|
||||||
|
} = {},
|
||||||
|
) {
|
||||||
|
const readiness = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness({
|
||||||
|
contract,
|
||||||
|
documentRef,
|
||||||
|
mountNode,
|
||||||
|
statusNode,
|
||||||
|
rowsNode,
|
||||||
|
});
|
||||||
|
if (!readiness.ready) {
|
||||||
|
throw new Error(
|
||||||
|
`Workflow overview release readiness artifact DOM is not ready: ${readiness.missing.join(", ")}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
mountNode.dataset.handoffPhase = renderState?.dataset?.handoffPhase ?? "blocked";
|
||||||
|
mountNode.dataset.handoffReady = renderState?.dataset?.handoffReady ?? "false";
|
||||||
|
mountNode.dataset.handoffScope = renderState?.dataset?.handoffScope
|
||||||
|
?? "workflow-overview-release-readiness-artifact";
|
||||||
|
statusNode.textContent = renderState?.statusLine ?? "Blocked: No release readiness artifact render state";
|
||||||
|
rowsNode.replaceChildren();
|
||||||
|
|
||||||
|
const rows = Array.isArray(renderState?.rows) ? renderState.rows : [];
|
||||||
|
const effectiveRowDatasetPrefix = contract.rowDatasetPrefix;
|
||||||
|
for (const row of rows) {
|
||||||
|
const term = documentRef.createElement("dt");
|
||||||
|
term.dataset[`${effectiveRowDatasetPrefix}Row`] = row.id;
|
||||||
|
term.dataset[`${effectiveRowDatasetPrefix}Status`] = renderState?.ready ? "pass" : "blocked";
|
||||||
|
term.textContent = row.label;
|
||||||
|
const detail = documentRef.createElement("dd");
|
||||||
|
detail.dataset[`${effectiveRowDatasetPrefix}Value`] = row.id;
|
||||||
|
detail.dataset[`${effectiveRowDatasetPrefix}Status`] = renderState?.ready ? "pass" : "blocked";
|
||||||
|
detail.textContent = row.value;
|
||||||
|
rowsNode.append(term, detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
rendered: true,
|
||||||
|
statusLine: statusNode.textContent,
|
||||||
|
rowCount: rows.length,
|
||||||
|
rowIds: rows.map(({ id }) => id),
|
||||||
|
dataset: {
|
||||||
|
handoffPhase: mountNode.dataset.handoffPhase,
|
||||||
|
handoffReady: mountNode.dataset.handoffReady,
|
||||||
|
handoffScope: mountNode.dataset.handoffScope,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState({
|
||||||
|
renderState = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(),
|
||||||
|
rowDatasetPrefix = "workflowOverviewReleaseReadinessArtifact",
|
||||||
|
contract = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract({ rowDatasetPrefix }),
|
||||||
|
documentRef = globalThis.document,
|
||||||
|
mountNode = documentRef?.querySelector?.(contract.selectors.mount),
|
||||||
|
statusNode = documentRef?.querySelector?.(contract.selectors.status),
|
||||||
|
rowsNode = documentRef?.querySelector?.(contract.selectors.rows),
|
||||||
|
} = {}) {
|
||||||
|
const domReadiness = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness({
|
||||||
|
contract,
|
||||||
|
documentRef,
|
||||||
|
mountNode,
|
||||||
|
statusNode,
|
||||||
|
rowsNode,
|
||||||
|
});
|
||||||
|
if (!domReadiness.ready) {
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-dom-mount",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: "blocked",
|
||||||
|
ready: false,
|
||||||
|
statusLine: `Blocked: ${domReadiness.missing.join(", ")}`,
|
||||||
|
contract,
|
||||||
|
domReadiness,
|
||||||
|
renderState,
|
||||||
|
renderResult: null,
|
||||||
|
error: null,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const renderResult = renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(renderState, {
|
||||||
|
contract,
|
||||||
|
documentRef,
|
||||||
|
mountNode,
|
||||||
|
statusNode,
|
||||||
|
rowsNode,
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-dom-mount",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: renderState?.phase === "ready" ? "ready" : "blocked",
|
||||||
|
ready: renderState?.ready === true,
|
||||||
|
statusLine: renderResult.statusLine,
|
||||||
|
contract,
|
||||||
|
domReadiness,
|
||||||
|
renderState,
|
||||||
|
renderResult,
|
||||||
|
error: null,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-dom-mount",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: "blocked",
|
||||||
|
ready: false,
|
||||||
|
statusLine: `Blocked: ${error?.message ?? "release readiness artifact DOM mount error"}`,
|
||||||
|
contract,
|
||||||
|
domReadiness,
|
||||||
|
renderState,
|
||||||
|
renderResult: null,
|
||||||
|
error: error?.message ?? String(error),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function createIniPanelShellWorkflowOverviewReadiness({
|
export function createIniPanelShellWorkflowOverviewReadiness({
|
||||||
overviewApi = null,
|
overviewApi = null,
|
||||||
contract = createIniPanelShellWorkflowOverviewContract(),
|
contract = createIniPanelShellWorkflowOverviewContract(),
|
||||||
|
|||||||
@@ -106,6 +106,12 @@
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
renderIniPanelShellSessionHandoffWorkflowState,
|
renderIniPanelShellSessionHandoffWorkflowState,
|
||||||
mountIniPanelShellSessionHandoffWorkflow,
|
mountIniPanelShellSessionHandoffWorkflow,
|
||||||
} from "./ui-shell.js";
|
} from "./ui-shell.js";
|
||||||
@@ -137,6 +143,24 @@
|
|||||||
validateWorkflowOverviewReleaseReadinessArtifactJson: (artifactJson) => (
|
validateWorkflowOverviewReleaseReadinessArtifactJson: (artifactJson) => (
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson)
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson)
|
||||||
),
|
),
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: (validation) => (
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(validation)
|
||||||
|
),
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactRenderState: (displayViewModel) => (
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(displayViewModel)
|
||||||
|
),
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactDomContract: (options) => (
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract(options)
|
||||||
|
),
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactDomReadiness: (options) => (
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness(options ?? { documentRef: document })
|
||||||
|
),
|
||||||
|
renderWorkflowOverviewReleaseReadinessArtifactState: (renderState, options) => (
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(renderState, options ?? { documentRef: document })
|
||||||
|
),
|
||||||
|
mountWorkflowOverviewReleaseReadinessArtifactState: (options) => (
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(options ?? { documentRef: document })
|
||||||
|
),
|
||||||
getWorkflowOverviewDomContract: (options) => (
|
getWorkflowOverviewDomContract: (options) => (
|
||||||
createIniPanelShellSessionHandoffWorkflowDomContract(options)
|
createIniPanelShellSessionHandoffWorkflowDomContract(options)
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -18,6 +18,10 @@
|
|||||||
<p data-external-overview-embedding-status>waiting</p>
|
<p data-external-overview-embedding-status>waiting</p>
|
||||||
<dl data-external-overview-embedding-rows></dl>
|
<dl data-external-overview-embedding-rows></dl>
|
||||||
</section>
|
</section>
|
||||||
|
<section data-external-release-artifact>
|
||||||
|
<p data-external-release-artifact-status>waiting</p>
|
||||||
|
<dl data-external-release-artifact-rows></dl>
|
||||||
|
</section>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
function assertEqual(actual, expected, label) {
|
function assertEqual(actual, expected, label) {
|
||||||
if (actual !== expected) {
|
if (actual !== expected) {
|
||||||
@@ -342,6 +346,38 @@ TOOL_TABLE = browser-shell-tool.tbl
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
}));
|
}));
|
||||||
|
const workflowOverviewReleaseArtifactDisplay = workflowOverviewApi
|
||||||
|
.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(workflowOverviewReleaseArtifactValidation);
|
||||||
|
const workflowOverviewReleaseArtifactRenderState = workflowOverviewApi
|
||||||
|
.getWorkflowOverviewReleaseReadinessArtifactRenderState(workflowOverviewReleaseArtifactDisplay);
|
||||||
|
const workflowOverviewReleaseArtifactDomContract = workflowOverviewApi
|
||||||
|
.getWorkflowOverviewReleaseReadinessArtifactDomContract({
|
||||||
|
rowDatasetPrefix: "externalReleaseArtifact",
|
||||||
|
selectors: {
|
||||||
|
mount: "[data-external-release-artifact]",
|
||||||
|
status: "[data-external-release-artifact-status]",
|
||||||
|
rows: "[data-external-release-artifact-rows]",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const workflowOverviewReleaseArtifactDomReadiness = workflowOverviewApi
|
||||||
|
.getWorkflowOverviewReleaseReadinessArtifactDomReadiness({
|
||||||
|
contract: workflowOverviewReleaseArtifactDomContract,
|
||||||
|
documentRef: document,
|
||||||
|
});
|
||||||
|
const workflowOverviewReleaseArtifactRenderResult = workflowOverviewApi
|
||||||
|
.renderWorkflowOverviewReleaseReadinessArtifactState(
|
||||||
|
workflowOverviewReleaseArtifactRenderState,
|
||||||
|
{
|
||||||
|
contract: workflowOverviewReleaseArtifactDomContract,
|
||||||
|
documentRef: document,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const workflowOverviewReleaseArtifactMountResult = workflowOverviewApi
|
||||||
|
.mountWorkflowOverviewReleaseReadinessArtifactState({
|
||||||
|
renderState: workflowOverviewReleaseArtifactRenderState,
|
||||||
|
contract: workflowOverviewReleaseArtifactDomContract,
|
||||||
|
documentRef: document,
|
||||||
|
});
|
||||||
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
|
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
|
||||||
overviewApi: workflowOverviewApi,
|
overviewApi: workflowOverviewApi,
|
||||||
});
|
});
|
||||||
@@ -413,6 +449,26 @@ TOOL_TABLE = browser-shell-tool.tbl
|
|||||||
true,
|
true,
|
||||||
"shell workflow overview release artifact validation readiness",
|
"shell workflow overview release artifact validation readiness",
|
||||||
);
|
);
|
||||||
|
assertEqual(
|
||||||
|
workflowOverviewReleaseArtifactDomReadiness.ready,
|
||||||
|
true,
|
||||||
|
"shell workflow overview release artifact DOM readiness",
|
||||||
|
);
|
||||||
|
assertEqual(
|
||||||
|
workflowOverviewReleaseArtifactRenderResult.rowCount,
|
||||||
|
3,
|
||||||
|
"shell workflow overview release artifact render rows",
|
||||||
|
);
|
||||||
|
assertEqual(
|
||||||
|
workflowOverviewReleaseArtifactMountResult.ready,
|
||||||
|
true,
|
||||||
|
"shell workflow overview release artifact mount readiness",
|
||||||
|
);
|
||||||
|
assertEqual(
|
||||||
|
document.querySelector("[data-external-release-artifact-status]").textContent,
|
||||||
|
"Ready: No blocking reasons",
|
||||||
|
"shell workflow overview release artifact rendered status",
|
||||||
|
);
|
||||||
assertEqual(workflowOverviewEmbedding.apiName, "ini-panel-shell-workflow-overview-embedding", "shell workflow overview embedding API");
|
assertEqual(workflowOverviewEmbedding.apiName, "ini-panel-shell-workflow-overview-embedding", "shell workflow overview embedding API");
|
||||||
assertEqual(workflowOverviewEmbedding.renderState.dataset.handoffScope, "workflow", "shell workflow overview embedding scope");
|
assertEqual(workflowOverviewEmbedding.renderState.dataset.handoffScope, "workflow", "shell workflow overview embedding scope");
|
||||||
assertEqual(workflowOverviewEmbedding.mountResult.renderResult.rowCount, 8, "shell workflow overview embedding rows");
|
assertEqual(workflowOverviewEmbedding.mountResult.renderResult.rowCount, 8, "shell workflow overview embedding rows");
|
||||||
|
|||||||
@@ -35,6 +35,12 @@
|
|||||||
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
|
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
|
||||||
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
|
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
|
||||||
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
|
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
|
||||||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel ||
|
||||||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState ||
|
||||||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomContract ||
|
||||||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomReadiness ||
|
||||||
|
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactState ||
|
||||||
|
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactState ||
|
||||||
!workflowApi?.getWorkflowOverviewDomContract ||
|
!workflowApi?.getWorkflowOverviewDomContract ||
|
||||||
!workflowApi?.getWorkflowOverviewDomReadiness ||
|
!workflowApi?.getWorkflowOverviewDomReadiness ||
|
||||||
!workflowApi?.renderWorkflowOverview ||
|
!workflowApi?.renderWorkflowOverview ||
|
||||||
@@ -95,6 +101,14 @@
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
}));
|
}));
|
||||||
|
const releaseArtifactDisplay = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
|
releaseArtifactValidation,
|
||||||
|
);
|
||||||
|
const releaseArtifactRenderState = workflowApi.getWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||||
|
releaseArtifactDisplay,
|
||||||
|
);
|
||||||
|
const releaseArtifactDomContract = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomContract();
|
||||||
|
const releaseArtifactDomReadinessMissing = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomReadiness();
|
||||||
const domContract = workflowApi.getWorkflowOverviewDomContract();
|
const domContract = workflowApi.getWorkflowOverviewDomContract();
|
||||||
const domReadiness = workflowApi.getWorkflowOverviewDomReadiness();
|
const domReadiness = workflowApi.getWorkflowOverviewDomReadiness();
|
||||||
const renderResult = workflowApi.renderWorkflowOverview();
|
const renderResult = workflowApi.renderWorkflowOverview();
|
||||||
@@ -147,6 +161,19 @@
|
|||||||
);
|
);
|
||||||
assertEqual(releaseArtifactValidation.ready, true, "workflow overview release artifact validation readiness");
|
assertEqual(releaseArtifactValidation.ready, true, "workflow overview release artifact validation readiness");
|
||||||
assertEqual(releaseArtifactValidation.gateCount, 9, "workflow overview release artifact validation gates");
|
assertEqual(releaseArtifactValidation.gateCount, 9, "workflow overview release artifact validation gates");
|
||||||
|
assertEqual(releaseArtifactDisplay.statusText, "Ready", "workflow overview release artifact display status");
|
||||||
|
assertEqual(releaseArtifactRenderState.statusLine, "Ready: No blocking reasons", "workflow overview release artifact render status");
|
||||||
|
assertEqual(
|
||||||
|
releaseArtifactRenderState.dataset.handoffScope,
|
||||||
|
"workflow-overview-release-readiness-artifact",
|
||||||
|
"workflow overview release artifact render scope",
|
||||||
|
);
|
||||||
|
assertEqual(
|
||||||
|
releaseArtifactDomContract.selectors.mount,
|
||||||
|
"[data-workflow-overview-release-readiness-artifact]",
|
||||||
|
"workflow overview release artifact DOM mount selector",
|
||||||
|
);
|
||||||
|
assertEqual(releaseArtifactDomReadinessMissing.ready, false, "workflow overview release artifact missing DOM readiness");
|
||||||
assertEqual(displayViewModel.title, "Shell handoff workflow", "workflow overview display title");
|
assertEqual(displayViewModel.title, "Shell handoff workflow", "workflow overview display title");
|
||||||
assertEqual(renderState.renderStateVersion, 1, "workflow overview render-state version");
|
assertEqual(renderState.renderStateVersion, 1, "workflow overview render-state version");
|
||||||
assertEqual(renderState.dataset.handoffScope, "workflow", "workflow overview render-state scope");
|
assertEqual(renderState.dataset.handoffScope, "workflow", "workflow overview render-state scope");
|
||||||
@@ -229,6 +256,27 @@
|
|||||||
assertEqual(embeddingMountDomMount.renderResult.rowCount, 7, "workflow overview embedding mount DOM mount row count");
|
assertEqual(embeddingMountDomMount.renderResult.rowCount, 7, "workflow overview embedding mount DOM mount row count");
|
||||||
assertEqual(embeddingMountDomMount.error, null, "workflow overview embedding mount DOM mount error");
|
assertEqual(embeddingMountDomMount.error, null, "workflow overview embedding mount DOM mount error");
|
||||||
assertEqual(embeddingMountStatus.textContent, embeddingMountRenderState.statusLine, "workflow overview embedding mount rendered status");
|
assertEqual(embeddingMountStatus.textContent, embeddingMountRenderState.statusLine, "workflow overview embedding mount rendered status");
|
||||||
|
const releaseArtifactNode = workflowDoc.createElement("section");
|
||||||
|
releaseArtifactNode.dataset.workflowOverviewReleaseReadinessArtifact = "";
|
||||||
|
const releaseArtifactStatus = workflowDoc.createElement("p");
|
||||||
|
releaseArtifactStatus.dataset.workflowOverviewReleaseReadinessArtifactStatus = "";
|
||||||
|
const releaseArtifactRows = workflowDoc.createElement("dl");
|
||||||
|
releaseArtifactRows.dataset.workflowOverviewReleaseReadinessArtifactRows = "";
|
||||||
|
releaseArtifactNode.append(releaseArtifactStatus, releaseArtifactRows);
|
||||||
|
workflowDoc.body.append(releaseArtifactNode);
|
||||||
|
const releaseArtifactDomReadinessReady = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomReadiness();
|
||||||
|
const releaseArtifactRenderResult = workflowApi.renderWorkflowOverviewReleaseReadinessArtifactState(
|
||||||
|
releaseArtifactRenderState,
|
||||||
|
);
|
||||||
|
const releaseArtifactMountResult = workflowApi.mountWorkflowOverviewReleaseReadinessArtifactState({
|
||||||
|
renderState: releaseArtifactRenderState,
|
||||||
|
});
|
||||||
|
assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness");
|
||||||
|
assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result");
|
||||||
|
assertEqual(releaseArtifactRenderResult.rowCount, 3, "workflow overview release artifact render row count");
|
||||||
|
assertEqual(releaseArtifactMountResult.ready, true, "workflow overview release artifact mount readiness");
|
||||||
|
assertEqual(releaseArtifactMountResult.renderResult.rowCount, 3, "workflow overview release artifact mount rows");
|
||||||
|
assertEqual(releaseArtifactStatus.textContent, releaseArtifactRenderState.statusLine, "workflow overview release artifact rendered status");
|
||||||
assertEqual(
|
assertEqual(
|
||||||
workflowDoc.querySelector("[data-handoff-workflow]").dataset.handoffScope,
|
workflowDoc.querySelector("[data-handoff-workflow]").dataset.handoffScope,
|
||||||
"workflow",
|
"workflow",
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ for (const phrase of [
|
|||||||
"parseProjectReleaseReadinessArtifactJson()",
|
"parseProjectReleaseReadinessArtifactJson()",
|
||||||
"createProjectReleaseReadinessArtifactValidation()",
|
"createProjectReleaseReadinessArtifactValidation()",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson()",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson()",
|
||||||
|
"render-state",
|
||||||
|
"DOM readiness",
|
||||||
"createIniPanelShellApiSurfaceInventory()",
|
"createIniPanelShellApiSurfaceInventory()",
|
||||||
"createIniPanelShellSessionReadinessWorkflowReport()",
|
"createIniPanelShellSessionReadinessWorkflowReport()",
|
||||||
"workflow overview embedding mount DOM",
|
"workflow overview embedding mount DOM",
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ import {
|
|||||||
createIniPanelShellWorkflowOverviewContract,
|
createIniPanelShellWorkflowOverviewContract,
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingMountDomContract,
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomContract,
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createLinuxCncIniSdk,
|
createLinuxCncIniSdk,
|
||||||
createLinuxCncInterpSdk,
|
createLinuxCncInterpSdk,
|
||||||
createMachineSessionSnapshotPayload,
|
createMachineSessionSnapshotPayload,
|
||||||
@@ -50,12 +54,14 @@ import {
|
|||||||
machineFilePaths,
|
machineFilePaths,
|
||||||
machineIniPath,
|
machineIniPath,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
normalizeOpfsPath,
|
normalizeOpfsPath,
|
||||||
parameterFilePath,
|
parameterFilePath,
|
||||||
planIniFileContextStaging,
|
planIniFileContextStaging,
|
||||||
planSimConfigStaging,
|
planSimConfigStaging,
|
||||||
readMachineSessionReadiness,
|
readMachineSessionReadiness,
|
||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
restoreMachineParametersFromOpfs,
|
restoreMachineParametersFromOpfs,
|
||||||
saveMachineSessionSnapshot,
|
saveMachineSessionSnapshot,
|
||||||
saveMachineTextFiles,
|
saveMachineTextFiles,
|
||||||
@@ -141,14 +147,38 @@ const requiredExports = [
|
|||||||
"createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness",
|
"createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness",
|
||||||
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
createIniPanelShellWorkflowOverviewEmbeddingMountDomReadiness,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness",
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
for (const [name, value] of requiredExports) {
|
for (const [name, value] of requiredExports) {
|
||||||
@@ -250,6 +280,19 @@ assert.equal(
|
|||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)).ready,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)).ready,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
assert.equal(
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)),
|
||||||
|
),
|
||||||
|
).dataset.handoffScope,
|
||||||
|
"workflow-overview-release-readiness-artifact",
|
||||||
|
);
|
||||||
|
assert.equal(
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract().selectors.rows,
|
||||||
|
"[data-workflow-overview-release-readiness-artifact-rows]",
|
||||||
|
);
|
||||||
|
assert.equal(createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness().ready, false);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
createProjectReleaseReadinessReport({
|
createProjectReleaseReadinessReport({
|
||||||
observedOutputs: ["project_release_gate=ok"],
|
observedOutputs: ["project_release_gate=ok"],
|
||||||
|
|||||||
@@ -54,6 +54,12 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
renderIniPanelShellSessionHandoffWorkflowState,
|
renderIniPanelShellSessionHandoffWorkflowState,
|
||||||
mountIniPanelShellSessionHandoffWorkflow,
|
mountIniPanelShellSessionHandoffWorkflow,
|
||||||
renderIniPanelShellSessionHandoffMountState,
|
renderIniPanelShellSessionHandoffMountState,
|
||||||
@@ -156,6 +162,12 @@ const requiredShellExports = [
|
|||||||
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||||
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||||
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness",
|
||||||
|
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
"renderIniPanelShellSessionHandoffWorkflowState",
|
"renderIniPanelShellSessionHandoffWorkflowState",
|
||||||
"mountIniPanelShellSessionHandoffWorkflow",
|
"mountIniPanelShellSessionHandoffWorkflow",
|
||||||
"renderIniPanelShellSessionHandoffMountState",
|
"renderIniPanelShellSessionHandoffMountState",
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
renderIniPanelShellSessionHandoffWorkflowState,
|
renderIniPanelShellSessionHandoffWorkflowState,
|
||||||
mountIniPanelShellSessionHandoffWorkflow,
|
mountIniPanelShellSessionHandoffWorkflow,
|
||||||
createIniPanelShellSessionHandoffPackageReport,
|
createIniPanelShellSessionHandoffPackageReport,
|
||||||
@@ -782,6 +788,12 @@ assert.deepEqual(createIniPanelShellWorkflowOverviewContract(), {
|
|||||||
"getWorkflowOverviewApiSurfaceInventory",
|
"getWorkflowOverviewApiSurfaceInventory",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomReadiness",
|
||||||
|
"renderWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
"mountWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
"getWorkflowOverviewDomContract",
|
"getWorkflowOverviewDomContract",
|
||||||
"getWorkflowOverviewDomReadiness",
|
"getWorkflowOverviewDomReadiness",
|
||||||
"renderWorkflowOverview",
|
"renderWorkflowOverview",
|
||||||
@@ -820,6 +832,12 @@ assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingMountDomReadines
|
|||||||
assert.equal(typeof renderIniPanelShellWorkflowOverviewEmbeddingMountState, "function");
|
assert.equal(typeof renderIniPanelShellWorkflowOverviewEmbeddingMountState, "function");
|
||||||
assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingMountState, "function");
|
assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbeddingMountState, "function");
|
||||||
assert.equal(typeof validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, "function");
|
assert.equal(typeof validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson, "function");
|
||||||
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, "function");
|
||||||
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, "function");
|
||||||
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, "function");
|
||||||
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness, "function");
|
||||||
|
assert.equal(typeof renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState, "function");
|
||||||
|
assert.equal(typeof mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState, "function");
|
||||||
assert.equal(
|
assert.equal(
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{}").apiName,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{}").apiName,
|
||||||
"ini-panel-shell-workflow-overview-release-readiness-artifact-validation",
|
"ini-panel-shell-workflow-overview-release-readiness-artifact-validation",
|
||||||
@@ -837,6 +855,12 @@ assert.deepEqual(
|
|||||||
"getWorkflowOverviewSummary",
|
"getWorkflowOverviewSummary",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomReadiness",
|
||||||
|
"renderWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
"mountWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
"getWorkflowOverviewDomContract",
|
"getWorkflowOverviewDomContract",
|
||||||
"getWorkflowOverviewDomReadiness",
|
"getWorkflowOverviewDomReadiness",
|
||||||
"renderWorkflowOverview",
|
"renderWorkflowOverview",
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
renderIniPanelShellSessionHandoffWorkflowState,
|
renderIniPanelShellSessionHandoffWorkflowState,
|
||||||
mountIniPanelShellSessionHandoffWorkflow,
|
mountIniPanelShellSessionHandoffWorkflow,
|
||||||
renderIniPanelShellSessionHandoffMountState,
|
renderIniPanelShellSessionHandoffMountState,
|
||||||
@@ -676,6 +682,12 @@ assert.deepEqual(shellViewModel.shellWorkflowOverviewContract, {
|
|||||||
"getWorkflowOverviewApiSurfaceInventory",
|
"getWorkflowOverviewApiSurfaceInventory",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
"getWorkflowOverviewReleaseReadinessArtifactDomReadiness",
|
||||||
|
"renderWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
|
"mountWorkflowOverviewReleaseReadinessArtifactState",
|
||||||
"getWorkflowOverviewDomContract",
|
"getWorkflowOverviewDomContract",
|
||||||
"getWorkflowOverviewDomReadiness",
|
"getWorkflowOverviewDomReadiness",
|
||||||
"renderWorkflowOverview",
|
"renderWorkflowOverview",
|
||||||
@@ -1313,6 +1325,56 @@ assert.equal(
|
|||||||
assert.equal(releaseArtifactValidation.ready, true);
|
assert.equal(releaseArtifactValidation.ready, true);
|
||||||
assert.equal(releaseArtifactValidation.validation.ready, true);
|
assert.equal(releaseArtifactValidation.validation.ready, true);
|
||||||
assert.equal(releaseArtifactValidation.gateCount, 9);
|
assert.equal(releaseArtifactValidation.gateCount, 9);
|
||||||
|
const releaseArtifactDisplay = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
|
releaseArtifactValidation,
|
||||||
|
);
|
||||||
|
const releaseArtifactRenderState = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||||
|
releaseArtifactDisplay,
|
||||||
|
);
|
||||||
|
assert.equal(releaseArtifactDisplay.statusText, "Ready");
|
||||||
|
assert.equal(releaseArtifactRenderState.statusLine, "Ready: No blocking reasons");
|
||||||
|
assert.equal(releaseArtifactRenderState.dataset.handoffScope, "workflow-overview-release-readiness-artifact");
|
||||||
|
assert.equal(
|
||||||
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract().selectors.mount,
|
||||||
|
"[data-workflow-overview-release-readiness-artifact]",
|
||||||
|
);
|
||||||
|
assert.equal(createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness().ready, false);
|
||||||
|
const releaseArtifactMountNode = mountDocument.createElement("section");
|
||||||
|
releaseArtifactMountNode.dataset.workflowOverviewReleaseReadinessArtifact = "";
|
||||||
|
const releaseArtifactStatusNode = mountDocument.createElement("p");
|
||||||
|
releaseArtifactStatusNode.dataset.workflowOverviewReleaseReadinessArtifactStatus = "";
|
||||||
|
const releaseArtifactRowsNode = {
|
||||||
|
...mountDocument.createElement("dl"),
|
||||||
|
children: [],
|
||||||
|
replaceChildren() {
|
||||||
|
this.children = [];
|
||||||
|
},
|
||||||
|
append(...nodes) {
|
||||||
|
this.children.push(...nodes);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
releaseArtifactRowsNode.dataset.workflowOverviewReleaseReadinessArtifactRows = "";
|
||||||
|
const releaseArtifactRenderResult = renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState(
|
||||||
|
releaseArtifactRenderState,
|
||||||
|
{
|
||||||
|
documentRef: mountDocument,
|
||||||
|
mountNode: releaseArtifactMountNode,
|
||||||
|
statusNode: releaseArtifactStatusNode,
|
||||||
|
rowsNode: releaseArtifactRowsNode,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const releaseArtifactMountResult = mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState({
|
||||||
|
renderState: releaseArtifactRenderState,
|
||||||
|
documentRef: mountDocument,
|
||||||
|
mountNode: releaseArtifactMountNode,
|
||||||
|
statusNode: releaseArtifactStatusNode,
|
||||||
|
rowsNode: releaseArtifactRowsNode,
|
||||||
|
});
|
||||||
|
assert.equal(releaseArtifactRenderResult.rendered, true);
|
||||||
|
assert.equal(releaseArtifactRenderResult.rowCount, 3);
|
||||||
|
assert.equal(releaseArtifactRenderResult.dataset.handoffScope, "workflow-overview-release-readiness-artifact");
|
||||||
|
assert.equal(releaseArtifactMountResult.ready, true);
|
||||||
|
assert.equal(releaseArtifactMountResult.renderResult.rowCount, 3);
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{").missing,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{").missing,
|
||||||
["artifact-json"],
|
["artifact-json"],
|
||||||
@@ -1333,6 +1395,12 @@ const workflowOverviewApi = {
|
|||||||
getWorkflowOverviewApiSurfaceInventory: () => shellViewModel.shellApiSurfaceInventory,
|
getWorkflowOverviewApiSurfaceInventory: () => shellViewModel.shellApiSurfaceInventory,
|
||||||
getWorkflowOverviewPersistenceSummary: () => shellViewModel.shellPersistenceSummary,
|
getWorkflowOverviewPersistenceSummary: () => shellViewModel.shellPersistenceSummary,
|
||||||
validateWorkflowOverviewReleaseReadinessArtifactJson: () => ({ ready: true }),
|
validateWorkflowOverviewReleaseReadinessArtifactJson: () => ({ ready: true }),
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: () => releaseArtifactDisplay,
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactRenderState: () => releaseArtifactRenderState,
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactDomContract: createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
getWorkflowOverviewReleaseReadinessArtifactDomReadiness: createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomReadiness,
|
||||||
|
renderWorkflowOverviewReleaseReadinessArtifactState: renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
|
mountWorkflowOverviewReleaseReadinessArtifactState: mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState,
|
||||||
getWorkflowOverviewDomContract: createIniPanelShellSessionHandoffWorkflowDomContract,
|
getWorkflowOverviewDomContract: createIniPanelShellSessionHandoffWorkflowDomContract,
|
||||||
getWorkflowOverviewDomReadiness: createIniPanelShellSessionHandoffWorkflowDomReadiness,
|
getWorkflowOverviewDomReadiness: createIniPanelShellSessionHandoffWorkflowDomReadiness,
|
||||||
renderWorkflowOverview: renderIniPanelShellSessionHandoffWorkflowState,
|
renderWorkflowOverview: renderIniPanelShellSessionHandoffWorkflowState,
|
||||||
|
|||||||
Reference in New Issue
Block a user