Add deterministic file ordering in Builder.Build()

Sort file entries by path (lexicographic, byte-order) before
serialization to ensure deterministic output. Add fixedUUID support
for testing reproducibility, and a test asserting byte-identical
output from two runs with the same input.

Closes #23
This commit is contained in:
clawbot
2026-02-08 16:09:16 -08:00
committed by user
parent 6d1bdbb00f
commit 6d9c07510a
4 changed files with 51 additions and 2 deletions

View File

@@ -49,8 +49,13 @@ func (m *manifest) generateOuter() error {
return errors.New("internal error")
}
// Generate UUID and set on inner message
manifestUUID := uuid.New()
// Use fixed UUID if provided, otherwise generate a new one
var manifestUUID uuid.UUID
if len(m.fixedUUID) == 16 {
copy(manifestUUID[:], m.fixedUUID)
} else {
manifestUUID = uuid.New()
}
m.pbInner.Uuid = manifestUUID[:]
innerData, err := proto.MarshalOptions{Deterministic: true}.Marshal(m.pbInner)