Skip to content

Commit 58f6c4d

Browse files
author
DavidQ
committed
Normalize renderer vs rendering into one engine boundary
BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION
1 parent 5036159 commit 58f6c4d

37 files changed

Lines changed: 331 additions & 361 deletions

docs/dev/CODEX_COMMANDS.md

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,25 @@ MODEL: GPT-5.4
22
REASONING: high
33

44
COMMAND:
5-
Create `BUILD_PR_LEVEL_01_RENDERING_VECTOR_BOUNDARY_AND_PHYSICS_CLOSEOUT`.
6-
7-
Implement this as one combined section-1 closeout PR.
8-
9-
Boundary decisions:
10-
1. `VectorDrawing` belongs in rendering.
11-
2. `VectorMath` belongs in shared math/utility.
12-
3. `src/engine/physics` must contain real reusable physics helpers, not just placeholder/barrel status.
13-
14-
Required work:
15-
1. Move/normalize vector drawing:
16-
- place `VectorDrawing` under the appropriate rendering-owned path
17-
- update imports/exports accordingly
18-
19-
2. Move/normalize vector math:
20-
- place `VectorMath` under the appropriate shared math/utility path
21-
- update imports/exports accordingly
22-
23-
3. Close physics truthfully:
24-
- extract the smallest valid set of reusable physics-domain helpers from existing games/samples into `src/engine/physics`
25-
- examples may include gravity, friction, drag, acceleration/integration, bounce/impulse if already stable
26-
- do NOT promote game-specific behavior prematurely
27-
- keep the extraction surgical
28-
29-
4. Validate:
5+
Create `BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION`.
6+
7+
Implement one clear rendering boundary decision:
8+
9+
1. Do NOT keep both `renderer` and `rendering` as competing top-level engine concepts.
10+
2. Prefer `src/engine/rendering/` as the single domain boundary.
11+
3. Treat renderer as an implementation/class/module inside rendering, not as a separate parallel boundary.
12+
4. Normalize imports/exports to that one truth.
13+
5. Keep the structure simple:
14+
- do NOT over-split into `vector/`, `sprite/`, `layer/` unless the repo already has enough stable clustered content to justify it
15+
- prefer a flatter rendering boundary first
16+
6. Update roadmap/status only if needed and only by status markers or additive truth-safe structure clarification.
17+
7. Validate:
3018
- imports remain green
31-
- post-move validation remains green
32-
- rendering no longer owns generic vector math
33-
- shared math no longer depends on rendering
34-
- `src/engine/physics` now contains real reusable physics helpers
35-
36-
5. Roadmap:
37-
- update status markers only
38-
- no roadmap text rewrite
39-
- mark `src/engine/rendering` and `src/engine/physics` complete only if truthfully supported
40-
- leave `src/engine/scene` open if it still is not done
19+
- no duplicate renderer/rendering top-level ambiguity remains
20+
- any subfolders added are truthfully justified, not speculative
4121

42-
6. Final packaging step is REQUIRED:
43-
- package ALL changed files into this exact repo-structured ZIP:
44-
`<project folder>/tmp/BUILD_PR_LEVEL_01_RENDERING_VECTOR_BOUNDARY_AND_PHYSICS_CLOSEOUT.zip`
22+
Final packaging step is REQUIRED:
23+
`<project folder>/tmp/BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION.zip`
4524

4625
Hard rules:
4726
- implementation by Codex

