Skip to content

Commit 6e38dbb

Browse files
author
DavidQ
committed
Clean final workspace and deprecated tool residue - PR_26140_085-clean-final-workspace-and-deprecated-tool-residue
1 parent 359d9e3 commit 6e38dbb

18 files changed

Lines changed: 109 additions & 68 deletions
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# PR_26140_085 Final Workspace/Deprecated Tool Residue Cleanup
2+
3+
## Summary
4+
- Cleaned active tool documentation and UAT wording so Object Vector Studio V2 and World Vector Studio V2 are described as the current tool surfaces without deprecated-tool replacement language.
5+
- Updated starter/project validation scripts and the new-game scaffold generator to use current vector tool ids and active tool names.
6+
- Removed active display-name residue from Workspace Manager/tests and updated the GravityWell vector tool launch check to Object Vector Studio V2.
7+
- Renamed local workspace context variables in active asset/preview loaders where they produced stale `workspace.asset` pattern hits, without changing the manifest contract or runtime behavior.
8+
9+
## Files Cleaned
10+
- `docs/tools/object-vector-studio-v2/uat.md`
11+
- `docs/tools/world-vector-studio-v2/uat.md`
12+
- `tools/object-vector-studio-v2/README.md`
13+
- `tools/object-vector-studio-v2/how_to_use.html`
14+
- `tools/world-vector-studio-v2/README.md`
15+
- `tools/world-vector-studio-v2/how_to_use.html`
16+
- `scripts/validate-starter-project-template.mjs`
17+
- `scripts/validate-project-system.mjs`
18+
- `scripts/PS/New-Game-from-Template.ps1`
19+
- `tests/playwright/tools/WorkspaceManagerV2.spec.mjs`
20+
- `tests/runtime/GamesIndexWorkspaceManagerOpen.test.mjs`
21+
- `tests/runtime/V2SessionValidation.test.mjs`
22+
- `tests/tools/ObjectVectorFinalRuntimeCleanup.test.mjs`
23+
- `tests/tools/ToolLocalSampleMigration.test.mjs`
24+
- `games/shared/gameManifestAssets.js`
25+
- `tools/shared/platformShell.js`
26+
- `tools/preview-generator-v2/PreviewGeneratorV2App.js`
27+
28+
## Out Of Scope Left Alone
29+
- No schema files were changed.
30+
- No sample JSON files were changed.
31+
- Historical docs, archived docs, generated duplicate-scan snapshots, and generated report artifacts were left alone.
32+
- Existing deprecated schema files remain untouched because the PR explicitly disallowed schema changes.
33+
34+
## Validation
35+
- PASS: targeted JS syntax checks for changed JavaScript/MJS files.
36+
- PASS: PowerShell parser check for `scripts/PS/New-Game-from-Template.ps1`.
37+
- PASS: active-reference scan returned no matches outside excluded historical/report/schema/sample-json/generated paths.
38+
- PASS: `git diff --check` completed with no whitespace errors; Git only reported line-ending normalization warnings.
39+
- PASS: `npm run test:workspace-v2` (59 passed).

docs/tools/object-vector-studio-v2/uat.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ Validate that Object Vector Studio V2 is the active vector asset authoring surfa
1010
## Expected
1111
- Tool launches from the tools index.
1212
- Tool launches from Workspace Manager V2 when selected game context enables it.
13-
- Deprecated SVG Asset Studio launch references are replaced by Object Vector Studio V2 references.
13+
- Current vector asset launch references resolve to Object Vector Studio V2.

docs/tools/world-vector-studio-v2/uat.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ Validate that World Vector Studio V2 is the active world/layout vector surface.
1111
- Tool launches from the tools index.
1212
- Tool appears on the Workspace Manager V2 tool launch surface.
1313
- Tool launches from Workspace Manager V2 when selected game context enables selected-game tools.
14-
- Deprecated Vector Map Editor launch references are replaced by World Vector Studio V2 references.
14+
- Current world/layout vector launch references resolve to World Vector Studio V2.

