Skip to content

Commit 461161c

Browse files
author
DavidQ
committed
Validate runtime after asset normalization and manifest deduplication
BUILD_PR_LEVEL_10_14_ASTEROIDS_RUNTIME_VALIDATION_PASS
1 parent 2113749 commit 461161c

8 files changed

Lines changed: 57 additions & 15 deletions

docs/dev/CODEX_COMMANDS.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ MODEL: GPT-5.3-codex
22
REASONING: medium
33

44
COMMAND:
5-
1. Remove assets.json
6-
2. Ensure tools.manifest.json is sole source of truth
7-
3. Remove duplicate data structures if present
8-
4. Validate all loaders/tests still pass
9-
5. Package repo ZIP to:
10-
<project folder>/tmp/BUILD_PR_LEVEL_10_13_ASSET_DEDUP_AND_BEZEL_ROADMAP.zip
5+
1. Run full validation suite
6+
2. Verify manifest-driven loading across all asset types
7+
3. Confirm no references to assets.json remain
8+
4. Confirm all renamed files resolve correctly
9+
5. Fix any breakages found
10+
6. Package repo ZIP to:
11+
<project folder>/tmp/BUILD_PR_LEVEL_10_14_ASTEROIDS_RUNTIME_VALIDATION_PASS.zip

docs/dev/COMMIT_COMMENT.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Remove duplicate asset definitions and add bezel roadmap entry
2-
BUILD_PR_LEVEL_10_13_ASSET_DEDUP_AND_BEZEL_ROADMAP
1+
Validate runtime after asset normalization and manifest deduplication
2+
BUILD_PR_LEVEL_10_14_ASTEROIDS_RUNTIME_VALIDATION_PASS

docs/dev/NEXT_COMMAND.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
BUILD_PR_LEVEL_10_14_ASTEROIDS_RUNTIME_VALIDATION_PASS
1+
BUILD_PR_LEVEL_10_15_BEZEL_RENDER_LAYER_FOUNDATION
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
Deduplicated assets + added bezel roadmap
1+
Runtime validation pass completed after manifest deduplication and filename normalization.
2+
Expanded manifest discovery test to assert all active domains resolve through tools.manifest.json.
3+
Confirmed no remaining runtime references to deprecated games/<game>/assets/assets.json paths.
4+
No runtime breakages found in loader or renamed asset path resolution.

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-14T18:49:10.899Z
3+
Generated: 2026-04-14T19:07:40.279Z
44

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
- assets.json removed
2-
- single manifest
3-
- loaders pass
4-
- roadmap updated
1+
- npm test: FAIL at pretest shared-extraction guard (existing baseline drift: baseline_unexpected=26)
2+
- node ./scripts/run-node-tests.mjs: PASS (127/127 explicit tests, launch smoke PASS=227 FAIL=0)
3+
- PASS GameAssetManifestDiscovery (expanded all-domain manifest assertions)
4+
- PASS manifest-runtime-resolution (sprites/tilemaps/parallax/vectors)
5+
- PASS renamed-files-resolve (all runtimePath/toolDataPath entries exist)
6+
- no matches for deprecated games/<game>/assets/assets.json references
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# BUILD_PR_LEVEL_10_14_ASTEROIDS_RUNTIME_VALIDATION_PASS
2+
3+
## Purpose
4+
Validate that all prior changes (naming, manifest, deduplication) function correctly at runtime level.
5+
6+
## Scope
7+
- Validate manifest discovery
8+
- Validate loader resolution
9+
- Validate asset access paths
10+
- Ensure no regressions
11+
12+
## Testable Outcome
13+
- All tests pass
14+
- Loader resolves all assets via manifest
15+
- No references to deprecated assets.json
16+
- No filename coupling issues
17+
18+
## Non-Goals
19+
- No new features
20+
- No engine changes

tests/tools/GameAssetManifestDiscovery.test.mjs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import assert from "node:assert/strict";
2+
import { existsSync } from "node:fs";
23
import asteroidsManifest from "../../games/Asteroids/assets/tools.manifest.json" with { type: "json" };
34
import {
45
discoverRuntimeAssetSourcesFromManifest,
@@ -16,6 +17,18 @@ export async function run() {
1617
assert.equal(discovery.issues.length, 0);
1718
assert.equal(Object.keys(discovery.runtimeAssetSources).length > 0, true);
1819
assert.equal(discovery.runtimeAssetSources["vector.asteroids.ship"].file.includes("/data/"), false);
20+
assert.equal(discovery.runtimeAssetSources["sprite.asteroids.demo"].file.includes("/data/"), false);
21+
assert.equal(discovery.runtimeAssetSources["tilemap.asteroids.stage"].file.includes("/data/"), false);
22+
assert.equal(discovery.runtimeAssetSources["parallax.asteroids.title"].file.includes("/data/"), false);
23+
assert.equal(discovery.runtimeAssetSources["parallax.asteroids.overlay"].file.includes("/data/"), false);
24+
assert.equal(asteroidsManifest.domains.sprites.length > 0, true);
25+
assert.equal(asteroidsManifest.domains.tilemaps.length > 0, true);
26+
assert.equal(asteroidsManifest.domains.parallax.length > 0, true);
27+
assert.equal(asteroidsManifest.domains.vectors.length > 0, true);
28+
Object.values(asteroidsManifest.domains).flat().forEach((record) => {
29+
assert.equal(existsSync(record.runtimePath), true);
30+
assert.equal(existsSync(record.toolDataPath), true);
31+
});
1932

2033
const lookup = createRuntimeManifestAssetLookup({
2134
gameId: "asteroids",
@@ -26,6 +39,9 @@ export async function run() {
2639
assert.equal(lookup.binding.status, "ready");
2740
assert.equal(lookup.binding.issues.length, 0);
2841
assert.equal(lookup.resolvePackagedAsset({ id: "vector.asteroids.ship", type: "vector" }).file.includes("/data/"), false);
42+
assert.equal(lookup.resolvePackagedAsset({ id: "sprite.asteroids.demo", type: "sprite" }).file.includes("/data/"), false);
43+
assert.equal(lookup.resolvePackagedAsset({ id: "tilemap.asteroids.stage", type: "tilemap" }).file.includes("/data/"), false);
44+
assert.equal(lookup.resolvePackagedAsset({ id: "parallax.asteroids.title", type: "parallaxLayer" }).file.includes("/data/"), false);
2945

3046
const invalidManifest = {
3147
...asteroidsManifest,

0 commit comments

Comments
 (0)