Skip to content

fix(replays): freeze rules revisions as literal rows (#138, D-120) - #146

Draft
cubetribe wants to merge 2 commits into
mainfrom
fix/138-freeze-rules-revisions
Draft

cubetribe wants to merge 2 commits into
mainfrom
fix/138-freeze-rules-revisions

Conversation

@cubetribe

Copy link
Copy Markdown
Collaborator

Was: MatchFingerprint.ComputeRulesHash64(rev) liest nur noch eingefrorene Literalzeilen (V1, V2, V3). ComputeCurrentRulesHash64 ist der einzige Pfad mit Live-Konstanten; DescribeCurrentRulesDrift() vergleicht beide Feld für Feld (Stolperdraht), ein Quelltextwächter verbietet Live-Referenzen im Literalbereich.

Warum: Bisher war nur die Feldzahl historisch, die Werte immer die heutigen. #131 hat so die Identität der Revisionen 1/2 rückwirkend verschoben. Fixes #138, Refs #108.

Bereiche: Simulation/Replays/ (niemand ohne D-ID → D-120, Entwurf), Tests beider Spuren, DecisionLog, CHANGELOG.

Hashes: aktueller RulesHash64 bleibt 0xD1B683837D12FCEF; Rev-1/2-Pins zurück auf 0x531CE8F614A16CB5 / 0x07725EA26668C9F8. Keine der vier Guard-Baselines berührt.

Changelog: [Unreleased] → Behoben.

Tests: dotnet test 781/781; check_docs.py OK; check_baseline_guard.py --self-test OK.
Unity-Spuren: EditMode 666/666, PlayMode 15/15 (Unity 6000.5.4f1, warme Library).
Spielabnahme: nicht gespielt — keine Verhaltensänderung, Laufzeit-Hash bitgleich.

Reihenfolge: vor der RulesRevisionV4 des Art-Branches mergen; der Art-Strang legt V4 dann als Literalzeile an (Anleitung im Bericht). Offene Inhaberfragen und unabhängiges Read-only-Review: reports/v8.6.0/issue-lauf-2026-10-17/01-issue-138-*.md, 01b-review-1-issue-138.md.

🤖 Generated with Claude Code

cubetribe and others added 2 commits October 17, 2026 17:44
ComputeRulesHash64(rev) promised to represent prior rules exactly, but
only the field count was historical: every revision hashed today's
constants. #131 (HQ ceiling 2000 -> 3000) therefore rewrote the identity
of revisions 1 and 2 retroactively, and the "frozen" golden test could
only ever pin the present. Historic revisions now carry literal rows
(V1, V2, V3) in a marked source region; ComputeCurrentRulesHash64 is the
only path that reads live constants, DescribeCurrentRulesDrift compares
both field by field as a tripwire, and a source guard rejects live
references inside the literal region. Revisions are append-only: a
changed hashed constant means a new revision, never a re-pin.

Fixes #138, refs #108. Decision D-120 (draft; binding with the merge).
The current RulesHash64 stays 0xD1B683837D12FCEF; the revision 1/2 pins
return to 0x531CE8F614A16CB5 / 0x07725EA26668C9F8. None of the four
guard baselines is touched. Sim tests 781/781; Unity EditMode mirror
not run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
EditMode 666/666 and PlayMode 15/15 measured on this branch with Unity
6000.5.4f1 via the lane script from #110; no failures, clean tree.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Historische Regel-Revisionen sind nicht eingefroren — ComputeRulesHash64 hasht für JEDE Revision die heutigen Konstanten

1 participant