Skip to content

Commit 9645a6a

Browse files
committed
Normalize all game manifests for Workspace Manager V2 - PR_26140_120-normalize-all-game-manifests-for-workspace-v2
1 parent c21bb23 commit 9645a6a

13 files changed

Lines changed: 1619 additions & 3 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# PR_26140_120 - Normalize All Game Manifests For Workspace V2
2+
3+
## Summary
4+
5+
Normalized every `games/**/game.manifest.json` so Workspace Manager V2 can synthesize a valid manifest/toolState context without missing required tool payloads. No schemas or sample JSON files were changed.
6+
7+
## Manifest Changes
8+
9+
- Added `tools.palette-manager-v2` where it was missing, using manifest-local editable Palette Manager V2 payloads.
10+
- Added `tools.input-mapping-v2` where it was missing, using the existing Input Mapping V2 tool-local contract:
11+
- `toolId: input-mapping-v2`
12+
- `version: 1`
13+
- `engineInputModel: src/engine/input/InputMap`
14+
- the shared 18 action entries with empty `inputs` arrays.
15+
- Left Asteroids unchanged because it already had valid `palette-manager-v2` and `input-mapping-v2` payloads.
16+
- Updated the Workspace Manager V2 Playwright manifest test so Gravity Well and Pong now assert the expected `input-mapping-v2` payload in their generated workspace contexts.
17+
18+
## Palette Sources
19+
20+
- Copied existing game palette assets into manifest payloads for Bouncing-ball, Breakout, SolarSystem, SpaceDuel, SpaceInvaders, and vector-arcade-sample.
21+
- Preserved existing manifest palettes for GravityWell, Pong, Asteroids, and _template.
22+
- Derived AI Target Dummy palette colors only from canvas/render source in `games/AITargetDummy/game/*.js`.
23+
- Derived Pacman palette colors only from canvas/render source in `games/Pacman/game/*.js`.
24+
- No DOM/CSS scraping, silent fallback palette, or hidden default palette was introduced.
25+
26+
## Validation
27+
28+
- Targeted JSON/schema + Workspace Manager V2 manifest/toolState contract validation: PASS for 12 manifests.
29+
- Bouncing-ball validation confirmed no `root.tools.palette-manager-v2 is required` failure.
30+
- Confirmed every game manifest has valid `palette-manager-v2`, `asset-manager-v2`, and `input-mapping-v2` tool payloads.
31+
- Confirmed Workspace Manager V2 can produce an Input Mapping V2 launch URL for each manifest context.
32+
- Focused reruns for the two transient Input Mapping V2 failures from the first long suite run passed individually.
33+
- `npm run test:workspace-v2`: PASS, 71 passed.
34+
35+
## Notes
36+
37+
- A first short `npm run test:workspace-v2` attempt hit the command timeout before completion.
38+
- The first full suite run exposed a stale Gravity/Pong test expectation and two transient Input Mapping V2 failures. The stale expectation was updated, the focused transient reruns passed, and the final full suite passed.
39+
- Full samples smoke test was not run, per request.

