Skip to content

Commit eb7367f

Browse files
committed
Add deterministic targeted-file manifests to eliminate repeated Playwright discovery walks and uncontrolled lane expansion - PR_26146_033-targeted-file-manifests-and-deterministic-lane-inputs
1 parent e619a4d commit eb7367f

16 files changed

Lines changed: 767 additions & 111 deletions

docs/dev/reports/dependency_gating_report.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Dependency Gating Report
22

3-
Generated: 2026-05-26T19:43:53.674Z
3+
Generated: 2026-05-26T19:54:13.476Z
44
Status: PASS
55

66
## Gate Order
@@ -16,8 +16,9 @@ Status: PASS
1616
| --- | --- | --- | --- | --- | --- |
1717
| workspace-contract | No | SKIP | none | Workspace Manager V2 contract and lifecycle behavior | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
1818
| tool-runtime | Yes | PASS | none | First-class tool runtime behavior | Lane has no lane dependencies and is eligible after preflight and compilation pass. |
19+
| game-runtime | Yes | PASS | none | Game-owned Playwright runtime behavior | Lane has no lane dependencies and is eligible after preflight and compilation pass. |
1920
| integration | Yes | PASS | none | Workspace, tool, game index, and manifest handoff behavior | Lane has no lane dependencies and is eligible after preflight and compilation pass. |
20-
| engine-src | No | SKIP | none | src/ engine and shared runtime capability behavior | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
21+
| engine-src | Yes | PASS | none | src/ engine and shared runtime capability behavior | Lane has no lane dependencies and is eligible after preflight and compilation pass. |
2122
| samples | No | SKIP | none | Affected samples lane, on request only | Lane was not selected, so dependency-gated runtime scheduling skipped it. |
2223

2324
## Dependency Failures Caught Pre-Runtime

docs/dev/reports/filesystem_scan_reduction_report.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Filesystem Scan Reduction Report
22

3-
Generated: 2026-05-26T19:43:53.658Z
3+
Generated: 2026-05-26T19:54:13.454Z
44
Status: PASS
55

66
## Scan Enforcement
@@ -10,8 +10,8 @@ Status: PASS
1010
| tests/playwright | PREVENTED | Targeted lanes supplied explicit spec files; global Playwright discovery was not used. |
1111
| tests/helpers | SCOPED | Helper discovery used the targeted import graph instead of enumerating every helper. |
1212
| games/ | SCOPED | Game fixture discovery used explicit manifest/path references from targeted files. |
13-
| tests/playwright/engine | SKIP | Unselected lane directory discovery was skipped. |
14-
| tests/playwright/games | SKIP | Unselected lane directory discovery was skipped. |
13+
| tests/playwright/engine | SCOPED | Selected lane discovery was restricted to explicit target specs. |
14+
| tests/playwright/games | SCOPED | Selected lane discovery was restricted to explicit target specs. |
1515
| tests/playwright/integration | SCOPED | Selected lane discovery was restricted to explicit target specs. |
1616
| tests/playwright/tools | SCOPED | Selected lane discovery was restricted to explicit target specs. |
1717

docs/dev/reports/lane_compilation_report.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Lane Compilation Report
22

3-
Generated: 2026-05-26T19:43:53.674Z
3+
Generated: 2026-05-26T19:54:13.476Z
44
Status: PASS
55