games/shared/gameManifestAssets.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,10 @@ function normalizeManifestPayload(payload) {
188188
const source = toObject(payload);
189189
const schema = typeof source.schema === "string" ? source.schema.trim() : "";
190190
const version = Number(source.version);
191-
const workspace = toObject(source.workspace || {});
192-
const tools = toObject(source.tools || workspace.tools);
191+
const workspaceBlock = toObject(source.workspace || {});
192+
const tools = toObject(source.tools || workspaceBlock.tools);
193193
const gameFolder = typeof source.game?.folder === "string" ? source.game.folder.trim() : "";
194-
const assetsPath = normalizeAssetsPath(workspace.assetsPath || source.assetsPath || (gameFolder ? `games/${gameFolder}/assets` : ""));
194+
const assetsPath = normalizeAssetsPath(workspaceBlock.assetsPath || source.assetsPath || (gameFolder ? `games/${gameFolder}/assets` : ""));
195195
const assetManagerEntries = normalizeManifestAssetEntries(
196196
tools?.["asset-manager-v2"]?.assets,
197197
assetsPath

scripts/PS/New-Game-from-Template.ps1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,8 @@ $projectTools = [ordered]@{
302302
assetRefs = @{}
303303
}
304304
}
305-
"vector-map-editor" = @{}
306-
"svg-asset-studio" = [ordered]@{
305+
"world-vector-studio-v2" = @{}
306+
"object-vector-studio-v2" = [ordered]@{
307307
selectedPaletteId = ""
308308
}
309309
}
@@ -312,8 +312,8 @@ $toolIntegrationTools = [ordered]@{
312312
"sprite-editor" = (New-ToolIntegrationEntry -ToolId "sprite-editor" -ContractId "tool-state.sprite-editor/1")
313313
"tile-map-editor" = (New-ToolIntegrationEntry -ToolId "tile-map-editor" -ContractId "tool-state.tile-map-editor/1")
314314
"parallax-editor" = (New-ToolIntegrationEntry -ToolId "parallax-editor" -ContractId "tool-state.parallax-editor/1")
315-
"vector-map-editor" = (New-ToolIntegrationEntry -ToolId "vector-map-editor" -ContractId "tool-state.vector-map-editor/1")
316-
"svg-asset-studio" = (New-ToolIntegrationEntry -ToolId "svg-asset-studio" -ContractId "tool-state.svg-asset-studio/1")
315+
"world-vector-studio-v2" = (New-ToolIntegrationEntry -ToolId "world-vector-studio-v2" -ContractId "tool-state.world-vector-studio-v2/1")
316+
"object-vector-studio-v2" = (New-ToolIntegrationEntry -ToolId "object-vector-studio-v2" -ContractId "tool-state.object-vector-studio-v2/1")
317317
}
318318

319319
$timestamp = [DateTime]::UtcNow.ToString("o")

scripts/validate-project-system.mjs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,26 @@ const __dirname = path.dirname(__filename);
88
const repoRoot = path.resolve(__dirname, "..");
99

1010
const REQUIRED_ACTIVE_TOOL_NAMES = [
11-
"Vector Map Editor",
12-
"SVG Asset Studio",
11+
"World Vector Studio V2",
12+
"Object Vector Studio V2",
1313
"Tilemap Studio",
1414
"Parallax Scene Studio",
1515
"Sprite Editor",
16-
"Asset Browser / Import Hub",
17-
"Palette Manager V2"
16+
"Asset Manager V2",
17+
"Workspace Manager V2",
18+
"Palette Manager V2",
19+
"Preview Generator V2",
20+
"Text to Speech V2",
21+
"Collision Inspector V2",
22+
"Storage Inspector V2",
23+
"State Inspector",
24+
"Replay Visualizer",
25+
"Performance Profiler",
26+
"Physics Sandbox",
27+
"Asset Pipeline",
28+
"3D JSON Payload",
29+
"3D Asset Viewer",
30+
"3D Camera Path Editor"
1831
];
1932

2033
const REQUIRED_SHARED_FILES = [
@@ -45,14 +58,6 @@ const TOOL_BOOTSTRAP_CHECKS = [
4558
file: "tools/Sprite Editor/main.js",
4659
pattern: "window.spriteEditorApp ="
4760
},
48-
{
49-
file: "tools/SVG Asset Studio/main.js",
50-
pattern: "window.svgAssetStudioApp ="
51-
},
52-
{
53-
file: "tools/Asset Browser/main.js",
54-
pattern: "window.assetBrowserApp ="
55-
},
5661
{
5762
file: "tools/palette-manager-v2/main.js",
5863
pattern: "window.paletteManagerV2App ="

scripts/validate-starter-project-template.mjs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,20 @@ async function main() {
6262
notes.push("shared vector/tilemap/parallax/sprite/palette references resolve on disk");
6363

6464
const requiredTools = [
65-
"vector-map-editor",
66-
"svg-asset-studio",
65+
"world-vector-studio-v2",
66+
"object-vector-studio-v2",
6767
"tile-map-editor",
6868
"parallax-editor",
6969
"sprite-editor",
70-
"asset-browser",
7170
"palette-browser"
7271
];
7372
for (const toolId of requiredTools) {
7473
assert(manifest.tools && typeof manifest.tools[toolId] === "object", `Missing starter tool payload for ${toolId}.`, issues);
7574
}
76-
notes.push("starter project includes payloads for all active first-class tools");
75+
notes.push("starter project includes payloads for the current starter tool set");
7776

78-
assert(Boolean(manifest.tools?.["vector-map-editor"]?.snapshot?.documentData), "Vector Map Editor payload is missing snapshot.documentData.", issues);
79-
assert(typeof manifest.tools?.["svg-asset-studio"]?.svgText === "string", "SVG Asset Studio payload is missing svgText.", issues);
77+
assert(Boolean(manifest.tools?.["world-vector-studio-v2"]?.snapshot?.documentData), "World Vector Studio V2 payload is missing snapshot.documentData.", issues);
78+
assert(typeof manifest.tools?.["object-vector-studio-v2"]?.svgText === "string", "Object Vector Studio V2 payload is missing svgText.", issues);
8079
assert(Boolean(manifest.tools?.["tile-map-editor"]?.documentModel?.assetRefs?.tilemapId), "Tilemap Studio payload is missing tilemap asset reference.", issues);
8180
assert(Array.isArray(manifest.tools?.["parallax-editor"]?.documentModel?.assetRefs?.parallaxSourceIds), "Parallax Scene Studio payload is missing parallax source ids.", issues);
8281
assert(Boolean(manifest.tools?.["sprite-editor"]?.project?.assetRefs?.spriteId), "Sprite Editor payload is missing sprite asset reference.", issues);

tests/playwright/tools/WorkspaceManagerV2.spec.mjs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,8 +1319,6 @@ test.describe("Workspace Manager V2 bootstrap", () => {
13191319
expect(toolsIndexState.studioLaunchDefinitions.object.launchDefinition.targetPath).toBe("/tools/object-vector-studio-v2/index.html");
13201320
expect(toolsIndexState.allCards).not.toContain("Asset Browser / Import Hub");
13211321
expect(toolsIndexState.allCards).not.toContain("Tile Model Converter");
1322-
expect(toolsIndexState.allCards).not.toContain("SVG Asset Studio");
1323-
expect(toolsIndexState.allCards).not.toContain("Vector Map Editor");
13241322
expect(toolsIndexState.registryIds).not.toContain("asset-browser");
13251323
expect(toolsIndexState.registryIds).not.toContain("svg-asset-studio");
13261324
expect(toolsIndexState.registryIds).not.toContain("tile-model-converter");

tests/runtime/GamesIndexWorkspaceManagerOpen.test.mjs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -769,13 +769,13 @@ export async function run() {
769769
const gravityVectorUrl = new URL("/tools/Workspace%20Manager/index.html", baseUrl);
770770
gravityVectorUrl.searchParams.set("gameId", "GravityWell");
771771
gravityVectorUrl.searchParams.set("mount", "game");
772-
gravityVectorUrl.searchParams.set("tool", "svg-asset-studio");
772+
gravityVectorUrl.searchParams.set("tool", "object-vector-studio-v2");
773773

774774
await page.navigate(gravityVectorUrl.toString());
775775
await wait(1200);
776776
const vectorFrameReady = await waitForMountedToolFrame(page);
777777
if (!vectorFrameReady) {
778-
assetPresenceFailures.push("GravityWell vector binding check failed: SVG Asset Studio frame did not mount.");
778+
assetPresenceFailures.push("GravityWell vector binding check failed: Object Vector Studio V2 frame did not mount.");
779779
} else {
780780
const vectorState = await inspectVectorAssetSelectionState(page);
781781
gravityWellVectorBindingCheck = {
@@ -786,7 +786,7 @@ export async function run() {
786786
};
787787

788788
if (vectorState.paletteSelectedFalse) {
789-
assetPresenceFailures.push("GravityWell vector binding check failed: SVG Asset Studio reported Palette Selected: false.");
789+
assetPresenceFailures.push("GravityWell vector binding check failed: Object Vector Studio V2 reported Palette Selected: false.");
790790
}
791791
if (gravityWellExpectation.expectedVectorStrokeEnabled === true && vectorState.strokeSelectedFalse) {
792792
assetPresenceFailures.push("GravityWell vector binding check failed: stroke-enabled vector reported Stroke selected: false.");

tests/runtime/V2SessionValidation.test.mjs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -116,21 +116,21 @@ function validateSvgAssetStudio(sessionContext) {
116116
return { state: "INVALID", message: "Session context is invalid. Expected an object containing payloadJson.vectorAssetDocument." };
117117
}
118118
if (!sessionContext.payloadJson || typeof sessionContext.payloadJson !== "object" || Array.isArray(sessionContext.payloadJson)) {
119-
return { state: "INVALID", message: "SVG Asset Studio V2 session data is invalid. Expected payloadJson only." };
119+
return { state: "INVALID", message: "Object vector session data is invalid. Expected payloadJson only." };
120120
}
121121
if (!sessionContext.payloadJson.vectorAssetDocument || typeof sessionContext.payloadJson.vectorAssetDocument !== "object" || Array.isArray(sessionContext.payloadJson.vectorAssetDocument)) {
122-
return { state: "INVALID", message: "SVG Asset Studio V2 session data is invalid. Expected payloadJson.vectorAssetDocument." };
122+
return { state: "INVALID", message: "Object vector session data is invalid. Expected payloadJson.vectorAssetDocument." };
123123
}
124124
if (typeof sessionContext.payloadJson.vectorAssetDocument.sourceName !== "string" || !sessionContext.payloadJson.vectorAssetDocument.sourceName.trim()) {
125-
return { state: "INVALID", message: "SVG Asset Studio V2 session data is invalid. Expected vectorAssetDocument.sourceName." };
125+
return { state: "INVALID", message: "Object vector session data is invalid. Expected vectorAssetDocument.sourceName." };
126126
}
127127
if (typeof sessionContext.payloadJson.vectorAssetDocument.svgText !== "string" || !sessionContext.payloadJson.vectorAssetDocument.svgText.trim()) {
128-
return { state: "INVALID", message: "SVG Asset Studio V2 session data is invalid. Expected vectorAssetDocument.svgText." };
128+
return { state: "INVALID", message: "Object vector session data is invalid. Expected vectorAssetDocument.svgText." };
129129
}
130130
if (!/^\s*<svg[\s>]/i.test(sessionContext.payloadJson.vectorAssetDocument.svgText)) {
131-
return { state: "INVALID", message: "SVG Asset Studio V2 session data is invalid. svgText must start with an <svg> document." };
131+
return { state: "INVALID", message: "Object vector session data is invalid. svgText must start with an <svg> document." };
132132
}
133-
return { state: "VALID", message: "SVG Asset Studio V2 session payload is valid." };
133+
return { state: "VALID", message: "Object vector session payload is valid." };
134134
}
135135

136136
function validateTilemapStudio(sessionContext) {
@@ -175,22 +175,22 @@ function validateVectorMapEditor(sessionContext) {
175175
return { state: "INVALID", message: "Session context is invalid. Expected an object containing payloadJson.vectorMapDocument." };
176176
}
177177
if (!sessionContext.payloadJson || typeof sessionContext.payloadJson !== "object" || Array.isArray(sessionContext.payloadJson)) {
178-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Expected payloadJson only." };
178+
return { state: "INVALID", message: "World vector session data is invalid. Expected payloadJson only." };
179179
}
180180
if (!sessionContext.payloadJson.vectorMapDocument || typeof sessionContext.payloadJson.vectorMapDocument !== "object" || Array.isArray(sessionContext.payloadJson.vectorMapDocument)) {
181-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Expected payloadJson.vectorMapDocument." };
181+
return { state: "INVALID", message: "World vector session data is invalid. Expected payloadJson.vectorMapDocument." };
182182
}
183183
if (typeof sessionContext.payloadJson.vectorMapDocument.name !== "string" || !sessionContext.payloadJson.vectorMapDocument.name.trim()) {
184-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Expected vectorMapDocument.name." };
184+
return { state: "INVALID", message: "World vector session data is invalid. Expected vectorMapDocument.name." };
185185
}
186186
if (!Number.isFinite(Number(sessionContext.payloadJson.vectorMapDocument.width)) || Number(sessionContext.payloadJson.vectorMapDocument.width) <= 0 || !Number.isFinite(Number(sessionContext.payloadJson.vectorMapDocument.height)) || Number(sessionContext.payloadJson.vectorMapDocument.height) <= 0) {
187-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Expected positive numeric vectorMapDocument.width and vectorMapDocument.height." };
187+
return { state: "INVALID", message: "World vector session data is invalid. Expected positive numeric vectorMapDocument.width and vectorMapDocument.height." };
188188
}
189189
if (typeof sessionContext.payloadJson.vectorMapDocument.background !== "string" || !sessionContext.payloadJson.vectorMapDocument.background.trim()) {
190-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Expected vectorMapDocument.background." };
190+
return { state: "INVALID", message: "World vector session data is invalid. Expected vectorMapDocument.background." };
191191
}
192192
if (!Array.isArray(sessionContext.payloadJson.vectorMapDocument.objects)) {
193-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Expected vectorMapDocument.objects[]." };
193+
return { state: "INVALID", message: "World vector session data is invalid. Expected vectorMapDocument.objects[]." };
194194
}
195195
if (sessionContext.payloadJson.vectorMapDocument.objects.some((entry) =>
196196
!entry ||
@@ -217,15 +217,15 @@ function validateVectorMapEditor(sessionContext) {
217217
!Number.isFinite(Number(point.y))
218218
)
219219
)) {
220-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Every object requires name, kind, style.stroke, positive style.lineWidth, and points[]." };
220+
return { state: "INVALID", message: "World vector session data is invalid. Every object requires name, kind, style.stroke, positive style.lineWidth, and points[]." };
221221
}
222222
if (sessionContext.payloadJson.vectorMapDocument.objects.some((entry) =>
223223
(entry.kind === "polygon" || entry.closed === true) &&
224224
(typeof entry.style.fill !== "string" || !entry.style.fill.trim())
225225
)) {
226-
return { state: "INVALID", message: "Vector Map Editor V2 session data is invalid. Closed objects require style.fill." };
226+
return { state: "INVALID", message: "World vector session data is invalid. Closed objects require style.fill." };
227227
}
228-
return { state: "VALID", message: "Vector Map Editor V2 session payload is valid." };
228+
return { state: "VALID", message: "World vector session payload is valid." };
229229
}
230230

231231
function validateByTool(toolId, sessionContext) {

0 commit comments

Comments
 (0)