M1a: deterministischer Rust-Kern #3

Merged
steven merged 15 commits from m1a-rust-kern into main 2026-10-01 06:03:36 +00:00
Owner

Zusammenfassung

  • Rust-Kern grovewright-core ohne Zugriff auf die Engine und ohne fremde Crates: Karte mit Generator, Spieler, Inventar, Befehle, die Regeln der Welt, Snapshot mit Prüfsumme sowie Aufzeichnung und Wiederholung von Sitzungen.
  • Abnahmetests für den Gleichschritt: Gleiche Befehle ergeben dieselbe Welt, auch nach dem Laden und über die Kodierung hinweg.
  • Festgeschriebene Vergleichswerte, die versehentliche Änderungen an Regeln und Formaten melden.
  • Konzept und CLAUDE.md an den Stand angeglichen; der Speicherstand enthält den vollständigen Zustand der Welt.

Prüfung

  • 91 Tests bestehen in Debug und Release; cargo fmt und cargo clippy -D warnings melden nichts.
  • Jede der elf Tasks wurde von einem unabhängigen Agenten geprüft; die Abschlussprüfung des ganzen Branches führte zu einer Korrekturrunde, die nachgeprüft ist.

Offen

Bewusst verschobene Punkte für die nächsten Pläne stehen in #2.

Closes #1

🤖 Generated with Claude Code

## Zusammenfassung - Rust-Kern `grovewright-core` ohne Zugriff auf die Engine und ohne fremde Crates: Karte mit Generator, Spieler, Inventar, Befehle, die Regeln der Welt, Snapshot mit Prüfsumme sowie Aufzeichnung und Wiederholung von Sitzungen. - Abnahmetests für den Gleichschritt: Gleiche Befehle ergeben dieselbe Welt, auch nach dem Laden und über die Kodierung hinweg. - Festgeschriebene Vergleichswerte, die versehentliche Änderungen an Regeln und Formaten melden. - Konzept und `CLAUDE.md` an den Stand angeglichen; der Speicherstand enthält den vollständigen Zustand der Welt. ## Prüfung - 91 Tests bestehen in Debug und Release; `cargo fmt` und `cargo clippy -D warnings` melden nichts. - Jede der elf Tasks wurde von einem unabhängigen Agenten geprüft; die Abschlussprüfung des ganzen Branches führte zu einer Korrekturrunde, die nachgeprüft ist. ## Offen Bewusst verschobene Punkte für die nächsten Pläne stehen in #2. Closes #1 🤖 Generated with [Claude Code](https://claude.com/claude-code)
steven added this to the M1 Fundament milestone 2026-10-01 06:03:04 +00:00
steven added 15 commits 2026-10-01 06:03:06 +00:00
Erster von vier Plänen für Meilenstein 1. Elf Tasks bauen den
deterministischen Kern: Kodierung, Prüfsumme, Zufall, Karte, Generator,
Inventar, Spieler, Befehle, Welt, Snapshot, Aufzeichnung und die
Abnahmetests für den Gleichschritt. Der Code im Plan ist vorab geprüft.

Co-Authored-By: Claude Opus 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>
Writer und Reader für Befehle, Snapshots und Aufzeichnungen. Beschädigte
Eingaben führen zu einem Fehler statt zu einem Absturz.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
FNV-1a für Zustandsprüfsummen und SplitMix64 als einzige Zufallsquelle
des Kerns. Beide sind gegen veröffentlichte Referenzwerte geprüft.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Gelände mit Grabregeln, Kacheln mit Schaden und eine rechteckige Karte,
die sich kodieren lässt und unmögliche Eingaben ablehnt.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Baut aus einer Startzahl eine 64 × 64 Felder große Karte mit Rand aus
Grundgestein, Lichtung am Startpunkt, Felsblock daneben, weichem Fels
innen und hartem Fels außen. Die Regeln sind für 300 Startzahlen geprüft.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
24 Plätze mit je bis zu 99 Gegenständen. Hinzufügen füllt zuerst
vorhandene Stapel und meldet, was nicht passt; Entfernen nimmt alles
oder nichts.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Ein Spieler hat eine dauerhafte Kennung, einen Namen, eine
Werkzeugstufe und ein Inventar. Befehle (Beitreten, Verlassen, Graben)
sind der einzige Weg, die Welt zu ändern, und lassen sich kodieren.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
World::step wendet die Befehle eines Takts der Reihe nach an: Spieler
treten bei und verlassen die Welt, drei Schläge brechen weichen Fels
und bringen einen Stein. Abgelehnte Befehle ändern nichts.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Der Snapshot enthält den vollständigen Zustand der Welt hinter einem
Kopf mit Format und Version. Er dient als Speicherstand und als
Grundlage der Prüfsumme. Das Konzept ist entsprechend korrigiert: Der
Speicherstand ist der vollständige Zustand, nicht Startzahl plus
Änderungen.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Eine Aufzeichnung hält den Startzustand und die Befehle jedes Takts
fest. Wiederholen ergibt exakt dieselbe Welt; verify meldet, wenn das
Ende von der aufgezeichneten Prüfsumme abweicht.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Fünf Tests prüfen über tausende Takte mit vier Spielern, dass gleiche
Befehle dieselbe Welt ergeben: im direkten Vergleich, nach einem
Snapshot mitten in der Sitzung, beim Wiederholen einer Aufzeichnung
und nach dem Weg über die Kodierung.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Der Vergleich der Prüfsummen allein konnte nicht fehlschlagen, weil die
Startzahl selbst in die Prüfsumme eingeht. Jetzt vergleicht der Test
auch die Karten beider Welten.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Die neuen Tests in golden.rs vergleichen gegen einmal aufgezeichnete
Werte statt gegen eine zweite Berechnung im selben Build. So fällt
über Builds hinweg auf, wenn sich Regeln oder Formate unbeabsichtigt
ändern: der Startzustand der Welt, das Ende einer festen Befehlsfolge
und die Prüfsumme der Aufzeichnung. Die Fehlermeldung nennt die
Versionskonstante, die dann erhöht werden muss.

Der neue Test in world.rs deckt ab, dass überlange Namen auf beiden
Beitrittswegen gekürzt gespeichert werden: beim ersten Beitritt und
bei der Rückkehr.

Co-Authored-By: Claude Sonnet 5.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>
steven merged commit f66fbcdfc0 into main 2026-10-01 06:03:36 +00:00
steven deleted branch m1a-rust-kern 2026-10-01 06:03:37 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: steven/Grovewright#3