COTRUGLI PUBLIC VERIFICATION KIT v1 — 14 October 2026 Run from the extracted kit with Node.js 20 or later: node verify/verify.mjs No npm install, account, network or private keys are required. Expected result: VERIFIED_DEMO, four records. A nonzero exit code means failure. You can pass a modified bundle path as the first argument. The verifier always uses the separately supplied anchors.json. Changing an event, signature, Merkle sibling, checkpoint, owner key or record order must fail. The four records are explicitly synthetic: a delivered request, a failed provisioning request and two disagreeing usage measurements. Each record has an Ed25519 signature. Its leaf is SHA-256(0x00 || canonical({record,signature})). Internal nodes are SHA-256(0x01 || left || right). The signed checkpoint binds the four-leaf root, count, scope and fixture timestamp. Both owner and checkpoint SPKI SHA-256 hashes must match anchors.json. All included keys are public demo keys. Throwaway private keys were generated in memory and not saved. Canonical encoding v1: UTF-8 JSON; object keys sorted by ECMAScript UTF-16 code-unit order; compact separators; array order retained; safe integers only (no floating point/NaN). Strings are not Unicode-normalised. Event signatures use the domain prefix COTRUGLI/DEMO/EVENT/v1 followed by a null byte. Checkpoint signatures use COTRUGLI/DEMO/CHECKPOINT/v1 followed by a null byte. Trust boundary: anchors are local demonstration pins, not a production PKI or proof of legal identity. An adversary who replaces BOTH the kit and its pins can create another self-consistent kit. Obtain the kit/manifest from a trusted release channel. SHA256SUMS helps detect accidental changes; it is not a signed release attestation. A matching digest does not establish truthful metering or business acceptance. This kit is NOT an N8CF1 confirmation, ML-DSA rail seal, or N8 FINAL proof. It must not be imported as FINAL into fed8ra. It deliberately keeps a publicly verifiable cryptographic example separate from the historical October 1 run. The old run's evidence.json is a curated summary; sample-events.json is a projection, not the full original proof bundle. Full historical rail verification requires the original selected record, owner signatures, exact commitment, N8CF1 confirmation, chain and trusted NEO public anchors through the existing verifier. Those private archives were not read or republished for this release. Source versions and run scope are in the main README. The browser runs this same core.js via WebCrypto. Where Ed25519 is unavailable, use this offline CLI.