66
## Lane Graph
@@ -9,9 +9,10 @@ Status: PASS
99
| --- | --- | --- | --- | --- | --- |
1010
| workspace-contract | SKIP | Workspace Manager V2 contract and lifecycle behavior | none | npm.cmd run test:workspace-v2 | Lane was not selected. |
1111
| tool-runtime | PASS | First-class tool runtime behavior | tests/playwright/tools/AssetManagerV2.spec.mjs; tests/playwright/tools/PreviewGeneratorV2Baseline.spec.mjs; tests/playwright/tools/CollisionInspectorV2.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/AssetManagerV2.spec.mjs --grep "launch guard|temporary UAT context|rejects non-Workspace" --project=playwright --workers=1 --reporter=list; C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/tools/PreviewGeneratorV2Baseline.spec.mjs tests/playwright/tools/CollisionInspectorV2.spec.mjs --project=playwright --workers=1 --reporter=list | Lane graph, command shape, targets, fixtures, and ownership compile before runtime. |
12+
| game-runtime | PASS | Game-owned Playwright runtime behavior | tests/playwright/games/AsteroidsBackgroundAssetResolution.spec.mjs; tests/playwright/games/AsteroidsBeatTiming.spec.mjs; tests/playwright/games/AsteroidsGameSceneCleanup.spec.mjs; tests/playwright/games/AsteroidsShipStateVisuals.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/games/AsteroidsBackgroundAssetResolution.spec.mjs tests/playwright/games/AsteroidsBeatTiming.spec.mjs tests/playwright/games/AsteroidsGameSceneCleanup.spec.mjs tests/playwright/games/AsteroidsShipStateVisuals.spec.mjs --project=playwright --workers=1 --reporter=list | Lane graph, command shape, targets, fixtures, and ownership compile before runtime. |
1213
| integration | PASS | Workspace, tool, game index, and manifest handoff behavior | tests/playwright/integration/GameIndexPreviewManifestResolution.spec.mjs | C:\nvm4w\nodejs\node.exe C:\Users\davidq\Documents\GitHub\HTML-JavaScript-Gaming\node_modules\@playwright\test\cli.js test tests/playwright/integration/GameIndexPreviewManifestResolution.spec.mjs --grep Pong --project=playwright --workers=1 --reporter=list | Lane graph, command shape, targets, fixtures, and ownership compile before runtime. |
13-
| engine-src | SKIP | src/ engine and shared runtime capability behavior | scripts/run-node-test-files.mjs; tests/core/EngineCoreBoundaryBaseline.test.mjs; tests/core/FrameClock.test.mjs; tests/core/FixedTicker.test.mjs; tests/assets/AssetLoaderSystem.test.mjs; tests/audio/AudioService.test.mjs; tests/input/InputMap.test.mjs; tests/input/KeyboardState.test.mjs; tests/input/MouseState.test.mjs; tests/input/GamepadInputAdapter.test.mjs; tests/input/GamepadHapticsService.test.mjs; tests/render/Renderer.test.mjs | C:\nvm4w\nodejs\node.exe scripts/run-node-test-files.mjs tests/core/EngineCoreBoundaryBaseline.test.mjs tests/core/FrameClock.test.mjs tests/core/FixedTicker.test.mjs tests/assets/AssetLoaderSystem.test.mjs tests/audio/AudioService.test.mjs tests/input/InputMap.test.mjs tests/input/KeyboardState.test.mjs tests/input/MouseState.test.mjs tests/input/GamepadInputAdapter.test.mjs tests/input/GamepadHapticsService.test.mjs tests/render/Renderer.test.mjs | Lane was not selected. |
14-
| samples | SKIP | Affected samples lane, on request only | scripts/run-node-test-files.mjs; tests/samples/SamplesProgramCombinedPass.test.mjs; tests/samples/FullscreenRuleEnforcement.test.mjs | C:\nvm4w\nodejs\node.exe scripts/run-node-test-files.mjs tests/samples/SamplesProgramCombinedPass.test.mjs tests/samples/FullscreenRuleEnforcement.test.mjs | Lane was not selected. |
14+
| engine-src | PASS | src/ engine and shared runtime capability behavior | tests/core/EngineCoreBoundaryBaseline.test.mjs; tests/core/FrameClock.test.mjs; tests/core/FixedTicker.test.mjs; tests/assets/AssetLoaderSystem.test.mjs; tests/audio/AudioService.test.mjs; tests/input/InputMap.test.mjs; tests/input/KeyboardState.test.mjs; tests/input/MouseState.test.mjs; tests/input/GamepadInputAdapter.test.mjs; tests/input/GamepadHapticsService.test.mjs; tests/render/Renderer.test.mjs | C:\nvm4w\nodejs\node.exe scripts/run-node-test-files.mjs tests/core/EngineCoreBoundaryBaseline.test.mjs tests/core/FrameClock.test.mjs tests/core/FixedTicker.test.mjs tests/assets/AssetLoaderSystem.test.mjs tests/audio/AudioService.test.mjs tests/input/InputMap.test.mjs tests/input/KeyboardState.test.mjs tests/input/MouseState.test.mjs tests/input/GamepadInputAdapter.test.mjs tests/input/GamepadHapticsService.test.mjs tests/render/Renderer.test.mjs | Lane graph, command shape, targets, fixtures, and ownership compile before runtime. |
15+
| samples | SKIP | Affected samples lane, on request only | tests/samples/SamplesProgramCombinedPass.test.mjs; tests/samples/FullscreenRuleEnforcement.test.mjs | C:\nvm4w\nodejs\node.exe scripts/run-node-test-files.mjs tests/samples/SamplesProgramCombinedPass.test.mjs tests/samples/FullscreenRuleEnforcement.test.mjs | Lane was not selected. |
1516

