Repository navigation
Fixed
- Signed canonical-Korg journals no longer verify as tampered. Canonical Korg adds a per-event Ed25519
event_sigsigned over the event's preimage. korgex hashed that field into the preimage, so every signed Korg journal failed with "content tampered" in both the Python verifier (src/ledger_spec.py) and the in-browser verifier (src/assets/korg_verify.js). Both now excludeHASH_FIELDS = ("entry_hash", "event_sig"), matching Korg. Unsigned journals and all existing vectors hash exactly as before. - The in-browser verifier sorts object keys by Unicode code point, as Python does. It previously used UTF-16 code-unit order, so events with astral-plane keys (such as emoji) failed verification in audit reports.
Changed
- The korg-ledger@v1 number domain is enforced (SPEC §7). Canonicalization rejects integers beyond ±(2^53−1) and NaN/±Infinity, and verifiers report such events as "not canonicalizable" instead of crashing or calling them tampered. The browser verifier also reports floats as unverifiable, and audit reports show an UNVERIFIABLE verdict for them, not TAMPERED. korgex's writers (
_build_bodyand transcript import) store out-of-domain numbers as exact strings, so recording a tool call never fails. - CI lint is pinned to ruff 0.15.x (
ruff==0.15.22; dev extra<0.16). ruff 0.16 changed its default rule set, which turned lint red without any source change. - README test badge refreshed to 1,657 passing.
Added
- Canonical-Korg conformance fixtures.
spec/korg-ledger-v1/vectors/signed-intact.jsonlis Korg's signed fixture, vendored byte-for-byte;signed-tampered.jsonladds a tampered variant. Both run in the Python and browser conformance tests.ledger_spec.preimage()exposes the signed bytes, and SPEC §8 documents compatibility.
https://ampcode.com/threads/T-01a135b8-7b96-71de-89fd-640149415925