docs/dev/COMMIT_COMMENT.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Normalize vector rendering/math boundaries and close physics with real reusable helpers
2-
BUILD_PR_LEVEL_01_RENDERING_VECTOR_BOUNDARY_AND_PHYSICS_CLOSEOUT
1+
Normalize renderer vs rendering into one engine boundary
2+
BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
- Combined vector boundary normalization with physics closeout to reduce PR count
2-
- Rendering now owns vector drawing concerns
3-
- Shared math/utils now owns generic vector math
4-
- Physics must be closed by extracting real reusable helpers from games/samples
1+
- Added PR to collapse renderer/rendering ambiguity into one engine boundary
2+
- Recommends keeping rendering as the folder/domain and renderer as an implementation inside it
3+
- Avoids premature vector/sprite/layer over-structuring unless justified by real content
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
- VectorDrawing moved to rendering-owned path
2-
- VectorMath moved to shared math/utility path
1+
- only one top-level rendering boundary remains
2+
- renderer no longer competes with rendering as a parallel concept
33
- imports/exports normalized and valid
4-
- src/engine/physics contains real reusable physics helpers
5-
- roadmap updated by status markers only
6-
- section 1 residue reduced or fully closed truthfully
4+
- no speculative subfolder explosion introduced
5+
- roadmap/status handling remains truth-safe
76
- output ZIP created at:
8-
<project folder>/tmp/BUILD_PR_LEVEL_01_RENDERING_VECTOR_BOUNDARY_AND_PHYSICS_CLOSEOUT.zip
7+
<project folder>/tmp/BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION.zip
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION
2+
3+
## Purpose
4+
Normalize engine rendering to one boundary: `src/engine/rendering`.
5+
6+
## Applied Delta
7+
8+
### 1) Single top-level rendering boundary enforced
9+
- Removed competing path `src/engine/render/` completely.
10+
- Kept `src/engine/rendering/` as the only render-domain boundary.
11+
12+
### 2) Renderer remains implementation inside rendering
13+
- `CanvasRenderer`, `Renderer`, `ResolutionScaler`, `SpriteRenderSystem`, and `LayeredRenderSystem` now live directly in `src/engine/rendering/` as real implementations (not re-export wrappers).
14+
- `src/engine/core/Engine.js` now imports `CanvasRenderer` from `../rendering/index.js`.
15+
16+
### 3) Import/export normalization
17+
- Updated sample/test imports from `/src/engine/render/index.js` and `../../src/engine/render/...` to rendering equivalents.
18+
- Updated render-domain contract labels in `tools/shared/renderPipelineContract.js` from `engine/render` to `engine/rendering`.
19+
- Updated sample metadata references from `engine/render/index/*` and `/src/engine/render/index.js` to rendering equivalents.
20+
21+
### 4) Structure simplicity
22+
- No new `rendering/vector`, `rendering/sprite`, or `rendering/layer` subfolders were introduced.
23+
- Boundary remains flat with only one justified added module already in use: `src/engine/rendering/VectorDrawing.js`.
24+
25+
## Roadmap Handling
26+
- No roadmap status change was required for this normalization slice.
27+
- No roadmap text rewrite was performed.
28+
29+
## Validation
30+
- `node --check` on touched rendering/core/sample/test files.
31+
- `node tests/render/Renderer.test.mjs`
32+
- `node tests/production/ProductionReadiness.test.mjs`
33+
- `node --input-type=module -e "import { run } from './tests/final/PrecisionCollisionSystems.test.mjs'; run();"`
34+
- Boundary checks:
35+
- no `src/engine/render/` imports remain in `src`, `games`, `samples`, `tools`, `tests`
36+
- no `../render/` re-export dependencies remain
37+
38+
## Packaging
39+
`<project folder>/tmp/BUILD_PR_LEVEL_01_RENDERER_RENDERING_BOUNDARY_NORMALIZATION.zip`
40+
41+
## Scope guard
42+
- surgical implementation only
43+
- no unrelated repo changes

