Canonical JSON: object keys sorted lexicographically, 2-space indent, LF endings, trailing newline. The checksum is computed over these bytes, and stable ordering is what makes PR diffs reviewable, so this encoder must stay byte-stable across Elixir/OTP versions.