Skip to content

Commit 6139b85

Browse files
author
DavidQ
committed
Detect present Workspace tools from strict manifest.tools payloads - PR 11.21
1 parent f8d467f commit 6139b85

9 files changed

Lines changed: 871 additions & 292 deletions

File tree

docs/dev/codex_commands.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
model: gpt-5.3-codex
44
reasoning: high
55

6-
Apply PR_11_20_WORKSPACE_LOADER_SCHEMA_V2_TOOLS_PAYLOAD_SUPPORT.
6+
Apply PR_11_21_WORKSPACE_MANAGER_TOOL_PRESENT_DETECTION_FIX.
77

88
Required:
9-
- Update Workspace loader/runtime to consume the corrected strict Workspace manifest shape where tool payloads live under `tools`.
10-
- Build available tool list from `Object.keys(manifest.tools)` filtered/validated against tool registry.
11-
- Ensure valid tools are not silently dropped.
12-
- Map singular `tools.palette` to the Palette Browser UI if that is the schema decision, but do not let it become the only visible tool.
13-
- Stop relying on old top-level `palettes`, `activeWorkspaceTools`, `games[].tools`, top-level `config`, top-level `payload`, or sample tool-payload wrappers for sample 1902.
14-
- Validate sample 1902 opens Workspace with all valid tools, not only Palette.
9+
- Fix Workspace Manager/tool presence detection so tools are marked present from `manifest.tools[toolId]`.
10+
- Use strict manifest.tools keys as the source for presence.
11+
- Validate keys against tool registry and tool schemas.
12+
- Map singular `tools.palette` to Palette Browser UI/presence without suppressing other tools.
13+
- Stop using old presence sources for sample 1902: top-level palettes, games[].tools, activeWorkspaceTools, config, top-level payload, sample tool-payload wrappers.
14+
- Add evidence/report listing raw loaded tool keys, normalized keys, valid present keys, invalid keys, and visible Workspace Manager tools.
1515
- Do not loosen schemas.
16-
- Do not add fallback/default/hidden data.
1716
- Do not modify other samples.
17+
- Do not add fallback/default/hidden data.
1818
- Do not modify start_of_day folders.
19-
- Add validation report at docs/dev/reports/PR_11_20_WORKSPACE_LOADER_SCHEMA_V2_TOOLS_PAYLOAD_SUPPORT_report.md.
20-
- Return ZIP artifact at tmp/PR_11_20_WORKSPACE_LOADER_SCHEMA_V2_TOOLS_PAYLOAD_SUPPORT_delta.zip.
19+
- Add validation report at docs/dev/reports/PR_11_21_WORKSPACE_MANAGER_TOOL_PRESENT_DETECTION_FIX_report.md.
20+
- Return ZIP artifact at tmp/PR_11_21_WORKSPACE_MANAGER_TOOL_PRESENT_DETECTION_FIX_delta.zip.

