Skip to content

Commit ec00776

Browse files
author
DavidQ
committed
BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP
- Added strict manifest payload expectation tests - Removed legacy root sections from game manifests - Removed invalid unused Asteroids tool sections - Ensured Asteroids vector data belongs to Vector Asset Studio PR Details: - Fixes page-load-only false positives - No validators - No start_of_day changes
1 parent 0477112 commit ec00776

25 files changed

Lines changed: 615 additions & 1301 deletions
Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
# Expected Codex Return / Delta Template
22

33
## Expected Changed Files
4-
- Workspace Manager loader/binding file(s)
5-
- `tests/runtime/GamesIndexWorkspaceManagerOpen.test.mjs` only if needed
6-
- `docs/dev/reports/level_10_2b_workspace_manager_palette_binding_report.md`
4+
- `games/*/game.manifest.json`
5+
- `tests/runtime/GameManifestPayloadExpectations.test.mjs` or equivalent
6+
- `tests/runtime/GamesIndexWorkspaceManagerOpen.test.mjs` if asset expectation checks are extended
7+
- `docs/dev/reports/level_10_2c_manifest_payload_expectation_report.md`
8+
- `docs/dev/reports/level_10_2c_manifest_cleanup_report.md`
79
- `docs/dev/roadmaps/MASTER_ROADMAP_ENGINE.md` if status update needed
810

911
## Expected Validation Summary
10-
- `workspace_manager_reads_palette_browser_palette=true`
11-
- `bouncing_ball_shared_palette_present=true`
12-
- `games_with_manifest_palette_bound=<count>`
13-
- `games_still_missing_palette=<count>`
14-
- `direct_launch_regression=false`
15-
- `validators_added=0`
12+
- `games_scanned=<count>`
13+
- `root_lineage_remaining=0`
14+
- `root_sources_remaining=0`
15+
- `root_assets_remaining=0`
16+
- `sourcePath_remaining=0`
17+
- `legacy_json_path_refs_remaining=0`
18+
- `tool_sections_missing_metadata=0`
19+
- `asteroids_vector_count_gt_zero=true`
20+
- `asteroids_invalid_sprite_editor_present=false`
21+
- `asteroids_invalid_tile_map_editor_present=false`
22+
- `asteroids_invalid_parallax_editor_present=false`
23+
- `workspace_manager_vector_asset_none_when_vectors_exist=false`
1624
- `start_of_day_changes=0`
1725

1826
## Expected Delta ZIP
1927
Codex must create:
2028

21-
`tmp/BUILD_PR_LEVEL_10_2B_WORKSPACE_MANAGER_PALETTE_BINDING_FIX_delta.zip`
29+
`tmp/BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP_delta.zip`

docs/dev/reports/launch_smoke_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Launch Smoke Report
22

3-
Generated: 2026-04-27T01:16:49.548Z
3+
Generated: 2026-04-27T01:43:12.462Z
44

