Skip to content

Commit f9a953b

Browse files
author
DavidQ
committed
BUILD_PR_LEVEL_10_2D_GRAVITY_WELL_SHIP_VECTOR_MAP_FIX
- Added missing Gravity Well ship vector map to manifest - Strengthened payload expectations for required vector assets - Ensured Vector Asset Studio has Gravity Well vector data PR Details: - No separate vector JSON files - No validators - No start_of_day changes
1 parent ec00776 commit f9a953b

18 files changed

Lines changed: 742 additions & 175 deletions
Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,23 @@
11
# Expected Codex Return / Delta Template
22

33
## Expected Changed Files
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`
4+
- `games/GravityWell/game.manifest.json` if style defaults need adding
5+
- Vector Asset Studio / Workspace Manager binding file(s)
6+
- Runtime test file(s) for Vector Asset Studio binding
7+
- `docs/dev/reports/level_10_2f_vector_asset_palette_paint_binding_report.md`
98
- `docs/dev/roadmaps/MASTER_ROADMAP_ENGINE.md` if status update needed
109

1110
## Expected Validation Summary
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`
11+
- `gravity_well_palette_loaded=true`
12+
- `gravity_well_vector_asset_present=true`
13+
- `gravity_well_vector_palette_selected=true`
14+
- `gravity_well_vector_stroke_selected=true`
15+
- `gravity_well_vector_paint_selected=<true|not-required-fill-false>`
16+
- `binding_test_added_or_updated=true`
17+
- `validators_added=0`
2418
- `start_of_day_changes=0`
2519

2620
## Expected Delta ZIP
2721
Codex must create:
2822