1617
## Compilation Failures
1718

docs/dev/reports/lane_deduplication_report.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Lane Deduplication Report
22

3-
Generated: 2026-05-26T19:43:53.674Z
3+
Generated: 2026-05-26T19:54:13.477Z
44
Status: PASS
55

66
## Summary
77

8-
Raw lane requests: tool-runtime, integration
9-
Unique scheduled lanes: tool-runtime, integration
8+
Raw lane requests: tool-runtime, game-runtime, integration, engine-src
9+
Unique scheduled lanes: tool-runtime, game-runtime, integration, engine-src
1010
Prevented duplicate lane executions: 0
1111
Prevented browser launches: 0
1212
Prevented Workspace lane reruns: 0
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Lane Input Validation Report
2+
3+
Generated: 2026-05-26T19:54:13.477Z
4+
Status: PASS
5+
6+
## Input Files
7+
8+
| Lane | Role | File | Status | Reason |
9+
| --- | --- | --- | --- | --- |
10+
| tool-runtime | test | tests/playwright/tools/AssetManagerV2.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
11+
| tool-runtime | test | tests/playwright/tools/CollisionInspectorV2.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
12+
| tool-runtime | test | tests/playwright/tools/PreviewGeneratorV2Baseline.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
13+
| tool-runtime | helper | tests/helpers/playwrightRepoServer.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
14+
| tool-runtime | helper | tests/helpers/playwrightStorageIsolation.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
15+
| tool-runtime | helper | tests/helpers/playwrightV8CoverageReporter.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
16+
| tool-runtime | helper | tests/helpers/workspaceV2CoverageReporter.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
17+
| tool-runtime | fixture | games/Asteroids/game.manifest.json | PASS | Fixture is explicit, present, and allowed for the lane ownership. |
18+
| tool-runtime | fixture | games/GravityWell/game.manifest.json | PASS | Fixture is explicit, present, and allowed for the lane ownership. |
19+
| tool-runtime | fixture | games/Pong/game.manifest.json | PASS | Fixture is explicit, present, and allowed for the lane ownership. |
20+
| tool-runtime | fixture | tests/fixtures/workspace-v2/uat.manifest.json | PASS | Fixture is explicit, present, and allowed for the lane ownership. |
21+
| tool-runtime | import | tests/helpers/playwrightRepoServer.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
22+
| tool-runtime | import | tests/helpers/playwrightStorageIsolation.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
23+
| tool-runtime | import | tests/helpers/playwrightV8CoverageReporter.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
24+
| tool-runtime | import | tests/helpers/workspaceV2CoverageReporter.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
25+
| game-runtime | test | tests/playwright/games/AsteroidsBackgroundAssetResolution.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
26+
| game-runtime | test | tests/playwright/games/AsteroidsBeatTiming.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
27+
| game-runtime | test | tests/playwright/games/AsteroidsGameSceneCleanup.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
28+
| game-runtime | test | tests/playwright/games/AsteroidsShipStateVisuals.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
29+
| game-runtime | helper | tests/helpers/playwrightRepoServer.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
30+
| game-runtime | helper | tests/helpers/playwrightV8CoverageReporter.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
31+
| game-runtime | helper | tests/helpers/workspaceV2CoverageReporter.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
32+
| game-runtime | fixture | games/Asteroids/game.manifest.json | PASS | Fixture is explicit, present, and allowed for the lane ownership. |
33+
| game-runtime | import | tests/helpers/playwrightRepoServer.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
34+
| game-runtime | import | tests/helpers/playwrightV8CoverageReporter.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
35+
| game-runtime | import | tests/helpers/workspaceV2CoverageReporter.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
36+
| integration | test | tests/playwright/integration/GameIndexPreviewManifestResolution.spec.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
37+
| integration | helper | tests/helpers/playwrightRepoServer.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
38+
| integration | helper | tests/helpers/playwrightStorageIsolation.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
39+
| integration | helper | tests/helpers/playwrightV8CoverageReporter.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
40+
| integration | helper | tests/helpers/workspaceV2CoverageReporter.mjs | PASS | Reusable helper is explicit, present, and shared-helper owned. |
41+
| integration | fixture | games/Pong/game.manifest.json | PASS | Fixture is explicit, present, and allowed for the lane ownership. |
42+
| integration | import | tests/helpers/playwrightRepoServer.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
43+
| integration | import | tests/helpers/playwrightStorageIsolation.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
44+
| integration | import | tests/helpers/playwrightV8CoverageReporter.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
45+
| integration | import | tests/helpers/workspaceV2CoverageReporter.mjs | PASS | Relative import dependency is resolved and recorded in the manifest. |
46+
| engine-src | test | tests/assets/AssetLoaderSystem.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
47+
| engine-src | test | tests/audio/AudioService.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
48+
| engine-src | test | tests/core/EngineCoreBoundaryBaseline.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
49+
| engine-src | test | tests/core/FixedTicker.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
50+
| engine-src | test | tests/core/FrameClock.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
51+
| engine-src | test | tests/input/GamepadHapticsService.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
52+
| engine-src | test | tests/input/GamepadInputAdapter.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
53+
| engine-src | test | tests/input/InputMap.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
54+
| engine-src | test | tests/input/KeyboardState.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
55+
| engine-src | test | tests/input/MouseState.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
56+
| engine-src | test | tests/render/Renderer.test.mjs | PASS | Manifest test input is explicit, present, and owned by the lane. |
57+
| engine-src | import | src/engine/assets/AssetLoaderSystem.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
58+
| engine-src | import | src/engine/assets/AssetRegistry.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
59+
| engine-src | import | src/engine/assets/ImageAssetLoader.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
60+
| engine-src | import | src/engine/audio/AudioService.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
61+
| engine-src | import | src/engine/camera/Camera2D.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
62+
| engine-src | import | src/engine/camera/Camera3D.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
63+
| engine-src | import | src/engine/camera/CameraSystem.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
64+
| engine-src | import | src/engine/core/Engine.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
65+
| engine-src | import | src/engine/core/FixedTicker.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
66+
| engine-src | import | src/engine/core/FrameClock.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
67+
| engine-src | import | src/engine/core/RuntimeMetrics.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
68+
| engine-src | import | src/engine/events/EventBus.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
69+
| engine-src | import | src/engine/input/ActionInputService.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
70+
| engine-src | import | src/engine/input/GamepadHapticsService.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
71+
| engine-src | import | src/engine/input/GamepadInputAdapter.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
72+
| engine-src | import | src/engine/input/InputMap.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
73+
| engine-src | import | src/engine/input/InputService.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
74+
| engine-src | import | src/engine/input/KeyboardState.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
75+
| engine-src | import | src/engine/input/MouseState.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
76+
| engine-src | import | src/engine/physics/arcadeBody.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
77+
| engine-src | import | src/engine/physics/collision3d.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
78+
| engine-src | import | src/engine/physics/drag.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
79+
| engine-src | import | src/engine/physics/integration3d.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
80+
| engine-src | import | src/engine/physics/scene3d.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
81+
| engine-src | import | src/engine/rendering/CanvasRenderer.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
82+
| engine-src | import | src/engine/rendering/LayeredRenderSystem.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
83+
| engine-src | import | src/engine/scene/Scene.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
84+
| engine-src | import | src/engine/scene/SceneManager.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
85+
| engine-src | import | src/engine/systems/MovementSystem.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
86+
| engine-src | import | src/engine/systems/PhysicsSystem.js | PASS | Relative import dependency is resolved and recorded in the manifest. |
87+
88+
## Ownership Validation Failures
89+
90+
No manifest ownership, helper, fixture, import, or runtime command target failures.
91+
92+
## Fast-Fail Enforcement
93+
94+
- Manifest ownership is validated before Playwright/browser launch.
95+
- Helper ownership is validated before execution.
96+
- Fixture ownership is validated before execution.
97+
- Unexpected discovery expansion outside manifest scope blocks runtime scheduling.
98+
- Deterministic manifest failures do not trigger fallback broad discovery.

0 commit comments

Comments
 (0)