Advance AXIS-style Three.js simulation UI

This commit is contained in:
2026-06-17 09:59:22 +08:00
parent d6a623308b
commit 656cddf73a
24 changed files with 84658 additions and 75 deletions

View File

@@ -545,6 +545,37 @@ assert.equal(createProjectReleaseGateActionPlan({
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
}).shellScript, "# Project release gates are already marked passed.\n");
assert.equal(createProjectReleaseReadinessSummaryViewModel(releaseReadinessReady).statusLine, "Ready: No blocking reasons");
assert.equal(
createProjectReleaseReadinessSummaryViewModel(releaseReadinessReady).rows.find(({ id }) => id === "axis-screenshot-artifacts")?.value,
"not captured",
);
const releaseReadinessWithScreenshots = createProjectReleaseReadinessReport({
gateResults: Object.fromEntries(createProjectReleaseGateManifest().gateIds.map((id) => [id, true])),
axisScreenshotArtifacts: ["desktop-preview", "desktop-dro", "mobile-preview", "mobile-mdi"].map((viewportName) => ({
apiName: "real-browser-simulation-axis-screenshot-artifact",
artifactVersion: 1,
viewportName,
windowSize: viewportName.startsWith("mobile") ? "390,920" : "1280,900",
query: viewportName.endsWith("dro") ? "?axis_right=dro" : "",
screenshotBytes: 20000,
validatedBy: "browser_real_simulation_page_smoke",
fullDiagnosticsApiName: "real-browser-simulation-diagnostics-artifact",
fullDiagnosticsPath: `/tmp/${viewportName}-full.json`,
previewRenderer: "threejs",
previewViewMode: viewportName.endsWith("dro") ? "top" : "top",
threeReady: true,
threePathPoints: 3,
screenshotPath: `/tmp/${viewportName}.png`,
diagnosticsPath: `/tmp/${viewportName}.json`,
})),
});
assert.equal(releaseReadinessWithScreenshots.ready, true);
assert.equal(releaseReadinessWithScreenshots.axisScreenshotArtifactSummary.ready, true);
assert.equal(releaseReadinessWithScreenshots.axisScreenshotArtifactSummary.artifactCount, 4);
assert.equal(
createProjectReleaseReadinessSummaryViewModel(releaseReadinessWithScreenshots).rows.find(({ id }) => id === "axis-screenshot-artifacts")?.value,
"4/4 captured",
);
assert.equal(
createProjectReleaseGateResultMatrix({
observedOutputs: ["project_release_gate=ok"],
@@ -572,6 +603,8 @@ assert.deepEqual(releaseReadinessArtifactValidation, {
gateExecutionSummaryReady: true,
gateResultMatrixReady: true,
gateActionPlanReady: true,
axisScreenshotArtifactSummaryReady: true,
axisScreenshotArtifactCount: 0,
blockedRuntimeFamilies: [
"L4-USER-M-PROCESS",
"L4-TOOL-DB",
@@ -613,6 +646,11 @@ assert.deepEqual(releaseReadinessArtifactValidation, {
label: "Gate action plan",
value: "ready",
},
{
id: "axis-screenshot-artifacts",
label: "AXIS screenshot artifacts",
value: "not captured",
},
{
id: "validation",
label: "Artifact validation",