Skip to content

Commit 8959043

Browse files
author
DavidQ
committed
Phase 08.09 — Wave 2 normalization
1 parent 6596628 commit 8959043

30 files changed

Lines changed: 610 additions & 71 deletions

docs/dev/CODEX_COMMANDS.md

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
MODEL: GPT-5.4
22
REASONING: high
33

4-
COMMAND GOAL:
5-
Create BUILD_PR_LEVEL_08_08_REPO_WIDE_GAME_NORMALIZATION_WAVE_1 as a docs-first, small-scope
6-
implementation bundle for the first repo-wide normalization wave.
4+
Normalize Wave 2 games:
5+
Orbit, MultiBallChaos, PaddleIntercept, Thruster, SpaceDuel, SolarSystem
76

8-
CONSTRAINTS:
9-
- One PR purpose only
10-
- Smallest scoped valid change
11-
- No engine modifications
12-
- No launch/bootstrap work
13-
- No status inflation
14-
- Preserve existing compliant games: Asteroids, Puckman, SpaceInvaders
15-
- Normalize only Wave 1 targets:
16-
Breakout, Pong, Bouncing-ball, ProjectileLab, Gravity, GravityWell
7+
Same constraints as Wave 1.
8+
Return ZIP to <project folder>/tmp/

docs/dev/COMMIT_COMMENT.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
build(games): normalize wave-1 repo-wide game boundaries (breakout/pong/bouncing-ball/projectilelab/gravity/gravitywell)
1+
build(games): normalize wave-2 repo-wide game boundaries (orbit/multiballchaos/paddleintercept/thruster/spaceduel/solarsystem)
Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
1-
BUILD_PR_LEVEL_08_08_REPO_WIDE_GAME_NORMALIZATION_WAVE_1
1+
Wave 2 Change Summary
22

33
What changed
4-
- Added wave-1 rules modules and flow files for six target games only.
5-
- Converted each target from rules-placeholder-only to real rules JS + required flow file presence.
4+
- Added real rules modules and required flow files for six Wave 2 targets.
5+
- Removed placeholder-only rules condition for Wave 2 targets by adding rules/gameFlowRules.js.
66

7-
Wave 1 targets normalized
8-
- Breakout
9-
- Pong
10-
- Bouncing-ball
11-
- ProjectileLab
12-
- Gravity
13-
- GravityWell
7+
Wave 2 targets normalized
8+
- Orbit
9+
- MultiBallChaos
10+
- PaddleIntercept
11+
- Thruster
12+
- SpaceDuel
13+
- SolarSystem
1414

15-
What was intentionally not changed
15+
What did not change
1616
- No engine files
17-
- No launch/bootstrap wiring
18-
- No behavior standardization beyond file presence + rules source surface
19-
- No status inflation for repo-wide completion lines
20-
21-
Net effect
22-
- First repo-wide normalization wave completed at minimal structural boundary scope.
23-
- Remaining non-wave targets still require future waves.
17+
- No launcher/bootstrap work
18+
- No status inflation edits
19+
- Existing compliant games (Asteroids, Puckman, SpaceInvaders) preserved

docs/dev/reports/file_tree.txt

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,33 @@
1-
Wave 1 Normalization Tree
1+
Wave 2 Normalization Tree
22

33
games/
4-
Breakout/
4+
Orbit/
55
rules/gameFlowRules.js
66
flow/attract.js
77
flow/intro.js
88
flow/highscore.js
9-
Pong/
9+
MultiBallChaos/
1010
rules/gameFlowRules.js
1111
flow/attract.js
1212
flow/intro.js
1313
flow/highscore.js
14-
Bouncing-ball/
14+
PaddleIntercept/
1515
rules/gameFlowRules.js
1616
flow/attract.js
1717
flow/intro.js
1818
flow/highscore.js
19-
ProjectileLab/
19+
Thruster/
2020
rules/gameFlowRules.js
2121
flow/attract.js
2222
flow/intro.js
2323
flow/highscore.js
24-
Gravity/
24+
SpaceDuel/
2525
rules/gameFlowRules.js
2626
flow/attract.js
2727
flow/intro.js
2828
flow/highscore.js
29-
GravityWell/
29+
SolarSystem/
3030
rules/gameFlowRules.js
3131
flow/attract.js
3232
flow/intro.js
3333
flow/highscore.js
34-
35-
docs/
36-
pr/BUILD_PR_LEVEL_08_08_REPO_WIDE_GAME_NORMALIZATION_WAVE_1.md
37-
dev/codex_commands.md
38-
dev/commit_comment.txt
39-
dev/reports/change_summary.txt
40-
dev/reports/validation_checklist.txt
41-
dev/reports/file_tree.txt
Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,27 @@
1-
PR: BUILD_PR_LEVEL_08_08_REPO_WIDE_GAME_NORMALIZATION_WAVE_1
2-
3-
Validation checklist
1+
Wave 2 Validation Checklist
42

