接入诊断URL工作流显示
结论:ini-panel workflow overview 已接入 browser diagnostics artifact URL workflow,可在 release readiness 页面显示 browser diagnostics validation rows,并验证 virtual HAL source coverage、halcmd fixtures 与 motion matrix evidence,继续证明虚拟HAL完全满足Web方式数控系统仿真范围。
This commit is contained in:
83
text17.txt
83
text17.txt
@@ -950,3 +950,86 @@ git diff --check ok
|
|||||||
multi-joint、vismach remap sims 的 motion source evidence 显式映射到 matrix fixture rows。
|
multi-joint、vismach remap sims 的 motion source evidence 显式映射到 matrix fixture rows。
|
||||||
3. 将 real simulation page 的 virtual HAL session snapshot 与 release diagnostics artifact
|
3. 将 real simulation page 的 virtual HAL session snapshot 与 release diagnostics artifact
|
||||||
做联动,使保存的 Web CNC 仿真会话可直接输出 release-ready diagnostics evidence。
|
做联动,使保存的 Web CNC 仿真会话可直接输出 release-ready diagnostics evidence。
|
||||||
|
|
||||||
|
### 十、2026-06-17 INI Panel Browser Diagnostics URL Workflow Rows
|
||||||
|
|
||||||
|
继续按本文件铁律推进:虚拟 HAL 的功能完全来源于 LinuxCNC 源程序,并且虚拟 HAL
|
||||||
|
完全满足 Web 方式数控系统仿真系统。本批完成上一节下一步第 1 项,把 browser
|
||||||
|
diagnostics artifact 的 URL workflow 接入 ini-panel workflow overview,使 release readiness
|
||||||
|
页面可显示 browser diagnostics validation rows,并能把 Web 仿真的 virtual HAL source
|
||||||
|
coverage、command fixtures、motion matrix evidence 纳入 release artifact URL workflow。
|
||||||
|
|
||||||
|
新增实质能力:
|
||||||
|
|
||||||
|
- `loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl()` 新增:
|
||||||
|
- `diagnosticsUrl` 参数;
|
||||||
|
- `diagnosticsHttpStatus`;
|
||||||
|
- `diagnosticsError`;
|
||||||
|
- `diagnosticsValidation`;
|
||||||
|
- `urlWorkflow`;
|
||||||
|
- ini-panel release artifact URL workflow 现在复用 SDK
|
||||||
|
`loadProjectReleaseReadinessArtifactUrlWorkflow()`:
|
||||||
|
- 同时 fetch project release readiness artifact;
|
||||||
|
- 可选 fetch browser real simulation diagnostics artifact;
|
||||||
|
- 使用 release 级 diagnostics validation;
|
||||||
|
- 保留原 ini-panel artifact display/mount workflow;
|
||||||
|
- workflow summary rows 新增:
|
||||||
|
- `diagnostics-url`;
|
||||||
|
- `browser-diagnostics`;
|
||||||
|
- `diagnostics-status`;
|
||||||
|
- render/mount workflow rows 现在能显示 browser diagnostics validation 结果;
|
||||||
|
- SDK `createProjectReleaseReadinessArtifactJsonWorkflow()` 保留 parsed artifact object,
|
||||||
|
供 ini-panel URL workflow 继续生成原有 gate execution summary 与 artifact display。
|
||||||
|
|
||||||
|
新增/扩展验证:
|
||||||
|
|
||||||
|
- `verify_ini_panel_ui_shell.mjs` 覆盖:
|
||||||
|
- 构造 browser diagnostics artifact;
|
||||||
|
- URL workflow 同时传入 release artifact URL 与 diagnostics URL;
|
||||||
|
- diagnostics HTTP status 为 200;
|
||||||
|
- diagnostics validation ready;
|
||||||
|
- summary rows 中 `browser-diagnostics` 为 ready;
|
||||||
|
- render rows 包含 `browser-diagnostics`;
|
||||||
|
- URL workflow render/mount row count 包含 diagnostics rows;
|
||||||
|
- `ini_panel_workflow_overview_smoke.html` 覆盖:
|
||||||
|
- workflow overview browser API 调用 diagnostics URL workflow;
|
||||||
|
- browser diagnostics artifact validation ready;
|
||||||
|
- render rows 包含 browser diagnostics row;
|
||||||
|
- workflow overview DOM mount 成功;
|
||||||
|
- `verify_project_release_artifact_url_workflow.sh` 继续覆盖 SDK URL workflow;
|
||||||
|
- `verify_sdk_surface.sh` 聚合覆盖 SDK/API surface。
|
||||||
|
|
||||||
|
关键验证:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ini_panel_ui_shell_node_smoke=ok
|
||||||
|
browser_ini_opfs_smoke=ok
|
||||||
|
browser_ini_control_page_smoke=ok
|
||||||
|
browser_ini_launch_smoke=ok
|
||||||
|
browser_ini_workflow_overview_smoke=ok
|
||||||
|
browser_ini_shell_integration_workflow_smoke=ok
|
||||||
|
project_release_artifact_url_workflow_node_smoke=ok
|
||||||
|
sdk_surface_node_smoke=ok
|
||||||
|
project_release_gate_manifest_node_smoke=ok
|
||||||
|
project_batch_acceptance_workflow_node_smoke=ok
|
||||||
|
project_batch_acceptance_artifact_node_smoke=ok
|
||||||
|
git diff --check ok
|
||||||
|
```
|
||||||
|
|
||||||
|
语义边界:
|
||||||
|
|
||||||
|
- 本批没有新增 G-code/interpreter/planner/kinematics 语义;
|
||||||
|
- ini-panel workflow overview 只显示和验证 browser diagnostics artifact 中已有的 virtual
|
||||||
|
HAL source evidence;
|
||||||
|
- virtual HAL 仍不声称提供 Linux kernel hard-realtime ABI、外部硬件驱动 ABI 或 native
|
||||||
|
HAL module ABI;
|
||||||
|
- Web 仿真 HAL 的满足性现在可以在 release readiness 页面被直接查看和验证。
|
||||||
|
|
||||||
|
下一步工作内容:
|
||||||
|
|
||||||
|
1. 扩展 motion matrix 与 LinuxCNC sim configs 的关联,把 external-offsets、QtDragon
|
||||||
|
multi-joint、vismach remap sims 的 motion source evidence 显式映射到 matrix fixture rows。
|
||||||
|
2. 将 real simulation page 的 virtual HAL session snapshot 与 release diagnostics artifact
|
||||||
|
做联动,使保存的 Web CNC 仿真会话可直接输出 release-ready diagnostics evidence。
|
||||||
|
3. 将 ini-panel workflow overview 的 diagnostics URL workflow 接入固定页面表单/按钮,
|
||||||
|
让用户可在页面上输入 release artifact URL 与 browser diagnostics URL 后直接运行验证。
|
||||||
|
|||||||
@@ -1718,6 +1718,7 @@ export function createProjectReleaseReadinessArtifactJsonWorkflow({ artifactJson
|
|||||||
ready: validation.ready === true,
|
ready: validation.ready === true,
|
||||||
parsed: true,
|
parsed: true,
|
||||||
parseError: null,
|
parseError: null,
|
||||||
|
artifact,
|
||||||
artifactApiName: validation.artifactApiName,
|
artifactApiName: validation.artifactApiName,
|
||||||
validation,
|
validation,
|
||||||
summaryViewModel,
|
summaryViewModel,
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import {
|
|||||||
createProjectReleaseReadinessArtifactValidation,
|
createProjectReleaseReadinessArtifactValidation,
|
||||||
createProjectReleaseReadinessArtifactValidationActionPlan,
|
createProjectReleaseReadinessArtifactValidationActionPlan,
|
||||||
createProjectReleaseReadinessArtifactValidationSummaryViewModel,
|
createProjectReleaseReadinessArtifactValidationSummaryViewModel,
|
||||||
|
loadProjectReleaseReadinessArtifactUrlWorkflow,
|
||||||
parseProjectReleaseReadinessArtifactJson,
|
parseProjectReleaseReadinessArtifactJson,
|
||||||
} from "../../sdk/src/project-release-readiness.js";
|
} from "../../sdk/src/project-release-readiness.js";
|
||||||
export {
|
export {
|
||||||
@@ -88,6 +89,7 @@ export {
|
|||||||
createProjectReleaseReadinessArtifactValidation,
|
createProjectReleaseReadinessArtifactValidation,
|
||||||
createProjectReleaseReadinessArtifactValidationActionPlan,
|
createProjectReleaseReadinessArtifactValidationActionPlan,
|
||||||
createProjectReleaseReadinessArtifactValidationSummaryViewModel,
|
createProjectReleaseReadinessArtifactValidationSummaryViewModel,
|
||||||
|
loadProjectReleaseReadinessArtifactUrlWorkflow,
|
||||||
parseProjectReleaseReadinessArtifactJson,
|
parseProjectReleaseReadinessArtifactJson,
|
||||||
} from "../../sdk/src/project-release-readiness.js";
|
} from "../../sdk/src/project-release-readiness.js";
|
||||||
|
|
||||||
@@ -2344,6 +2346,7 @@ export function mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWo
|
|||||||
|
|
||||||
export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
artifactUrl = "",
|
artifactUrl = "",
|
||||||
|
diagnosticsUrl = "",
|
||||||
fetchRef = globalThis.fetch,
|
fetchRef = globalThis.fetch,
|
||||||
mount = false,
|
mount = false,
|
||||||
mountOptions = {},
|
mountOptions = {},
|
||||||
@@ -2363,10 +2366,14 @@ export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactU
|
|||||||
phase: "blocked",
|
phase: "blocked",
|
||||||
ready: false,
|
ready: false,
|
||||||
artifactUrl,
|
artifactUrl,
|
||||||
|
diagnosticsUrl,
|
||||||
httpStatus: null,
|
httpStatus: null,
|
||||||
|
diagnosticsHttpStatus: null,
|
||||||
missing,
|
missing,
|
||||||
error: null,
|
error: null,
|
||||||
|
diagnosticsError: null,
|
||||||
validation: null,
|
validation: null,
|
||||||
|
diagnosticsValidation: null,
|
||||||
validationSummaryViewModel: null,
|
validationSummaryViewModel: null,
|
||||||
gateExecutionSummaryViewModel: null,
|
gateExecutionSummaryViewModel: null,
|
||||||
actionPlan,
|
actionPlan,
|
||||||
@@ -2378,35 +2385,45 @@ export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactU
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetchRef(artifactUrl);
|
const urlWorkflow = await loadProjectReleaseReadinessArtifactUrlWorkflow({
|
||||||
const httpStatus = response?.status ?? null;
|
artifactUrl,
|
||||||
if (!response?.ok) {
|
diagnosticsUrl,
|
||||||
const actionPlan = createProjectReleaseReadinessArtifactUrlWorkflowActionPlan({
|
fetchRef,
|
||||||
ready: false,
|
});
|
||||||
missing: ["artifact-fetch"],
|
const httpStatus = urlWorkflow.httpStatus;
|
||||||
});
|
if (urlWorkflow.fetched !== true || urlWorkflow.jsonWorkflow?.parsed !== true) {
|
||||||
|
const actionPlan = createProjectReleaseReadinessArtifactUrlWorkflowActionPlan(urlWorkflow);
|
||||||
|
const error = urlWorkflow.fetchError
|
||||||
|
?? urlWorkflow.jsonWorkflow?.parseError
|
||||||
|
?? (httpStatus ? `HTTP ${httpStatus}` : "artifact URL workflow blocked");
|
||||||
return {
|
return {
|
||||||
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
apiName: "ini-panel-shell-workflow-overview-release-readiness-artifact-url-workflow",
|
||||||
workflowVersion: 1,
|
workflowVersion: 1,
|
||||||
phase: "blocked",
|
phase: "blocked",
|
||||||
ready: false,
|
ready: false,
|
||||||
artifactUrl,
|
artifactUrl,
|
||||||
|
diagnosticsUrl,
|
||||||
httpStatus,
|
httpStatus,
|
||||||
missing: ["artifact-url"],
|
diagnosticsHttpStatus: urlWorkflow.diagnosticsHttpStatus ?? null,
|
||||||
error: `HTTP ${httpStatus ?? "error"}`,
|
missing: urlWorkflow.missing ?? ["artifact-url"],
|
||||||
|
error,
|
||||||
|
diagnosticsError: urlWorkflow.diagnosticsFetchError ?? null,
|
||||||
validation: null,
|
validation: null,
|
||||||
|
diagnosticsValidation: urlWorkflow.diagnosticsValidation ?? null,
|
||||||
validationSummaryViewModel: null,
|
validationSummaryViewModel: null,
|
||||||
gateExecutionSummaryViewModel: null,
|
gateExecutionSummaryViewModel: null,
|
||||||
actionPlan,
|
actionPlan,
|
||||||
displayViewModel: null,
|
displayViewModel: null,
|
||||||
renderState: null,
|
renderState: null,
|
||||||
mountResult: null,
|
mountResult: null,
|
||||||
statusLine: `Blocked: HTTP ${httpStatus ?? "error"}`,
|
urlWorkflow,
|
||||||
|
statusLine: httpStatus && urlWorkflow.fetchError ? `Blocked: HTTP ${httpStatus}` : `Blocked: ${error}`,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const artifactJson = await response.text();
|
const validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(
|
||||||
const validation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(artifactJson);
|
JSON.stringify(urlWorkflow.jsonWorkflow.artifact),
|
||||||
|
);
|
||||||
const gateExecutionSummaryViewModel =
|
const gateExecutionSummaryViewModel =
|
||||||
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
||||||
validation,
|
validation,
|
||||||
@@ -2432,9 +2449,15 @@ export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactU
|
|||||||
: [];
|
: [];
|
||||||
const workflowMissing = [
|
const workflowMissing = [
|
||||||
...validation.missing,
|
...validation.missing,
|
||||||
|
...(urlWorkflow.diagnosticsUrl && urlWorkflow.diagnosticsValidation?.ready !== true
|
||||||
|
? (urlWorkflow.diagnosticsValidation?.missing ?? ["browser-diagnostics"])
|
||||||
|
.map((item) => `diagnostics.${item}`)
|
||||||
|
: []),
|
||||||
...mountMissing,
|
...mountMissing,
|
||||||
];
|
];
|
||||||
const ready = validation.ready === true && (!mount || mountResult?.ready === true);
|
const ready = validation.ready === true &&
|
||||||
|
(!urlWorkflow.diagnosticsUrl || urlWorkflow.diagnosticsValidation?.ready === true) &&
|
||||||
|
(!mount || mountResult?.ready === true);
|
||||||
const validationActionPlan = createProjectReleaseReadinessArtifactValidationActionPlan(
|
const validationActionPlan = createProjectReleaseReadinessArtifactValidationActionPlan(
|
||||||
validation.validation,
|
validation.validation,
|
||||||
);
|
);
|
||||||
@@ -2449,16 +2472,21 @@ export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactU
|
|||||||
phase: ready ? "ready" : "blocked",
|
phase: ready ? "ready" : "blocked",
|
||||||
ready,
|
ready,
|
||||||
artifactUrl,
|
artifactUrl,
|
||||||
|
diagnosticsUrl,
|
||||||
httpStatus,
|
httpStatus,
|
||||||
|
diagnosticsHttpStatus: urlWorkflow.diagnosticsHttpStatus ?? null,
|
||||||
missing: workflowMissing,
|
missing: workflowMissing,
|
||||||
error: null,
|
error: null,
|
||||||
|
diagnosticsError: urlWorkflow.diagnosticsFetchError ?? null,
|
||||||
validation,
|
validation,
|
||||||
|
diagnosticsValidation: urlWorkflow.diagnosticsValidation ?? null,
|
||||||
validationSummaryViewModel,
|
validationSummaryViewModel,
|
||||||
gateExecutionSummaryViewModel,
|
gateExecutionSummaryViewModel,
|
||||||
actionPlan,
|
actionPlan,
|
||||||
displayViewModel,
|
displayViewModel,
|
||||||
renderState,
|
renderState,
|
||||||
mountResult,
|
mountResult,
|
||||||
|
urlWorkflow,
|
||||||
statusLine: ready ? renderState.statusLine : `Blocked: ${workflowMissing.join(", ")}`,
|
statusLine: ready ? renderState.statusLine : `Blocked: ${workflowMissing.join(", ")}`,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -2472,10 +2500,14 @@ export async function loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactU
|
|||||||
phase: "blocked",
|
phase: "blocked",
|
||||||
ready: false,
|
ready: false,
|
||||||
artifactUrl,
|
artifactUrl,
|
||||||
|
diagnosticsUrl,
|
||||||
httpStatus: null,
|
httpStatus: null,
|
||||||
|
diagnosticsHttpStatus: null,
|
||||||
missing: ["artifact-url"],
|
missing: ["artifact-url"],
|
||||||
error: error?.message ?? String(error),
|
error: error?.message ?? String(error),
|
||||||
|
diagnosticsError: null,
|
||||||
validation: null,
|
validation: null,
|
||||||
|
diagnosticsValidation: null,
|
||||||
validationSummaryViewModel: null,
|
validationSummaryViewModel: null,
|
||||||
gateExecutionSummaryViewModel: null,
|
gateExecutionSummaryViewModel: null,
|
||||||
actionPlan,
|
actionPlan,
|
||||||
@@ -2516,6 +2548,23 @@ export function createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWo
|
|||||||
label: "HTTP status",
|
label: "HTTP status",
|
||||||
value: workflow?.httpStatus == null ? "none" : String(workflow.httpStatus),
|
value: workflow?.httpStatus == null ? "none" : String(workflow.httpStatus),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "diagnostics-url",
|
||||||
|
label: "Diagnostics URL",
|
||||||
|
value: workflow?.diagnosticsUrl || "not requested",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "browser-diagnostics",
|
||||||
|
label: "Browser diagnostics",
|
||||||
|
value: workflow?.diagnosticsUrl
|
||||||
|
? (workflow?.diagnosticsValidation?.ready === true ? "ready" : "blocked")
|
||||||
|
: "not requested",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "diagnostics-status",
|
||||||
|
label: "Diagnostics HTTP status",
|
||||||
|
value: workflow?.diagnosticsHttpStatus == null ? "none" : String(workflow.diagnosticsHttpStatus),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "validation-summary",
|
id: "validation-summary",
|
||||||
label: "Validation summary",
|
label: "Validation summary",
|
||||||
|
|||||||
@@ -7,6 +7,15 @@
|
|||||||
<body>
|
<body>
|
||||||
<pre id="status">running</pre>
|
<pre id="status">running</pre>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
import {
|
||||||
|
createVirtualHalCommandScriptFixtureReport,
|
||||||
|
createVirtualHalMotionControllerMatrixReport,
|
||||||
|
createVirtualHalSimConfigSourceCoverageReport,
|
||||||
|
createVirtualHalSimulationReplacementReport,
|
||||||
|
createVirtualHalSourceComplianceReport,
|
||||||
|
createVirtualHalState,
|
||||||
|
} from "../../runtime/sdk/src/index.js";
|
||||||
|
|
||||||
function assertEqual(actual, expected, label) {
|
function assertEqual(actual, expected, label) {
|
||||||
if (actual !== expected) {
|
if (actual !== expected) {
|
||||||
throw new Error(`${label}: expected ${expected}, got ${actual}`);
|
throw new Error(`${label}: expected ${expected}, got ${actual}`);
|
||||||
@@ -337,8 +346,30 @@
|
|||||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||||
renderState: releaseArtifactJsonWorkflowRenderState,
|
renderState: releaseArtifactJsonWorkflowRenderState,
|
||||||
});
|
});
|
||||||
|
const diagnosticsVirtualHalState = createVirtualHalState();
|
||||||
|
const diagnosticsArtifactJson = JSON.stringify({
|
||||||
|
apiName: "real-browser-simulation-diagnostics-artifact",
|
||||||
|
artifactVersion: 1,
|
||||||
|
virtualHal: diagnosticsVirtualHalState,
|
||||||
|
virtualHalSimulationReplacement: createVirtualHalSimulationReplacementReport(diagnosticsVirtualHalState),
|
||||||
|
virtualHalSourceCompliance: createVirtualHalSourceComplianceReport({ halState: diagnosticsVirtualHalState }),
|
||||||
|
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
|
||||||
|
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport({ halState: diagnosticsVirtualHalState }),
|
||||||
|
virtualHalMotionControllerMatrix: createVirtualHalMotionControllerMatrixReport(),
|
||||||
|
});
|
||||||
const releaseArtifactUrlWorkflow = await workflowApi.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
const releaseArtifactUrlWorkflow = await workflowApi.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
||||||
|
diagnosticsUrl: "../../tests/fixtures/real-browser-simulation-diagnostics-ready.json",
|
||||||
|
fetchRef: async (url) => {
|
||||||
|
if (String(url).endsWith("real-browser-simulation-diagnostics-ready.json")) {
|
||||||
|
return {
|
||||||
|
ok: true,
|
||||||
|
status: 200,
|
||||||
|
text: async () => diagnosticsArtifactJson,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return fetch(url);
|
||||||
|
},
|
||||||
mount: true,
|
mount: true,
|
||||||
});
|
});
|
||||||
const releaseArtifactUrlWorkflowSummary = workflowApi
|
const releaseArtifactUrlWorkflowSummary = workflowApi
|
||||||
@@ -441,6 +472,8 @@
|
|||||||
);
|
);
|
||||||
assertEqual(releaseArtifactUrlWorkflow.ready, true, "workflow overview release artifact URL workflow readiness");
|
assertEqual(releaseArtifactUrlWorkflow.ready, true, "workflow overview release artifact URL workflow readiness");
|
||||||
assertEqual(releaseArtifactUrlWorkflow.httpStatus, 200, "workflow overview release artifact URL workflow status");
|
assertEqual(releaseArtifactUrlWorkflow.httpStatus, 200, "workflow overview release artifact URL workflow status");
|
||||||
|
assertEqual(releaseArtifactUrlWorkflow.diagnosticsHttpStatus, 200, "workflow overview diagnostics artifact URL workflow status");
|
||||||
|
assertEqual(releaseArtifactUrlWorkflow.diagnosticsValidation.ready, true, "workflow overview diagnostics artifact validation");
|
||||||
assertEqual(
|
assertEqual(
|
||||||
releaseArtifactUrlWorkflow.validationSummaryViewModel.statusLine,
|
releaseArtifactUrlWorkflow.validationSummaryViewModel.statusLine,
|
||||||
"Ready: Artifact evidence complete",
|
"Ready: Artifact evidence complete",
|
||||||
@@ -463,9 +496,14 @@
|
|||||||
);
|
);
|
||||||
assertEqual(
|
assertEqual(
|
||||||
releaseArtifactUrlWorkflowRenderResult.rowCount,
|
releaseArtifactUrlWorkflowRenderResult.rowCount,
|
||||||
8,
|
11,
|
||||||
"workflow overview release artifact URL workflow render rows",
|
"workflow overview release artifact URL workflow render rows",
|
||||||
);
|
);
|
||||||
|
assertEqual(
|
||||||
|
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"),
|
||||||
|
true,
|
||||||
|
"workflow overview release artifact URL workflow diagnostics row",
|
||||||
|
);
|
||||||
assertEqual(
|
assertEqual(
|
||||||
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||||
true,
|
true,
|
||||||
|
|||||||
@@ -5,7 +5,12 @@ import {
|
|||||||
createProjectReleaseReadinessReport,
|
createProjectReleaseReadinessReport,
|
||||||
} from "../../../runtime/sdk/src/project-release-readiness.js";
|
} from "../../../runtime/sdk/src/project-release-readiness.js";
|
||||||
import {
|
import {
|
||||||
|
createVirtualHalCommandScriptFixtureReport,
|
||||||
|
createVirtualHalMotionControllerMatrixReport,
|
||||||
createVirtualHalSimConfigSourceCoverageReport,
|
createVirtualHalSimConfigSourceCoverageReport,
|
||||||
|
createVirtualHalSimulationReplacementReport,
|
||||||
|
createVirtualHalSourceComplianceReport,
|
||||||
|
createVirtualHalState,
|
||||||
} from "../../../runtime/sdk/src/linuxcnc-hal.js";
|
} from "../../../runtime/sdk/src/linuxcnc-hal.js";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -1355,6 +1360,17 @@ const releaseReadinessArtifactJson = JSON.stringify(createProjectReleaseReadines
|
|||||||
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
|
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
|
||||||
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
|
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
|
||||||
}));
|
}));
|
||||||
|
const browserDiagnosticsVirtualHalState = createVirtualHalState();
|
||||||
|
const browserDiagnosticsArtifactJson = JSON.stringify({
|
||||||
|
apiName: "real-browser-simulation-diagnostics-artifact",
|
||||||
|
artifactVersion: 1,
|
||||||
|
virtualHal: browserDiagnosticsVirtualHalState,
|
||||||
|
virtualHalSimulationReplacement: createVirtualHalSimulationReplacementReport(browserDiagnosticsVirtualHalState),
|
||||||
|
virtualHalSourceCompliance: createVirtualHalSourceComplianceReport({ halState: browserDiagnosticsVirtualHalState }),
|
||||||
|
virtualHalSimConfigSourceCoverage: createVirtualHalSimConfigSourceCoverageReport(),
|
||||||
|
virtualHalCommandScriptFixtures: createVirtualHalCommandScriptFixtureReport({ halState: browserDiagnosticsVirtualHalState }),
|
||||||
|
virtualHalMotionControllerMatrix: createVirtualHalMotionControllerMatrixReport(),
|
||||||
|
});
|
||||||
const releaseArtifactValidation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(
|
const releaseArtifactValidation = validateIniPanelShellWorkflowOverviewReleaseReadinessArtifactJson(
|
||||||
releaseReadinessArtifactJson,
|
releaseReadinessArtifactJson,
|
||||||
);
|
);
|
||||||
@@ -1697,11 +1713,21 @@ assert.equal(
|
|||||||
);
|
);
|
||||||
const releaseArtifactUrlWorkflow = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
const releaseArtifactUrlWorkflow = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
artifactUrl: "/project-release-readiness.json",
|
artifactUrl: "/project-release-readiness.json",
|
||||||
fetchRef: async (url) => ({
|
diagnosticsUrl: "/real-browser-simulation-diagnostics.json",
|
||||||
ok: url === "/project-release-readiness.json",
|
fetchRef: async (url) => {
|
||||||
status: 200,
|
if (url === "/real-browser-simulation-diagnostics.json") {
|
||||||
text: async () => releaseReadinessArtifactJson,
|
return {
|
||||||
}),
|
ok: true,
|
||||||
|
status: 200,
|
||||||
|
text: async () => browserDiagnosticsArtifactJson,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
ok: url === "/project-release-readiness.json",
|
||||||
|
status: 200,
|
||||||
|
text: async () => releaseReadinessArtifactJson,
|
||||||
|
};
|
||||||
|
},
|
||||||
mount: true,
|
mount: true,
|
||||||
mountOptions: {
|
mountOptions: {
|
||||||
documentRef: mountDocument,
|
documentRef: mountDocument,
|
||||||
@@ -1716,7 +1742,9 @@ assert.equal(
|
|||||||
);
|
);
|
||||||
assert.equal(releaseArtifactUrlWorkflow.ready, true);
|
assert.equal(releaseArtifactUrlWorkflow.ready, true);
|
||||||
assert.equal(releaseArtifactUrlWorkflow.httpStatus, 200);
|
assert.equal(releaseArtifactUrlWorkflow.httpStatus, 200);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.diagnosticsHttpStatus, 200);
|
||||||
assert.equal(releaseArtifactUrlWorkflow.validation.ready, true);
|
assert.equal(releaseArtifactUrlWorkflow.validation.ready, true);
|
||||||
|
assert.equal(releaseArtifactUrlWorkflow.diagnosticsValidation.ready, true);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
releaseArtifactUrlWorkflow.validationSummaryViewModel.statusLine,
|
releaseArtifactUrlWorkflow.validationSummaryViewModel.statusLine,
|
||||||
"Ready: Artifact evidence complete",
|
"Ready: Artifact evidence complete",
|
||||||
@@ -1744,6 +1772,10 @@ assert.equal(
|
|||||||
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "action-plan")?.value,
|
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "action-plan")?.value,
|
||||||
"ready",
|
"ready",
|
||||||
);
|
);
|
||||||
|
assert.equal(
|
||||||
|
releaseArtifactUrlWorkflowSummary.rows.find(({ id }) => id === "browser-diagnostics")?.value,
|
||||||
|
"ready",
|
||||||
|
);
|
||||||
assert.equal(releaseArtifactUrlWorkflow.actionPlan.ready, true);
|
assert.equal(releaseArtifactUrlWorkflow.actionPlan.ready, true);
|
||||||
assert.equal(releaseArtifactUrlWorkflow.actionPlan.nextCommand, null);
|
assert.equal(releaseArtifactUrlWorkflow.actionPlan.nextCommand, null);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@@ -1809,13 +1841,17 @@ const releaseArtifactUrlWorkflowMountResult =
|
|||||||
rowsNode: releaseArtifactUrlWorkflowRowsNode,
|
rowsNode: releaseArtifactUrlWorkflowRowsNode,
|
||||||
});
|
});
|
||||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true);
|
assert.equal(releaseArtifactUrlWorkflowRenderResult.rendered, true);
|
||||||
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 8);
|
assert.equal(releaseArtifactUrlWorkflowRenderResult.rowCount, 11);
|
||||||
|
assert.equal(
|
||||||
|
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("browser-diagnostics"),
|
||||||
|
true,
|
||||||
|
);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true);
|
assert.equal(releaseArtifactUrlWorkflowMountResult.ready, true);
|
||||||
assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 8);
|
assert.equal(releaseArtifactUrlWorkflowMountResult.renderResult.rowCount, 11);
|
||||||
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
const releaseArtifactUrlWorkflowMissingDom = await loadIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||||
artifactUrl: "/project-release-readiness.json",
|
artifactUrl: "/project-release-readiness.json",
|
||||||
fetchRef: async () => ({
|
fetchRef: async () => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user