From fa5e190bce298de31129a34b27e01015f7d109c4 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 8 Sep 2026 14:51:12 -0400 Subject: [PATCH] lane T2: the phase's leaf self-report is its own accounting, not the report's --- src/app/treaty.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/app/treaty.cpp b/src/app/treaty.cpp index b180328..0d64902 100644 --- a/src/app/treaty.cpp +++ b/src/app/treaty.cpp @@ -77,10 +77,11 @@ TreatyStampResult StampTreatyTurns(std::vector& players, std::int32 if (field) *field = frame; } } - // A created entry puts a whole record on the wire, not one value: its own leaf plus the - // element leaf the container gains. A stamp into an entry that already existed moves one - // leaf. Counting it this way keeps the phase's self-report in the same currency as the - // divergence report rather than in a currency of its own. + // The phase's own accounting: one for each stamp that moved a value, plus one for each + // record that did not exist before. It is deliberately NOT an attempt to predict the + // divergence report's leaf count, which also charges two container leaves to each player + // whose ledger goes from empty to non-empty -- on the reference pair this reports 28 + // where the report closes 26. The report is the authority; this is what the phase did. r.leafWrites = r.fieldsWritten + r.entriesCreated; return r; }