推进 workflow overview 发布 artifact URL 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 DOM workflow
|
- Latest completed batch: workflow overview release readiness artifact URL 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
|
||||||
@@ -43,8 +43,8 @@ The project is complete for the current scope when all of the following are true
|
|||||||
| Native nc_files baseline | Stable | Last recorded Layer 1: `total 107`, `pass 101`, `expected_fail 6`, `unexpected_fail 0`. |
|
| Native nc_files baseline | Stable | Last recorded Layer 1: `total 107`, `pass 101`, `expected_fail 6`, `unexpected_fail 0`. |
|
||||||
| 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 plus URL loading workflow, 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/rendering, 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, fetch, validate, 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. |
|
||||||
|
|||||||
73
text14.txt
73
text14.txt
@@ -3001,6 +3001,79 @@ 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 URL workflow
|
||||||
|
|
||||||
|
本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进,
|
||||||
|
把 release readiness artifact validation 从 JSON 字符串调用推进到真实 browser URL 加载 workflow。外部
|
||||||
|
shell 现在可以让 workflow overview iframe fetch artifact JSON URL、复用 validation/display/render/mount
|
||||||
|
链路,并得到结构化 ready/blocked workflow result。
|
||||||
|
|
||||||
|
完成内容:
|
||||||
|
|
||||||
|
- `ui-shell.js` 新增:
|
||||||
|
- `loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl()`;
|
||||||
|
- `createIniPanelShellWorkflowOverviewContract().methodNames` 新增:
|
||||||
|
- `loadWorkflowOverviewReleaseReadinessArtifactUrl`;
|
||||||
|
- `createIniPanelLaunchApiManifest().methods` 和 `launch.html` 暴露:
|
||||||
|
- `loadWorkflowOverviewReleaseReadinessArtifactUrl()`;
|
||||||
|
- `workflow-overview.html` 的 `linuxCncIniPanelWorkflowOverviewApi` 暴露:
|
||||||
|
- `loadWorkflowOverviewReleaseReadinessArtifactUrl()`;
|
||||||
|
- 新 workflow:
|
||||||
|
- fetch artifact URL;
|
||||||
|
- 复用 `validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson()`;
|
||||||
|
- 生成 display view-model 和 render-state;
|
||||||
|
- 可选 mount 到 caller-owned DOM;
|
||||||
|
- 对缺 URL、缺 fetch、HTTP failure、DOM missing 和 validation blocked 返回结构化 blocked result;
|
||||||
|
- `runtime/sdk/src/index.js` re-export 新 URL workflow helper;
|
||||||
|
- 新增 `tests/fixtures/project-release-readiness-ready.json`,用于真实 browser HTTP fetch smoke;
|
||||||
|
- `verify_ini_panel_ui_shell.mjs` 覆盖 ready URL workflow、missing DOM、HTTP blocked;
|
||||||
|
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 workflow overview contract/readiness 新 method;
|
||||||
|
- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch API manifest 和 browser namespace 暴露;
|
||||||
|
- `verify_sdk_surface.mjs` 覆盖 SDK export 和可调用 URL workflow;
|
||||||
|
- `ini_panel_workflow_overview_smoke.html` 在真实 workflow overview iframe 中 fetch fixture artifact 并 mount;
|
||||||
|
- `ini_panel_shell_integration_workflow_smoke.html` 从外部 shell 验证 iframe URL workflow 和 launch API 转发;
|
||||||
|
- `docs/panel-entry.md`、`docs/project-release-handoff.md`、`runtime/sdk/README.md` 记录新 URL workflow;
|
||||||
|
- `PROJECT_COMPLETION_TRACKER.md` 同步 latest completed batch、SDK/API surface 和 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。
|
||||||
|
|
||||||
|
验证已通过(先行 targeted):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wasm-port/tests/sdk/node/verify_sdk_surface.sh
|
||||||
|
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/ui/node/verify_ini_panel_launch_api_manifest.sh
|
||||||
|
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.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
|
||||||
|
```
|
||||||
|
|
||||||
|
关键输出:
|
||||||
|
|
||||||
|
```text
|
||||||
|
sdk_surface_node_smoke=ok
|
||||||
|
ini_panel_ui_shell_node_smoke=ok
|
||||||
|
ini_panel_shell_integration_manifest_node_smoke=ok
|
||||||
|
ini_panel_launch_api_manifest_node_smoke=ok
|
||||||
|
ini_panel_entry_docs_node_smoke=ok
|
||||||
|
browser_ini_workflow_overview_smoke=ok
|
||||||
|
browser_ini_shell_integration_workflow_smoke=ok
|
||||||
|
project_release_handoff_docs_node_smoke=ok
|
||||||
|
```
|
||||||
|
|
||||||
|
下一步工作计划:
|
||||||
|
|
||||||
|
继续只做实质能力推进。优先选择真实 browser/UI workflow、SDK/API surface、或可执行 release/host gate;
|
||||||
|
不要做只整理断言或局部常量化的批次。
|
||||||
|
|
||||||
三十九、2026-06-16 继续执行记录:workflow overview release readiness artifact DOM workflow
|
三十九、2026-06-16 继续执行记录:workflow overview release readiness artifact DOM workflow
|
||||||
|
|
||||||
本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进,
|
本轮继续按“每批必须产出可调用 API、可验证 workflow、可执行 gate、或真实 UI/browser 能力”推进,
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
@@ -162,6 +163,10 @@ 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 `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.
|
||||||
Use `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`,
|
Use `createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`,
|
||||||
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`,
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`,
|
||||||
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract()`,
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract()`,
|
||||||
|
|||||||
@@ -46,8 +46,12 @@ 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. When
|
through the workflow overview iframe and receive stable validation rows. They
|
||||||
the outer shell needs DOM output, the workflow overview iframe also exposes
|
can also call
|
||||||
|
`linuxCncIniPanelWorkflowOverviewApi.loadWorkflowOverviewReleaseReadinessArtifactUrl()`
|
||||||
|
to fetch the artifact URL, validate it, and optionally mount the resulting
|
||||||
|
read-only render state. When the outer shell needs DOM output, the workflow
|
||||||
|
overview iframe also exposes
|
||||||
display, render-state, DOM readiness, renderer, and mount helpers for the
|
display, render-state, DOM readiness, renderer, and mount helpers for the
|
||||||
same release readiness artifact validation.
|
same release readiness artifact validation.
|
||||||
- OPFS/session callers can use `createMachineSessionPersistenceSummary()` or
|
- OPFS/session callers can use `createMachineSessionPersistenceSummary()` or
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ import {
|
|||||||
isSupportedIniPanelControlPageApiManifest,
|
isSupportedIniPanelControlPageApiManifest,
|
||||||
isSupportedIniPanelLaunchApiManifest,
|
isSupportedIniPanelLaunchApiManifest,
|
||||||
isSupportedIniPanelShellIntegrationManifest,
|
isSupportedIniPanelShellIntegrationManifest,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
loadMachineSessionFromOpfs,
|
loadMachineSessionFromOpfs,
|
||||||
loadMachineSessionSnapshot,
|
loadMachineSessionSnapshot,
|
||||||
loadMachineTextFiles,
|
loadMachineTextFiles,
|
||||||
@@ -273,6 +274,9 @@ for external browser shells:
|
|||||||
- `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`. Use
|
`workflow-overview.html`. Use
|
||||||
|
`loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl()` when a
|
||||||
|
browser or shell should fetch the artifact JSON URL, validate it, and
|
||||||
|
optionally mount the resulting render-state into caller-owned DOM.
|
||||||
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`,
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel()`,
|
||||||
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`,
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState()`,
|
||||||
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract()`,
|
`createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract()`,
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ export {
|
|||||||
isSupportedIniPanelShellIntegrationManifest,
|
isSupportedIniPanelShellIntegrationManifest,
|
||||||
isSupportedIniPanelShellSessionHandoffPackage,
|
isSupportedIniPanelShellSessionHandoffPackage,
|
||||||
isSupportedIniPanelShellSessionHandoffSummary,
|
isSupportedIniPanelShellSessionHandoffSummary,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
mountIniPanelShellSessionHandoff,
|
mountIniPanelShellSessionHandoff,
|
||||||
mountIniPanelShellWorkflowOverviewEmbedding,
|
mountIniPanelShellWorkflowOverviewEmbedding,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
|
|||||||
@@ -297,6 +297,9 @@
|
|||||||
mountWorkflowOverviewEmbedding: (options) => (
|
mountWorkflowOverviewEmbedding: (options) => (
|
||||||
shellViewModel.mountWorkflowOverviewEmbedding(options)
|
shellViewModel.mountWorkflowOverviewEmbedding(options)
|
||||||
),
|
),
|
||||||
|
loadWorkflowOverviewReleaseReadinessArtifactUrl: (options) => (
|
||||||
|
shellViewModel.loadWorkflowOverviewReleaseReadinessArtifactUrl(options)
|
||||||
|
),
|
||||||
getWorkflowOverviewEmbeddingReport: (embeddingResult, contract) => (
|
getWorkflowOverviewEmbeddingReport: (embeddingResult, contract) => (
|
||||||
shellViewModel.createWorkflowOverviewEmbeddingReport(embeddingResult, contract)
|
shellViewModel.createWorkflowOverviewEmbeddingReport(embeddingResult, contract)
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -194,6 +194,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr
|
|||||||
"getWorkflowOverviewContract",
|
"getWorkflowOverviewContract",
|
||||||
"getWorkflowOverviewReadiness",
|
"getWorkflowOverviewReadiness",
|
||||||
"mountWorkflowOverviewEmbedding",
|
"mountWorkflowOverviewEmbedding",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"getWorkflowOverviewEmbeddingReport",
|
"getWorkflowOverviewEmbeddingReport",
|
||||||
"getWorkflowOverviewEmbeddingDisplayViewModel",
|
"getWorkflowOverviewEmbeddingDisplayViewModel",
|
||||||
"getWorkflowOverviewEmbeddingRenderState",
|
"getWorkflowOverviewEmbeddingRenderState",
|
||||||
@@ -1874,6 +1875,7 @@ export function createIniPanelShellWorkflowOverviewContract() {
|
|||||||
"getWorkflowOverviewApiSurfaceInventory",
|
"getWorkflowOverviewApiSurfaceInventory",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
@@ -1929,6 +1931,111 @@ export function validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJso
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl = "",
|
||||||
|
fetchRef = globalThis.fetch,
|
||||||
|
mount = false,
|
||||||
|
mountOptions = {},
|
||||||
|
} = {}) {
|
||||||
|
const missing = [
|
||||||
|
...(artifactUrl ? [] : ["artifact-url"]),
|
||||||
|
...(typeof fetchRef === "function" ? [] : ["fetch"]),
|
||||||
|
];
|
||||||
|
if (missing.length > 0) {
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: "blocked",
|
||||||
|
ready: false,
|
||||||
|
artifactUrl,
|
||||||
|
httpStatus: null,
|
||||||
|
missing,
|
||||||
|
error: null,
|
||||||
|
validation: null,
|
||||||
|
displayViewModel: null,
|
||||||
|
renderState: null,
|
||||||
|
mountResult: null,
|
||||||
|
statusLine: `Blocked: ${missing.join(", ")}`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetchRef(artifactUrl);
|
||||||
|
const httpStatus = response?.status ?? null;
|
||||||
|
if (!response?.ok) {
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: "blocked",
|
||||||
|
ready: false,
|
||||||
|
artifactUrl,
|
||||||
|
httpStatus,
|
||||||
|
missing: ["artifact-url"],
|
||||||
|
error: `HTTP ${httpStatus ?? "error"}`,
|
||||||
|
validation: null,
|
||||||
|
displayViewModel: null,
|
||||||
|
renderState: null,
|
||||||
|
mountResult: null,
|
||||||
|
statusLine: `Blocked: HTTP ${httpStatus ?? "error"}`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const artifactJson = await response.text();
|
||||||
|
const validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson);
|
||||||
|
const displayViewModel = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
|
validation,
|
||||||
|
);
|
||||||
|
const renderState = createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||||
|
displayViewModel,
|
||||||
|
);
|
||||||
|
const mountResult = mount
|
||||||
|
? mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactState({
|
||||||
|
renderState,
|
||||||
|
...mountOptions,
|
||||||
|
})
|
||||||
|
: null;
|
||||||
|
const mountMissing = mount && mountResult?.ready !== true
|
||||||
|
? (mountResult?.domReadiness?.missing ?? ["release-readiness-artifact-dom"])
|
||||||
|
: [];
|
||||||
|
const workflowMissing = [
|
||||||
|
...validation.missing,
|
||||||
|
...mountMissing,
|
||||||
|
];
|
||||||
|
const ready = validation.ready === true && (!mount || mountResult?.ready === true);
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: ready ? "ready" : "blocked",
|
||||||
|
ready,
|
||||||
|
artifactUrl,
|
||||||
|
httpStatus,
|
||||||
|
missing: workflowMissing,
|
||||||
|
error: null,
|
||||||
|
validation,
|
||||||
|
displayViewModel,
|
||||||
|
renderState,
|
||||||
|
mountResult,
|
||||||
|
statusLine: ready ? renderState.statusLine : `Blocked: ${workflowMissing.join(", ")}`,
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
return {
|
||||||
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
||||||
|
workflowVersion: 1,
|
||||||
|
phase: "blocked",
|
||||||
|
ready: false,
|
||||||
|
artifactUrl,
|
||||||
|
httpStatus: null,
|
||||||
|
missing: ["artifact-url"],
|
||||||
|
error: error?.message ?? String(error),
|
||||||
|
validation: null,
|
||||||
|
displayViewModel: null,
|
||||||
|
renderState: null,
|
||||||
|
mountResult: null,
|
||||||
|
statusLine: `Blocked: ${error?.message ?? "release readiness artifact URL load error"}`,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{}"),
|
validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{}"),
|
||||||
) {
|
) {
|
||||||
@@ -3163,6 +3270,8 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
|
|||||||
mountShellSessionHandoffWorkflow: mountIniPanelShellSessionHandoffWorkflow,
|
mountShellSessionHandoffWorkflow: mountIniPanelShellSessionHandoffWorkflow,
|
||||||
createWorkflowOverviewContract: createIniPanelShellWorkflowOverviewContract,
|
createWorkflowOverviewContract: createIniPanelShellWorkflowOverviewContract,
|
||||||
createWorkflowOverviewReadiness: createIniPanelShellWorkflowOverviewReadiness,
|
createWorkflowOverviewReadiness: createIniPanelShellWorkflowOverviewReadiness,
|
||||||
|
loadWorkflowOverviewReleaseReadinessArtifactUrl:
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
mountWorkflowOverviewEmbedding: mountIniPanelShellWorkflowOverviewEmbedding,
|
mountWorkflowOverviewEmbedding: mountIniPanelShellWorkflowOverviewEmbedding,
|
||||||
createWorkflowOverviewEmbeddingReport: createIniPanelShellWorkflowOverviewEmbeddingReport,
|
createWorkflowOverviewEmbeddingReport: createIniPanelShellWorkflowOverviewEmbeddingReport,
|
||||||
createWorkflowOverviewEmbeddingDisplayViewModel: createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel,
|
createWorkflowOverviewEmbeddingDisplayViewModel: createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel,
|
||||||
|
|||||||
@@ -106,6 +106,7 @@
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
@@ -143,6 +144,9 @@
|
|||||||
validateWorkflowOverviewReleaseReadinessArtifactJson: (artifactJson) => (
|
validateWorkflowOverviewReleaseReadinessArtifactJson: (artifactJson) => (
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson)
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson)
|
||||||
),
|
),
|
||||||
|
loadWorkflowOverviewReleaseReadinessArtifactUrl: (options) => (
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl(options)
|
||||||
|
),
|
||||||
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: (validation) => (
|
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: (validation) => (
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(validation)
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(validation)
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ TOOL_TABLE = browser-shell-tool.tbl
|
|||||||
!launchApi?.getWorkflowOverviewContract ||
|
!launchApi?.getWorkflowOverviewContract ||
|
||||||
!launchApi?.getWorkflowOverviewReadiness ||
|
!launchApi?.getWorkflowOverviewReadiness ||
|
||||||
!launchApi?.mountWorkflowOverviewEmbedding ||
|
!launchApi?.mountWorkflowOverviewEmbedding ||
|
||||||
|
!launchApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl ||
|
||||||
!launchApi?.getWorkflowOverviewEmbeddingReport ||
|
!launchApi?.getWorkflowOverviewEmbeddingReport ||
|
||||||
!launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel ||
|
!launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel ||
|
||||||
!launchApi?.getWorkflowOverviewEmbeddingRenderState ||
|
!launchApi?.getWorkflowOverviewEmbeddingRenderState ||
|
||||||
@@ -378,6 +379,19 @@ TOOL_TABLE = browser-shell-tool.tbl
|
|||||||
contract: workflowOverviewReleaseArtifactDomContract,
|
contract: workflowOverviewReleaseArtifactDomContract,
|
||||||
documentRef: document,
|
documentRef: document,
|
||||||
});
|
});
|
||||||
|
const workflowOverviewReleaseArtifactUrlWorkflow = await workflowOverviewApi
|
||||||
|
.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
||||||
|
mount: true,
|
||||||
|
mountOptions: {
|
||||||
|
contract: workflowOverviewReleaseArtifactDomContract,
|
||||||
|
documentRef: document,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const launchReleaseArtifactUrlWorkflow = await launchApi
|
||||||
|
.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
||||||
|
});
|
||||||
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
|
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
|
||||||
overviewApi: workflowOverviewApi,
|
overviewApi: workflowOverviewApi,
|
||||||
});
|
});
|
||||||
@@ -464,6 +478,21 @@ TOOL_TABLE = browser-shell-tool.tbl
|
|||||||
true,
|
true,
|
||||||
"shell workflow overview release artifact mount readiness",
|
"shell workflow overview release artifact mount readiness",
|
||||||
);
|
);
|
||||||
|
assertEqual(
|
||||||
|
workflowOverviewReleaseArtifactUrlWorkflow.ready,
|
||||||
|
true,
|
||||||
|
"shell workflow overview release artifact URL workflow readiness",
|
||||||
|
);
|
||||||
|
assertEqual(
|
||||||
|
workflowOverviewReleaseArtifactUrlWorkflow.mountResult.ready,
|
||||||
|
true,
|
||||||
|
"shell workflow overview release artifact URL workflow mount",
|
||||||
|
);
|
||||||
|
assertEqual(
|
||||||
|
launchReleaseArtifactUrlWorkflow.ready,
|
||||||
|
true,
|
||||||
|
"launch release artifact URL workflow readiness",
|
||||||
|
);
|
||||||
assertEqual(
|
assertEqual(
|
||||||
document.querySelector("[data-external-release-artifact-status]").textContent,
|
document.querySelector("[data-external-release-artifact-status]").textContent,
|
||||||
"Ready: No blocking reasons",
|
"Ready: No blocking reasons",
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
|
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
|
||||||
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
|
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
|
||||||
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
|
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
|
||||||
|
!workflowApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl ||
|
||||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel ||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel ||
|
||||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState ||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState ||
|
||||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomContract ||
|
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomContract ||
|
||||||
@@ -271,11 +272,18 @@
|
|||||||
const releaseArtifactMountResult = workflowApi.mountWorkflowOverviewReleaseReadinessArtifactState({
|
const releaseArtifactMountResult = workflowApi.mountWorkflowOverviewReleaseReadinessArtifactState({
|
||||||
renderState: releaseArtifactRenderState,
|
renderState: releaseArtifactRenderState,
|
||||||
});
|
});
|
||||||
|
const releaseArtifactUrlWorkflow = await workflowApi.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
||||||
|
mount: true,
|
||||||
|
});
|
||||||
assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness");
|
assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness");
|
||||||
assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result");
|
assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result");
|
||||||
assertEqual(releaseArtifactRenderResult.rowCount, 3, "workflow overview release artifact render row count");
|
assertEqual(releaseArtifactRenderResult.rowCount, 3, "workflow overview release artifact render row count");
|
||||||
assertEqual(releaseArtifactMountResult.ready, true, "workflow overview release artifact mount readiness");
|
assertEqual(releaseArtifactMountResult.ready, true, "workflow overview release artifact mount readiness");
|
||||||
assertEqual(releaseArtifactMountResult.renderResult.rowCount, 3, "workflow overview release artifact mount rows");
|
assertEqual(releaseArtifactMountResult.renderResult.rowCount, 3, "workflow overview release artifact mount rows");
|
||||||
|
assertEqual(releaseArtifactUrlWorkflow.ready, true, "workflow overview release artifact URL workflow readiness");
|
||||||
|
assertEqual(releaseArtifactUrlWorkflow.httpStatus, 200, "workflow overview release artifact URL workflow status");
|
||||||
|
assertEqual(releaseArtifactUrlWorkflow.mountResult.ready, true, "workflow overview release artifact URL workflow mount");
|
||||||
assertEqual(releaseArtifactStatus.textContent, releaseArtifactRenderState.statusLine, "workflow overview release artifact rendered status");
|
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,
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ for (const phrase of [
|
|||||||
"parseProjectReleaseReadinessArtifactJson()",
|
"parseProjectReleaseReadinessArtifactJson()",
|
||||||
"createProjectReleaseReadinessArtifactValidation()",
|
"createProjectReleaseReadinessArtifactValidation()",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson()",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson()",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl()",
|
||||||
"render-state",
|
"render-state",
|
||||||
"DOM readiness",
|
"DOM readiness",
|
||||||
"createIniPanelShellApiSurfaceInventory()",
|
"createIniPanelShellApiSurfaceInventory()",
|
||||||
@@ -96,6 +97,7 @@ for (const phrase of [
|
|||||||
"createProjectReleaseReadinessReport()",
|
"createProjectReleaseReadinessReport()",
|
||||||
"parseProjectReleaseReadinessArtifactJson()",
|
"parseProjectReleaseReadinessArtifactJson()",
|
||||||
"createProjectReleaseReadinessArtifactValidation()",
|
"createProjectReleaseReadinessArtifactValidation()",
|
||||||
|
"loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl()",
|
||||||
"build/project-release-readiness.json",
|
"build/project-release-readiness.json",
|
||||||
"INI panel shell handoff exports",
|
"INI panel shell handoff exports",
|
||||||
"createIniPanelShellApiSurfaceInventory()",
|
"createIniPanelShellApiSurfaceInventory()",
|
||||||
|
|||||||
116
wasm-port/tests/fixtures/project-release-readiness-ready.json
vendored
Normal file
116
wasm-port/tests/fixtures/project-release-readiness-ready.json
vendored
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"apiName": "project-release-readiness-report",
|
||||||
|
"reportVersion": 1,
|
||||||
|
"phase": "ready",
|
||||||
|
"ready": true,
|
||||||
|
"missing": [],
|
||||||
|
"releaseGate": {
|
||||||
|
"command": "wasm-port/tests/host/verify_project_release_gate.sh",
|
||||||
|
"passed": true,
|
||||||
|
"expectedOutput": "project_release_gate=ok"
|
||||||
|
},
|
||||||
|
"simConfigInventory": {
|
||||||
|
"executed": 28,
|
||||||
|
"passed": 28,
|
||||||
|
"skipped": 131,
|
||||||
|
"unexpectedFail": 0
|
||||||
|
},
|
||||||
|
"blockedRuntimeFamilies": [
|
||||||
|
"L4-USER-M-PROCESS",
|
||||||
|
"L4-TOOL-DB",
|
||||||
|
"L4-PYTHON-REMAP"
|
||||||
|
],
|
||||||
|
"promotedRuntimeFamilies": [],
|
||||||
|
"promotedBlockedFamilies": [],
|
||||||
|
"gates": [
|
||||||
|
{
|
||||||
|
"id": "diff-check",
|
||||||
|
"label": "Git diff check",
|
||||||
|
"command": "git diff --check",
|
||||||
|
"expectedOutput": null,
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vendor-sync",
|
||||||
|
"label": "Vendor sync guard",
|
||||||
|
"command": "wasm-port/tools/verify_vendor_sync.sh",
|
||||||
|
"expectedOutput": "vendor sync up to date",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "standalone-cnc-semantics",
|
||||||
|
"label": "Standalone CNC semantics guard",
|
||||||
|
"command": "wasm-port/tools/verify_no_standalone_cnc_semantics.sh",
|
||||||
|
"expectedOutput": "standalone CNC semantics guard complete",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "interp-wasm",
|
||||||
|
"label": "Interpreter WASM Node smoke",
|
||||||
|
"command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh",
|
||||||
|
"expectedOutput": "interp_wasm_node_smoke=ok",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sim-config-inventory",
|
||||||
|
"label": "Sim config inventory WASM Node smoke",
|
||||||
|
"command": "SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh",
|
||||||
|
"expectedOutput": "sim_configs_wasm_node_inventory_unexpected_fail=0",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ini-panel-browser",
|
||||||
|
"label": "INI panel browser smoke",
|
||||||
|
"command": "SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh",
|
||||||
|
"expectedOutput": "browser_ini_shell_integration_workflow_smoke=ok",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ui-node-smokes",
|
||||||
|
"label": "UI Node smokes",
|
||||||
|
"command": "wasm-port/tests/ui/node/verify_ui_node_smokes.sh",
|
||||||
|
"expectedOutput": "ui_node_smokes=ok",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "host-smokes",
|
||||||
|
"label": "Host aggregate smoke",
|
||||||
|
"command": "wasm-port/tests/host/verify_host_smokes.sh",
|
||||||
|
"expectedOutput": "host_wasm_opfs_browser_smokes=ok",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "project-release-gate",
|
||||||
|
"label": "Project release gate",
|
||||||
|
"command": "wasm-port/tests/host/verify_project_release_gate.sh",
|
||||||
|
"expectedOutput": "project_release_gate=ok",
|
||||||
|
"status": "passed",
|
||||||
|
"passed": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rows": [
|
||||||
|
{
|
||||||
|
"id": "project-release-gate",
|
||||||
|
"label": "Project release gate",
|
||||||
|
"value": "passed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "sim-config-inventory",
|
||||||
|
"label": "Sim config inventory",
|
||||||
|
"value": "unexpected_fail=0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "blocked-runtime-families",
|
||||||
|
"label": "Blocked runtime families",
|
||||||
|
"value": "L4-USER-M-PROCESS, L4-TOOL-DB, L4-PYTHON-REMAP"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -46,6 +46,7 @@ import {
|
|||||||
isSupportedIniPanelControlPageApiManifest,
|
isSupportedIniPanelControlPageApiManifest,
|
||||||
isSupportedIniPanelLaunchApiManifest,
|
isSupportedIniPanelLaunchApiManifest,
|
||||||
isSupportedIniPanelShellIntegrationManifest,
|
isSupportedIniPanelShellIntegrationManifest,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
loadMachineSessionFromOpfs,
|
loadMachineSessionFromOpfs,
|
||||||
loadMachineSessionSnapshot,
|
loadMachineSessionSnapshot,
|
||||||
loadMachineTextFiles,
|
loadMachineTextFiles,
|
||||||
@@ -89,6 +90,10 @@ const requiredExports = [
|
|||||||
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
|
],
|
||||||
["planIniFileContextStaging", planIniFileContextStaging],
|
["planIniFileContextStaging", planIniFileContextStaging],
|
||||||
["planSimConfigStaging", planSimConfigStaging],
|
["planSimConfigStaging", planSimConfigStaging],
|
||||||
["analyzeIniRuntimeBoundaries", analyzeIniRuntimeBoundaries],
|
["analyzeIniRuntimeBoundaries", analyzeIniRuntimeBoundaries],
|
||||||
@@ -280,6 +285,17 @@ assert.equal(
|
|||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)).ready,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(JSON.stringify(releaseReadinessArtifact)).ready,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
assert.equal(
|
||||||
|
(await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "/project-release-readiness.json",
|
||||||
|
fetchRef: async () => ({
|
||||||
|
ok: true,
|
||||||
|
status: 200,
|
||||||
|
text: async () => JSON.stringify(releaseReadinessArtifact),
|
||||||
|
}),
|
||||||
|
})).ready,
|
||||||
|
true,
|
||||||
|
);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState(
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
@@ -162,6 +163,7 @@ const requiredShellExports = [
|
|||||||
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
"renderIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||||
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
"mountIniPanelShellWorkflowOverviewEmbeddingMountState",
|
||||||
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState",
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract",
|
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ assert.deepEqual(manifest, {
|
|||||||
"getWorkflowOverviewContract",
|
"getWorkflowOverviewContract",
|
||||||
"getWorkflowOverviewReadiness",
|
"getWorkflowOverviewReadiness",
|
||||||
"mountWorkflowOverviewEmbedding",
|
"mountWorkflowOverviewEmbedding",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"getWorkflowOverviewEmbeddingReport",
|
"getWorkflowOverviewEmbeddingReport",
|
||||||
"getWorkflowOverviewEmbeddingDisplayViewModel",
|
"getWorkflowOverviewEmbeddingDisplayViewModel",
|
||||||
"getWorkflowOverviewEmbeddingRenderState",
|
"getWorkflowOverviewEmbeddingRenderState",
|
||||||
@@ -241,6 +242,7 @@ assert.match(launchText, /\bmountShellSessionHandoffWorkflow\b/);
|
|||||||
assert.match(launchText, /\bgetWorkflowOverviewContract\b/);
|
assert.match(launchText, /\bgetWorkflowOverviewContract\b/);
|
||||||
assert.match(launchText, /\bgetWorkflowOverviewReadiness\b/);
|
assert.match(launchText, /\bgetWorkflowOverviewReadiness\b/);
|
||||||
assert.match(launchText, /\bmountWorkflowOverviewEmbedding\b/);
|
assert.match(launchText, /\bmountWorkflowOverviewEmbedding\b/);
|
||||||
|
assert.match(launchText, /\bloadWorkflowOverviewReleaseReadinessArtifactUrl\b/);
|
||||||
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/);
|
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/);
|
||||||
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/);
|
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/);
|
||||||
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingRenderState\b/);
|
assert.match(launchText, /\bgetWorkflowOverviewEmbeddingRenderState\b/);
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
@@ -186,7 +187,7 @@ assert.deepEqual(readiness, {
|
|||||||
counts: {
|
counts: {
|
||||||
pages: 3,
|
pages: 3,
|
||||||
launcherLinks: 3,
|
launcherLinks: 3,
|
||||||
launchMethods: 58,
|
launchMethods: 59,
|
||||||
controlPageMethods: 11,
|
controlPageMethods: 11,
|
||||||
persistenceCapabilities: 3,
|
persistenceCapabilities: 3,
|
||||||
},
|
},
|
||||||
@@ -249,7 +250,7 @@ assert.deepEqual(handoffSummary, {
|
|||||||
counts: {
|
counts: {
|
||||||
pages: 3,
|
pages: 3,
|
||||||
launcherLinks: 3,
|
launcherLinks: 3,
|
||||||
launchMethods: 58,
|
launchMethods: 59,
|
||||||
controlPageMethods: 11,
|
controlPageMethods: 11,
|
||||||
persistenceCapabilities: 3,
|
persistenceCapabilities: 3,
|
||||||
},
|
},
|
||||||
@@ -788,6 +789,7 @@ assert.deepEqual(createIniPanelShellWorkflowOverviewContract(), {
|
|||||||
"getWorkflowOverviewApiSurfaceInventory",
|
"getWorkflowOverviewApiSurfaceInventory",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
@@ -832,6 +834,7 @@ 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 loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl, "function");
|
||||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, "function");
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel, "function");
|
||||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, "function");
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState, "function");
|
||||||
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, "function");
|
assert.equal(typeof createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract, "function");
|
||||||
@@ -855,6 +858,7 @@ assert.deepEqual(
|
|||||||
"getWorkflowOverviewSummary",
|
"getWorkflowOverviewSummary",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
@@ -1280,7 +1284,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), {
|
|||||||
counts: {
|
counts: {
|
||||||
pages: 3,
|
pages: 3,
|
||||||
launcherLinks: 3,
|
launcherLinks: 3,
|
||||||
launchMethods: 58,
|
launchMethods: 59,
|
||||||
controlPageMethods: 11,
|
controlPageMethods: 11,
|
||||||
persistenceCapabilities: 3,
|
persistenceCapabilities: 3,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ import {
|
|||||||
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
renderIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
mountIniPanelShellWorkflowOverviewEmbeddingMountState,
|
||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson,
|
||||||
|
loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDisplayViewModel,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactRenderState,
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
@@ -682,6 +683,7 @@ assert.deepEqual(shellViewModel.shellWorkflowOverviewContract, {
|
|||||||
"getWorkflowOverviewApiSurfaceInventory",
|
"getWorkflowOverviewApiSurfaceInventory",
|
||||||
"getWorkflowOverviewPersistenceSummary",
|
"getWorkflowOverviewPersistenceSummary",
|
||||||
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
"validateWorkflowOverviewReleaseReadinessArtifactJson",
|
||||||
|
"loadWorkflowOverviewReleaseReadinessArtifactUrl",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
"getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
"getWorkflowOverviewReleaseReadinessArtifactRenderState",
|
||||||
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
"getWorkflowOverviewReleaseReadinessArtifactDomContract",
|
||||||
@@ -1379,6 +1381,56 @@ assert.deepEqual(
|
|||||||
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{").missing,
|
validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson("{").missing,
|
||||||
["artifact-json"],
|
["artifact-json"],
|
||||||
);
|
);
|
||||||
|
assert.equal(
|
||||||
|
(await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl()).statusLine,
|
||||||
|
"Blocked: artifact-url",
|
||||||
|
);
|
||||||
|
const releaseArtifactUrlWorkflow = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "/project-release-readiness.json",
|
||||||
|
fetchRef: async (url) => ({
|
||||||
|
ok: url === "/project-release-readiness.json",
|
||||||
|
status: 200,
|
||||||
|
text: async () => releaseReadinessArtifactJson,
|
||||||
|
}),
|
||||||
|
mount: true,
|
||||||
|
mountOptions: {
|
||||||
|
documentRef: mountDocument,
|
||||||
|
mountNode: releaseArtifactMountNode,
|
||||||
|
statusNode: releaseArtifactStatusNode,
|
||||||
|
rowsNode: releaseArtifactRowsNode,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
assert.equal(
|
||||||
|
releaseArtifactUrlWorkflow.apiName,
|
||||||
|
"ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
||||||
|
);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.ready, true);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.httpStatus, 200);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.validation.ready, true);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.renderState.statusLine, "Ready: No blocking reasons");
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.mountResult.ready, true);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.mountResult.renderResult.rowCount, 3);
|
||||||
|
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "/project-release-readiness.json",
|
||||||
|
fetchRef: async () => ({
|
||||||
|
ok: true,
|
||||||
|
status: 200,
|
||||||
|
text: async () => releaseReadinessArtifactJson,
|
||||||
|
}),
|
||||||
|
mount: true,
|
||||||
|
});
|
||||||
|
assert.equal(releaseArtifactUrlWorkflowMissingDom.ready, false);
|
||||||
|
assert.deepEqual(releaseArtifactUrlWorkflowMissingDom.missing, ["document", "mount", "status", "rows"]);
|
||||||
|
const releaseArtifactUrlWorkflowHttpBlocked = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
|
artifactUrl: "/missing.json",
|
||||||
|
fetchRef: async () => ({
|
||||||
|
ok: false,
|
||||||
|
status: 404,
|
||||||
|
text: async () => "",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
assert.equal(releaseArtifactUrlWorkflowHttpBlocked.ready, false);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflowHttpBlocked.statusLine, "Blocked: HTTP 404");
|
||||||
assert.deepEqual(createIniPanelShellWorkflowOverviewReadiness(), {
|
assert.deepEqual(createIniPanelShellWorkflowOverviewReadiness(), {
|
||||||
apiName: "ini-panel-shell-workflow-overview-readiness",
|
apiName: "ini-panel-shell-workflow-overview-readiness",
|
||||||
readinessVersion: 1,
|
readinessVersion: 1,
|
||||||
@@ -1395,6 +1447,7 @@ const workflowOverviewApi = {
|
|||||||
getWorkflowOverviewApiSurfaceInventory: () => shellViewModel.shellApiSurfaceInventory,
|
getWorkflowOverviewApiSurfaceInventory: () => shellViewModel.shellApiSurfaceInventory,
|
||||||
getWorkflowOverviewPersistenceSummary: () => shellViewModel.shellPersistenceSummary,
|
getWorkflowOverviewPersistenceSummary: () => shellViewModel.shellPersistenceSummary,
|
||||||
validateWorkflowOverviewReleaseReadinessArtifactJson: () => ({ ready: true }),
|
validateWorkflowOverviewReleaseReadinessArtifactJson: () => ({ ready: true }),
|
||||||
|
loadWorkflowOverviewReleaseReadinessArtifactUrl: loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl,
|
||||||
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: () => releaseArtifactDisplay,
|
getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel: () => releaseArtifactDisplay,
|
||||||
getWorkflowOverviewReleaseReadinessArtifactRenderState: () => releaseArtifactRenderState,
|
getWorkflowOverviewReleaseReadinessArtifactRenderState: () => releaseArtifactRenderState,
|
||||||
getWorkflowOverviewReleaseReadinessArtifactDomContract: createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
getWorkflowOverviewReleaseReadinessArtifactDomContract: createIniPanelShellWorkflowOverviewReleaseReadinessArtifactDomContract,
|
||||||
|
|||||||
Reference in New Issue
Block a user