paket.bat baut aus dem ausgecheckten Stand ein ZIP, das auf jedem
Windows 10 oder 11 mit 64 Bit ohne Git, Rust und Godot läuft: das
exportierte Spiel, die Brücke mit statisch gelinkter C-Laufzeit und eine
Anleitung für Mitspieler. Die Exportvoreinstellung lässt Tests und
Werkzeuge weg und nimmt die Texte mit; dist/ bleibt außerhalb des
Archivs. CLAUDE.md und der Fragebogen von M1d beschreiben das Paket.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Regel nannte nur Zeichnung und Farben. Eine neue Kennung braucht
auch eine Konstante in Art, einen Eintrag in Art.IDS und einen Zweig
mit Platzhalter in ArtStyle.draw. Eine fehlende Farbe führt zu einem
Fehler, nicht zu einem Platzhalter.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
CLAUDE.md beschreibt, wie die Grafik entsteht: Kennungen, Pixelgrafik
aus Code, scharfe Pixel, Bilder, die Zeichnungen ersetzen, Blöcke und
Kachelformen. Das Bildschirmfoto-Werkzeug und --style=NAME stehen bei
ihren Befehlen. Eine stille Verbindung gilt nach etwa
NetLink.TIMEOUT_MSEC als verloren. Ein Fragebogen mit Bildern der drei
Stile begleitet den Probelauf.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Der Host hält einen Schlag eines Gastes, der während der Abklingzeit
ankommt, bis zum ersten Takt danach. Übers Internet ging sonst etwa
jeder fünfte Schlag eines Gastes verloren.
- ENet drosselt die Figuren nie mehr; sonst konnten die Figuren eines
von zwei Gästen dauerhaft stehen bleiben. Figuren gehen geordnet, und
eine stille Verbindung gilt nach höchstens acht Sekunden als verloren.
- Positionen, die keine Zahlen sind, und Figuren von Spielern, die
nicht online sind, werden verworfen.
- Ein Host mit angehaltener Simulation sagt das in der Statuszeile.
- Neue Tests: Schlag während der Abklingzeit, Zielauswahl von NetLink,
verworfene Figuren, Neuabgleich über die Brücke.
- Der Fragebogen sagt, was jeder Rechner braucht, und die Freigabe in
der Firewall gehört zum Host. CLAUDE.md beschreibt das Halten der
Schläge, die Drosselung und die Zeitüberschreitung und ergänzt die
Vertrauensregel um die Schlüssel.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Der Fragebogen nennt die Statuszeile oben rechts. Er sagt wieder, wann
eine Aufzeichnung entsteht, dass eine angehaltene Sitzung keine
hinterlässt und wo die Logs liegen, und er gibt bessere Hinweise für
Verbindungen übers Internet. CLAUDE.md beschreibt jetzt auch:
- die Übernahme der Host-Welt durch Gäste,
- den festen Anfang von Gruß und Ablehnung,
- die Pausenregel und das Anhalten bei einem Kernfehler,
- die erlaubten Profilnamen,
- die gesperrte Brücken-DLL bei laufendem Spiel.
play-zweites-fenster.bat gibt weitere Argumente an das Spiel weiter.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
play.bat gibt Argumente an das Spiel weiter, und
play-zweites-fenster.bat startet ein zweites Fenster mit eigenem Profil.
CLAUDE.md beschreibt die gemeinsame Welt, das Vertrauensmodell der
Reichweite, die Netzwerkregeln und den Test zweier Instanzen. Ein
Fragebogen begleitet den Probelauf.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Die Regel sagte, wer ein Feld ergänze, tue das in snapshot.rs und prüfe
es in check_restorable. Das gilt nur für Felder von World. Spielerfelder
kodiert und dekodiert core/src/player.rs, das Inventar inventory.rs, die
Karte map.rs; deren Prüfungen stehen im jeweiligen Dekodierer, nicht in
check_restorable. M2 ergänzt Welt-, Feld- und Spielerzustand und folgt
diesem Satz.
Die Regel nennt jetzt alle vier Stellen und sagt, dass ein neues Feld
beim Dekodieren oder in check_restorable geprüft wird. Die Namen wurden
gegen den Code geprüft: encode_state und from_snapshot, Player::encode
und Player::decode, Inventory::encode und Inventory::decode sowie
Map::encode und Map::decode.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
user://tests liegt im echten Benutzerordner des Spiels, neben Spielstand,
Schlüssel und Aufzeichnungen des Spielers. TestFiles.remove_dir löschte
jeden Pfad, den es bekam; ein falsches Argument hätte echte Spielerdateien
gelöscht. Tests, die früh mit einem Laufzeitfehler abbrachen, ließen ihren
Ordner zurück (es lagen 15 solche Ordner im Benutzerordner).
- remove_dir vereinfacht den Pfad (simplify_path) und verweigert alles,
was nicht user://tests oder darunter liegt, mit push_error und ohne zu
löschen. Die Wurzel steht in der Konstante TestFiles.ROOT, die auch
temporary_dir benutzt.
- run_tests.gd entfernt user://tests zu Beginn von _run_all, vor dem
Fehlerzähler, aber nur wenn der Ordner existiert, weil Godot beim
Auflisten eines fehlenden Ordners einen Fehler meldet.
- CLAUDE.md sagt jetzt, dass die Tests unter user://tests schreiben und
nie die echten Dateien des Spielers anfassen.
Das Verweigern wurde einmal von Hand geprüft, mit einem Wegwerfskript auf
selbst angelegten Ordnern: Ohne Schutz löschte remove_dir sie, mit Schutz
bleiben sie samt Datei stehen und es erscheint ein Fehler, auch für einen
Geschwisterordner user://tests_probe und für user://tests/../…. Danach
waren die 15 Altlasten verschwunden und die Ausgabe fehlerfrei, auch ohne
vorhandenen Ordner user://tests.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Mit `use std::{fs, process};` und anschließendem `fs::remove_file(…)`
kam bisher beides durch: Der Textwächter suchte `std::fs` wörtlich, und
Clippy kennt nur die aufgelisteten Funktionen. Globaler veränderlicher
Zustand über `static` mit Mutex, RwLock, OnceLock oder LazyLock wurde
auch nicht erkannt.
Neu in FORBIDDEN: `std::{` (gruppierte Importe verbergen dem Text die
Modulnamen) sowie Mutex, RwLock, OnceLock und LazyLock. Der Kern in
core/src nutzt nichts davon. Der Kommentar in core/clippy.toml behauptet
jetzt nur noch, was Clippy leistet, und CLAUDE.md nennt die Regel, dass
jeder std-Pfad in einer eigenen use-Zeile steht.
Der bestehende Selbsttest every_forbidden_term_is_detected deckt die
neuen Einträge ab.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
play.bat baut die Brücke und startet das Spiel. CLAUDE.md beschreibt
jetzt Kern, Brücke und Hülle mit allen Prüfbefehlen, die Versionsregel
für festgeschriebene Werte und die Zuschreibung in Commits. Ein
Fragebogen begleitet den ersten Probelauf.
Der erste Godot-Import in einem frischen Checkout stürzt beim Beenden
ab; play.bat wiederholt ihn deshalb einmal.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
CLAUDE.md: Die Regeln für den Kern gelten für den Quelltext in
core/src/, nicht für die Tests. World::set_all_offline ist als einzige
Ausnahme von der Regel genannt, dass sich die Welt nur durch Befehle
ändert. Die Überlaufregel sagt jetzt, dass Taktzähler normal addiert
werden und Werte aus geladenen Dateien beim Laden geprüft werden. Ein
neuer Absatz erklärt, was bei einem Fehler in golden.rs zu tun ist.
KONZEPT.md: Das Konzept ist bestätigt. Hochladen, Branches, Issues und
Pull Requests sind freigegeben, und die veraltete Angabe, das Archiv
sei noch leer, ist entfernt. Die Reihenfolge der Rückkehrer steht
jetzt bei den Festlegungen statt bei den offenen Punkten.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Workspace, leeres Crate grovewright-core und ein Wächter-Test, der den
Quelltext des Kerns auf Verstöße gegen die Gleichschritt-Regeln prüft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>