55
Filters: games=true, samples=false, tools=false, sampleRange=all
66

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Level 10.2C Manifest Cleanup Report
2+
3+
## BUILD
4+
- `BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP`
5+
6+
## Cleanup Scope Applied
7+
- removed disallowed root manifest blocks: `lineage`, `sources`, `assets`
8+
- removed `sourcePath` fields from all game manifests
9+
- removed legacy catalog path references to `workspace.asset-catalog.json` and `tools.manifest.json`
10+
- preserved singleton palette at `tools["palette-browser"].palette`
11+
- kept tool metadata fields (`schema`, `version`, `name`, `source`) on all tool sections
12+
13+
## Cleaned Game Manifests
14+
- `games/AITargetDummy/game.manifest.json`
15+
- `games/Asteroids/game.manifest.json`
16+
- `games/Bouncing-ball/game.manifest.json`
17+
- `games/Breakout/game.manifest.json`
18+
- `games/GravityWell/game.manifest.json`
19+
- `games/Pacman/game.manifest.json`
20+
- `games/Pong/game.manifest.json`
21+
- `games/SolarSystem/game.manifest.json`
22+
- `games/SpaceDuel/game.manifest.json`
23+
- `games/SpaceInvaders/game.manifest.json`
24+
- `games/vector-arcade-sample/game.manifest.json`
25+
- `games/_template/game.manifest.json`
26+
27+
## Asteroids Specific
28+
- kept `tools["vector-asset-studio"].vectors` with actual vector payloads
29+
- removed `tools["sprite-editor"]`
30+
- removed `tools["tile-map-editor"]`
31+
- removed `tools["parallax-editor"]`
32+
- removed `tools["vector-asset-studio"].libraries` (reference/index-only metadata)
33+
34+
## Bouncing-ball Specific
35+
- removed root `lineage`, `sources`, `assets`
36+
- kept `tools["palette-browser"].palette`
37+
- kept `tools["primitive-skin-editor"].skins`
38+
- removed stale external palette/skin JSON references from manifest payload
39+
40+
## Post-Cleanup Validation
41+
- `npm run test:manifest-payload:games` -> `PASS`
42+
- `npm run test:workspace-manager:games` -> `PASS`
43+
- `npm run test:launch-smoke:games` -> `PASS`
44+
45+
## Summary
46+
- manifests cleaned: `12`
47+
- disallowed root blocks remaining: `0`
48+
- `sourcePath` keys remaining: `0`
49+
- legacy catalog path references remaining: `0`
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Level 10.2C Manifest Payload Expectation Report
2+
3+
## BUILD
4+
- `BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP`
5+
6+
## Strict Test Added
7+
- `tests/runtime/GameManifestPayloadExpectations.test.mjs`
8+
- npm command: `npm run test:manifest-payload:games`
9+
10+
## Test Contract (Enforced)
11+
- no root `lineage`, `sources`, `assets`, `palette`, `palettes`
12+
- no `sourcePath` keys anywhere in game manifests
13+
- no legacy `workspace.asset-catalog.json`/`tools.manifest.json` references
14+
- every `tools[*]` section includes `schema`, `version`, `name`, `source`
15+
- singleton palette is only `tools["palette-browser"].palette`
16+
- Asteroids requires `tools["vector-asset-studio"].vectors` with count > 0 and disallows `sprite-editor`, `tile-map-editor`, `parallax-editor`, `libraries`
17+
- Bouncing-ball requires `tools["palette-browser"].palette` + `tools["primitive-skin-editor"].skins` and no stale external palette/skin JSON references
18+
19+
## Validation Results
20+
- command: `npm run test:manifest-payload:games`
21+
- result: `PASS`
22+
- manifests checked: `12`
23+
- failures: `0`
24+
25+
## Asteroids Assertions
26+
- vector asset count: `5`
27+
- disallowed Asteroids tool sections removed: `sprite-editor`, `tile-map-editor`, `parallax-editor`
28+
- vector `libraries` reference/index block removed
29+
30+
## Workspace Manager Runtime Cross-Check
31+
- command: `npm run test:workspace-manager:games`
32+
- result: `PASS`
33+
- Asteroids shared asset label: `vector.asteroids.ship`
34+
- Bouncing-ball shared palette label: `Bouncing Ball Palette`
35+
- Bouncing-ball shared asset label: `Bouncing Ball Classic Skin`
36+
37+
## Acceptance Mapping
38+
- bad payload shape is test-covered: `yes`
39+
- Asteroids vector tool has assets: `yes`
40+
- invalid unused Asteroids tool sections removed: `yes`

docs/dev/roadmaps/MASTER_ROADMAP_ENGINE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -901,4 +901,5 @@
901901
- [x] Palette tool singleton + tool section metadata correction is complete (`tools["palette-browser"].palette` + metadata on all tool sections).
902902
- [x] Games index Workspace Manager open-action browser test is complete (`gameId` + `mount=game`, legacy `?game=` rejected, diagnostic check included).
903903
- [x] `tools/shared/asteroidsPlatformDemo.js` shared-boundary audit is complete with move recommendation captured for follow-up.
904+
- [x] Manifest payload expectation test + cleanup completed (no root legacy manifest blocks, no `sourcePath`, palette singleton enforced, Asteroids tool payloads pruned to active data domains).
904905
- [x] Workspace Manager shared palette binding now hydrates from `game.manifest.json` `tools["palette-browser"].palette` (with root `palette` compatibility fallback only).

docs/operations/dev/codex_commands.md

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,51 @@ MODEL: GPT-5.3-codex
22
REASONING: high
33

44
TASK:
5-
Apply BUILD_PR_LEVEL_10_2B_WORKSPACE_MANAGER_PALETTE_BINDING_FIX.
5+
Apply BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP.
66

