saumwacht-godot/docs/luneraria/QA-MATRIX.md
Martin Stickelbroeck 8b17563814 G1: Drei-Lane-Layout mit Höhenfeld, Grotte, Aufmarschbereichen und MOBA-Kamera
Top windet sich über das Hochland, Mid quert die Kluft über die Mittelplattform,
Bottom führt durch das Tiefland über die Deltabrücke; Top und Bottom sind exakt
gleich lang, alles bleibt spiegelsymmetrisch. LuneTerrain liefert ein exakt
gespiegeltes Höhenfeld, auf dem Figuren stehen. Bossgrotte als Terrasse auf der
Achse zwischen Top und Mid, Aufmarschbereiche je Lane, perspektivische Kamera
mit Sprungtasten (F2–F4, B, G, H, O, R, Q/E). Bestandsassets wiederverwendet,
neue Formen als Blockout für G2/G4.

Geprüft: verify_g1 443/443, Regeln 91/91, M2 73/73, verify_m1 38/38,
verify_m2 14/14, Netz 43/43, Loopback 12/12, Balance 40 Partien (Seitentausch
20/20), Legacy 209/463. Vorher/Nachher-Aufnahmen und Messungen in G1-KARTE.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 00:09:48 +02:00

9.4 KiB
Raw Blame History

QA-Matrix

Testumgebung aller Läufe: Fedora Linux 44 (KDE Plasma, XWayland), AMD Ryzen 5 5600X, NVIDIA GeForce RTX 5060 Ti (Vulkan 1.4.351), Godot 4.7.2 (Fedora-Build), Forward+. Windows 11 ist nicht geprüft: Es gibt keine Windows-Hardware in dieser Umgebung.

Legende: ✅ automatisiert geprüft · 👁 in echten Aufnahmen visuell geprüft · ⏳ offen (Meilenstein) · — nicht zutreffend.

Abnahmepunkte aus dem Masterauftrag (§15)

# Anforderung Stand Beleg
1 Zwei Teams, sechs Eigentümerrollen, drei Lanes, 16 Türme, 2 Kerne ✅ M1 test_lune_core · structure
2 Turmreihenfolge, Basisschutz, Kernsieg; gleichzeitige Kernzerstörung ohne Reihenfolgevorteil ✅ M1 test_lune_core · gates, victory_and_draw, mirror_fairness
3 Fortsetzung nach Welle 20, hohe Indizes ohne Final-Wave-Logik, Fehler oder Objektwachstum ✅ M1 (Wellen bis 10⁶, Runde 21; Menge ≤ 7 je Lane) test_lune_core · endless_waves
4 Gold exakt einmal, Besitzprüfung, keine Reset-/Despawn-/Beschwörungsfarmen ✅ M1 (Monster, Gebäude, Truppentod ohne Kopfgeld); Beschwörungen gibt es noch nicht test_lune_core · rewards, commands
5 Heilung und Persistenz nach der Runde; neue Partie ohne übernommene Werte ✅ M1 Truppen · ✅ M2 Helden (XP, Stufe, Talente, Items bleiben; Rückkehr geheilt, auch nach dem Tod; neue Partie ohne Held) test_lune_core · persistence; test_lune_m2 · xp_and_persistence
6 Truppen ohne Heldeninventar; Talente, drei Itemplätze, Stapeln ✅ M2 test_lune_m2 · heroes_and_items
7 Verstärkungskauf n → Einsatz n+1, richtige Lane und richtiges Team ✅ M2 (öffentliche Ankündigung, keine Verschiebung nach Übernahme, Verbrauch nach n+1, Kopfgeld, Belagerungsziel) test_lune_m2 · champions
8 Grottenabzug schwächt die Lane für die ganze Kampfphase ✅ M2 test_lune_m2 · grotto_withdrawal_and_contest
9 Beide Expeditionen, Scheitern, Erfolg, genau eine Entsendung, Kopfgeld, Verfügbarkeit ab Runde 10 ✅ M2 (Sieg in Runde 6 → Einsatz 7 → gesperrt 7–9 → frei ab 10; wiederholtes Signal ohne Wirkung) test_lune_m2 · boss_*; Szenarien boss_scenarios
10 Laneverlust, Phasenende, Pause, Neustart, Rückkehr ins Menü ✅ M1/M2 verify_m1, test_lune_core · victory (timeout), test_lune_m2 · lane_loss
11 Bots ohne Sonderressourcen und ohne Sicht auf private Befehle ✅ Bots nutzen dieselben Befehle ohne Sondergold; sie lesen nur den eigenen Entwurf, veröffentlichte Gebäudestände, den öffentlichen Bosszustand und Ankündigungen (Code-Durchsicht, LuneBot) test_lune_core · commands; test_lune_m2 · bots_m2
12 Netzwerk: doppelte, veraltete und fremde Befehle; synchroner Phasenwechsel, Disconnect ✅ Protokoll + Mehr-Runden-Loopback (5 Runden, Wiedereinstieg) test_lune_net 43/43 · net_rounds.py 12/12

