Ran the reference bundle cold from 192e97b, with a P-256 verifier written from scratch rather than pulled from a library, and without regenerate.py. 236/236 ECDSA signatures verify against the JWKS at api.ai-identity.co. 235/235 prev_event links match, org_chain_seq is contiguous, and each signature's digest binds to the row it rides on. Flipping one bit of the last message is rejected — that's what makes the rest mean anything.
One stale line. The README documents a GENESIS sentinel in the genesis row's prev_event.fingerprint.value, and proposes omitting prev_event instead. The export has zero occurrences of GENESIS and row 1 has no prev_event. The fix already shipped.
Run and pinned inputs: https://github.com/MarkovianProtocol/ocsf-second-measurement. The keyed chain hash stays key-holder-verifiable, as you say. Linkage and signatures are the public half, and that's what this covers.
Ran the reference bundle cold from
192e97b, with a P-256 verifier written from scratch rather than pulled from a library, and withoutregenerate.py. 236/236 ECDSA signatures verify against the JWKS atapi.ai-identity.co. 235/235prev_eventlinks match,org_chain_seqis contiguous, and each signature'sdigestbinds to the row it rides on. Flipping one bit of the last message is rejected — that's what makes the rest mean anything.One stale line. The README documents a
GENESISsentinel in the genesis row'sprev_event.fingerprint.value, and proposes omittingprev_eventinstead. The export has zero occurrences ofGENESISand row 1 has noprev_event. The fix already shipped.Run and pinned inputs: https://github.com/MarkovianProtocol/ocsf-second-measurement. The keyed chain hash stays key-holder-verifiable, as you say. Linkage and signatures are the public half, and that's what this covers.