samples/metadata/samples.index.metadata.json

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,7 +1111,7 @@
11111111
"engine/debug/index/drawFrame",
11121112
"engine/debug/index/drawPanel",
11131113
"engine/input/index/InputService",
1114-
"engine/render/index/renderSpriteReadyEntities",
1114+
"engine/rendering/index/renderSpriteReadyEntities",
11151115
"engine/scenes/index/Scene"
11161116
],
11171117
"thumbnail": "/samples/phase-02/0213/assets/images/preview.svg",
@@ -1138,7 +1138,7 @@
11381138
"engine/debug/index/drawFrame",
11391139
"engine/debug/index/drawPanel",
11401140
"engine/input/index/InputService",
1141-
"engine/render/index/renderSpriteReadyEntities",
1141+
"engine/rendering/index/renderSpriteReadyEntities",
11421142
"engine/scenes/index/Scene",
11431143
"engine/theme/index/Theme",
11441144
"engine/theme/index/ThemeTokens",
@@ -1165,7 +1165,7 @@
11651165
"engine/debug/index/drawFrame",
11661166
"engine/debug/index/drawPanel",
11671167
"engine/input/index/InputService",
1168-
"engine/render/index/renderByLayers",
1168+
"engine/rendering/index/renderByLayers",
11691169
"engine/scenes/index/Scene",
11701170
"engine/theme/index/Theme",
11711171
"engine/theme/index/ThemeTokens"
@@ -1199,7 +1199,7 @@
11991199
"engine/prefabs/index/createPickupPrefab",
12001200
"engine/prefabs/index/createPlayerPrefab",
12011201
"engine/prefabs/index/createProjectilePrefab",
1202-
"engine/render/index/renderSpriteReadyEntities",
1202+
"engine/rendering/index/renderSpriteReadyEntities",
12031203
"engine/scenes/index/Scene",
12041204
"engine/theme/index/Theme",
12051205
"engine/theme/index/ThemeTokens"
@@ -1267,8 +1267,8 @@
12671267
"engine/interaction/index/resolveInteraction",
12681268
"engine/prefabs/index/createEnemyPrefab",
12691269
"engine/prefabs/index/createPlayerPrefab",
1270-
"engine/render/index/renderByLayers",
1271-
"engine/render/index/renderSpriteReadyEntities",
1270+
"engine/rendering/index/renderByLayers",
1271+
"engine/rendering/index/renderSpriteReadyEntities",
12721272
"engine/scenes/index/Scene",
12731273
"engine/systems/index/spawnProjectile",
12741274
"engine/systems/index/updateProjectiles",
@@ -1301,7 +1301,7 @@
13011301
"engine/debug/index/drawFrame",
13021302
"engine/debug/index/drawPanel",
13031303
"engine/input/index/InputService",
1304-
"engine/render/index/renderSpriteReadyEntities",
1304+
"engine/rendering/index/renderSpriteReadyEntities",
13051305
"engine/scenes/index/Scene",
13061306
"engine/theme/index/Theme",
13071307
"engine/theme/index/ThemeTokens"
@@ -1465,7 +1465,7 @@
14651465
"engine/input/index/ActionInputService",
14661466
"engine/persistence/index/deserializeWorldState",
14671467
"engine/persistence/index/serializeWorldState",
1468-
"engine/render/index/renderSpriteReadyEntities",
1468+
"engine/rendering/index/renderSpriteReadyEntities",
14691469
"engine/scenes/index/Scene",
14701470
"engine/theme/index/Theme",
14711471
"engine/theme/index/ThemeTokens",
@@ -1509,7 +1509,7 @@
15091509
"engine/debug/index/drawPanel",
15101510
"engine/input/index/ActionInputMap",
15111511
"engine/input/index/ActionInputService",
1512-
"engine/render/index/renderSpriteReadyEntities",
1512+
"engine/rendering/index/renderSpriteReadyEntities",
15131513
"engine/scenes/index/Scene",
15141514
"engine/systems/index/moveRectWithTilemapCollision",
15151515
"engine/theme/index/Theme",
@@ -1555,7 +1555,7 @@
15551555
"engine/debug/index/drawPanel",
15561556
"engine/input/index/ActionInputMap",
15571557
"engine/input/index/ActionInputService",
1558-
"engine/render/index/renderSpriteReadyEntities",
1558+
"engine/rendering/index/renderSpriteReadyEntities",
15591559
"engine/scenes/index/Scene",
15601560
"engine/systems/index/moveRectWithTilemapCollision",
15611561
"engine/theme/index/Theme",
@@ -1601,7 +1601,7 @@
16011601
"engine/debug/index/drawPanel",
16021602
"engine/input/index/ActionInputMap",
16031603
"engine/input/index/ActionInputService",
1604-
"engine/render/index/renderSpriteReadyEntities",
1604+
"engine/rendering/index/renderSpriteReadyEntities",
16051605
"engine/scenes/index/Scene",
16061606
"engine/systems/index/stepArcadeBody",
16071607
"engine/theme/index/Theme",
@@ -1648,7 +1648,7 @@
16481648
"engine/debug/index/drawPanel",
16491649
"engine/input/index/ActionInputMap",
16501650
"engine/input/index/ActionInputService",
1651-
"engine/render/index/renderSpriteReadyEntities",
1651+
"engine/rendering/index/renderSpriteReadyEntities",
16521652
"engine/scenes/index/Scene",
16531653
"engine/systems/index/moveRectWithTilemapCollision",
16541654
"engine/systems/index/stepArcadeBody",
@@ -1696,7 +1696,7 @@
16961696
"engine/debug/index/drawPanel",
16971697
"engine/input/index/ActionInputMap",
16981698
"engine/input/index/ActionInputService",
1699-
"engine/render/index/renderSpriteReadyEntities",
1699+
"engine/rendering/index/renderSpriteReadyEntities",
17001700
"engine/scenes/index/Scene",
17011701
"engine/systems/index/moveRectWithTilemapCollision",
17021702
"engine/systems/index/stepArcadeBody",
@@ -1744,7 +1744,7 @@
17441744
"engine/debug/index/drawPanel",
17451745
"engine/input/index/ActionInputMap",
17461746
"engine/input/index/ActionInputService",
1747-
"engine/render/index/renderSpriteReadyEntities",
1747+
"engine/rendering/index/renderSpriteReadyEntities",
17481748
"engine/scenes/index/Scene",
17491749
"engine/systems/index/moveRectWithTilemapCollision",
17501750
"engine/systems/index/stepArcadeBody",
@@ -3340,7 +3340,7 @@
33403340
"engine/debug/index/drawPanel",
33413341
"engine/input/index/ActionInputMap",
33423342
"engine/input/index/ActionInputService",
3343-
"engine/render/index/ResolutionScaler",
3343+
"engine/rendering/index/ResolutionScaler",
33443344
"engine/scenes/index/Scene",
33453345
"engine/theme/index/Theme",
33463346
"engine/theme/index/ThemeTokens"