53
Scope guard
6-
- [x] Only Wave 1 targets changed: Breakout, Pong, Bouncing-ball, ProjectileLab, Gravity, GravityWell
7-
- [x] Existing compliant games preserved (Asteroids, Puckman, SpaceInvaders untouched)
8-
- [x] No engine files modified
9-
- [x] No launch/bootstrap normalization work performed
4+
- [x] Wave 2 targets only
5+
- [x] No engine modifications
6+
- [x] No launch/bootstrap normalization
7+
- [x] Existing compliant games preserved
108

11-
Per-target contract
12-
For each Wave 1 game:
13-
1. required dirs exist
14-
2. real rules JS exists at rules/gameFlowRules.js
15-
3. flow/attract.js exists
16-
4. flow/intro.js exists
17-
5. flow/highscore.js exists
9+
Per-target checks
10+
For each target game:
11+
- required dirs present
12+
- rules/gameFlowRules.js present
13+
- flow/attract.js present
14+
- flow/intro.js present
15+
- flow/highscore.js present
1816

1917
Results
20-
- [x] Breakout
21-
- [x] Pong
22-
- [x] Bouncing-ball
23-
- [x] ProjectileLab
24-
- [x] Gravity
25-
- [x] GravityWell
18+
- [x] Orbit
19+
- [x] MultiBallChaos
20+
- [x] PaddleIntercept
21+
- [x] Thruster
22+
- [x] SpaceDuel
23+
- [x] SolarSystem
2624