77
STEPS:
8-
1. Read docs/pr/PLAN_PR_LEVEL_10_2B_WORKSPACE_MANAGER_PALETTE_BINDING_FIX.md.
9-
2. Read docs/pr/BUILD_PR_LEVEL_10_2B_WORKSPACE_MANAGER_PALETTE_BINDING_FIX.md.
10-
3. Inspect Workspace Manager game manifest loading/binding code.
11-
4. Find where shared palette is selected/displayed.
12-
5. Bind shared palette from:
13-
- gameManifest.tools["palette-browser"].palette
14-
6. Allow temporary fallback from root `palette` only for compatibility if present.
15-
7. Do not create root palette objects.
16-
8. Verify Bouncing-ball no longer shows:
17-
- Shared Palette: No shared palette selected
18-
9. Run/update Level 10.2A Workspace Manager asset presence test.
19-
10. Ensure direct game launch remains unchanged.
20-
11. Write docs/dev/reports/level_10_2b_workspace_manager_palette_binding_report.md.
21-
12. Update docs/dev/roadmaps/MASTER_ROADMAP_ENGINE.md status only if needed:
8+
1. Read docs/pr/PLAN_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP.md.
9+
2. Read docs/pr/BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP.md.
10+
3. Add a strict manifest payload expectation test.
11+
4. Clean all game manifests:
12+
- remove root lineage
13+
- remove root sources
14+
- remove generic root assets
15+
- remove sourcePath fields
16+
- remove legacy JSON path references
17+
5. Ensure palette is exactly:
18+
- tools["palette-browser"].palette
19+
6. Ensure every tool section has metadata:
20+
- schema
21+
- version
22+
- name
23+
- source
24+
7. Asteroids:
25+
- keep vector-asset-studio with actual vectors
26+
- remove sprite-editor if no actual sprite data
27+
- remove tile-map-editor if no actual tilemap data
28+
- remove parallax-editor if no actual parallax data
29+
- remove libraries if it is only reference/index metadata
30+
8. Bouncing-ball:
31+
- remove lineage/sources/assets
32+
- keep palette-browser.palette
33+
- keep primitive-skin-editor.skins
34+
9. Update Workspace Manager test if needed so it validates real payload sections, not shell load only.
35+
10. Write reports:
36+
- docs/dev/reports/level_10_2c_manifest_payload_expectation_report.md
37+
- docs/dev/reports/level_10_2c_manifest_cleanup_report.md
38+
11. Update docs/dev/roadmaps/MASTER_ROADMAP_ENGINE.md status only if needed:
2239
- [ ] -> [.]
2340
- [.] -> [x]
2441
- no prose rewrite/delete
25-
13. Do not add validators.
26-
14. Do not modify start_of_day.
27-
15. Create Codex delta ZIP:
28-
tmp/BUILD_PR_LEVEL_10_2B_WORKSPACE_MANAGER_PALETTE_BINDING_FIX_delta.zip
42+
12. Do not add validators.
43+
13. Do not modify start_of_day.
44+
14. Create Codex delta ZIP:
45+
tmp/BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP_delta.zip
2946

3047
ACCEPTANCE:
31-
- shared palette binds from palette-browser singleton palette
32-
- Bouncing-ball palette appears
48+
- bad payload shape is test-covered
49+
- manifests cleaned
50+
- Asteroids vector tool has assets
51+
- invalid unused tool sections removed
3352
- delta ZIP exists
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
BUILD_PR_LEVEL_10_2B_WORKSPACE_MANAGER_PALETTE_BINDING_FIX
1+
BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP
22

3-
- Bound Workspace Manager shared palette from game manifest palette-browser singleton
4-
- Fixed missing shared palette display for game workspaces
5-
- Preserved direct game launch behavior
3+
- Added strict manifest payload expectation tests
4+
- Removed legacy root sections from game manifests
5+
- Removed invalid unused Asteroids tool sections
6+
- Ensured Asteroids vector data belongs to Vector Asset Studio
67

