Conversation
How to use the Graphite Merge QueueAdd the label graphite/merge to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
5f60c48 to
cecf1ac
Compare
a8c31d1 to
4e794df
Compare
cecf1ac to
a66b270
Compare
rmrt1n
left a comment
There was a problem hiding this comment.
LGTM. Don't merge yet to make review of the upstack PR easier. We'll merge the whole stack at once once everything is reviewed.
dd86e1f to
4f8ef79
Compare
d527108 to
2e1b2e3
Compare
❌ 1 Tests Failed:
View the full list of 1 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
2e1b2e3 to
14bcc11
Compare
168bc44 to
a77c553
Compare

TL;DR
Replace JSON serialization with MessagePack to preserve uint64 precision in command payloads, events, and component data.
What changed?
bytesinstead ofgoogle.protobuf.Structfor payloadsgithub.com/shamaton/msgpack/v3dependencyHow to test?
Run the new test cases that verify uint64 precision:
TestQueue_Uint64Precisioninpkg/cardinal/internal/command/queue_test.goTestColumn_MsgpackTypeCoverageinpkg/cardinal/internal/ecs/column_internal_test.goThese tests verify that large uint64 values (above 2^53-1) maintain their precision through serialization and deserialization.
Why make this change?
JSON serialization converts uint64 values to float64, which loses precision for values larger than 2^53-1 (9007199254740991). This is problematic for game systems that rely on precise uint64 values for things like currency amounts, entity IDs, or timestamps.
MessagePack is a binary serialization format that preserves the full range of uint64 values. This change ensures that all numeric types maintain their precision throughout the serialization/deserialization process, which is critical for financial transactions and other systems requiring exact numeric representation.