0.6.5
A one-change patch to @silverprotocol/core. The wire vocabulary is untouched (AGJSON_VERSION stays 1.0.0-draft.3), no peer versions moved, and the other five packages change only their version number.
Unknown fields now pass through ingest at every depth
SPEC.md §0.2 asks a consumer to pass unknown fields through untouched, so a stream from a newer producer survives an older reader. Through 0.6.4, ingestAgEvent / ingestAgEvents honoured that only at the top level of an event: an unknown key one level down — a new counter inside turn.done.usage, a new property on a block sent by content.block — was silently removed during validation. From 0.6.5 it is kept, at every depth. Where the Reducer folds a sub-object whole (usage on turns and messages, a block delivered by content.block), the unknown key reaches its result too.
Ordinary events keep every field and value they had in 0.6.4. One difference is visible: nested objects now keep the producer’s key order, where 0.6.4 re-ordered them to the schema’s. You will see it in usage (for example, totalTokens now sits where the producer put it). Deep-equality checks are unaffected, but anything that compares serialized JSON, such as a snapshot, a hash or a byte baseline, can change once.
One thing to check if you persist or strictly validate the reduced result: records built from a newer producer’s stream can now carry keys your schema does not know. That is the point of the change, but a closed schema on your side will see them.
The compatibility tables on each npm page are unchanged.