AEF v1.0 spec
The canonical specification source is spec/AEF-v1.0.md in this repository.
Normative hashing rule
json.dumps(
{
"kind": kind,
"subject_id": subject_id,
"subject_type": subject_type,
"payload": payload,
"created_at": created_at,
"previous_hash": previous_hash,
},
sort_keys=True,
separators=(",", ":"),
ensure_ascii=False,
).encode("utf-8")
The SHA-256 digest of those canonical bytes is the AEF hash.
Why this matters
If producer and verifier disagree on whitespace, Unicode escaping, or timestamp normalization, the ledger stops being portable. The SDK and backend in this repo now share the same canonical rule.