Files
Laby/README.md
T
Lila-Kuh ea2a2f2cbf
Aegis CI / audit (push) Failing after 1m7s
Aegis CI / selfplay (push) Skipped
Aegis CI / perf (push) Failing after 3s
Aegis CI / report (push) Failing after 2s
Initial project version
2026-08-29 01:45:19 +02:00

188 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Aegis Labyrinth Test- & Audit-Suite
> Automatisierte **Test-, Audit- und Performance-Suite** für das Single-File-Browser-Game `Aegis-Labyrinth.html`.
> Dieses Repo enthält **nicht** das Spiel selbst es enthält die Werkzeuge, um die Game-Source-Datei im vollen Umfang zu testen, zu auditieren und als Audit-Bericht auszuwerten.
**Ziel:** Jede Änderung an `Aegis-Labyrinth.html` automatisch validieren Funktionalität (3 Audits), Regressionsschutz (Self-Play), Performance (FPS/Heap) und einen maschinenlesbaren + HTML-Bericht erzeugen.
![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)
> 📜 **Version & Historie:** Laufende Version + Changelog in [`CHANGELOG.md`](./CHANGELOG.md)
> (aktuell: **Game `1.0.2`**, **Suite `1.0.0`**).
## ⚠️ Voraussetzung: Game-Datei manuell legen
Die zu testende Datei **`Aegis-Labyrinth.html`** gehört **nicht** zu diesem Repo (wird nicht versioniert).
Lege/kopiere sie **vor** dem ersten Testlauf in die Projekt-Root:
```
Laby/
├── Aegis-Labyrinth.html ← ⚠️ MANUELL HINZUFÜGEN (Source of truth, extern)
└── ...
```
Alle Test-Skripte erwarten die Datei an genau diesem Ort (Projekt-Root).
Fehlt sie, bricht `audit.mjs` mit `❌ Aegis-Labyrinth.html nicht gefunden!` ab.
> Tipp: Damit die Datei nicht versehentlich committet wird, `Aegis-Labyrinth.html` in die `.gitignore` aufnehmen.
---
## Was wird getestet?
| Suite | Skript | Was es prüft | Ausgabe |
|---|---|---|---|
| **Audit** | `tests/audit.mjs` | Die 3 eingebauten Audits: `runSelfAudit`, `runExtensionAudit`, `runRedesignAudit` + JS-Page-Errors + Assertions | `audit-result.json` |
| **Self-Play** | `tests/selfplay.mjs` | Deterministischer Bot spielt Level 0 durch → Regressionsschutz & Balance | `selfplay-results.json` |
| **Performance** | `tests/perf-test.mjs` | FPS unter Last (schweres Level + viele Türme) + Heap | `perf-result.json` |
| **Report** | `tests/report.mjs` | Fügt alle `*-result.json` zu einem HTML-Report zusammen | `report.html` |
---
## Setup
```bash
# 1. Dependencies (Playwright + Chromium)
npm install
npx playwright install chromium
# 2. Game-Datei in die Projekt-Root legen
# → Aegis-Labyrinth.html manuell kopieren (siehe oben)
```
> `node >= 18` wird empfohlen (Top-Level-`await` in den `.mjs`-Skripten).
---
## Quick-Start / Ausführung
Jedes Skript ist auch als npm-Script verfügbar:
```bash
npm run audit # node tests/audit.mjs → audit-result.json
npm run selfplay # node tests/selfplay.mjs [n] → selfplay-results.json (Default 10 Episoden)
npm run perf # node tests/perf-test.mjs [ms] [towers] → perf-result.json (Default 15000ms / 50 Türme)
npm run report # node tests/report.mjs → report.html
# Kompletter Lauf (Audit + Self-Play + Perf)
npm test
```
Direkt aufrufen (nützlich für CI / Parameter):
```bash
node tests/selfplay.mjs 50 # 50 Episoden
node tests/perf-test.mjs 30000 80 # 30 s messen, 80 Türme
```
### Exit-Code-Vertrag
| Skript | `exit 0` | `exit ≠ 0` |
|---|---|---|
| `audit.mjs` | alle Assertions grün, keine Page-Errors | ≥ 1 Fehler (Assertion / Page-Error) → `1`, Crash → `2` |
| `perf-test.mjs` | FPS ≥ Zielwert (55) | FPS < Zielwert → `1` |
| `selfplay.mjs` | (liefert immer 0) | |
| `report.mjs` | (liefert immer 0) | |
---
## Die getestete Debug-API
Die Suite hängt vollständig an der **öffentlichen Debug-API** des Games (`window.__AEGIS_DEBUG__`) plus frei im Global Scope liegenden Funktionen. Details: [`docs/01_Debug_API.md`](./docs/01_Debug_API.md).
```js
// State lesen
window.__AEGIS_DEBUG__.getState()
// Level / Credits / Wave
window.__AEGIS_DEBUG__.selectLevel(0)
window.__AEGIS_DEBUG__.setCredits(999999)
window.__AEGIS_DEBUG__.startWave()
// Die 3 Audits
window.__AEGIS_DEBUG__.runSelfAudit()
window.__AEGIS_DEBUG__.runExtensionAudit()
window.__AEGIS_DEBUG__.runRedesignAudit()
```
> **Wichtig (Playwright):** `const`/`let` im Global Scope (`TOWER_TYPES`, `Game`, `placeTower`, `buySkill`, `simulate`, …) liegen **nicht** auf `window`. In `page.evaluate()` müssen sie als **bare Identifier** referenziert werden.
---
## Projektstruktur
```
Laby/
├── Aegis-Labyrinth.html # ⚠️ Game-Source MANUELL HINZUFÜGEN (nicht versioniert)
├── package.json # npm-Scripts (audit, selfplay, perf, report, test, setup)
├── package-lock.json
├── .gitignore
├── LICENSE # GNU GPL v3
├── README.md # diese Datei
├── CHANGELOG.md # Version-Historie (Game + Suite) & Änderungs-Log
├── tests/
│ ├── audit.mjs # Playwright-Audit-Suite (3 Audits + Assertions)
│ ├── selfplay.mjs # Self-Play-Bot (deterministisch, Level 0)
│ ├── perf-test.mjs # FPS/Heap-Messung unter Last
│ └── report.mjs # HTML-Report-Generator (report.html)
└── docs/
├── 01_Debug_API.md # __AEGIS_DEBUG__-API & In-Game-Console (Test-Orakel)
├── 02_Audits.md # Die 3 Audits im Detail + Assertions + Exit-Codes
├── 03_Automatisierung_CI.md # Playwright-Automatisierung, Self-Play, Perf, CI
├── 04_Resultate_Report.md # Ausgabe-Dateien & report.html (Schema-Referenz)
├── 05_Tasks_Backlog.md # Implementierte Tasks (Changelog) & Backlog
└── 06_Refactoring_Game.md # (Advisory) Refactoring-/Performance-Empfehlungen für die Game-Datei
```
---
## Erzeugte Artefakte (werden NICHT committet)
| Datei | Von | Beschreibung |
|---|---|---|
| `audit-result.json` | `audit.mjs` | Raw-Audit-Reports + Assertions + Page-Errors + Summary |
| `selfplay-results.json` | `selfplay.mjs` | Episoden-Log + Win-Rate + Aggregates |
| `perf-result.json` | `perf-test.mjs` | FPS, Heap, Setup-Metadaten |
| `report.html` | `report.mjs` | Zusammengefasster, menschlich lesbarer CI-Report |
| `audit-final.png` | `audit.mjs` | Finaler Screenshot des Headless-Browsers |
Schema-Details: [`docs/04_Resultate_Report.md`](./docs/04_Resultate_Report.md).
---
## CI / Automatisierung
Empfohlene Stufen (Details in [`docs/03_Automatisierung_CI.md`](./docs/03_Automatisierung_CI.md)):
| Stufe | Inhalt | Wann |
|---|---|---|
| **Pre-Commit / Push** | `npm run audit` (schnell) | bei jedem Commit / PR |
| **Nightly** | Audit + `selfplay.mjs 50` + `perf-test.mjs` | zeitplangetrieben |
| **Release** | Audit + `selfplay.mjs 500` + Perf + Report-Artifact | Tagging |
> ⚠️ In CI muss die `Aegis-Labyrinth.html` als **Secret/Artifact** bereitgestellt werden, da sie nicht im Repo liegt.
---
## Dokumentation
| Datei | Inhalt |
|---|---|
| [`01_Debug_API.md`](./docs/01_Debug_API.md) | Komplette `__AEGIS_DEBUG__`-API + In-Game-Debug-Console |
| [`02_Audits.md`](./docs/02_Audits.md) | Was `self`/`extension`/`redesign` prüfen, Assertions, Exit-Codes |
| [`03_Automatisierung_CI.md`](./docs/03_Automatisierung_CI.md) | Playwright-Aufruf, Self-Play-Konzept, Perf, CI-Workflows |
| [`04_Resultate_Report.md`](./docs/04_Resultate_Report.md) | JSON-Schemata + `report.html`-Aufbau |
| [`05_Tasks_Backlog.md`](./docs/05_Tasks_Backlog.md) | Abgeschlossene Tasks (Changelog) + offenes Backlog |
| [`06_Refactoring_Game.md`](./docs/06_Refactoring_Game.md) | Performance-/Refactoring-Empfehlungen für `Aegis-Labyrinth.html` |
| [`CHANGELOG.md`](./CHANGELOG.md) | Laufende Version + Version-Historie & Änderungs-Log (Game + Suite) |
---
## Lizenz
Dieses Projekt (die Test- & Audit-Suite) ist unter **GNU General Public License v3.0** (GPL-3.0) lizenziert.
Die vollständige Lizenz finden Sie in der Datei [`LICENSE`](./LICENSE).
> ⚠️ Die getestete Game-Datei `Aegis-Labyrinth.html` ist **nicht** Teil dieses Repos und unterliegt deren eigener Lizenzierung.
> Der GPL-3.0-Schutz erstreckt sich auf alle Dateien in diesem Repository (Tests, Docs, Konfiguration).