M3 · Qualität und Balance

Nachweis Stand Beleg
Mehrere Seeds und gemischte Teamzusammensetzungen, Seitentausch ✅ 20 Zusammensetzungen × 2 Seiten, 20/20 konsistent balance_run · logs/m3/balance-step4.json
Gegenstrategien / Profil-Duelle ✅ 15 Paare, 15/15 Seitenfair; lineare Kette (Befund) balance_run --matchups · matchups-step4.json
Hohe Wellenindizes und Langlauf ✅ 10²–10⁶ ohne Fehler; 200 Runden = Testlimit, keine Objektflut stress_run · logs/m3/stress.json
Bot kauft Items und Angriffschampions ✅ Regression test_lune_m2 bots_m2 (war 0 Buchungen) test_lune_m2 73/73
Spiegelsymmetrie mit erweiterten Bots ✅ glutpakt/wurzelbund je 12 Runden bit-symmetrisch test_lune_core mirror_fairness
Karte mit echten Props (Bäume, Felsen, Brücken, Bordsteine, Banner) 👁 Übersicht, Kampf Top/Mid, Planung screenshots/overview-*.png, combat-*.png
Sieben Volksrepräsentanten (Modelle + Clips) 👁 Ruhe, Kontakt, Laufen, Fähigkeit, Tod, Nahaufnahme screenshots/peoples-*.png, people_lineup
Assetmatrix mit p_* und map_props ✅ 74 Zeilen python3 tools/luneraria/build_asset_matrix.py

Echte Anwendung (M1)

tools/luneraria/verify_m1.tscn, 38 Prüfungen mit echten Maus- und Tastaturereignissen:

  • Titel und Projektname, Lane- und Bundwahl per Klick, Start.
  • Eingabeschutz während der Überblendung: Mausrad, 1 und Leertaste erreichen das Spiel nicht.
  • Kauf, Startaufstellung, Rückgängig, Laneeinteilung und die Leertaste übernehmen die Planung; im Kampf wird nichts gekauft.
  • Truppen kämpfen auf ihrer Lane; Pause hält die Kampfuhr an; Tempo schaltet um.
  • Abrechnung und Rückkehr der Truppen.
  • HUD innerhalb des Fensters bei 1280 × 720 und 1920 × 1080.
  • Menü, neue Partie ohne Altlasten, eine vollständige Partie bis zum Ancient-Fall mit Live-Aufnahme der Belagerung, Ergebnisbildschirm, Rematch.
  • Vier Menü-/Partiewechsel ohne wachsende Objektzahl.

Nur die Kampfuhr wird dabei beschleunigt (mehr feste Schritte pro Bild), die Regeln bleiben unverändert.

Echte Anwendung (M2)

tools/luneraria/verify_m2.tscn, 15 Prüfungen. Teil 1 bedient das HUD mit echten Klicks: Reiter, Held anwerben, Held-Lane, Truppe kaufen und in die Grotte schicken, Verstärkungsseite, Rückgängig. Teil 2 spielt eine gewöhnliche Partie ohne Sondergold bis zum Ancient-Fall; der menschliche Platz wird vom Bot-Planer über dieselben Befehle gespielt. Aufgenommen: Held mit Items, Held im Feld, Grottenkampf, Ankündigung, Bossentsendung.

Weitere M2-Belege: test_lune_m2 73/73, darunter der Nachweis, dass die alte Arbeiter- und Funkenökonomie nicht mitläuft (Arbeitsannahme E). M2-App nach M3-Botfix erneut 15/15 (bzw. 14/14, wenn die Partie vor einer Bossentsendung endet).

M4 · Netzwerk und Pakete