29-
`tmp/BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP_delta.zip`
23+
`tmp/BUILD_PR_LEVEL_10_2F_VECTOR_ASSET_PALETTE_PAINT_BINDING_FIX_delta.zip`
Lines changed: 6 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,8 @@
11
# Level 10.2C Manifest Cleanup Report
22

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`
3+
## To Be Completed By Codex
4+
- List game manifests cleaned.
5+
- Record removed root legacy sections.
6+
- Record removed invalid tool sections.
7+
- Record Asteroids vector asset status.
8+
- Record Bouncing-ball palette/skin status.
Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,7 @@
11
# Level 10.2C Manifest Payload Expectation Report
22

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`
3+
## To Be Completed By Codex
4+
- Describe payload expectation test added.
5+
- List rules enforced.
6+
- Confirm old bad manifest shape fails.
7+
- Confirm cleaned manifests pass.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Level 10.2D Gravity Well Ship Vector Map Fix Report
2+
3+
## Scope
4+
- BUILD: `BUILD_PR_LEVEL_10_2D_GRAVITY_WELL_SHIP_VECTOR_MAP_FIX`
5+
- Goal: Add Gravity Well ship/player vector map data to manifest SSoT and enforce it in tests.
6+
7+
## Source Of Ship Vector Data
8+
- Source file: `games/GravityWell/game/GravityWellWorld.js`
9+
- Source constant: `SHIP_SHAPE`
10+
- Source points used:
11+
- `(0, -16)`
12+
- `(11, 14)`
13+
- `(0, 8)`
14+
- `(-11, 14)`
15+
16+
## Manifest Update
17+
- Updated file: `games/GravityWell/game.manifest.json`
18+
- Added tool section:
19+
- `tools["vector-asset-studio"]`
20+
- metadata included: `schema`, `version`, `name`, `source`
21+
- Added vector payload:
22+
- id: `vector.gravitywell.ship`
23+
- path: `tools["vector-asset-studio"].vectors["vector.gravitywell.ship"]`
24+
- geometry: `viewBox: "-16 -16 32 32"`, `paths[0].d: "M 0 -16 L 11 14 L 0 8 L -11 14 Z"`
25+
- style: `stroke: true`, `fill: false`
26+
- No separate vector JSON file created.
27+
28+
## Test Update
29+
- Updated file: `tests/runtime/GameManifestPayloadExpectations.test.mjs`
30+
- Added Gravity Well manifest requirements:
31+
- `tools["vector-asset-studio"]` must exist.
32+
- `vectors` must contain at least one entry.
33+
- at least one vector id must contain `ship` or `player`.
34+
- required vector must contain `geometry.paths`.
35+
- required vector must contain `style`.
36+
- Added summary telemetry fields:
37+
- `gravityWellVectorCount`
38+
- `gravityWellVectorIds`
39+
40+
## Workspace Manager Asset Presence
41+
- Updated file: `tools/shared/platformShell.js`
42+
- Result: Gravity Well game launch can hydrate shared asset from manifest vector data (`vector.gravitywell.ship`), preventing empty vector asset state for this game.
43+
44+
## Validation Run
45+
- Command: `npm run test:manifest-payload:games`
46+
- Result: PASS
47+
- Evidence: `gravityWellVectorCount: 1`, `gravityWellVectorIds: ["vector.gravitywell.ship"]`
48+
- Command: `npm run test:workspace-manager:games`
49+
- Result: PASS
50+
- Evidence (GravityWell observation):
51+
- `sharedAssetsPresent: true`
52+
- `sharedAssetLabel: "vector.gravitywell.ship"`
53+
- `assetPresenceFailures: []`
54+
55+
## Constraints Check
56+
- No validators added.
57+
- No `start_of_day` changes.
58+
- No separate game-owned vector JSON files added.
59+
- Change scope stayed limited to manifest payload, targeted tests, and Workspace Manager shared asset hydration path for Gravity Well vector availability.
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# Level 10.2F Vector Asset Palette/Paint Binding Report
2+
3+
## BUILD
4+
- `BUILD_PR_LEVEL_10_2F_VECTOR_ASSET_PALETTE_PAINT_BINDING_FIX`
5+
6+
## Root Cause
7+
- `tools/Vector Asset Studio/main.js` did not consume shared handoff state on boot.
8+
- Workspace Manager hydrated shared palette/asset handoff asynchronously from game manifest, but Vector Asset Studio initialized before/without binding that handoff into local selection state.
9+
- Result for Gravity Well Vector Asset Studio initial state:
10+
- `Palette Selected: false`
11+
- `Paint selected: false`
12+
- `Stroke selected: false`
13+
14+
## Runtime/Data Flow Checked
15+
- Shared palette source: `game.manifest.json -> tools["palette-browser"].palette -> shared palette handoff`
16+
- Shared vector source: `game.manifest.json -> tools["vector-asset-studio"].vectors -> shared asset handoff`
17+
- Workspace Manager launch path verified:
18+
- `tools/Workspace Manager/index.html?gameId=GravityWell&mount=game&tool=vector-asset-studio`
19+
20+
## Changes Applied
21+
- `tools/shared/platformShell.js`
22+
- Added vector style metadata to manifest-derived shared asset handoff payload:
23+
- `metadata.vectorStyle.stroke`
24+
- `metadata.vectorStyle.fill`
25+
- `metadata.vectorStyle.strokeSymbol`
26+
- `metadata.vectorStyle.fillSymbol`
27+
- `tools/Vector Asset Studio/main.js`
28+
- Added shared handoff consumption:
29+
- reads shared palette + shared asset handoff
30+
- registers shared palette into tool palette groups/options
31+
- selects shared palette id
32+
- resolves stroke/fill defaults from style symbols when available
33+
- applies stroke/fill requiredness logic for checklist/gating
34+
- Added reactive binding:
35+
- listens for shared handoff changed events
36+
- re-syncs selection state after asynchronous handoff hydration
37+
- `games/metadata/games.index.metadata.json`
38+
- Updated Gravity Well `toolsUsed` to include `vector-asset-studio` so explicit Vector Asset Studio launch query is valid in Workspace Manager context.
39+
- `tests/runtime/GamesIndexWorkspaceManagerOpen.test.mjs`
40+
- Added Gravity Well vector-selection binding check under Workspace Manager launch:
41+
- validates no `Palette Selected: false`
42+
- validates no `Stroke selected: false` for stroke-enabled vector style
43+
- validates fill-disabled case does not fail without explanation logic
44+
45+
## Gravity Well Results
46+
- Shared palette loaded: `Gravity Well Palette`
47+
- Vector count (manifest expectation test): `1`
48+
- Selected vector id (workspace manager shared asset): `vector.gravitywell.ship`
49+
- Vector style from manifest: `stroke=true`, `fill=false`
50+
- Vector Asset Studio selection-state check:
51+
- `paletteSelectedFalse: false`
52+
- `strokeSelectedFalse: false`
53+
- `paintSelectedFalse: false`
54+
- no binding failures
55+
56+
## Defaults Added
57+
- No Gravity Well manifest style defaults were required; style block already existed.
58+
- Binding defaults are applied in Vector Asset Studio from shared palette/style metadata when explicit symbol mapping is absent.
59+
60+
## Validation
61+
- `npm run test:workspace-manager:games` -> PASS
62+
- includes `gravityWellVectorBindingCheck` with no asset-presence failures
63+
- `npm run test:manifest-payload:games` -> PASS
64+
65+
## Constraints Check
66+
- No validators added.
67+
- No `start_of_day` changes.
68+
- No separate JSON file created for vectors/palette binding.

