saumwacht-godot/docs/luneraria/QA-MATRIX.md
Martin Stickelbroeck 9f62e30377 G2: Ancients, Türme, Bossgrotte und Superboss; macOS- und Windows-ARM64-Pakete
Mondherz-Ancients (Saumkern-Kristall als Herz, Sichelklingen, Ringe, Krone,
Teamwappen, Energieadern) mit den Stufen stabil/instabil/kritisch, kurzem
Zusammenbruch und bleibender Ruine; der Sieg wartet nie auf die Grafik.
Turmfamilie aus einem Blender-Generator: Grenzwacht (Tower 1), Bastion
(Tower 2), Kernwacht (Basisturm in der Formensprache des Ancients), mit
Schadensstufen, Einsturz, Ruine und sichtbarem Angriff (Zielring, Aufladen,
Bolzen, Einschlag) - der Schaden bleibt vollständig in der Simulation.
Bossgrotte Mondschlund mit Tor, Treppe in die Tiefe, Altar, Säulen, Felsen
und fünf Zuständen; der Generator hält Abstand zur Top-Lane, die Höhle
braucht eine kleine Geländesenke (nur Darstellung). Superboss Schlundkrone
mit 24 Knochen und 11 Clips (inkl. Brüllen und Sieg), Adern in Teamfarbe,
dasselbe Modell für Grotte und Lane. Gemeinsame LN-Materialfamilie (Stein,
Metall, Kristall, Rune, Stoff, Mondwasser, Kreaturenhaut), Occlusion-Fade
ohne dithernde Schatten. Keine Regeländerung.

Geprüft: verify_g2 245/245, verify_g1 443/443, Regeln 91/91 und 73/73,
Stress 17/17, Balance 40 Partien identisch mit G1, verify_m1 38/38,
verify_m2 14/14, Netz 43/43 und Loopback 12/12, Legacy 209 und 463.
21 Ansichten vorher/nachher (1920x1080), Videos Turmkampf und Bossbegegnung,
Leistung G1/G2 auf demselben Mac (+0,5 ms in vollen Kampfansichten).
Pakete 0.17.0-g2 für macOS (Universal, ad-hoc signiert), Windows x64/ARM64
und Linux; macOS nativ und unter Rosetta, beide Windows-Pakete in Windows 11
ARM (Parallels, OpenGL-Fallback) mit --lune-smoke bestanden.

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

12 KiB
Raw Blame History

QA-Matrix

Testumgebung bis G1: 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+.

Testumgebung ab G2: Mac mit Apple M5 (10 GPU-Kerne, 16 GB), macOS 27, Godot 4.7.2 (offizieller Build) mit Forward+ über Metal 4, Blender 5.2.2 LTS. Alle M1–G1-Tests wurden dort erneut ausgeführt.

Windows 11 lief ab G2 nur in einer Parallels-VM (ARM, OpenGL-Fallback), nicht auf x64-Hardware.

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 —

G2 · Ancients, Türme und Bossgrotte

Nachweis (Auftrag §25) Stand Beleg
A · alle Regeltests M1–M3 ohne geänderte Erwartungswerte ✅ 91/91 · 73/73 · Stress 17/17 · Balance 40 Partien identisch mit G1 logs/g2/test-*.log, logs/g2/balance-summary.txt
B · G1-Kartentests ✅ 443/443 logs/g2/test-verify-g1.json
C · Turmzielwahl (nur feindliche Figuren in Reichweite, Zielring unter dem Regelziel, Bolzen zum Ziel, ein Bolzen pro Treffer) ✅ verify_g2 D
D · Tower-Reihenfolge (keine gesperrte Stufe nimmt Schaden) ✅ verify_g2 E
E · Basistürme sperren den Ancient ✅ verify_g2 E
F · Ancient-Zerstörung beendet die Partie sofort; der Kollaps folgt erst danach ✅ verify_g2 E
G · Bossgrotte erreichbar (Eingänge auf dem Boden, Weg frei, Dais) ✅ · 👁 verify_g2 F, screenshots/g2/nachher/10-*.png
H · Boss bekämpfbar (Erwachen mit Brüllen, Tod, Erschöpfung der Grotte, Claim) ✅ · 👁 Video verify_g2 F, videos/g2-bossbegegnung.mp4
I · Boss entsendbar (Claim → Einsatz für das richtige Team) ✅ verify_g2 F
J · Boss auf allen drei Lanes (Vorrücken, Turmbeschuss, Bodenkontakt, Teamfarbe) ✅ Top/Mid/Bottom verify_g2 F
K · zerstörte Türme blockieren nicht; Ruine bleibt stehen ✅ · 👁 Video verify_g2 E, videos/g2-turmkampf.mp4
L · keine Gold-/Schadensdoppelereignisse durch Animation/VFX ✅ vier Runden mit und ohne Darstellung identisch; kein Bolzen landet doppelt verify_g2 G, D
M · mehrere komplette Botpartien ✅ vier Seeds headless, eine ganze Partie mit Grafik exakt gleich verify_g2 H
Netzwerk nur als Regression ✅ 43/43 · Loopback 12/12 logs/g2/test-net*.log
Assets und Blender-Pipeline (Hash, Quelle, Generator, Pivot, Clips, Materialien) ✅ 113 Prüfungen verify_g2 A, assets/luneraria/g2/g2_manifest.json
Zustände Türme/Ancients/Grotte, Teamidentität, Lichtbudget, Occlusion, Maßstab ✅ verify_g2 B, C, I
15 Pflichtansichten + Zusatzansichten, vorher/nachher, 1920 × 1080 👁 21 + 21 screenshots/g2/nachher, screenshots/g2/vorher
Videos Turmkampf und Bossbegegnung 👁 videos/
Leistung G1 ↔ G2, gleiche Methode, gleicher Rechner ✅ +0,5 ms in vollen Kampfansichten, Ursache ermittelt logs/g2/perf-vergleich-mac.json, cost-split.json

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 bis G1 (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)
macOS 27, Apple M5, Forward+ (Metal) ✅ Quellprojekt ab G2 (alle Tests, Aufnahmen, Videos, Leistung); Paket 0.17.0-g2 entpackt und mit --lune-smoke gespielt
macOS, Intel-Teil unter Rosetta (Vulkan/MoltenVK) ✅ Paket 0.17.0-g2, --lune-smoke
Windows 11 Pro 24H2 ARM (Parallels), Paket ARM64 ✅ --lune-smoke, automatisch OpenGL 3 (kein Vulkan/D3D12 in der VM), 65–69 fps
Windows 11 Pro 24H2 ARM (Parallels), Paket x64 unter Emulation ✅ --lune-smoke, OpenGL 3, 46–61 fps
Windows 11 auf x64-Hardware ⏳ nicht geprüft (keine Hardware)
Linux-Paket 0.17.0-g2 exportiert, auf dem Mac nicht startbar