上传真实浏览器仿真推进
结论:新增 LinuxCNC WASM 驱动的真实浏览器仿真页面,接入 browser smoke、release gate、SDK 与项目交付文档,并完成当前推进批次的验收记录。
This commit is contained in:
@@ -14,6 +14,10 @@ const handoffText = readFileSync(resolve(root, "docs/project-release-handoff.md"
|
||||
const readmeText = readFileSync(resolve(root, "README.md"), "utf8");
|
||||
const panelEntryText = readFileSync(resolve(root, "docs/panel-entry.md"), "utf8");
|
||||
const sdkReadmeText = readFileSync(resolve(root, "runtime/sdk/README.md"), "utf8");
|
||||
const realBrowserSimulationPriorityText = readFileSync(
|
||||
resolve(root, "docs/real-browser-simulation-priority.md"),
|
||||
"utf8",
|
||||
);
|
||||
const sourceReuseText = readFileSync(resolve(root, "docs/source-reuse-map.md"), "utf8");
|
||||
const driftText = readFileSync(resolve(root, "docs/drift-report.md"), "utf8");
|
||||
const hostSmokeText = readFileSync(resolve(root, "tests/host/verify_host_smokes.sh"), "utf8");
|
||||
@@ -25,12 +29,18 @@ for (const phrase of [
|
||||
"docs/panel-entry.md",
|
||||
"runtime/sdk/README.md",
|
||||
"docs/opfs-session-persistence.md",
|
||||
"docs/real-browser-simulation-priority.md",
|
||||
"docs/sim-configs-coverage-handoff.md",
|
||||
"docs/host-runtime-boundary-handoff.md",
|
||||
"docs/source-reuse-map.md",
|
||||
"docs/drift-report.md",
|
||||
"PROJECT_COMPLETION_TRACKER.md",
|
||||
"runtime/sdk/src/index.js",
|
||||
"real browser CNC simulation page",
|
||||
"runtime/ui/simulation/index.html",
|
||||
"verify_real_simulation_browser.sh",
|
||||
"LinuxCNC-backed interpreter execution",
|
||||
"toolpath/preview area",
|
||||
"createProjectReleaseGateManifest()",
|
||||
"createProjectReleaseGateResultMatrix()",
|
||||
"createProjectReleaseGateActionPlan()",
|
||||
@@ -46,9 +56,48 @@ for (const phrase of [
|
||||
"loadProjectReleaseReadinessArtifactUrlWorkflow()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceCapabilityMatrix()",
|
||||
"createProjectBatchAcceptanceWorkflow()",
|
||||
"createProjectBatchAcceptanceChecklist()",
|
||||
"createProjectBatchAcceptanceReport()",
|
||||
"createProjectBatchAcceptanceReportValidation()",
|
||||
"createProjectBatchAcceptanceReportValidationSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportValidationActionPlan()",
|
||||
"createProjectBatchAcceptanceReportJsonWorkflow()",
|
||||
"loadProjectBatchAcceptanceReportUrlWorkflow()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowActionPlan()",
|
||||
"write_project_batch_acceptance_artifact.mjs",
|
||||
"verify_project_batch_acceptance_artifact.sh",
|
||||
"embedded gate manifest, execution manifest, result matrix, and",
|
||||
"validateWorkflowOverviewReleaseReadinessArtifactJson()",
|
||||
"runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"loadWorkflowOverviewReleaseReadinessArtifactUrl()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness()",
|
||||
"renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel()",
|
||||
"render-state",
|
||||
"DOM readiness",
|
||||
@@ -61,15 +110,21 @@ for (const phrase of [
|
||||
"build/project-release-readiness.json",
|
||||
"verify_project_release_readiness_artifact.sh",
|
||||
"verify_project_release_artifact_url_workflow.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_real_browser_simulation_priority_docs.sh",
|
||||
"verify_opfs_session_workflow_browser.sh",
|
||||
"host_wasm_opfs_browser_smokes=ok",
|
||||
"project_release_readiness_artifact_node_smoke=ok",
|
||||
"project_release_artifact_url_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_artifact_node_smoke=ok",
|
||||
"real_browser_simulation_priority_docs_node_smoke=ok",
|
||||
"project_release_gate=ok",
|
||||
"sim_configs_wasm_node_inventory_unexpected_fail=0",
|
||||
"browser_ini_shell_integration_workflow_smoke=ok",
|
||||
"browser_opfs_session_workflow_smoke=ok",
|
||||
"browser_release_artifact_url_workflow_smoke=ok",
|
||||
"browser_real_simulation_page_smoke=ok",
|
||||
"project_release_handoff_docs_node_smoke=ok",
|
||||
"L4-USER-M-PROCESS",
|
||||
"L4-TOOL-DB",
|
||||
@@ -80,7 +135,9 @@ for (const phrase of [
|
||||
|
||||
for (const phrase of [
|
||||
"docs/project-release-handoff.md",
|
||||
"docs/real-browser-simulation-priority.md",
|
||||
"project_release_handoff_docs_node_smoke=ok",
|
||||
"real_browser_simulation_priority_docs_node_smoke=ok",
|
||||
]) {
|
||||
assert.match(readmeText, literalRegExp(phrase));
|
||||
assert.match(hostSmokeText, literalRegExp("verify_project_release_handoff_docs.sh"));
|
||||
@@ -95,11 +152,15 @@ for (const phrase of [
|
||||
"verify_ini_panel_browser.sh",
|
||||
"verify_opfs_session_workflow_browser.sh",
|
||||
"verify_release_artifact_url_workflow_browser.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_real_browser_simulation_priority_docs.sh",
|
||||
"verify_ui_node_smokes.sh",
|
||||
"verify_host_smokes.sh",
|
||||
"write_project_release_readiness_artifact.mjs",
|
||||
"verify_project_release_readiness_artifact.sh",
|
||||
"verify_project_release_artifact_url_workflow.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_real_browser_simulation_priority_docs.sh",
|
||||
"project_release_gate=ok",
|
||||
]) {
|
||||
assert.match(projectReleaseGateText, literalRegExp(phrase));
|
||||
@@ -136,8 +197,51 @@ for (const phrase of [
|
||||
"loadProjectReleaseReadinessArtifactUrlWorkflow()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"createProjectReleaseReadinessArtifactUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceCapabilityMatrix()",
|
||||
"createProjectBatchAcceptanceWorkflow()",
|
||||
"createProjectBatchAcceptanceChecklist()",
|
||||
"createProjectBatchAcceptanceReport()",
|
||||
"createProjectBatchAcceptanceReportValidation()",
|
||||
"createProjectBatchAcceptanceReportValidationSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportValidationActionPlan()",
|
||||
"createProjectBatchAcceptanceReportJsonWorkflow()",
|
||||
"loadProjectBatchAcceptanceReportUrlWorkflow()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceReportUrlWorkflowActionPlan()",
|
||||
"createProjectBatchAcceptanceSummaryViewModel()",
|
||||
"createProjectBatchAcceptanceActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState()",
|
||||
"runIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflow()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract()",
|
||||
"createIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness()",
|
||||
"renderIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"mountIniPanelShellWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState()",
|
||||
"verify_project_release_artifact_url_workflow.sh",
|
||||
"verify_project_batch_acceptance_workflow.sh",
|
||||
"verify_project_batch_acceptance_artifact.sh",
|
||||
"project_release_artifact_url_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_workflow_node_smoke=ok",
|
||||
"project_batch_acceptance_artifact_node_smoke=ok",
|
||||
"build/project-release-readiness.json",
|
||||
"INI panel shell handoff exports",
|
||||
"createIniPanelShellApiSurfaceInventory()",
|
||||
@@ -148,7 +252,10 @@ for (const phrase of [
|
||||
|
||||
assert.match(sourceReuseText, literalRegExp("docs/project-release-handoff.md"));
|
||||
assert.match(driftText, literalRegExp("docs/project-release-handoff.md"));
|
||||
assert.match(realBrowserSimulationPriorityText, literalRegExp("first priority is to deliver a real browser CNC simulation page"));
|
||||
assert.match(realBrowserSimulationPriorityText, literalRegExp("must not implement CNC semantics in JavaScript"));
|
||||
assert.match(trackerText, /Documentation\/release gate/);
|
||||
assert.match(trackerText, /Real browser simulation priority/);
|
||||
assert.match(trackerText, /Project release gate wrapper/);
|
||||
assert.match(trackerText, /Final Acceptance Checklist/);
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { readFileSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const root = resolve(__dirname, "../../..");
|
||||
|
||||
function literalRegExp(text) {
|
||||
return new RegExp(text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
|
||||
}
|
||||
|
||||
const priorityText = readFileSync(resolve(root, "docs/real-browser-simulation-priority.md"), "utf8");
|
||||
const handoffText = readFileSync(resolve(root, "docs/project-release-handoff.md"), "utf8");
|
||||
const readmeText = readFileSync(resolve(root, "README.md"), "utf8");
|
||||
const trackerText = readFileSync(resolve(root, "../PROJECT_COMPLETION_TRACKER.md"), "utf8");
|
||||
const hostSmokeText = readFileSync(resolve(root, "tests/host/verify_host_smokes.sh"), "utf8");
|
||||
const releaseGateText = readFileSync(resolve(root, "tests/host/verify_project_release_gate.sh"), "utf8");
|
||||
const simulationHtmlText = readFileSync(resolve(root, "runtime/ui/simulation/index.html"), "utf8");
|
||||
const simulationSmokeText = readFileSync(resolve(root, "tests/browser/verify_real_simulation_browser.sh"), "utf8");
|
||||
|
||||
for (const phrase of [
|
||||
"Real Browser Simulation Priority",
|
||||
"first priority is to deliver a real browser CNC simulation page",
|
||||
"machine/session loader",
|
||||
"G-code program view",
|
||||
"LinuxCNC-backed interpreter execution",
|
||||
"toolpath/preview area",
|
||||
"browser smoke coverage",
|
||||
"must not implement CNC semantics in JavaScript",
|
||||
"vendored LinuxCNC source",
|
||||
"wasm-port/tests/docs/node/verify_real_browser_simulation_priority_docs.sh",
|
||||
"runtime/ui/simulation/index.html",
|
||||
"wasm-port/tests/browser/verify_real_simulation_browser.sh",
|
||||
]) {
|
||||
assert.match(priorityText, literalRegExp(phrase));
|
||||
}
|
||||
|
||||
for (const text of [handoffText, readmeText, trackerText]) {
|
||||
assert.match(text, literalRegExp("docs/real-browser-simulation-priority.md"));
|
||||
assert.match(text, /real browser CNC simulation page|真实 UI\/browser 数控仿真页面/);
|
||||
assert.match(text, /LinuxCNC semantic boundary|LinuxCNC 语义边界|LinuxCNC-backed/);
|
||||
}
|
||||
|
||||
assert.match(hostSmokeText, /verify_real_browser_simulation_priority_docs\.sh/);
|
||||
assert.match(hostSmokeText, /verify_real_simulation_browser\.sh/);
|
||||
assert.match(releaseGateText, /verify_real_simulation_browser\.sh/);
|
||||
assert.match(simulationHtmlText, /LinuxCNC Browser Simulation/);
|
||||
assert.match(simulationHtmlText, /data-toolpath-svg/);
|
||||
assert.match(simulationHtmlText, /data-program-lines/);
|
||||
assert.match(simulationSmokeText, /browser_real_simulation_page_smoke=ok/);
|
||||
|
||||
console.log("real_browser_simulation_priority_docs_node_smoke=ok");
|
||||
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../../.." && pwd)"
|
||||
|
||||
node "$ROOT_DIR/tests/docs/node/verify_real_browser_simulation_priority_docs.mjs"
|
||||
Reference in New Issue
Block a user