Skip to content

Commit e42cc95

Browse files
author
DavidQ
committed
Normalize game manifests to current schema and validate manifest preview assets - PR_26139_019-game-manifest-version-preview-normalization
1 parent c38878c commit e42cc95

14 files changed

Lines changed: 345 additions & 5 deletions

File tree

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# PR_26139_019 Game Manifest Version Preview Normalization Report
2+
3+
## Summary
4+
- Added current `$schema` declarations and Asset Manager V2 preview registries to older game manifests that only had legacy tool payloads.
5+
- Preserved existing populated preview paths for Asteroids (`assets/images/preview.png`), Gravity Well (`assets/images/preview.svg`), and Pong (`assets/images/preview1.svg`).
6+
- Added the missing `games/vector-arcade-sample/assets/images/preview.svg` file so the newly required preview manifest entry resolves on disk.
7+
- Tightened `game.manifest.schema.json` so game manifests require `tools.asset-manager-v2` and validate that payload against the Asset Manager V2 schema.
8+
- Extended game manifest validation to check the current game manifest schema and preview file existence for every game manifest.
9+
10+
## Manifest Updates
11+
- Added `assets.image.preview.preview -> assets/images/preview.svg` to:
12+
- `AITargetDummy`
13+
- `Bouncing-ball`
14+
- `Breakout`
15+
- `Pacman`
16+
- `SolarSystem`
17+
- `SpaceDuel`
18+
- `SpaceInvaders`
19+
- `vector-arcade-sample`
20+
- Left existing preview paths unchanged:
21+
- `Asteroids -> assets/images/preview.png`
22+
- `GravityWell -> assets/images/preview.svg`
23+
- `Pong -> assets/images/preview1.svg`
24+
25+
## Validation
26+
- PASS: `npm run build:manifest`
27+
- PASS: `node scripts/validate-json-contracts.mjs --mode=games --details`
28+
- `game_manifest_schema_validation: total=11 invalid=0`
29+
- PASS: preview file existence check
30+
- `OK preview assets exist for 11 games`
31+
- PASS: `npx playwright test tests/playwright/games/GameIndexPreviewManifestResolution.spec.mjs --project=playwright --workers=1 --reporter=list`
32+
- `4 passed`
33+
- PASS: `node --check scripts/validate-json-contracts.mjs`
34+
- PASS: `node --check tests/playwright/games/GameIndexPreviewManifestResolution.spec.mjs`
35+
- PASS: `git diff --check`
36+
37+
## Manual Validation
38+
- Open `/games/index.html` and confirm each game card thumbnail renders from the manifest preview asset.
39+
- Open `/games/Pong/index.html` and confirm the thumbnail uses `assets/images/preview1.svg`.
40+
- Confirm no page requests `/games/Pong/assets/images/preview.svg`.
41+
42+
## Notes
43+
- `games/index.html` and `games/Pong/index.html` remain manifest-driven; no preview path was hardcoded into HTML or runtime.
44+
- Full samples smoke test was skipped because this PR is limited to game manifest normalization and targeted game preview validation.

docs/dev/reports/game_manifest_schema_validation.csv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
filePath,status,errorCount,firstErrors
2-
games/_template/game.manifest.json,valid,0,
32
games/AITargetDummy/game.manifest.json,valid,0,
43
games/Asteroids/game.manifest.json,valid,0,
54
games/Bouncing-ball/game.manifest.json,valid,0,

games/AITargetDummy/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "AI Target Dummy Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"asset-browser": {
1633
"assets": {
1734
"image.ai-target-dummy.preview": {

games/Pacman/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "Pacman Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"asset-browser": {
1633
"assets": {
1734
"image.pacman.preview-svg": {

games/SolarSystem/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "Solar System Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"primitive-skin-editor": {
1633
"skins": [
1734
{

games/SpaceDuel/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "Space Duel Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"primitive-skin-editor": {
1633
"skins": [],
1734
"schema": "html-js-gaming.tool.primitive-skin-editor",

games/SpaceInvaders/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "Space Invaders Next Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"primitive-skin-editor": {
1633
"skins": [],
1734
"schema": "html-js-gaming.tool.primitive-skin-editor",

games/bouncing-ball/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "Bouncing Ball Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"primitive-skin-editor": {
1633
"skins": [
1734
{

games/breakout/game.manifest.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "tools/schemas/game.manifest.schema.json",
23
"schema": "html-js-gaming.game-manifest",
34
"version": 1,
45
"game": {
@@ -12,6 +13,22 @@
1213
"workspaceManagerOptional": true
1314
},
1415
"tools": {
16+
"asset-manager-v2": {
17+
"$schema": "tools/schemas/tools/asset-manager-v2.schema.json",
18+
"schema": "html-js-gaming.asset-manager-v2",
19+
"version": 1,
20+
"name": "Breakout Asset Manager V2 Registry",
21+
"source": "manifest",
22+
"assets": {
23+
"assets.image.preview.preview": {
24+
"path": "assets/images/preview.svg",
25+
"type": "image",
26+
"kind": "svg",
27+
"role": "preview",
28+
"source": "manifest"
29+
}
30+
}
31+
},
1532
"primitive-skin-editor": {
1633
"skins": [
1734
{
Lines changed: 24 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)