From #54 quality review (I1/I2). (1) Divergent-content replay returns replayed=true with caller hash — decide: return stored hash on replay or reject divergence with ErrContract (needs Store interface change). (2) canonicalReport shape duplicated in report.go + pg_store.go — share one marshal helper or pin byte-identity test. Also M1 (move stored-hash check pre-commit), M4 (map FK 23503 to Contract/NotFound).
From #54 quality review (I1/I2). (1) Divergent-content replay returns replayed=true with caller hash — decide: return stored hash on replay or reject divergence with ErrContract (needs Store interface change). (2) canonicalReport shape duplicated in report.go + pg_store.go — share one marshal helper or pin byte-identity test. Also M1 (move stored-hash check pre-commit), M4 (map FK 23503 to Contract/NotFound).