Loading docs_build/dev/admin-notes/index.txt.
++Loading dev/archive/legacy-docs-build/admin-notes/index.txt.
+ + + diff --git a/dev/tests/dev-runtime/AdminNotesBoundary.test.mjs b/dev/tests/dev-runtime/AdminNotesBoundary.test.mjs index 5918522ba..c75f6c641 100644 --- a/dev/tests/dev-runtime/AdminNotesBoundary.test.mjs +++ b/dev/tests/dev-runtime/AdminNotesBoundary.test.mjs @@ -194,14 +194,14 @@ test("Owner Notes route is the only production-facing Admin Notes viewer route", assert.doesNotMatch(ownerNotesSource, /\son[a-z]+\s*=/i, "Owner Notes page must not contain inline event handlers"); assert.match(ownerNotesSource, /data-owner-notes/, "Owner Notes page keeps Owner route marker"); assert.match(ownerNotesSource, /data-admin-notes-viewer/, "Owner Notes page reuses the Admin Notes viewer pattern"); - assert.match(ownerNotesSource, /docs_build\/dev\/admin-notes/, "Owner Notes page points at the admin-notes source folder"); + assert.match(ownerNotesSource, /dev\/archive\/legacy-docs-build\/admin-notes/, "Owner Notes page points at the admin-notes source folder"); assert.match(ownerNotesSource, /\.\.\/src\/dev-runtime\/admin\/admin-notes-viewer\.js/, "Owner Notes page reuses the existing viewer script"); assert.doesNotMatch(ownerNotesSource, /Game Journey owns note editing|Open Game Journey/, "Owner Notes page must not use the old placeholder workflow"); }); test("production-facing paths only expose Admin Notes through Owner Notes", () => { const headerSource = fs.readFileSync(repoPath("www/assets/theme-v2/partials/header-nav.html"), "utf8"); - assert.doesNotMatch(headerSource, /docs_build\/dev\/admin-notes|admin-notes-dev|data-admin-notes-local-menu|data-admin-my-stuff-menu|My Stuff|Admin Notes/); + assert.doesNotMatch(headerSource, /dev\/archive\/legacy-docs-build\/admin-notes|admin-notes-dev|data-admin-notes-local-menu|data-admin-my-stuff-menu|My Stuff|Admin Notes/); for (const label of devOnlyAdminLabels) { assert.doesNotMatch(headerSource, new RegExp(`>${label}<\\/a>`), `production Admin menu omits dev-only ${label}`); } @@ -216,7 +216,7 @@ test("production-facing paths only expose Admin Notes through Owner Notes", () = return false; } const source = fs.readFileSync(filePath, "utf8"); - return /docs_build\/dev\/admin-notes|docs_build\\dev\\admin-notes|src\/dev-runtime\/admin|src\\dev-runtime\\admin|data-admin-my-stuff-menu|My Stuff|admin-notes|Admin Notes/.test(source); + return /dev\/archive\/legacy-docs-build\/admin-notes|dev\\archive\\legacy-docs-build\\admin-notes|src\/dev-runtime\/admin|src\\dev-runtime\\admin|data-admin-my-stuff-menu|My Stuff|admin-notes|Admin Notes/.test(source); }) .map(relativePath); @@ -306,7 +306,7 @@ test("Admin page left menus use dynamic placeholders without Notes duplication", for (const label of devOnlyAdminLabels) { assert.doesNotMatch(source, new RegExp(`>${label}<\\/a>`), `${pageName} left menu omits ${label}`); } - assert.doesNotMatch(source, /docs_build\/dev\/admin-notes|src\/dev-runtime\/admin|admin-notes|Admin Notes/); + assert.doesNotMatch(source, /dev\/archive\/legacy-docs-build\/admin-notes|src\/dev-runtime\/admin|admin-notes|Admin Notes/); } assert.ok(checkedPages.length > 0, "Admin pages with side menus were checked"); diff --git a/dev/tests/dev-runtime/ApiMenuPathCleanup.test.mjs b/dev/tests/dev-runtime/ApiMenuPathCleanup.test.mjs index 086b1a9a3..82ee5db82 100644 --- a/dev/tests/dev-runtime/ApiMenuPathCleanup.test.mjs +++ b/dev/tests/dev-runtime/ApiMenuPathCleanup.test.mjs @@ -131,9 +131,9 @@ test("business-control pages moved under owner and are absent from admin", () => test("active app code no longer links to moved Admin business paths", () => { const offenders = activeTextSources() .filter(({ fileName, source }) => { - if (fileName.startsWith("tests/playwright/tools/LoginSessionMode.spec.mjs") - || fileName.startsWith("tests/playwright/tools/RootToolsFutureState.spec.mjs") - || fileName.startsWith("tests/playwright/tools/AdminPlatformToolsWireframes.spec.mjs")) { + if (fileName.startsWith("dev/tests/playwright/tools/LoginSessionMode.spec.mjs") + || fileName.startsWith("dev/tests/playwright/tools/RootToolsFutureState.spec.mjs") + || fileName.startsWith("dev/tests/playwright/tools/AdminPlatformToolsWireframes.spec.mjs")) { return false; } return /admin\/(branding|design-system|grouping-colors|site-settings|themes)\.html|admin-(branding|design-system|grouping-colors|site-settings|themes)/.test(source); diff --git a/dev/tests/final/ToolchainEngineIntegrationValidation.test.mjs b/dev/tests/final/ToolchainEngineIntegrationValidation.test.mjs index fcda15676..aec97733a 100644 --- a/dev/tests/final/ToolchainEngineIntegrationValidation.test.mjs +++ b/dev/tests/final/ToolchainEngineIntegrationValidation.test.mjs @@ -24,19 +24,19 @@ function runNodeTestFile(relativeTestPath) { const TRACK_E_TOOLCHAIN_VALIDATION_STAGES = Object.freeze([ Object.freeze({ id: "tool-entry-launch-contract", - run: async () => runNodeTestFile("tests/tools/ToolEntryLaunchContract.test.mjs") + run: async () => runNodeTestFile("dev/tests/tools/ToolEntryLaunchContract.test.mjs") }), Object.freeze({ id: "project-tool-data-contracts", - run: async () => runNodeTestFile("tests/tools/ProjectToolDataContracts.test.mjs") + run: async () => runNodeTestFile("dev/tests/tools/ProjectToolDataContracts.test.mjs") }), Object.freeze({ id: "runtime-asset-loader", - run: async () => runNodeTestFile("tests/tools/RuntimeAssetLoader.test.mjs") + run: async () => runNodeTestFile("dev/tests/tools/RuntimeAssetLoader.test.mjs") }), Object.freeze({ id: "render-pipeline-contract-all-4-tools", - run: async () => runNodeTestFile("tests/tools/RenderPipelineContractAll4Tools.test.mjs") + run: async () => runNodeTestFile("dev/tests/tools/RenderPipelineContractAll4Tools.test.mjs") }), Object.freeze({ id: "runtime-scene-loader-hot-reload", diff --git a/dev/tests/fixtures/games/AsteroidsValidation.test.mjs.patch b/dev/tests/fixtures/games/AsteroidsValidation.test.mjs.patch index d7cd2648b..7051760b9 100644 --- a/dev/tests/fixtures/games/AsteroidsValidation.test.mjs.patch +++ b/dev/tests/fixtures/games/AsteroidsValidation.test.mjs.patch @@ -1,4 +1,4 @@ -*** MANUAL PATCH FOR tests/games/AsteroidsValidation.test.mjs *** +*** MANUAL PATCH FOR dev/tests/games/AsteroidsValidation.test.mjs *** 1) Export the test runner function diff --git a/dev/tests/fixtures/tools/VectorNativeTemplate.test.mjs.patch b/dev/tests/fixtures/tools/VectorNativeTemplate.test.mjs.patch index 6d0183cf5..13cb2b4e3 100644 --- a/dev/tests/fixtures/tools/VectorNativeTemplate.test.mjs.patch +++ b/dev/tests/fixtures/tools/VectorNativeTemplate.test.mjs.patch @@ -1,4 +1,4 @@ -*** MANUAL PATCH FOR tests/tools/VectorNativeTemplate.test.mjs *** +*** MANUAL PATCH FOR dev/tests/tools/VectorNativeTemplate.test.mjs *** Find: /Template path: templates\/vector-native-arcade\// diff --git a/dev/tests/fixtures/workspace-v2/uat.manifest.json b/dev/tests/fixtures/workspace-v2/uat.manifest.json index 08101a0dc..ba92a4da7 100644 --- a/dev/tests/fixtures/workspace-v2/uat.manifest.json +++ b/dev/tests/fixtures/workspace-v2/uat.manifest.json @@ -20,7 +20,7 @@ "id": "workspace-manager-v2-uat-sample", "name": "Workspace Manager V2 UAT Sample Palette", "source": "Workspace Manager V2 temporary UAT sample", - "sourceId": "tests/fixtures/workspace-v2/uat.manifest.json", + "sourceId": "dev/tests/fixtures/workspace-v2/uat.manifest.json", "locked": true, "swatches": [ { diff --git a/dev/tests/helpers/playwrightV8CoverageReporter.mjs b/dev/tests/helpers/playwrightV8CoverageReporter.mjs index 774e18996..dabe614e2 100644 --- a/dev/tests/helpers/playwrightV8CoverageReporter.mjs +++ b/dev/tests/helpers/playwrightV8CoverageReporter.mjs @@ -276,11 +276,10 @@ export class PlaywrightV8CoverageReporter { return false; } return filePath.startsWith("src/") - || filePath.startsWith("admin/") - || filePath.startsWith("assets/theme-v2/js/") - || filePath.startsWith("games/Asteroids/") - || filePath.startsWith("toolbox/") - || filePath.startsWith("common/"); + || filePath.startsWith("www/admin/") + || filePath.startsWith("www/assets/theme-v2/js/") + || filePath.startsWith("www/games/Asteroids/") + || filePath.startsWith("www/toolbox/"); } pathFromStatusLine(line) { @@ -327,9 +326,9 @@ export class PlaywrightV8CoverageReporter { formatToolEntryPoints(coverageByPath) { const toolEntryPoints = [ - { name: "Toolbox Index", prefix: "toolbox/" }, + { name: "Toolbox Index", prefix: "www/toolbox/" }, { name: "Tool Template V2", prefix: "dev/templates/tool-template-v2/" }, - { name: "Theme V2 Shared JS", prefix: "assets/theme-v2/js/" } + { name: "Theme V2 Shared JS", prefix: "www/assets/theme-v2/js/" } ]; return toolEntryPoints.map(({ name, prefix }) => { const records = [...coverageByPath.values()].filter((record) => record.repoPath.startsWith(prefix)); diff --git a/dev/tests/helpers/testCoverageCatalog.mjs b/dev/tests/helpers/testCoverageCatalog.mjs index aabfa3f21..4295165ef 100644 --- a/dev/tests/helpers/testCoverageCatalog.mjs +++ b/dev/tests/helpers/testCoverageCatalog.mjs @@ -1,6 +1,6 @@ import path from "node:path"; -export const TESTS_ROOT = path.resolve("tests"); +export const TESTS_ROOT = path.resolve("dev/tests"); export const REQUIRED_TEST_DIRECTORIES = Object.freeze([ "core", @@ -16,23 +16,23 @@ export const REQUIRED_TEST_DIRECTORIES = Object.freeze([ ]); export const UNIT_COVERAGE_ANCHORS = Object.freeze([ - "tests/core/EngineCoreBoundaryBaseline.test.mjs", - "tests/shared/SharedFoundationCombinedPass.test.mjs", - "tests/tools/ToolBoundaryEnforcement.test.mjs" + "dev/tests/core/EngineCoreBoundaryBaseline.test.mjs", + "dev/tests/shared/SharedFoundationCombinedPass.test.mjs", + "dev/tests/tools/ToolBoundaryEnforcement.test.mjs" ]); export const INTEGRATION_COVERAGE_ANCHORS = Object.freeze([ - "tests/world/WorldGameStateSystem.test.mjs", - "tests/replay/ReplaySystem.test.mjs", - "tests/render/Renderer.test.mjs", - "tests/tools/RuntimeAssetBinding.test.mjs", - "tests/core/Engine2DCapabilityCombinedFoundation.test.mjs" + "dev/tests/world/WorldGameStateSystem.test.mjs", + "dev/tests/replay/ReplaySystem.test.mjs", + "dev/tests/render/Renderer.test.mjs", + "dev/tests/tools/RuntimeAssetBinding.test.mjs", + "dev/tests/core/Engine2DCapabilityCombinedFoundation.test.mjs" ]); export const FIXTURE_ARTIFACTS = Object.freeze([ - "tests/fixtures/games/AsteroidsValidation.snippet.js", - "tests/fixtures/games/AsteroidsValidation.test.mjs.patch", - "tests/fixtures/tools/VectorNativeTemplate.regex.before.txt", - "tests/fixtures/tools/VectorNativeTemplate.regex.after.txt", - "tests/fixtures/tools/VectorNativeTemplate.test.mjs.patch" + "dev/tests/fixtures/games/AsteroidsValidation.snippet.js", + "dev/tests/fixtures/games/AsteroidsValidation.test.mjs.patch", + "dev/tests/fixtures/tools/VectorNativeTemplate.regex.before.txt", + "dev/tests/fixtures/tools/VectorNativeTemplate.regex.after.txt", + "dev/tests/fixtures/tools/VectorNativeTemplate.test.mjs.patch" ]); diff --git a/dev/tests/playwright_installation.txt b/dev/tests/playwright_installation.txt index dc1bae980..064c65600 100644 --- a/dev/tests/playwright_installation.txt +++ b/dev/tests/playwright_installation.txt @@ -47,7 +47,7 @@ npx playwright --version ## ▶️ Run your test ```powershell -npx playwright test tests/ui/workspace-v2.asset-manager.spec.js +npx playwright test dev/tests/ui/workspace-v2.asset-manager.spec.js ``` --- @@ -100,7 +100,7 @@ npx playwright show-trace ```text HTML-JavaScript-Gaming/ -├── tests/ +├── dev/tests/ │ └── ui/ │ └── workspace-v2.asset-manager.spec.js <<<< test code goes here ├── dev/config/playwright.config.cjs diff --git a/dev/tests/production/TestsValidationCombinedPass.test.mjs b/dev/tests/production/TestsValidationCombinedPass.test.mjs index 3cbe41b75..572d34377 100644 --- a/dev/tests/production/TestsValidationCombinedPass.test.mjs +++ b/dev/tests/production/TestsValidationCombinedPass.test.mjs @@ -24,7 +24,7 @@ function assertRepoDirectory(relativePath) { export function run() { REQUIRED_TEST_DIRECTORIES.forEach((dir) => { - assertRepoDirectory(`tests/${dir}`); + assertRepoDirectory(`dev/tests/${dir}`); }); UNIT_COVERAGE_ANCHORS.forEach((filePath) => { diff --git a/dev/tests/runtime/V2BlockFakeSessionSave.test.mjs b/dev/tests/runtime/V2BlockFakeSessionSave.test.mjs index 29b30b29c..48b0233b3 100644 --- a/dev/tests/runtime/V2BlockFakeSessionSave.test.mjs +++ b/dev/tests/runtime/V2BlockFakeSessionSave.test.mjs @@ -109,7 +109,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2BlockFakeSessionSave.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2BlockFakeSessionSave.test.mjs failed syntax check."); const requiredTokens = [ "readSessionPayloadForLibraryWrite(sessionId)", diff --git a/dev/tests/runtime/V2ClearStaleMergePreview.test.mjs b/dev/tests/runtime/V2ClearStaleMergePreview.test.mjs index 337bc2bbf..f928cf560 100644 --- a/dev/tests/runtime/V2ClearStaleMergePreview.test.mjs +++ b/dev/tests/runtime/V2ClearStaleMergePreview.test.mjs @@ -64,7 +64,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2ClearStaleMergePreview.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2ClearStaleMergePreview.test.mjs failed syntax check."); const requiredTokens = [ "handleMergeSelectionChange()", diff --git a/dev/tests/runtime/V2ConfirmPreviewEnableState.test.mjs b/dev/tests/runtime/V2ConfirmPreviewEnableState.test.mjs index e2066591d..021b2226d 100644 --- a/dev/tests/runtime/V2ConfirmPreviewEnableState.test.mjs +++ b/dev/tests/runtime/V2ConfirmPreviewEnableState.test.mjs @@ -52,7 +52,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2ConfirmPreviewEnableState.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2ConfirmPreviewEnableState.test.mjs failed syntax check."); const requiredTokens = [ "conflictCount: Object.keys(result.conflicts).length", diff --git a/dev/tests/runtime/V2CrossToolFlow.test.mjs b/dev/tests/runtime/V2CrossToolFlow.test.mjs index a766fe254..65563ea64 100644 --- a/dev/tests/runtime/V2CrossToolFlow.test.mjs +++ b/dev/tests/runtime/V2CrossToolFlow.test.mjs @@ -56,7 +56,7 @@ function validateFlow(flow) { let launchUrl = ""; if (!sourceFixtureExists) { - failures.push(`Missing source fixture: tests/fixtures/v2-tools/${flow.sourceTool}.json`); + failures.push(`Missing source fixture: dev/tests/fixtures/v2-tools/${flow.sourceTool}.json`); } else { const beforeText = fs.readFileSync(sourceFixturePath, "utf8"); let sourceFixture = null; @@ -67,7 +67,7 @@ function validateFlow(flow) { sourceFixtureValid = false; } if (!sourceFixtureValid) { - failures.push(`Invalid source fixture JSON: tests/fixtures/v2-tools/${flow.sourceTool}.json`); + failures.push(`Invalid source fixture JSON: dev/tests/fixtures/v2-tools/${flow.sourceTool}.json`); } else { sourceHostContextId = typeof sourceFixture.hostContextId === "string" ? sourceFixture.hostContextId.trim() : ""; if (!sourceHostContextId) { diff --git a/dev/tests/runtime/V2CrossToolMergeBlock.test.mjs b/dev/tests/runtime/V2CrossToolMergeBlock.test.mjs index 218ca64b1..5bb344bf1 100644 --- a/dev/tests/runtime/V2CrossToolMergeBlock.test.mjs +++ b/dev/tests/runtime/V2CrossToolMergeBlock.test.mjs @@ -53,7 +53,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2CrossToolMergeBlock.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2CrossToolMergeBlock.test.mjs failed syntax check."); const requiredTokens = [ "Cross-tool merge is not supported. Select two sessions with the same toolId.", diff --git a/dev/tests/runtime/V2DeterministicStateTransitions.test.mjs b/dev/tests/runtime/V2DeterministicStateTransitions.test.mjs index a59281aea..f058fd597 100644 --- a/dev/tests/runtime/V2DeterministicStateTransitions.test.mjs +++ b/dev/tests/runtime/V2DeterministicStateTransitions.test.mjs @@ -59,7 +59,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2DeterministicStateTransitions.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2DeterministicStateTransitions.test.mjs failed syntax check."); const requiredTokens = [ "this.workspaceTransitionState = \"idle\";", diff --git a/dev/tests/runtime/V2DiffViewerMessaging.test.mjs b/dev/tests/runtime/V2DiffViewerMessaging.test.mjs index 05db01823..684096575 100644 --- a/dev/tests/runtime/V2DiffViewerMessaging.test.mjs +++ b/dev/tests/runtime/V2DiffViewerMessaging.test.mjs @@ -43,7 +43,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2DiffViewerMessaging.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2DiffViewerMessaging.test.mjs failed syntax check."); if (!js.includes("No differences. The selected sessions are identical.")) { failures.push("Missing empty-diff message."); diff --git a/dev/tests/runtime/V2DiffViewerSummaryCounts.test.mjs b/dev/tests/runtime/V2DiffViewerSummaryCounts.test.mjs index 3850c3cd3..059a94448 100644 --- a/dev/tests/runtime/V2DiffViewerSummaryCounts.test.mjs +++ b/dev/tests/runtime/V2DiffViewerSummaryCounts.test.mjs @@ -46,7 +46,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2DiffViewerSummaryCounts.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2DiffViewerSummaryCounts.test.mjs failed syntax check."); if (!html.includes('id="workspaceV2DiffSummary"')) { failures.push("Missing Diff summary node in Workspace V2 Diff Viewer."); diff --git a/dev/tests/runtime/V2EnableStateFeedback.test.mjs b/dev/tests/runtime/V2EnableStateFeedback.test.mjs index b01e490d4..74352eedf 100644 --- a/dev/tests/runtime/V2EnableStateFeedback.test.mjs +++ b/dev/tests/runtime/V2EnableStateFeedback.test.mjs @@ -43,7 +43,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2EnableStateFeedback.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2EnableStateFeedback.test.mjs failed syntax check."); if (!html.includes("id=\"workspaceV2DiffEnableState\"")) failures.push("Missing Diff enable-state line."); if (!html.includes("id=\"workspaceV2MergeEnableState\"")) failures.push("Missing Merge enable-state line."); diff --git a/dev/tests/runtime/V2MergeConflictSummary.test.mjs b/dev/tests/runtime/V2MergeConflictSummary.test.mjs index 0e995c350..f234d3a4f 100644 --- a/dev/tests/runtime/V2MergeConflictSummary.test.mjs +++ b/dev/tests/runtime/V2MergeConflictSummary.test.mjs @@ -69,7 +69,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergeConflictSummary.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergeConflictSummary.test.mjs failed syntax check."); if (!html.includes("id=\"workspaceV2MergeConflictSummary\"")) failures.push("Missing merge conflict summary node."); if (!html.includes("id=\"workspaceV2MergeOutput\"")) failures.push("Missing raw merge JSON preview node."); diff --git a/dev/tests/runtime/V2MergeOutputPersistence.test.mjs b/dev/tests/runtime/V2MergeOutputPersistence.test.mjs index 785354f96..aed5a2fb6 100644 --- a/dev/tests/runtime/V2MergeOutputPersistence.test.mjs +++ b/dev/tests/runtime/V2MergeOutputPersistence.test.mjs @@ -69,7 +69,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergeOutputPersistence.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergeOutputPersistence.test.mjs failed syntax check."); const requiredHtml = [ "id=\"workspaceV2MergedSessionId\"", diff --git a/dev/tests/runtime/V2MergePreviewOverlayFix.test.mjs b/dev/tests/runtime/V2MergePreviewOverlayFix.test.mjs index 233a17322..c1380b960 100644 --- a/dev/tests/runtime/V2MergePreviewOverlayFix.test.mjs +++ b/dev/tests/runtime/V2MergePreviewOverlayFix.test.mjs @@ -59,7 +59,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergePreviewOverlayFix.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergePreviewOverlayFix.test.mjs failed syntax check."); if (!html.includes("id=\"workspaceV2MergeOutput\"")) failures.push("Merge preview output node is missing."); if (!html.includes("max-height: 18rem; overflow: auto; position: relative;")) { diff --git a/dev/tests/runtime/V2MergeResultSummary.test.mjs b/dev/tests/runtime/V2MergeResultSummary.test.mjs index 234cbb8c9..e3a2ced4a 100644 --- a/dev/tests/runtime/V2MergeResultSummary.test.mjs +++ b/dev/tests/runtime/V2MergeResultSummary.test.mjs @@ -64,7 +64,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergeResultSummary.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergeResultSummary.test.mjs failed syntax check."); const requiredHtml = [ "id=\"workspaceV2MergeResultSummary\"", diff --git a/dev/tests/runtime/V2MergeStateSingleSourceOfTruth.test.mjs b/dev/tests/runtime/V2MergeStateSingleSourceOfTruth.test.mjs index e1278d73a..646e018e0 100644 --- a/dev/tests/runtime/V2MergeStateSingleSourceOfTruth.test.mjs +++ b/dev/tests/runtime/V2MergeStateSingleSourceOfTruth.test.mjs @@ -54,7 +54,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergeStateSingleSourceOfTruth.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergeStateSingleSourceOfTruth.test.mjs failed syntax check."); const requiredTokens = [ "resolveAuthoritativeLastMergedHostContextId()", diff --git a/dev/tests/runtime/V2MergeStateStatusReset.test.mjs b/dev/tests/runtime/V2MergeStateStatusReset.test.mjs index bbc2a65ff..8d66d953c 100644 --- a/dev/tests/runtime/V2MergeStateStatusReset.test.mjs +++ b/dev/tests/runtime/V2MergeStateStatusReset.test.mjs @@ -59,7 +59,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergeStateStatusReset.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergeStateStatusReset.test.mjs failed syntax check."); const requiredTokens = [ "clearMergePanelTransientState(summaryMessage, outputMessage, statusMessage)", diff --git a/dev/tests/runtime/V2MergedRecentSessionRegistration.test.mjs b/dev/tests/runtime/V2MergedRecentSessionRegistration.test.mjs index 1bd4e8321..10ffa8b67 100644 --- a/dev/tests/runtime/V2MergedRecentSessionRegistration.test.mjs +++ b/dev/tests/runtime/V2MergedRecentSessionRegistration.test.mjs @@ -65,7 +65,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2MergedRecentSessionRegistration.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2MergedRecentSessionRegistration.test.mjs failed syntax check."); const requiredTokens = [ "createMergedHostContextId(toolId)", diff --git a/dev/tests/runtime/V2SaveLibraryFromRecentSession.test.mjs b/dev/tests/runtime/V2SaveLibraryFromRecentSession.test.mjs index c5163f753..bac5ea682 100644 --- a/dev/tests/runtime/V2SaveLibraryFromRecentSession.test.mjs +++ b/dev/tests/runtime/V2SaveLibraryFromRecentSession.test.mjs @@ -132,7 +132,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SaveLibraryFromRecentSession.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SaveLibraryFromRecentSession.test.mjs failed syntax check."); const mustContain = [ "readSessionPayloadFromRecentSessionId(sessionId)", diff --git a/dev/tests/runtime/V2SavedSessionRowActions.test.mjs b/dev/tests/runtime/V2SavedSessionRowActions.test.mjs index 9427094ff..bd1109eb9 100644 --- a/dev/tests/runtime/V2SavedSessionRowActions.test.mjs +++ b/dev/tests/runtime/V2SavedSessionRowActions.test.mjs @@ -50,7 +50,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SavedSessionRowActions.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SavedSessionRowActions.test.mjs failed syntax check."); if (!html.includes("Saved sessions are stored in Session Library. Recent sessions are temporary.")) { failures.push("Helper text is not updated to saved-vs-recent clarification."); diff --git a/dev/tests/runtime/V2SelectionSyncRowActions.test.mjs b/dev/tests/runtime/V2SelectionSyncRowActions.test.mjs index 2043421bd..64cfb1df8 100644 --- a/dev/tests/runtime/V2SelectionSyncRowActions.test.mjs +++ b/dev/tests/runtime/V2SelectionSyncRowActions.test.mjs @@ -69,7 +69,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SelectionSyncRowActions.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SelectionSyncRowActions.test.mjs failed syntax check."); const requiredTokens = [ "syncSelectionSlotsFromContextId(leftSelectNode, rightSelectNode, candidates, contextId)", diff --git a/dev/tests/runtime/V2SessionLibraryActionCleanup.test.mjs b/dev/tests/runtime/V2SessionLibraryActionCleanup.test.mjs index 2174527c9..08798f140 100644 --- a/dev/tests/runtime/V2SessionLibraryActionCleanup.test.mjs +++ b/dev/tests/runtime/V2SessionLibraryActionCleanup.test.mjs @@ -36,7 +36,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionLibraryActionCleanup.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionLibraryActionCleanup.test.mjs failed syntax check."); const requiredHtmlTokens = [ '', diff --git a/dev/tests/runtime/V2SessionLibraryActionLabel.test.mjs b/dev/tests/runtime/V2SessionLibraryActionLabel.test.mjs index 41992b4f9..20a61a873 100644 --- a/dev/tests/runtime/V2SessionLibraryActionLabel.test.mjs +++ b/dev/tests/runtime/V2SessionLibraryActionLabel.test.mjs @@ -63,7 +63,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionLibraryActionLabel.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionLibraryActionLabel.test.mjs failed syntax check."); if (!js.includes("useInLibraryButton.textContent = \"Use in Diff/Merge\";")) { failures.push("Saved Session Library row action label was not renamed to Use in Diff/Merge."); diff --git a/dev/tests/runtime/V2SessionLibraryActions.test.mjs b/dev/tests/runtime/V2SessionLibraryActions.test.mjs index 1a7e2cd85..e1302984d 100644 --- a/dev/tests/runtime/V2SessionLibraryActions.test.mjs +++ b/dev/tests/runtime/V2SessionLibraryActions.test.mjs @@ -116,7 +116,7 @@ export function run() { if (!htmlExists) failures.push("Missing toolbox/workspace-v2/index.html."); if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionLibraryActions.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionLibraryActions.test.mjs failed syntax check."); if (!html.includes("id=\"workspaceV2LibraryStatus\"")) { failures.push("Missing explicit Session Library status output area."); diff --git a/dev/tests/runtime/V2SessionLibraryCardOverwrite.test.mjs b/dev/tests/runtime/V2SessionLibraryCardOverwrite.test.mjs index ce0cb671f..c9c59ff07 100644 --- a/dev/tests/runtime/V2SessionLibraryCardOverwrite.test.mjs +++ b/dev/tests/runtime/V2SessionLibraryCardOverwrite.test.mjs @@ -44,7 +44,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionLibraryCardOverwrite.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionLibraryCardOverwrite.test.mjs failed syntax check."); const requiredTokens = [ "overwriteButton.textContent = \"Overwrite\";", diff --git a/dev/tests/runtime/V2SessionLibrarySaveGuard.test.mjs b/dev/tests/runtime/V2SessionLibrarySaveGuard.test.mjs index 5d8949400..9fc924ffb 100644 --- a/dev/tests/runtime/V2SessionLibrarySaveGuard.test.mjs +++ b/dev/tests/runtime/V2SessionLibrarySaveGuard.test.mjs @@ -36,7 +36,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionLibrarySaveGuard.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionLibrarySaveGuard.test.mjs failed syntax check."); const requiredTokens = [ "hasActiveWorkspaceSessionForSave()", diff --git a/dev/tests/runtime/V2SessionStateModelConsolidation.test.mjs b/dev/tests/runtime/V2SessionStateModelConsolidation.test.mjs index fb7366c34..09776406b 100644 --- a/dev/tests/runtime/V2SessionStateModelConsolidation.test.mjs +++ b/dev/tests/runtime/V2SessionStateModelConsolidation.test.mjs @@ -65,7 +65,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionStateModelConsolidation.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionStateModelConsolidation.test.mjs failed syntax check."); const requiredTokens = [ "computeWorkspaceSessionUiStateModel()", diff --git a/dev/tests/runtime/V2SessionToolsCloseoutBundle.test.mjs b/dev/tests/runtime/V2SessionToolsCloseoutBundle.test.mjs index 56eeb0e92..de12f3f38 100644 --- a/dev/tests/runtime/V2SessionToolsCloseoutBundle.test.mjs +++ b/dev/tests/runtime/V2SessionToolsCloseoutBundle.test.mjs @@ -53,7 +53,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionToolsCloseoutBundle.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionToolsCloseoutBundle.test.mjs failed syntax check."); const requiredTokens = [ "this.diffOutputSelectionKey = \"\";", diff --git a/dev/tests/runtime/V2SessionUxStabilization.test.mjs b/dev/tests/runtime/V2SessionUxStabilization.test.mjs index 9904a5793..113556fa2 100644 --- a/dev/tests/runtime/V2SessionUxStabilization.test.mjs +++ b/dev/tests/runtime/V2SessionUxStabilization.test.mjs @@ -64,7 +64,7 @@ export function run() { if (!jsExists) failures.push("Missing toolbox/workspace-v2/index.js."); if (!jsSyntax.ok) failures.push("toolbox/workspace-v2/index.js failed syntax check."); - if (!testSyntax.ok) failures.push("tests/runtime/V2SessionUxStabilization.test.mjs failed syntax check."); + if (!testSyntax.ok) failures.push("dev/tests/runtime/V2SessionUxStabilization.test.mjs failed syntax check."); const requiredTokens = [ "updateSessionLibraryActionState()", diff --git a/dev/tests/runtime/V2ToolLaunch.test.mjs b/dev/tests/runtime/V2ToolLaunch.test.mjs index 97acbfedd..2faabfb13 100644 --- a/dev/tests/runtime/V2ToolLaunch.test.mjs +++ b/dev/tests/runtime/V2ToolLaunch.test.mjs @@ -1,23 +1,22 @@ import assert from "node:assert/strict"; import fs from "node:fs"; import path from "node:path"; -import { execFileSync } from "node:child_process"; import { fileURLToPath, pathToFileURL } from "node:url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const repoRoot = path.resolve(__dirname, "..", "..", ".."); const toolsRoot = path.join(repoRoot, "www", "toolbox"); -const fixturesRoot = path.join(repoRoot, "tests", "fixtures", "v2-tools"); +const fixturesRoot = path.join(repoRoot, "dev", "tests", "fixtures", "v2-tools"); const toolsIndexPath = path.join(toolsRoot, "index.html"); const resultsPath = path.join(repoRoot, "dev", "workspace", "tmp", "v2-tool-launch-results.json"); -const REQUIRED_V2_TOOLS = [ +const RETIRED_FIXTURE_ONLY_V2_TOOLS = [ "asset-manager-v2", "palette-manager-v2", "svg-asset-studio-v2", "tilemap-studio-v2", - "vector-map-editor-v2" + "vector-map-editor-v2", ]; function readText(filePath) { @@ -35,119 +34,52 @@ function hasIndexRoute(indexHtmlText, toolId) { ); } -function hasToolSpecificPayload(toolId, fixtureJson) { - const sessionContext = fixtureJson?.sessionContext; - if (!sessionContext || typeof sessionContext !== "object" || Array.isArray(sessionContext)) { - return false; - } - if (toolId === "asset-manager-v2") { - return Boolean(sessionContext?.payloadJson?.assetCatalog); - } - if (toolId === "palette-manager-v2") { - return Boolean(sessionContext?.paletteJson); - } - if (toolId === "svg-asset-studio-v2") { - return Boolean(sessionContext?.payloadJson?.vectorAssetDocument); - } - if (toolId === "tilemap-studio-v2") { - return Boolean(sessionContext?.payloadJson?.tileMapDocument); - } - if (toolId === "vector-map-editor-v2") { - return Boolean(sessionContext?.payloadJson?.vectorMapDocument); - } - return false; -} - -function checkJsSyntax(jsPath) { - try { - execFileSync(process.execPath, ["--check", jsPath], { - cwd: repoRoot, - stdio: ["ignore", "pipe", "pipe"] - }); - return { syntaxValid: true, syntaxError: "" }; - } catch (error) { - return { - syntaxValid: false, - syntaxError: (error?.stderr || error?.stdout || error?.message || "").toString().trim() - }; - } -} - -function validateTool(toolId, toolsIndexHtmlText) { +function validateRetiredTool(toolId, toolsIndexHtmlText) { const toolIndexHtmlPath = path.join(toolsRoot, toolId, "index.html"); const toolIndexJsPath = path.join(toolsRoot, toolId, "index.js"); const fixturePath = path.join(fixturesRoot, `${toolId}.json`); - const routeFromIndexValid = hasIndexRoute(toolsIndexHtmlText, toolId); + const routeFromIndexPresent = hasIndexRoute(toolsIndexHtmlText, toolId); const routePathExists = fs.existsSync(toolIndexHtmlPath); - const directUrl = `toolbox/${toolId}/index.html`; + const routeScriptExists = fs.existsSync(toolIndexJsPath); const fixtureExists = fs.existsSync(fixturePath); let fixtureValidJson = false; - let hostContextId = ""; - let fixtureToolId = ""; - let fixtureToolIdMatches = false; - let fixtureHasSessionContext = false; - let fixtureHasToolPayload = false; if (fixtureExists) { try { - const fixtureJson = JSON.parse(readText(fixturePath)); + JSON.parse(readText(fixturePath)); fixtureValidJson = true; - hostContextId = typeof fixtureJson?.hostContextId === "string" ? fixtureJson.hostContextId.trim() : ""; - fixtureToolId = typeof fixtureJson?.sessionContext?.toolId === "string" ? fixtureJson.sessionContext.toolId.trim() : ""; - fixtureToolIdMatches = fixtureToolId === toolId; - fixtureHasSessionContext = Boolean( - fixtureJson?.sessionContext && - typeof fixtureJson.sessionContext === "object" && - !Array.isArray(fixtureJson.sessionContext) - ); - fixtureHasToolPayload = hasToolSpecificPayload(toolId, fixtureJson); } catch { fixtureValidJson = false; } } - const launchUrlWithHostContextId = `${directUrl}?hostContextId=${encodeURIComponent(hostContextId)}`; - const { syntaxValid, syntaxError } = checkJsSyntax(toolIndexJsPath); - const failures = []; - if (!routeFromIndexValid) failures.push("Missing V2 route from toolbox/index.html."); - if (!routePathExists) failures.push("Missing toolbox/Loading docs_build/dev/admin-notes/index.txt.
+Loading dev/archive/legacy-docs-build/admin-notes/index.txt.