Initial project version
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

This commit is contained in:
2026-08-29 01:45:19 +02:00
commit ea2a2f2cbf
21 changed files with 2830 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
---
name: Bug Report
about: Ein Fehler oder ein unerwartetes Verhalten in der Test-/Audit-Suite.
title: '[Bug] '
labels: ['bug', 'needs triage']
---
## Beschreibung
Beschreibe knapp, was fehlerhaft ist und was du stattdessen **erwartet** hättest.
**Fehlermeldung / Exit-Code (falls vorhanden):**
```text
```
## Reproduktion
Wie kann der Fehler reproduziert werden? Bitte als schrittweise Anleitung:
1. Gehe zu …
2. Führe aus `npm run …`
3. Siehe Fehler …
**Betroffenes Skript:**
- [ ] `tests/audit.mjs`
- [ ] `tests/selfplay.mjs`
- [ ] `tests/perf-test.mjs`
- [ ] `tests/report.mjs`
- [ ] CI-Workflow (`.gitea/workflows/aegis.yml`)
- [ ] Sonstiges: …
## Erwartetes vs. tatsächliches Verhalten
| | Verhalten |
|---|---|
| **Erwartet** | … |
| **Tatsächlich** | … |
## Erzeugte Artefakte (falls vorhanden)
Füge relevante Ausschnitte bei (z. B. `audit-result.json`, `perf-result.json`, `selfplay-results.json`):
```json
```
## Umgebung
| Feld | Wert |
|---|---|
| OS | |
| Node.js-Version | |
| Playwright / Chromium | |
| Game-`Aegis-Labyrinth.html`-Version | |
| Suite-Version | |
## Zusätzliche Hinweise
Screenshots, Logs oder weitere Kontext-Informationen.
+11
View File
@@ -0,0 +1,11 @@
blank_issues_enabled: true
contact_links:
- name: Dokumentation (in-Repo)
url: https://git.spaeth.biz/Lila-Kuh/Laby#dokumentation
about: API, Audits, CI und Ausgabe-Formate sind in docs/ dokumentiert.
- name: Changelog & Versionen
url: https://git.spaeth.biz/Lila-Kuh/Laby/blob/main/CHANGELOG.md
about: Laufende Version + Historie (Game + Suite).
- name: Frage / allgemeine Hilfe
url: https://git.spaeth.biz/Lila-Kuh/Laby/issues/new?template=bug_report.md
about: Falls du dir unsicher bist, welcher Template-Typ passt.
+38
View File
@@ -0,0 +1,38 @@
---
name: Feature Request
about: Ein Vorschlag für eine neue Funktion, Erweiterung oder Verbesserung.
title: '[Feat] '
labels: ['enhancement', 'needs triage']
---
## Kurzzusammenfassung
Worum geht es in einem Satz?
## Motivation
Warum ist diese Funktion / Erweiterung wichtig? Welchen konkreten Nutzen bringt sie?
- **Problem / Ziel:** …
- **Nutzen für das Projekt:** …
## Vorschlag (konkret)
Beschreibe den gewünschten Ablauf oder die gewünschte Implementierung. Je konkreter, desto besser.
- Betroffene Skripte / Bereiche:
- [ ] `tests/audit.mjs`
- [ ] `tests/selfplay.mjs`
- [ ] `tests/perf-test.mjs`
- [ ] `tests/report.mjs`
- [ ] CI-Workflow (`.gitea/workflows/aegis.yml`)
- [ ] Dokumentation (`docs/`)
- [ ] Sonstiges: …
## Alternativen (falls vorhanden)
Welche anderen Ansätze hast du schon in Betracht gezogen oder kennst du?
## Zusätzliche Hinweise
Beispiele, Links, Mockups oder verwandte Issues.
+49
View File
@@ -0,0 +1,49 @@
---
name: Performance Issue
about: Ein Performance-Problem (FPS, Heap, Frame-Timing) im getesteten Game oder in der Suite.
title: '[Perf] '
labels: ['performance', 'needs triage']
---
## Zusammenfassung
Kurz: Was ist langsam / wo genau?
## Messwerte
| Metrik | Wert | Ziel |
|---|---|---|
| FPS (Ø) | | ≥ 55 |
| Heap (used) | | |
| Frame-Timing (max) | | |
## Setup / Lastprofil
| Feld | Wert |
|---|---|
| Level (Index / Name) | |
| Anzahl Türme | |
| Messdauer (ms) | |
| Anzahl Feinde | |
## `perf-result.json` (Ausschnitt)
```json
```
## Beobachtete Problemzonen
- [ ] Particles (`Game.particles`)
- [ ] Projectiles (`Game.projectiles`)
- [ ] Holograms (`Game.holograms`)
- [ ] Beams (`Game.beams`)
- [ ] Enemy-Update (O(n²))
- [ ] Sonstiges: …
## Erwartung
Was sollte erreicht werden (FPS-Ziel, Heap-Limit, spürbar glatter)?
## Hinweise / Reproduktion
Level, Turm-Aufstellung, Schritte. Siehe auch `docs/06_Refactoring_Game.md`.
+120
View File
@@ -0,0 +1,120 @@
name: Aegis CI
on:
push:
paths:
- 'Aegis-Labyrinth.html'
- 'tests/*.mjs'
- '.gitea/workflows/aegis.yml'
pull_request:
paths:
- 'Aegis-Labyrinth.html'
- 'tests/*.mjs'
- '.gitea/workflows/aegis.yml'
schedule:
- cron: '0 2 * * *' # Nightly: 02:00 UTC
workflow_dispatch:
jobs:
audit:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: gitea/checkout
- uses: gitea/setup-node
with:
node-version: 20
- name: Install Playwright + Chromium
run: npm i playwright && npx playwright install --with-deps chromium
- name: Run audits
run: node tests/audit.mjs
- name: Assert audit results
run: |
node -e "
const r = JSON.parse(require('fs').readFileSync('audit-result.json','utf8'));
const fail = [];
// 1) Connectivity: jede Welle start- & exit-reachbar.
if (!r.self.connectivity.every(c => c.reachable && c.exit)) fail.push('connectivity');
// 2) Attacks: jeder Turm muss entweder Projektile, Holos oder Schaden erzeugen.
const badAttacks = r.self.attacks.filter(a => (a.projectiles||0)===0 && (a.holos||0)===0 && a.hurt===false);
if (badAttacks.length) fail.push('attacks:' + badAttacks.map(a=>a.id).join(','));
// 3) Skills: alle Skills müssen Rank >= 4 erreichen.
if (r.self.skills.some(s => (s.rank||0) < 4)) fail.push('skills');
// 4) Placement: Wall akzeptiert, Path abgelehnt.
if (!r.self.placement || r.self.placement.wallAccepted === false || r.self.placement.pathAccepted === true) fail.push('placement');
if (fail.length) { console.error('FAIL:', fail.join(' | ')); process.exit(1); }
console.log('✅ All audits passed');
"
- name: Upload audit artifact
if: always()
uses: gitea/upload-artifact
with:
name: audit-result
path: audit-result.json
perf:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: gitea/checkout
- uses: gitea/setup-node
with:
node-version: 20
- run: npm i playwright && npx playwright install --with-deps chromium
- name: FPS measurement
run: node tests/perf-test.mjs 10000 50
- name: Upload perf artifact
if: always()
uses: gitea/upload-artifact
with:
name: perf-result
path: perf-result.json
selfplay:
needs: audit
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: gitea/checkout
- uses: gitea/setup-node
with:
node-version: 20
- run: npm i playwright && npx playwright install --with-deps chromium
- name: Run 50 self-play episodes
run: node tests/selfplay.mjs 50
- name: Upload self-play artifact
if: always()
uses: gitea/upload-artifact
with:
name: selfplay-results
path: selfplay-results.json
report:
needs: [audit, perf]
if: always()
runs-on: ubuntu-latest
steps:
- uses: gitea/checkout
- uses: gitea/setup-node
with:
node-version: 20
- name: Download artifacts
uses: gitea/download-artifact
- name: Build HTML report
run: node tests/report.mjs
- name: Upload report
uses: gitea/upload-artifact
with:
name: report
path: report.html