2725
Command evidence
28-
- node --check run on all 24 new files (6 rules + 18 flow): PASS
29-
- structural presence check for all 6 targets: PASS
30-
31-
Status rule
32-
- [x] No Section 8 repo-wide [x] inflation performed in this PR
26+
- node --check on all 24 Wave 2 files: PASS
27+
- per-target structural checks: PASS
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# BUILD_PR — LEVEL 08.09 REPO-WIDE GAME NORMALIZATION WAVE 2
2+
3+
## Purpose
4+
Continue Option A by normalizing the next set of non-compliant games.
5+
6+
## Wave 2 target set
7+
- Orbit
8+
- MultiBallChaos
9+
- PaddleIntercept
10+
- Thruster
11+
- SpaceDuel
12+
- SolarSystem
13+
14+
## Required structure
15+
Same as Wave 1.
16+
17+
## Acceptance criteria
18+
Same as Wave 1.
19+
20+
## Scope
21+
Docs-only, Wave 2 only.
22+
23+
## Out of scope
24+
No engine, no launcher, no cross-wave changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {
2+
MULTI_BALL_CHAOS_FLOW_IDS,
3+
MULTI_BALL_CHAOS_FLOW_LABELS,
4+
MULTI_BALL_CHAOS_GAME_OVER_RETURN_MODE,
5+
MULTI_BALL_CHAOS_GAME_OVER_RETURN_RESET_IDLE,
6+
MULTI_BALL_CHAOS_GAME_OVER_RETURN_STATUS,
7+
createMULTIBALLCHAOSFlowDescriptor
8+
} from "../rules/gameFlowRules.js";
9+
10+
export const MULTI_BALL_CHAOS_ATTRACT_FLOW_NEXT_ID = MULTI_BALL_CHAOS_FLOW_IDS.intro;
11+
12+
export const attractFlow = createMULTIBALLCHAOSFlowDescriptor(MULTI_BALL_CHAOS_FLOW_IDS.attract, {
13+
label: MULTI_BALL_CHAOS_FLOW_LABELS.attract,
14+
nextFlowId: MULTI_BALL_CHAOS_ATTRACT_FLOW_NEXT_ID,
15+
autoAdvanceSeconds: null,
16+
statusText: MULTI_BALL_CHAOS_GAME_OVER_RETURN_STATUS,
17+
returnMode: MULTI_BALL_CHAOS_GAME_OVER_RETURN_MODE,
18+
resetIdleOnReturn: MULTI_BALL_CHAOS_GAME_OVER_RETURN_RESET_IDLE
19+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {
2+
MULTI_BALL_CHAOS_FLOW_IDS,
3+
MULTI_BALL_CHAOS_FLOW_LABELS,
4+
MULTI_BALL_CHAOS_HIGHSCORE_AUTO_EXIT_SECONDS,
5+
MULTI_BALL_CHAOS_HIGHSCORE_STATUS,
6+
createMULTIBALLCHAOSFlowDescriptor
7+
} from "../rules/gameFlowRules.js";
8+
9+
export const MULTI_BALL_CHAOS_HIGHSCORE_FLOW_NEXT_ID = MULTI_BALL_CHAOS_FLOW_IDS.attract;
10+
11+
export const highscoreFlow = createMULTIBALLCHAOSFlowDescriptor(MULTI_BALL_CHAOS_FLOW_IDS.highscore, {
12+
label: MULTI_BALL_CHAOS_FLOW_LABELS.highscore,
13+
nextFlowId: MULTI_BALL_CHAOS_HIGHSCORE_FLOW_NEXT_ID,
14+
autoAdvanceSeconds: MULTI_BALL_CHAOS_HIGHSCORE_AUTO_EXIT_SECONDS,
15+
statusText: MULTI_BALL_CHAOS_HIGHSCORE_STATUS
16+
});

games/MultiBallChaos/flow/intro.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import {
2+
MULTI_BALL_CHAOS_FLOW_IDS,
3+
MULTI_BALL_CHAOS_FLOW_LABELS,
4+
MULTI_BALL_CHAOS_GAME_OVER_AUTO_EXIT_SECONDS,
5+
MULTI_BALL_CHAOS_GAME_OVER_RETURN_MODE,
6+
MULTI_BALL_CHAOS_GAME_OVER_RETURN_RESET_IDLE,
7+
MULTI_BALL_CHAOS_GAME_OVER_RETURN_STATUS,
8+
createMULTIBALLCHAOSFlowDescriptor
9+
} from "../rules/gameFlowRules.js";
10+
11+
export const MULTI_BALL_CHAOS_INTRO_FLOW_NEXT_ID = MULTI_BALL_CHAOS_FLOW_IDS.highscore;
12+
13+
export const introFlow = createMULTIBALLCHAOSFlowDescriptor(MULTI_BALL_CHAOS_FLOW_IDS.intro, {
14+
label: MULTI_BALL_CHAOS_FLOW_LABELS.intro,
15+
nextFlowId: MULTI_BALL_CHAOS_INTRO_FLOW_NEXT_ID,
16+
autoAdvanceSeconds: MULTI_BALL_CHAOS_GAME_OVER_AUTO_EXIT_SECONDS,
17+
statusText: MULTI_BALL_CHAOS_GAME_OVER_RETURN_STATUS,
18+
returnMode: MULTI_BALL_CHAOS_GAME_OVER_RETURN_MODE,
19+
resetIdleOnReturn: MULTI_BALL_CHAOS_GAME_OVER_RETURN_RESET_IDLE
20+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
export const MULTI_BALL_CHAOS_FLOW_CONTRACT_VERSION = "1";
2+
3+
export const MULTI_BALL_CHAOS_FLOW_IDS = Object.freeze({
4+
attract: "attract",
5+
intro: "intro",
6+
highscore: "highscore"
7+
});
8+
9+
export const MULTI_BALL_CHAOS_FLOW_LABELS = Object.freeze({
10+
attract: "Attract",
11+
intro: "Intro",
12+
highscore: "Highscore"
13+
});
14+
15+
export const MULTI_BALL_CHAOS_GAME_OVER_AUTO_EXIT_SECONDS = 30;
16+
export const MULTI_BALL_CHAOS_GAME_OVER_RETURN_MODE = "menu";
17+
export const MULTI_BALL_CHAOS_GAME_OVER_RETURN_STATUS = "Press 1 for one player or 2 for two players.";
18+
export const MULTI_BALL_CHAOS_GAME_OVER_RETURN_RESET_IDLE = true;
19+
20+
export const MULTI_BALL_CHAOS_HIGHSCORE_AUTO_EXIT_SECONDS = 12;
21+
export const MULTI_BALL_CHAOS_HIGHSCORE_STATUS = "Multi Ball Chaos high scores";
22+
23+
export function createMULTIBALLCHAOSFlowDescriptor(id, options = {}) {
24+
return Object.freeze({
25+
id,
26+
label: options.label || id,
27+
contractVersion: MULTI_BALL_CHAOS_FLOW_CONTRACT_VERSION,
28+
nextFlowId: options.nextFlowId || MULTI_BALL_CHAOS_FLOW_IDS.attract,
29+
autoAdvanceSeconds: options.autoAdvanceSeconds ?? null,
30+
statusText: options.statusText || "",
31+
returnMode: options.returnMode || MULTI_BALL_CHAOS_GAME_OVER_RETURN_MODE,
32+
resetIdleOnReturn: options.resetIdleOnReturn ?? MULTI_BALL_CHAOS_GAME_OVER_RETURN_RESET_IDLE,
33+
debugPluginFactory: options.debugPluginFactory || null
34+
});
35+
}

0 commit comments

Comments
 (0)