games/AITargetDummy/game.manifest.json

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,80 @@
1111
"directPath": "/games/AITargetDummy/index.html"
1212
},
1313
"tools": {
14+
"palette-manager-v2": {
15+
"$schema": "tools/schemas/tools/palette-manager-v2.schema.json",
16+
"schema": "html-js-gaming.palette",
17+
"version": 1,
18+
"name": "AI Target Dummy Palette",
19+
"source": "manifest",
20+
"swatches": [
21+
{
22+
"symbol": "!",
23+
"hex": "#070B14",
24+
"name": "Background"
25+
},
26+
{
27+
"symbol": "#",
28+
"hex": "#0F172A",
29+
"name": "Arena Panel"
30+
},
31+
{
32+
"symbol": "$",
33+
"hex": "#020617",
34+
"name": "Debug Panel"
35+
},
36+
{
37+
"symbol": "%",
38+
"hex": "#38BDF8",
39+
"name": "Arena Cyan"
40+
},
41+
{
42+
"symbol": "&",
43+
"hex": "#22C55E",
44+
"name": "Player Green"
45+
},
46+
{
47+
"symbol": "(",
48+
"hex": "#EF4444",
49+
"name": "Dummy Red"
50+
},
51+
{
52+
"symbol": ")",
53+
"hex": "#FACC15",
54+
"name": "Target Yellow"
55+
},
56+
{
57+
"symbol": "*",
58+
"hex": "#93C5FD",
59+
"name": "Velocity Blue"
60+
},
61+
{
62+
"symbol": "+",
63+
"hex": "#64748B",
64+
"name": "Trace Slate"
65+
},
66+
{
67+
"symbol": ",",
68+
"hex": "#334155",
69+
"name": "Border Slate"
70+
},
71+
{
72+
"symbol": "-",
73+
"hex": "#E2E8F0",
74+
"name": "Text"
75+
},
76+
{
77+
"symbol": ".",
78+
"hex": "#94A3B8",
79+
"name": "Muted Text"
80+
},
81+
{
82+
"symbol": "/",
83+
"hex": "#0EA5E9",
84+
"name": "Sensor Blue"
85+
}
86+
]
87+
},
1488
"asset-manager-v2": {
1589
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
1690
"schema": "html-js-gaming.asset-manager-v2",
@@ -26,6 +100,104 @@
26100
"source": "manifest"
27101
}
28102
}
103+
},
104+
"input-mapping-v2": {
105+
"$schema": "tools/schemas/tools/input-mapping-v2.schema.json",
106+
"toolId": "input-mapping-v2",
107+
"version": 1,
108+
"engineInputModel": "src/engine/input/InputMap",
109+
"actions": [
110+
{
111+
"action": "cancel",
112+
"label": "Cancel",
113+
"inputs": []
114+
},
115+
{
116+
"action": "confirm",
117+
"label": "Confirm",
118+
"inputs": []
119+
},
120+
{
121+
"action": "fire",
122+
"label": "Fire",
123+
"inputs": []
124+
},
125+
{
126+
"action": "interact",
127+
"label": "Interact",
128+
"inputs": []
129+
},
130+
{
131+
"action": "jump",
132+
"label": "Jump",
133+
"inputs": []
134+
},
135+
{
136+
"action": "menu",
137+
"label": "Menu",
138+
"inputs": []
139+
},
140+
{
141+
"action": "moveDown",
142+
"label": "Move Down",
143+
"inputs": []
144+
},
145+
{
146+
"action": "moveLeft",
147+
"label": "Move Left",
148+
"inputs": []
149+
},
150+
{
151+
"action": "moveRight",
152+
"label": "Move Right",
153+
"inputs": []
154+
},
155+
{
156+
"action": "moveUp",
157+
"label": "Move Up",
158+
"inputs": []
159+
},
160+
{
161+
"action": "pause",
162+
"label": "Pause",
163+
"inputs": []
164+
},
165+
{
166+
"action": "primaryAction",
167+
"label": "Primary Action",
168+
"inputs": []
169+
},
170+
{
171+
"action": "rotateLeft",
172+
"label": "Rotate Left",
173+
"inputs": []
174+
},
175+
{
176+
"action": "rotateRight",
177+
"label": "Rotate Right",
178+
"inputs": []
179+
},
180+
{
181+
"action": "secondaryAction",
182+
"label": "Secondary Action",
183+
"inputs": []
184+
},
185+
{
186+
"action": "select",
187+
"label": "Select",
188+
"inputs": []
189+
},
190+
{
191+
"action": "start",
192+
"label": "Start",
193+
"inputs": []
194+
},
195+
{
196+
"action": "thrust",
197+
"label": "Thrust",
198+
"inputs": []
199+
}
200+
]
29201
}
30202
}
31203
}

games/GravityWell/game.manifest.json

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,104 @@
8787
"source": "manifest"
8888
}
8989
}
90+
},
91+
"input-mapping-v2": {
92+
"$schema": "tools/schemas/tools/input-mapping-v2.schema.json",
93+
"toolId": "input-mapping-v2",
94+
"version": 1,
95+
"engineInputModel": "src/engine/input/InputMap",
96+
"actions": [
97+
{
98+
"action": "cancel",
99+
"label": "Cancel",
100+
"inputs": []
101+
},
102+
{
103+
"action": "confirm",
104+
"label": "Confirm",
105+
"inputs": []
106+
},
107+
{
108+
"action": "fire",
109+
"label": "Fire",
110+
"inputs": []
111+
},
112+
{
113+
"action": "interact",
114+
"label": "Interact",
115+
"inputs": []
116+
},
117+
{
118+
"action": "jump",
119+
"label": "Jump",
120+
"inputs": []
121+
},
122+
{
123+
"action": "menu",
124+
"label": "Menu",
125+
"inputs": []
126+
},
127+
{
128+
"action": "moveDown",
129+
"label": "Move Down",
130+
"inputs": []
131+
},
132+
{
133+
"action": "moveLeft",
134+
"label": "Move Left",
135+
"inputs": []
136+
},
137+
{
138+
"action": "moveRight",
139+
"label": "Move Right",
140+
"inputs": []
141+
},
142+
{
143+
"action": "moveUp",
144+
"label": "Move Up",
145+
"inputs": []
146+
},
147+
{
148+
"action": "pause",
149+
"label": "Pause",
150+
"inputs": []
151+
},
152+
{
153+
"action": "primaryAction",
154+
"label": "Primary Action",
155+
"inputs": []
156+
},
157+
{
158+
"action": "rotateLeft",
159+
"label": "Rotate Left",
160+
"inputs": []
161+
},
162+
{
163+
"action": "rotateRight",
164+
"label": "Rotate Right",
165+
"inputs": []
166+
},
167+
{
168+
"action": "secondaryAction",
169+
"label": "Secondary Action",
170+
"inputs": []
171+
},
172+
{
173+
"action": "select",
174+
"label": "Select",
175+
"inputs": []
176+
},
177+
{
178+
"action": "start",
179+
"label": "Start",
180+
"inputs": []
181+
},
182+
{
183+
"action": "thrust",
184+
"label": "Thrust",
185+
"inputs": []
186+
}
187+
]
90188
}
91189
}
92190
}

0 commit comments

Comments
 (0)