Nachweis Stand Beleg
Sechs Slots, Host/Join Direktverbindung, Bots für freie Plätze ✅ LuneSession, Menü „Hosten/Beitreten“
Fremder Sitz / fremde UID / veralteter Befehl / Doppelkauf ✅ test_lune_net 24/24
Disconnect ≠ Kernzerstörung, Bot-Übernahme ✅ test_lune_net disconnect
Zwei-Prozess-Loopback (lokal, nicht Internet) ✅ 5 Runden, echtes LuneGame auf beiden Seiten tools/luneraria/net_rounds.py · logs/m4/net-rounds.json
Gleicher öffentlicher Zustand nach jeder Abrechnung ✅ 5/5 Prüfsummen gleich net-rounds.json
Client rechnet keinen Kampf, zeigt Host-Momentaufnahmen ✅ 0 lokale Schritte · 👁 zwei Fenster net-rounds.json, screenshots/m4/
Nur eigener Planungsentwurf beim Client ✅ test_lune_net ready_commits_and_privacy
Linux-Export + entpackbare Demo ✅ 0.16.0-m4 ../dist/luneraria/ChampionsOfLuneraria-Linux-x64-0.16.0-m4.zip
Windows-Export + entpackbare Demo ✅ Dateien erzeugt ../dist/luneraria/ChampionsOfLuneraria-Windows-x64-0.16.0-m4.zip
Nativer Windows-11-Lauf ⏳ blockiert keine Windows-Hardware; Export oder Wine wäre kein Nativtest
Mehr-Runden-Phasensync im Zwei-Fenster-Spiel ✅ headless 5 Runden · 👁 zwei Fenster, 2 Runden Echtzeit net-rounds.json, screenshots/m4/
Wiedereinstieg als Mensch (neben Bot-Übernahme) ✅ derselbe Sitz über den Anzeigenamen, auch im Kampf test_lune_net hello_and_rejoin · net-rounds.json
Kompatibilitätsmodus (OpenGL) ⏳ offen, M4 pausiert —
Sechs Menschen auf mehreren Rechnern / Internet ⏳ nicht geprüft nur lokaler Loopback

G1 · Karte und Layout

Nachweis Stand Beleg
Drei Lanes, Top/Bottom gleich lang, Mid direkt ✅ verify_g1, test_lune_core symmetry
Lanes überall begehbar, Wasser nur an Plattform und Deltabrücke, Top trocken ✅ verify_g1
16 Türme und 2 Ancients im Feld, trocken, eben, mit Abstand; Basistürme vor dem Ancient ✅ verify_g1
Grotte auf der Achse, frei von allen Lanekorridoren, blockiert Mid nicht, Eingänge auf der Terrasse ✅ verify_g1 · 👁 screenshots/g1/nachher/07-bossgrotte.png, 13-grottenkampf.png
Aufmarschbereiche trocken und auf der eigenen Seite; in der Planung nur die eigenen, im Kampf ausgeblendet ✅ · 👁 verify_g1, 09-hud-planung.png
Gelände exakt gespiegelt, Figuren stehen auf dem Gelände ✅ Abweichung 0,0 / < 0,001 m verify_g1
Kamera: F2–F4, B, G, H, O, R, Q/E, Zoomgrenzen, Neigung je Zoom, Minimap-Umriss ✅ echte Tastatur- und Mausereignisse verify_g1
Regeln unverändert ✅ 91/91 · 73/73 ohne geänderte Erwartungswerte test_lune_core, test_lune_m2
Balance auf der neuen Karte ✅ Seitentausch 20/20, 9–13 Wellen; 4/442 Kampfphasen am Zeitlimit (Befund) logs/g1/balance.json, balance-summary.txt
Vorher/Nachher 1920 × 1080 aus der Spielkamera 👁 13 Ansichten + Kartenplan screenshots/g1/vorher, screenshots/g1/nachher
Leistung vorher/nachher, gleiche Methode ✅ logs/g1/perf-*-1920x1080.json
OpenGL, Windows 11, Spieltests ⏳ offen —

Legacy-Regressionen (Saumwacht)

Unverändert über die Umleitung der alten QA-Schalter: 209 · 33 · 463 · 206 · 1.665 · Menü 20A 68. Logs: logs/m0-baseline/, logs/m1/legacy-*.log.

Plattformen

Plattform Stand
Fedora 44, Forward+ ✅ Quellprojekt (Tests, Aufnahmen, Leistung, Balance, Stress)
Fedora 44, Kompatibilitätsmodus (OpenGL) ⏳ offen (für Saumwacht 0.15.0 geprüft, für Luneraria noch nicht; M4 pausiert)
Windows 11 ⏳ nicht geprüft (keine Hardware). Ein exportiertes Paket oder ein Wine-Lauf wäre kein nativer Test.