Skip to content

Commit 92bb483

Browse files
author
DavidQ
committed
Bootstrap Level 18 & Phase 18 foundation structure and minimal wiring
1 parent 6c498a3 commit 92bb483

10 files changed

Lines changed: 165 additions & 7 deletions

docs/dev/CODEX_COMMANDS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
MODEL: GPT-5.3-codex
22
REASONING: high
3-
COMMAND: Initialize Level 18 structure based on roadmap, no implementation yet, package to <project folder>/tmp/PLAN_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.zip
3+
COMMAND: Create Phase 18 foundation structure and minimal wiring, package to <project folder>/tmp/BUILD_PR_LEVEL_18_2_PHASE18_FOUNDATION.zip

docs/dev/COMMIT_COMMENT.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Initialize Level 18 bootstrap plan
1+
Phase 18 foundation structure and minimal wiring
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
- [ ] plan file exists
2-
- [ ] no unintended changes
1+
- [ ] folders created
2+
- [ ] no runtime errors
3+
- [ ] index/registry loads

docs/pr/BUILD_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Create and finalize Level 18 bootstrap planning docs only. No code/runtime imple
1212

1313
## Required Outputs
1414
- finalized `docs/pr/PLAN_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.md`
15-
- this `docs/pr/BUILD_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.md`
15+
- finalized `docs/pr/BUILD_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.md`
1616

1717
## Functional Requirements
1818
1. Plan must map directly to roadmap section 18 objectives.
@@ -33,4 +33,4 @@ Create and finalize Level 18 bootstrap planning docs only. No code/runtime imple
3333

3434
## Packaging Rule
3535
Package only this PR's created/modified files into:
36-
`tmp/PLAN_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.zip`
36+
`tmp/BUILD_PR_LEVEL_18_1_NEXT_PHASE_BOOTSTRAP.zip`
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# BUILD_PR_LEVEL_18_2_PHASE18_FOUNDATION
2+
3+
## Purpose
4+
Create the minimal runnable Phase 18 foundation structure and wiring, with no feature logic.
5+
6+
## Source of Truth
7+
- `docs/pr/PLAN_PR_LEVEL_18_2_PHASE18_FOUNDATION.md`
8+
- `docs/dev/roadmaps/MASTER_ROADMAP_HIGH_LEVEL.md` (`## 18. Finalize engine`)
9+
10+
## Exact Build Target
11+
1. Add a new Phase 18 sample scaffold directory:
12+
- `samples/phase-18/1801/`
13+
2. Add minimal entry-point files for the scaffold:
14+
- `index.html`
15+
- `main.js`
16+
- one minimal scene class file
17+
3. Wire Phase 18 into the sample launcher index:
18+
- add one Phase 18 section and one link for sample `1801`
19+
4. Do not add feature implementation logic.
20+
21+
## Non-Goals
22+
- no engine-core changes
23+
- no gameplay systems
24+
- no roadmap status updates
25+
- no broad refactors
26+
27+
## Validation
28+
- sample `1801` files exist and import cleanly
29+
- `samples/index.html` contains the `phase-18/1801` link
30+
- no additional phase 18 feature samples beyond this scaffold
31+
32+
## Packaging Rule
33+
Package only this PR's created/modified files into:
34+
`tmp/BUILD_PR_LEVEL_18_2_PHASE18_FOUNDATION.zip`
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# PLAN_PR_LEVEL_18_2_PHASE18_FOUNDATION
2+
3+
Purpose:
4+
Establish Phase 18 foundation (structures, conventions, entry points).
5+
6+
Scope:
7+
- define Phase 18 modules
8+
- baseline folders
9+
- integration points

