#!/usr/bin/env node const assert = require("assert"); const fs = require("fs"); const path = require("path"); const repo = path.resolve(__dirname, ".."); function read(relativePath) { return fs.readFileSync(path.join(repo, relativePath), "utf8"); } function expect(source, name, pattern) { assert.match(source, pattern, `missing public local demo evidence: ${name}`); } const publicAcceptance = read("scripts/acceptance-public.sh"); const publicSplit = read("scripts/verify-public-split.sh"); const cliInstall = read("scripts/cli-install-smoke.js"); const flagship = read("scripts/flagship-demo-smoke.js"); const cliLocalRun = read("scripts/cli-local-run-smoke.js"); const nodeAttach = read("scripts/node-attach-smoke.js"); const vscodeExtension = read("scripts/vscode-extension-smoke.js"); const vscodeF5 = read("scripts/vscode-f5-smoke.js"); const artifactDownload = read("scripts/artifact-download-smoke.js"); const artifactExport = read("scripts/artifact-export-smoke.js"); for (const script of [publicAcceptance, publicSplit]) { for (const smoke of [ "scripts/cli-install-smoke.js", "scripts/flagship-demo-smoke.js", "scripts/cli-local-run-smoke.js", "scripts/node-attach-smoke.js", "scripts/vscode-extension-smoke.js", "scripts/vscode-f5-smoke.js", "scripts/artifact-download-smoke.js", "scripts/artifact-export-smoke.js", ]) { assert(script.includes(`node ${smoke}`), `public demo gate must run ${smoke}`); } } expect(cliInstall, "CLI install from project path", /cargo[\s\S]*install[\s\S]*crates\/disasmer-cli/); expect(cliInstall, "CLI install smoke targets flagship project", /const project = path\.join\(repo, "examples\/launch-build-demo"\)/); expect(cliInstall, "installed CLI inspects flagship project", /installedBin[\s\S]*\["bundle", "inspect", "--project", project, "--json"\]/); expect(flagship, "flagship project source is Rust workflow", /examples\/launch-build-demo[\s\S]*src\/build\.rs/); expect(flagship, "flagship source avoids local machine assumptions", /forbiddenSourceAssumptions/); expect(flagship, "flagship cargo test runs", /cargo[\s\S]*test[\s\S]*launch-build-demo/); expect(cliLocalRun, "local run starts node process", /cli_process_started_node_process[\s\S]*true/); expect(cliLocalRun, "local run records logs and metadata", /log_event_response[\s\S]*task_log_recorded[\s\S]*vfs_metadata_response[\s\S]*vfs_metadata_recorded/); expect(cliLocalRun, "local run stages artifact", /\/vfs\/artifacts\/cli-run-output\.txt/); expect(nodeAttach, "Linux node attach creates enrollment grant", /create_node_enrollment_grant/); expect(nodeAttach, "Linux node attach uses enrollment exchange", /used_enrollment_exchange[\s\S]*true/); expect(nodeAttach, "attached Linux node runs work", /runAttachedNodeWork[\s\S]*node_status[\s\S]*completed/); expect(vscodeExtension, "extension contributes debugger", /contributes\.debuggers[\s\S]*type === "disasmer"/); expect(vscodeF5, "F5 uses local-services backend", /runtimeBackend[\s\S]*local-services/); expect(vscodeF5, "F5 exposes virtual thread", /compile linux[\s\S]*virtual thread/); expect(vscodeF5, "F5 records coordinator task event", /coordinator_task_events[\s\S]*value === 1/); expect(artifactDownload, "artifact download creates scoped link", /create_artifact_download_link/); expect(artifactDownload, "artifact download opens stream", /open_artifact_download_stream/); expect(artifactExport, "artifact export targets receiver node", /export_artifact_to_node[\s\S]*node-export-receiver/); expect(artifactExport, "artifact export rejects coordinator bulk relay", /coordinator_bulk_relay_allowed[\s\S]*false/); console.log("Public local demo matrix smoke passed");