samples/metadata/samples.shared.boundaries.report.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@
374374
"boundaryStatus": "allowed-public"
375375
},
376376
{
377-
"specifier": "/src/engine/render/index.js",
377+
"specifier": "/src/engine/rendering/index.js",
378378
"importCount": 14,
379379
"importerExamples": [
380380
"phase-02/0213/SpriteRenderLayerScene.js",

samples/phase-02/0213/SpriteRenderLayerScene.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ SpriteRenderLayerScene.js
77
import { Scene } from '/src/engine/scenes/index.js';
88
import { Theme, ThemeTokens } from '/src/engine/theme/index.js';
99
import { drawFrame, drawPanel } from '/src/engine/debug/index.js';
10-
import { renderSpriteReadyEntities } from '/src/engine/render/index.js';
10+
import { renderSpriteReadyEntities } from '/src/engine/rendering/index.js';
1111

1212
const theme = new Theme(ThemeTokens);
1313

samples/phase-02/0214/AnimationSpriteBindingScene.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Theme, ThemeTokens } from '/src/engine/theme/index.js';
99
import { clamp } from '/src/engine/utils/index.js';
1010
import { drawFrame, drawPanel } from '/src/engine/debug/index.js';
1111
import { AnimationController } from '/src/engine/animation/index.js';
12-
import { renderSpriteReadyEntities } from '/src/engine/render/index.js';
12+
import { renderSpriteReadyEntities } from '/src/engine/rendering/index.js';
1313

1414
const theme = new Theme(ThemeTokens);
1515

samples/phase-02/0215/ZLayerOrderingScene.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ZLayerOrderingScene.js
77
import { Scene } from '/src/engine/scenes/index.js';
88
import { Theme, ThemeTokens } from '/src/engine/theme/index.js';
99
import { drawFrame, drawPanel } from '/src/engine/debug/index.js';
10-
import { renderByLayers } from '/src/engine/render/index.js';
10+
import { renderByLayers } from '/src/engine/rendering/index.js';
1111

1212
const theme = new Theme(ThemeTokens);
1313

0 commit comments

Comments
 (0)