samples/index.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,14 @@ <h2>Phase 17 - Rendering Technique Expansion</h2>
509509
<a class="live" href="./phase-17/1706/index.html" title="Minecraft-style filled voxel terrain blocks with visible height variation." data-tags="camera3d, minecraft-style, voxel, terrain, filled-render, scene, themetokens" data-primary="minecraft-voxel-terrain">Sample 1706 - Minecraft Voxel Terrain</a>
510510
<a class="live" href="./phase-17/1707/index.html" title="Minecraft-style voxel chunk-window streaming around a movable camera anchor." data-tags="camera3d, minecraft-style, voxel, chunk-streaming, filled-render, scene, themetokens" data-primary="minecraft-chunk-streaming">Sample 1707 - Minecraft Chunk Streaming</a>
511511
</div>
512-
</section>
512+
</section>
513+
<section>
514+
<h2>Phase 18 - Engine Finalization Bootstrap</h2>
515+
<p>Initial scaffold and wiring entry points for Level 18 finalization work, kept intentionally minimal.</p>
516+
<div class="grid">
517+
<a class="live" href="./phase-18/1801/index.html" title="Bootstrap sample that establishes the Phase 18 folder, entry points, and launcher wiring without feature logic." data-tags="phase-bootstrap, foundation, scene, themetokens" data-primary="phase18-foundation">Sample 1801 - Phase 18 Foundation</a>
518+
</div>
519+
</section>
513520
</div>
514521
<script>
515522
(function () {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
Toolbox Aid
3+
David Quesenberry
4+
04/16/2026
5+
Phase18FoundationScene.js
6+
*/
7+
import { Scene } from '/src/engine/scene/index.js';
8+
import { Theme, ThemeTokens } from '/src/engine/theme/index.js';
9+
import { drawFrame, drawPanel } from '/src/engine/debug/index.js';
10+
11+
const theme = new Theme(ThemeTokens);
12+
13+
export default class Phase18FoundationScene extends Scene {
14+
constructor() {
15+
super();
16+
this.elapsed = 0;
17+
}
18+
19+
update(dtSeconds) {
20+
this.elapsed += dtSeconds;
21+
}
22+
23+
render(renderer) {
24+
drawFrame(renderer, theme, [
25+
'Sample 1801 - Phase 18 Foundation',
26+
'Minimal Phase 18 structure bootstrap and launcher wiring.',
27+
'No feature implementation in this scaffold.',
28+
]);
29+
30+
renderer.drawRect(120, 212, 720, 200, '#0f172a');
31+
renderer.strokeRect(120, 212, 720, 200, '#d8d5ff', 2);
32+
33+
const pulse = 0.5 + Math.sin(this.elapsed * 2.1) * 0.5;
34+
const alpha = (0.2 + pulse * 0.6).toFixed(2);
35+
renderer.drawRect(150, 302, 24, 24, `rgba(56, 189, 248, ${alpha})`);
36+
renderer.drawText('Foundation scaffold active', 190, 318, {
37+
color: '#bae6fd',
38+
font: '16px monospace',
39+
});
40+
41+
drawPanel(renderer, 620, 34, 300, 160, 'Phase 18 Bootstrap', [
42+
'Status: initialized',
43+
'Folder: samples/phase-18',
44+
'Entry sample: 1801',
45+
'Next: scoped Level 18 slices',
46+
]);
47+
}
48+
}

samples/phase-18/1801/index.html

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<!--
2+
Toolbox Aid
3+
David Quesenberry
4+
04/16/2026
5+
index.html
6+
-->
7+
<!DOCTYPE html>
8+
<html lang="en">
9+
<head>
10+
<meta charset="UTF-8" />
11+
<title>Sample 1801 - Phase 18 Foundation</title>
12+
<link rel="stylesheet" href="../../../src/engine/ui/baseLayout.css" />
13+
</head>
14+
<body>
15+
<main>
16+
<h1>Sample 1801 - Phase 18 Foundation</h1>
17+
<p>Bootstrap scaffold for Phase 18 with minimal wiring and no feature implementation.</p>
18+
<canvas id="game" width="960" height="540"></canvas>
19+
20+
<section>
21+
<h3>Engine Classes Used</h3>
22+
<ul>
23+
<li>Engine</li>
24+
<li>Scene</li>
25+
</ul>
26+
</section>
27+
</main>
28+
29+
<script type="module" src="/samples/shared/sampleDetailPageEnhancement.js"></script>
30+
<script type="module" src="./main.js"></script>
31+
</body>
32+
</html>

samples/phase-18/1801/main.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
Toolbox Aid
3+
David Quesenberry
4+
04/16/2026
5+
main.js
6+
*/
7+
import Engine from '/src/engine/core/Engine.js';
8+
import { InputService } from '/src/engine/input/index.js';
9+
import { Theme, ThemeTokens } from '/src/engine/theme/index.js';
10+
import Phase18FoundationScene from './Phase18FoundationScene.js';
11+
12+
const theme = new Theme(ThemeTokens);
13+
theme.applyDocumentTheme();
14+
15+
const canvas = document.getElementById('game');
16+
const input = new InputService();
17+
18+
const engine = new Engine({
19+
canvas,
20+
width: 960,
21+
height: 540,
22+
fixedStepMs: 1000 / 60,
23+
input,
24+
});
25+
26+
engine.setScene(new Phase18FoundationScene());
27+
engine.start();

0 commit comments

Comments
 (0)