78
PR Details:
8-
- Addresses Bouncing-ball missing palette regression
9+
- Fixes page-load-only false positives
910
- No validators
1011
- No start_of_day changes
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP
2+
3+
## Objective
4+
Fix the gap exposed by review: tests validate load/open state, but not expected manifest payload.
5+
6+
## Current Bad Example
7+
Bouncing-ball manifest contains:
8+
- `lineage`
9+
- `sources`
10+
- `assets`
11+
- `sourcePath`
12+
- references to old JSON
13+
- copied legacy catalog data
14+
15+
These should not be present in the final clean manifest model.
16+
17+
## Direct Answers / Final Rules
18+
19+
### 1. `lineage`
20+
Delete it from game manifests.
21+
22+
Reason:
23+
- It is migration history/debug metadata.
24+
- It is not runtime/tool data.
25+
- It creates legacy dependency noise.
26+
27+
### 2. `sources`
28+
Delete it from game manifests.
29+
30+
Reason:
31+
- It points to old external JSON sources.
32+
- Final manifest should not be a reference map.
33+
34+
### 3. `assets`
35+
Delete generic root `assets`.
36+
37+
Reason:
38+
- It is a copied catalog/index.
39+
- It duplicates tool-owned data.
40+
- External media file references belong only under `tools["asset-browser"].assets`.
41+
42+
### 4. Asteroids vector data
43+
Asteroids ships/asteroids/title vectors must be actual Vector Asset Studio data under:
44+
45+
```json
46+
tools["vector-asset-studio"].vectors
47+
```
48+
49+
Workspace Manager should show Vector Asset Studio with a selected/available asset, not `Asset: none`.
50+
51+
### 5. `sprite-editor`
52+
Remove from Asteroids if Asteroids has only vector assets.
53+
54+
### 6. `tile-map-editor`
55+
Remove from Asteroids if Asteroids does not use tile maps.
56+
57+
### 7. `parallax-editor`
58+
Remove from Asteroids if Asteroids does not use parallax.
59+
60+
### 8. `libraries`
61+
Delete if it is only an index/reference list.
62+
63+
Keep only if it contains actual tool-owned reusable data that the tool requires. For Asteroids vector data, prefer actual entries in `vectors`, not a separate reference library.
64+
65+
## Clean Manifest Model
66+
67+
Allowed root fields:
68+
- `schema`
69+
- `version`
70+
- `game`
71+
- `launch` only if still intentionally used
72+
- `tools`
73+
74+
Disallowed root fields:
75+
- `lineage`
76+
- `sources`
77+
- generic `assets`
78+
- copied legacy catalog data
79+
- root `palette`
80+
- root `palettes`
81+
82+
Allowed tool sections only when valid:
83+
- `palette-browser`
84+
- `primitive-skin-editor`
85+
- `asset-browser`
86+
- `vector-asset-studio`
87+
- `sprite-editor` only for sprite games/data
88+
- `tile-map-editor` only for tile games/data
89+
- `parallax-editor` only for parallax games/data
90+
91+
## Required Test
92+
Add or update a manifest payload expectation test.
93+
94+
Suggested file:
95+
96+
```text
97+
tests/runtime/GameManifestPayloadExpectations.test.mjs
98+
```
99+
100+
The test must validate:
101+
102+
### For all games
103+
- no root `lineage`
104+
- no root `sources`
105+
- no generic root `assets`
106+
- no `sourcePath`
107+
- no stale external JSON paths
108+
- no old `workspace.asset-catalog.json`
109+
- no old `tools.manifest.json`
110+
- every tool section has `schema`, `version`, `name`, `source`
111+
- exactly one palette at `tools["palette-browser"].palette`
112+
- no root `palette`
113+
- no root `palettes`
114+
115+
### For Asteroids
116+
- has `tools["vector-asset-studio"].vectors`
117+
- vector count > 0
118+
- does not have `sprite-editor` unless actual sprite data exists
119+
- does not have `tile-map-editor` unless actual tilemap data exists
120+
- does not have `parallax-editor` unless actual parallax data exists
121+
- does not have `libraries` unless actual non-reference library data is required
122+
- Workspace Manager must not show Vector Asset Studio `Asset: none` if vectors exist
123+
124+
### For Bouncing-ball
125+
- no lineage/sources/assets
126+
- has `palette-browser.palette`
127+
- has `primitive-skin-editor.skins`
128+
- no stale references to external palette/skin JSON files
129+
130+
## Required Cleanup
131+
Clean all game manifests to satisfy the above test.
132+
133+
## Required Reports
134+
Create:
135+
- `docs/dev/reports/level_10_2c_manifest_payload_expectation_report.md`
136+
- `docs/dev/reports/level_10_2c_manifest_cleanup_report.md`
137+
138+
## Acceptance
139+
- Tests fail on the old bad manifest shape.
140+
- Tests pass after cleanup.
141+
- Bouncing-ball has no `lineage`, `sources`, or generic `assets`.
142+
- Asteroids has Vector Asset Studio vectors and no invalid unused tool sections.
143+
- Workspace Manager asset presence test validates actual payload expectations.
144+
- No validators added.
145+
- No start_of_day changes.

0 commit comments

Comments
 (0)