Skip to content

Commit b27da08

Browse files
committed
docs: add new architecture, strategy, and recipe documents
- ai-testing-strategy.md: strategy-driven testing methodology for AI packs - dialogue-pack-candidate-plan.md: Dialogic candidate governance and promotion criteria - rpg-art-asset-sources.md: art/audio source tracking and import policy references - rpg-content-authoring.md: content authoring workflow for RPG scaffolds - rpg-playable-sample-recipe.md: automated Interaction sample and Experience route - ui-game-shell-recipe.md: shell candidate absorption route vs default productized path - README_EN.md: English mirror of main README
1 parent fae801d commit b27da08

7 files changed

Lines changed: 734 additions & 0 deletions

README_EN.md

Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
# godot-toolbox
2+
3+
![CI](https://github.com/codefromkarl/godot-toolbox/actions/workflows/ci.yml/badge.svg) ![License](https://img.shields.io/badge/license-MIT-blue) ![Godot](https://img.shields.io/badge/Godot-4.6%2B-478cbf) ![Packs](https://img.shields.io/badge/packs-24-orange) ![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen)
4+
5+
> AI-native Godot 4.6+ bootstrap control plane. 24 curated plugin packs, manifest-driven assembly, CI-verified contracts, optional RPG scaffolds.
6+
7+
[中文说明](README.md)
8+
9+
---
10+
11+
## Table of Contents
12+
13+
- [Quick Start](#quick-start)
14+
- [What It Does](#what-it-does)
15+
- [Pack Catalog](#pack-catalog)
16+
- [Architecture](#architecture)
17+
- [Interactive Deployment](#interactive-deployment)
18+
- [Verification](#verification)
19+
- [Maintenance](#maintenance)
20+
- [Contributing](#contributing)
21+
- [License](#license)
22+
23+
---
24+
25+
## Quick Start
26+
27+
### Interactive deployment (recommended for new users)
28+
29+
```bash
30+
git clone https://github.com/codefromkarl/godot-toolbox.git
31+
cd godot-toolbox
32+
33+
# Interactive wizard — browse packs by category
34+
./scripts/quickstart.sh /path/to/new-project
35+
```
36+
37+
### Manual pack assembly
38+
39+
```bash
40+
./scripts/bootstrap_toolbox_project.sh /path/to/new-project --packs=validation,debug
41+
```
42+
43+
Preview pack assembly without writing files:
44+
45+
```bash
46+
./scripts/bootstrap_toolbox_project.sh ../preview \
47+
--packs=flow-core,simulation-core,data-core,save-core,flow-test-kit \
48+
--dry-run-report
49+
```
50+
51+
RPG pack combination previews:
52+
53+
```bash
54+
# Inventory + data + save
55+
./scripts/bootstrap_toolbox_project.sh ../preview \
56+
--packs=inventory,data-core,save-core --dry-run-report
57+
58+
# Quest + events + save
59+
./scripts/bootstrap_toolbox_project.sh ../preview \
60+
--packs=quest,data-core,save-core,rules-events-core --dry-run-report
61+
62+
# Full RPG stack
63+
./scripts/bootstrap_toolbox_project.sh ../preview \
64+
--packs=rpg-core,rpg-battle-core,rpg-save-adapter,rpg-test-kit,flow-core,data-core,save-core,rules-events-core \
65+
--dry-run-report
66+
```
67+
68+
---
69+
70+
## What It Does
71+
72+
**Design Principles:**
73+
74+
- **Minimal by default** — only CI-friendly baseline capabilities are enabled
75+
- **Opt-in complexity** — gameplay, debug, and presentation plugins are optional packs, never forced into every project
76+
- **Vendored separation** — third-party addons are isolated from repo-owned scripts, tests, and docs
77+
- **Selection by value** — plugins are evaluated on automation value, reuse breadth, coupling, and maintenance cost, not feature count
78+
79+
**Key Features:**
80+
81+
- **Manifest-driven assembly**`packs.manifest.json` defines every pack's dependencies, autoloads, conflicts, and verification entry points
82+
- **Upstream version locking**`upstreams.lock.json` pins exact git refs for all vendored plugins
83+
- **Pre-integrated testing** — gdUnit4 + godot-gdscript-toolkit in the base template, CI-ready from day one
84+
- **CI pipeline** — Godot 4.6.2 headless import + gdUnit4 smoke on every push
85+
- **Architecture packs** — toolbox-owned autoload contracts for flow, data, save, rules, RPG, and more
86+
- **Verification suite** — layered scripts validate manifest contracts, bootstrap artifacts, and pack consistency
87+
88+
**What this repo is NOT:**
89+
90+
- Not an official Godot demo mirror
91+
- Not a single-game starter template
92+
- It is a **select → pin → assemble → verify → ship** control plane
93+
94+
---
95+
96+
## Pack Catalog
97+
98+
### Baseline Pack (always included)
99+
100+
| Pack | Plugins | Purpose |
101+
|------|---------|---------|
102+
| `base` | gdUnit4 6.1.2, godot-gdscript-toolkit 4.5.0 | Testing + linting baseline |
103+
104+
### Developer Tools (base only)
105+
106+
| Pack | Plugin | Version | When to Enable |
107+
|------|--------|---------|----------------|
108+
| `validation` | Godot Doctor | 2.1.2 | Scene/resource constraint CI validation |
109+
| `debug` | Signal Lens | 1.4.1 | Signal-heavy projects needing visual flow debugging |
110+
| `stateful` | Godot State Charts | 0.22.3 | Complex state machine architecture |
111+
| `juice` | Sparkle Lite | 1.0.0 | Game-feel and feedback authoring |
112+
| `ai-behavior` | Beehave | 2.9.2 | Behavior tree AI for NPCs/enemies |
113+
| `save-state-lite` | SaveState Lite | 1.2.0 | Advanced save tooling and browser (**conflicts: save-core**) |
114+
115+
### Input & Automation
116+
117+
| Pack | Plugin | Version | When to Enable |
118+
|------|--------|---------|----------------|
119+
| `input` | G.U.I.D.E | 0.12.0 | Cross-device input mapping and prompt icons |
120+
| `automation` | GodotE2E | 1.1.0 | Runtime UI/E2E testing via pytest bridge |
121+
122+
### Architecture Packs (Toolbox-owned)
123+
124+
| Pack | Autoload | Requires | Purpose |
125+
|------|----------|----------|---------|
126+
| `flow-core` | `FlowCore` | base | Game mode stack, flow requests, and result contracts |
127+
| `simulation-core` | `SimulationCore` | flow-core | Tick scheduler and system contracts for long-lived state |
128+
| `data-core` | `DataCore` | base | Data registry with stable ID contracts |
129+
| `save-core` | `SaveCore` | data-core | Versioned snapshots and atomic JSON writes |
130+
| `rules-events-core` | `RulesEventsCore` | base | Event, condition, and effect execution spine |
131+
| `ui-game-shell` || base | Menu, pause, modal, and loading shell primitives |
132+
| `flow-test-kit` || flow-core | Flow smoke fixtures and gdUnit4 test suites |
133+
| `ai-testing` | `AITestingCore` | automation | AI-driven test exploration and coverage tracking |
134+
135+
### Game Systems (Third-party Vendor)
136+
137+
| Pack | Plugin | Version | Requires | When to Enable |
138+
|------|--------|---------|----------|----------------|
139+
| `inventory` | GLoot | 3.0.1 | data-core, save-core | Inventory/equipment slot authoring |
140+
| `quest` | QuestSystem | 2.0.1.4 | data-core, save-core, rules-events-core | Resource-driven quest management |
141+
| `dialogue` | Dialogue Manager | 3.10.4 | data-core, save-core, rules-events-core | Dialogue graph authoring and playback |
142+
143+
### RPG Extensions (Toolbox-owned)
144+
145+
| Pack | Autoload | Requires | Purpose |
146+
|------|----------|----------|---------|
147+
| `rpg-core` | `RPGCore` | data-core, save-core | RPG character, party, wallet, and equipment state |
148+
| `rpg-battle-core` | `RPGBattleCore` | rpg-core, flow-core, rules-events-core | Deterministic turn-based battle contracts |
149+
| `rpg-save-adapter` | `RPGSaveAdapter` | rpg-core, save-core, rules-events-core | RPG state → save-core serialization |
150+
| `rpg-test-kit` || rpg-core, rpg-battle-core, rpg-save-adapter | Battle replay, event stream, and state dump evidence |
151+
| `rpg-art-demo` || base | First-party placeholder art/audio scaffold |
152+
153+
---
154+
155+
## Architecture
156+
157+
```mermaid
158+
graph TD
159+
BASE["base<br/>gdUnit4 + gdtoolkit"]
160+
161+
BASE --> VALID["validation<br/>Godot Doctor"]
162+
BASE --> DEBUG["debug<br/>Signal Lens"]
163+
BASE --> STATE["stateful<br/>State Charts"]
164+
BASE --> JUICE["juice<br/>Sparkle Lite"]
165+
BASE --> AUTO["automation<br/>GodotE2E"]
166+
BASE --> INPUT["input<br/>G.U.I.D.E"]
167+
BASE --> FLOW["flow-core<br/>FlowCore"]
168+
BASE --> DATA["data-core<br/>DataCore"]
169+
BASE --> RULES["rules-events-core<br/>RulesEventsCore"]
170+
BASE --> SHELL["ui-game-shell"]
171+
BASE --> ART["rpg-art-demo"]
172+
173+
FLOW --> SIM["simulation-core<br/>SimulationCore"]
174+
FLOW --> FTK["flow-test-kit"]
175+
DATA --> SAVE["save-core<br/>SaveCore"]
176+
AUTO --> AITEST["ai-testing<br/>AITestingCore"]
177+
178+
DATA --> RPGC["rpg-core<br/>RPGCore"]
179+
SAVE --> RPGC
180+
RPGC --> RPGB["rpg-battle-core<br/>RPGBattleCore"]
181+
FLOW --> RPGB
182+
RULES --> RPGB
183+
RPGC --> RPGSA["rpg-save-adapter<br/>RPGSaveAdapter"]
184+
SAVE --> RPGSA
185+
RULES --> RPGSA
186+
RPGC --> RPGTK["rpg-test-kit"]
187+
RPGB --> RPGTK
188+
RPGSA --> RPGTK
189+
190+
DATA --> INV["inventory<br/>GLoot"]
191+
SAVE --> INV
192+
DATA --> QUEST["quest<br/>QuestSystem"]
193+
SAVE --> QUEST
194+
RULES --> QUEST
195+
DATA --> DIALOG["dialogue<br/>Dialogue Manager"]
196+
SAVE --> DIALOG
197+
RULES --> DIALOG
198+
BASE --> BEH["ai-behavior<br/>Beehave"]
199+
BASE --> SSL["save-state-lite<br/>SaveState Lite"]
200+
201+
style BASE fill:#478cbf,color:#fff
202+
style RPGC fill:#c0392b,color:#fff
203+
style RPGB fill:#c0392b,color:#fff
204+
style RPGSA fill:#c0392b,color:#fff
205+
style RPGTK fill:#c0392b,color:#fff
206+
```
207+
208+
For the full expanded dependency graph with autoload contracts, see [docs/architecture.md](docs/architecture.md).
209+
210+
---
211+
212+
## Interactive Deployment
213+
214+
`scripts/quickstart.sh` provides an interactive deployment wizard with automatic dependency resolution and conflict detection.
215+
216+
### Interactive mode (default)
217+
218+
```bash
219+
./scripts/quickstart.sh /path/to/new-project
220+
```
221+
222+
The wizard will:
223+
224+
1. Display all available packs grouped by category
225+
2. Accept user selection (comma-separated pack IDs)
226+
3. Automatically resolve dependencies (BFS upward requires collection)
227+
4. Detect conflicts (e.g. save-state-lite vs save-core)
228+
5. Display final pack list + dependency summary
229+
6. Call `bootstrap_toolbox_project.sh` on confirmation
230+
231+
### Non-interactive mode (CI/automation)
232+
233+
```bash
234+
./scripts/quickstart.sh /path/to/new-project --packs=validation,debug --auto-deps
235+
```
236+
237+
`--auto-deps` enables automatic dependency resolution, then calls `bootstrap_toolbox_project.sh`.
238+
239+
---
240+
241+
## Verification
242+
243+
### Local verification chain
244+
245+
```bash
246+
bash ./scripts/verify_toolbox_layout.sh
247+
bash ./scripts/verify_game_architecture_packs.sh
248+
bash ./scripts/verify_rules_events_core_pack.sh
249+
bash ./scripts/verify_ui_game_shell_pack.sh
250+
bash ./scripts/verify_pack_matrix.sh --all
251+
bash ./scripts/verify_specialized_pack_candidates.sh
252+
bash ./scripts/verify_input_pack_poc.sh
253+
bash ./scripts/verify_bootstrap_flow.sh
254+
```
255+
256+
`verify_bootstrap_flow.sh` creates a temporary project, overlays default packs (`validation,debug,stateful,juice`), then runs:
257+
258+
1. Bootstrap the temporary project
259+
2. `godot --headless --editor --quit-after 1 --import`
260+
3. Generate and run project-local gdUnit4 smoke
261+
262+
CI runs the same pipeline. The current workflow uses official Linux Godot `4.6.2`. Locally, keep `4.6.x`. If Godot is not in `PATH`, set `GODOT_BIN=/path/to/godot`.
263+
264+
### Optional pack verification
265+
266+
```bash
267+
bash ./scripts/verify_automation_pack_poc.sh
268+
bash ./scripts/verify_dialogue_pack.sh
269+
```
270+
271+
---
272+
273+
## Maintenance
274+
275+
### Import a new upstream plugin
276+
277+
```bash
278+
./scripts/import_plugin_from_upstream.sh \
279+
--id=signal_lens \
280+
--repo=https://github.com/yannlemos/signal-lens \
281+
--target=packs/debug/godot/addons/signal_lens \
282+
--pack=debug \
283+
--version=1.4.1
284+
```
285+
286+
### Update a pinned upstream plugin
287+
288+
```bash
289+
# Preview update (dry-run)
290+
./scripts/update_plugin_from_upstream.sh --id=signal_lens --version=1.4.1 --dry-run
291+
292+
# Update automation pack upstream
293+
./scripts/update_plugin_from_upstream.sh --id=godot_e2e --dry-run
294+
295+
# Update candidate shell pack upstream
296+
./scripts/update_plugin_from_upstream.sh --id=maaacks_game_template --dry-run
297+
```
298+
299+
---
300+
301+
## Contributing
302+
303+
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide:
304+
305+
- **Pack proposals** — open an issue with the Pack Request template
306+
- **Commit convention** — Conventional Commits (`feat:`, `fix:`, `docs:`, `test:`, `chore:`)
307+
- **PR checklist** — manifest/lock consistency, verification scripts pass
308+
309+
---
310+
311+
## License
312+
313+
This project is licensed under the **MIT License** — see [LICENSE](LICENSE).
314+
315+
Third-party plugins vendored in `packs/*/godot/addons/` retain their original licenses.
316+
See [docs/rpg-vendor-license-notice.md](docs/rpg-vendor-license-notice.md) for the complete attribution summary.

0 commit comments

Comments
 (0)