docs/dev/commit_comment.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Update Workspace loader to consume strict tools manifest payloads - PR 11.20
1+
Detect present Workspace tools from strict manifest.tools payloads - PR 11.21
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# PR 11.21 - Workspace Manager Tool Present Detection Fix
2+
3+
## PASS/FAIL
4+
PASS
5+
6+
## Files Changed
7+
- tools/Workspace Manager/main.js
8+
- docs/dev/reports/PR_11_21_workspace_tool_presence_evidence.json
9+
- docs/dev/reports/PR_11_21_WORKSPACE_MANAGER_TOOL_PRESENT_DETECTION_FIX_report.md
10+
11+
## Old Presence Check
12+
- Presence classification in Workspace Manager accepted tool entries primarily by:
13+
- raw `manifest.tools` key -> mapped tool id (palette alias)
14+
- registry match
15+
- `tool` field id match
16+
- It did not enforce explicit tool-schema validation for each `manifest.tools` entry.
17+
- When a workspace filter was present, game-level `toolsUsed` filtering could still influence visible tool list.
18+
19+
## New Presence Check
20+
- Presence source is strict `manifest.tools` keys from the loaded workspace manifest.
21+
- Classification now records and validates, per key:
22+
- raw key
23+
- normalized key
24+
- palette alias mapping (`tools.palette` -> `palette-browser`)
25+
- registry match
26+
- workspace-schema allowed key
27+
- tool-schema validity
28+
- payload `tool` id match
29+
- Workspace schema contract is loaded from:
30+
- `tools/schemas/workspace.manifest.schema.json`
31+
- referenced tool schemas under `tools/schemas/tools/*.schema.json`
32+
- If schema contract cannot be loaded, entries are rejected as not schema-validated.
33+
- Required workspace tool keys from schema (including `palette`) are enforced in diagnostics.
34+
- Visible Workspace Manager tools are now derived from accepted `manifest.tools` presence and no longer intersected with game `toolsUsed` when workspace manifest keys are available.
35+
36+
## Sample 1902 Evidence
37+
Evidence file:
38+
- docs/dev/reports/PR_11_21_workspace_tool_presence_evidence.json
39+
40+
Raw loaded tool keys (`manifest.tools`):
41+
- vector-map-editor
42+
- vector-asset-studio
43+
- tile-map-editor
44+
- parallax-editor
45+
- sprite-editor
46+
- skin-editor
47+
- asset-browser
48+
- palette-browser
49+
- state-inspector
50+
- replay-visualizer
51+
- performance-profiler
52+
- physics-sandbox
53+
- asset-pipeline-tool
54+
- tile-model-converter
55+
- 3d-json-payload-normalizer
56+
- 3d-asset-viewer
57+
- 3d-camera-path-editor
58+
- palette
59+
60+
Normalized/mapped keys:
61+
- Every key normalized lowercase; singular `palette` maps to `palette-browser` UI presence.
62+
63+
Valid present keys (accepted tool ids):
64+
- vector-map-editor
65+
- vector-asset-studio
66+
- tile-map-editor
67+
- parallax-editor
68+
- sprite-editor
69+
- skin-editor
70+
- asset-browser
71+
- palette-browser
72+
- state-inspector
73+
- replay-visualizer
74+
- performance-profiler
75+
- physics-sandbox
76+
- asset-pipeline-tool
77+
- tile-model-converter
78+
- 3d-json-payload-normalizer
79+
- 3d-asset-viewer
80+
- 3d-camera-path-editor
81+
82+
Invalid/rejected keys:
83+
- none
84+
85+
Visible Workspace Manager tools (from accepted manifest presence):
86+
- vector-map-editor
87+
- vector-asset-studio
88+
- tile-map-editor
89+
- parallax-editor
90+
- sprite-editor
91+
- skin-editor
92+
- asset-browser
93+
- palette-browser
94+
- state-inspector
95+
- replay-visualizer
96+
- performance-profiler
97+
- physics-sandbox
98+
- asset-pipeline-tool
99+
- tile-model-converter
100+
- 3d-json-payload-normalizer
101+
- 3d-asset-viewer
102+
- 3d-camera-path-editor
103+
104+
## Proof Workspace Manager Shows More Than Palette
105+
- Accepted/present tool ids for sample 1902 = 17 (not palette-only).
106+
- Visible Workspace Manager tools = 17.
107+
108+
## Validation Commands and Results
109+
- `node --check "tools/Workspace Manager/main.js"` -> PASS
110+
- `node ./tests/runtime/LaunchSmokeAllEntries.test.mjs --samples --sample-range=1902-1902 --tools` -> PASS (`PASS=19 FAIL=0`)
111+
- `node` inline invocation of `tests/tools/ToolSchemaStrictModeValidation.test.mjs` `run()` -> PASS
112+
- Evidence generation command (`manifest.tools` key normalization/classification export) -> PASS
113+
114+
## Scope and Constraint Confirmation
115+
- No schema loosening was introduced.
116+
- No old presence sources were used for sample 1902 presence classification (`palettes`, `games[].tools`, `activeWorkspaceTools`, top-level `config`, top-level `payload`, wrapper payloads).
117+
- No fallback/default/hidden data added.
118+
- No other sample files were modified.
119+
- No `start_of_day` folders were modified.
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
{
2+
"sourcePath": "samples/phase-19/1902/sample.1902.workspace-all-tools.json",
3+
"schemaPath": "tools/schemas/workspace.manifest.schema.json",
4+
"rawLoadedToolKeys": [
5+
"vector-map-editor",
6+
"vector-asset-studio",
7+
"tile-map-editor",
8+
"parallax-editor",
9+
"sprite-editor",
10+
"skin-editor",
11+
"asset-browser",
12+
"palette-browser",
13+
"state-inspector",
14+
"replay-visualizer",
15+
"performance-profiler",
16+
"physics-sandbox",
17+
"asset-pipeline-tool",
18+
"tile-model-converter",
19+
"3d-json-payload-normalizer",
20+
"3d-asset-viewer",
21+
"3d-camera-path-editor",
22+
"palette"
23+
],
24+
"normalizedKeys": [
25+
{
26+
"rawKey": "vector-map-editor",
27+
"normalizedKey": "vector-map-editor",
28+
"mappedToolId": "vector-map-editor",
29+
"registryMatch": true,
30+
"schemaAllowedKey": true,
31+
"schemaValid": true,
32+
"accepted": true,
33+
"reasons": []
34+
},
35+
{
36+
"rawKey": "vector-asset-studio",
37+
"normalizedKey": "vector-asset-studio",
38+
"mappedToolId": "vector-asset-studio",
39+
"registryMatch": true,
40+
"schemaAllowedKey": true,
41+
"schemaValid": true,
42+
"accepted": true,
43+
"reasons": []
44+
},
45+
{
46+
"rawKey": "tile-map-editor",
47+
"normalizedKey": "tile-map-editor",
48+
"mappedToolId": "tile-map-editor",
49+
"registryMatch": true,
50+
"schemaAllowedKey": true,
51+
"schemaValid": true,
52+
"accepted": true,
53+
"reasons": []
54+
},
55+
{
56+
"rawKey": "parallax-editor",
57+
"normalizedKey": "parallax-editor",
58+
"mappedToolId": "parallax-editor",
59+
"registryMatch": true,
60+
"schemaAllowedKey": true,
61+
"schemaValid": true,
62+
"accepted": true,
63+
"reasons": []
64+
},
65+
{
66+
"rawKey": "sprite-editor",
67+
"normalizedKey": "sprite-editor",
68+
"mappedToolId": "sprite-editor",
69+
"registryMatch": true,
70+
"schemaAllowedKey": true,
71+
"schemaValid": true,
72+
"accepted": true,
73+
"reasons": []
74+
},
75+
{
76+
"rawKey": "skin-editor",
77+
"normalizedKey": "skin-editor",
78+
"mappedToolId": "skin-editor",
79+
"registryMatch": true,
80+
"schemaAllowedKey": true,
81+
"schemaValid": true,
82+
"accepted": true,
83+
"reasons": []
84+
},
85+
{
86+
"rawKey": "asset-browser",
87+
"normalizedKey": "asset-browser",
88+
"mappedToolId": "asset-browser",
89+
"registryMatch": true,
90+
"schemaAllowedKey": true,
91+
"schemaValid": true,
92+
"accepted": true,
93+
"reasons": []
94+
},
95+
{
96+
"rawKey": "palette-browser",
97+
"normalizedKey": "palette-browser",
98+
"mappedToolId": "palette-browser",
99+
"registryMatch": true,
100+
"schemaAllowedKey": true,
101+
"schemaValid": true,
102+
"accepted": true,
103+
"reasons": []
104+
},
105+
{
106+
"rawKey": "state-inspector",
107+
"normalizedKey": "state-inspector",
108+
"mappedToolId": "state-inspector",
109+
"registryMatch": true,
110+
"schemaAllowedKey": true,
111+
"schemaValid": true,
112+
"accepted": true,
113+
"reasons": []
114+
},
115+
{
116+
"rawKey": "replay-visualizer",
117+
"normalizedKey": "replay-visualizer",
118+
"mappedToolId": "replay-visualizer",
119+
"registryMatch": true,
120+
"schemaAllowedKey": true,
121+
"schemaValid": true,
122+
"accepted": true,
123+
"reasons": []
124+
},
125+
{
126+
"rawKey": "performance-profiler",
127+
"normalizedKey": "performance-profiler",
128+
"mappedToolId": "performance-profiler",
129+
"registryMatch": true,
130+
"schemaAllowedKey": true,
131+
"schemaValid": true,
132+
"accepted": true,
133+
"reasons": []
134+
},
135+
{
136+
"rawKey": "physics-sandbox",
137+
"normalizedKey": "physics-sandbox",
138+
"mappedToolId": "physics-sandbox",
139+
"registryMatch": true,
140+
"schemaAllowedKey": true,
141+
"schemaValid": true,
142+
"accepted": true,
143+
"reasons": []
144+
},
145+
{
146+
"rawKey": "asset-pipeline-tool",
147+
"normalizedKey": "asset-pipeline-tool",
148+
"mappedToolId": "asset-pipeline-tool",
149+
"registryMatch": true,
150+
"schemaAllowedKey": true,
151+
"schemaValid": true,
152+
"accepted": true,
153+
"reasons": []
154+
},
155+
{
156+
"rawKey": "tile-model-converter",
157+
"normalizedKey": "tile-model-converter",
158+
"mappedToolId": "tile-model-converter",
159+
"registryMatch": true,
160+
"schemaAllowedKey": true,
161+
"schemaValid": true,
162+
"accepted": true,
163+
"reasons": []
164+
},
165+
{
166+
"rawKey": "3d-json-payload-normalizer",
167+
"normalizedKey": "3d-json-payload-normalizer",
168+
"mappedToolId": "3d-json-payload-normalizer",
169+
"registryMatch": true,
170+
"schemaAllowedKey": true,
171+
"schemaValid": true,
172+
"accepted": true,
173+
"reasons": []
174+
},
175+
{
176+
"rawKey": "3d-asset-viewer",
177+
"normalizedKey": "3d-asset-viewer",
178+
"mappedToolId": "3d-asset-viewer",
179+
"registryMatch": true,
180+
"schemaAllowedKey": true,
181+
"schemaValid": true,
182+
"accepted": true,
183+
"reasons": []
184+
},
185+
{
186+
"rawKey": "3d-camera-path-editor",
187+
"normalizedKey": "3d-camera-path-editor",
188+
"mappedToolId": "3d-camera-path-editor",
189+
"registryMatch": true,
190+
"schemaAllowedKey": true,
191+
"schemaValid": true,
192+
"accepted": true,
193+
"reasons": []
194+
},
195+
{
196+
"rawKey": "palette",
197+
"normalizedKey": "palette",
198+
"mappedToolId": "palette-browser",
199+
"registryMatch": true,
200+
"schemaAllowedKey": true,
201+
"schemaValid": true,
202+
"accepted": true,
203+
"reasons": []
204+
}
205+
],
206+
"validPresentKeys": [
207+
"vector-map-editor",
208+
"vector-asset-studio",
209+
"tile-map-editor",
210+
"parallax-editor",
211+
"sprite-editor",
212+
"skin-editor",
213+
"asset-browser",
214+
"palette-browser",
215+
"state-inspector",
216+
"replay-visualizer",
217+
"performance-profiler",
218+
"physics-sandbox",
219+
"asset-pipeline-tool",
220+
"tile-model-converter",
221+
"3d-json-payload-normalizer",
222+
"3d-asset-viewer",
223+
"3d-camera-path-editor"
224+
],
225+
"invalidKeys": [],
226+
"visibleWorkspaceManagerTools": [
227+
"vector-map-editor",
228+
"vector-asset-studio",
229+
"tile-map-editor",
230+
"parallax-editor",
231+
"sprite-editor",
232+
"skin-editor",
233+
"asset-browser",
234+
"palette-browser",
235+
"state-inspector",
236+
"replay-visualizer",
237+
"performance-profiler",
238+
"physics-sandbox",
239+
"asset-pipeline-tool",
240+
"tile-model-converter",
241+
"3d-json-payload-normalizer",
242+
"3d-asset-viewer",
243+
"3d-camera-path-editor"
244+
]
245+
}

0 commit comments

Comments
 (0)