docs/operations/dev/codex_commands.md

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

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

77
STEPS:
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:
8+
1. Read docs/pr/PLAN_PR_LEVEL_10_2F_VECTOR_ASSET_PALETTE_PAINT_BINDING_FIX.md.
9+
2. Read docs/pr/BUILD_PR_LEVEL_10_2F_VECTOR_ASSET_PALETTE_PAINT_BINDING_FIX.md.
10+
3. Inspect Gravity Well game manifest:
1811
- 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
12+
- tools["vector-asset-studio"].vectors
13+
4. Inspect Workspace Manager to Vector Asset Studio data passing.
14+
5. Inspect Vector Asset Studio palette/paint/stroke selection initialization.
15+
6. Fix binding so shared palette loads into Vector Asset Studio selection state.
16+
7. Ensure stroke-enabled vectors select a valid stroke swatch.
17+
8. Add/adjust defaults in Gravity Well manifest only if style data is missing.
18+
9. Add/update test coverage so palette loaded + vector asset present but palette/stroke selected false fails.
19+
10. Write docs/dev/reports/level_10_2f_vector_asset_palette_paint_binding_report.md.
3820
11. Update docs/dev/roadmaps/MASTER_ROADMAP_ENGINE.md status only if needed:
3921
- [ ] -> [.]
4022
- [.] -> [x]
4123
- no prose rewrite/delete
4224
12. Do not add validators.
4325
13. Do not modify start_of_day.
4426
14. Create Codex delta ZIP:
45-
tmp/BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP_delta.zip
27+
tmp/BUILD_PR_LEVEL_10_2F_VECTOR_ASSET_PALETTE_PAINT_BINDING_FIX_delta.zip
4628

4729
ACCEPTANCE:
48-
- bad payload shape is test-covered
49-
- manifests cleaned
50-
- Asteroids vector tool has assets
51-
- invalid unused tool sections removed
30+
- Gravity Well vector palette/stroke binding works
31+
- test covers selection state
5232
- delta ZIP exists
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
BUILD_PR_LEVEL_10_2C_MANIFEST_PAYLOAD_EXPECTATION_TESTS_AND_CLEANUP
1+
BUILD_PR_LEVEL_10_2F_VECTOR_ASSET_PALETTE_PAINT_BINDING_FIX
22

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
3+
- Fixed Vector Asset Studio palette/paint/stroke binding from game manifest palette
4+
- Added Gravity Well vector selection regression coverage
5+
- Ensured stroke-enabled vectors select a valid palette swatch
76

87
PR Details:
9-
- Fixes page-load-only false positives
108
- No validators
119
- No start_of_day changes

0 commit comments

Comments
 (0)