Writing Provenance PDF evidence, version 1 The PDF catalog’s EmbeddedFiles name tree contains writing-provenance.zip, an unfiltered EmbeddedFile stream. The catalog also references the file specification through AF. Open it with a PDF attachment reader to inspect the ZIP independently. The ZIP manifest uses opuswriter-proof-1. It locates the disclosure, RFC 3161 receipt and OpenTimestamps detached proof for each recorded version. The verifier treats the manifest and printed pages as untrusted. A disclosed item carries its label, value, salt, index, tree size and SHA-256 inclusion path. Each leaf is SHA-256(0x00 || salt || label length in four big-endian bytes || UTF-8 label || UTF-8 value). Each internal node is SHA-256(0x01 || left || right). Inclusion paths follow RFC 9162. The browser obtains the title, recorded figures and shared passages from the checked leaves. FreeTSA: check the signed CMS timestamp, signed attributes, certificate chain, timestamping purpose, validity at the signed date, and message imprint against the frame root. The trust anchor is the independently bundled FreeTSA root, never a certificate supplied by the PDF. Bitcoin: evaluate the detached OpenTimestamps proof, including allowed calendar upgrades. Compare the resulting Merkle root with the header for the attested height. Check the header hash and proof of work and require agreement from Blockstream and mempool.space. A pending confirmation and an unreachable lookup have separate results. Each check reads current public records. The lookup service accepts only fixed calendar commitments, block heights and block hashes. Source archive: checker/ contains the browser checker and locked dependencies. web/ contains the page and client worker. server/ contains the public-record relay. The application runs with any HTTPS host that serves the same files and lookup routes. See BUILDING.txt for build instructions. FIGURES figures.json lists the headline values printed by the exporter. The checker recomputes them from the disclosed records after checking their paths, the frame sequence, and the completeness of the measurements. Repeated observations of the same session, day, origin or hour use their latest recorded value. The result distinguishes matched totals, differences, incomplete disclosures and versions with no confirmed date. The browser shows the calculated values for comparison with the visible PDF pages. INDEPENDENT CHECK For version N, extract receipts/N.tsq and receipts/N.tsr from the PDF attachment, or save the pair from the version in the browser. On https://freetsa.org/index_en.php choose Online Signature, Verify, and select the two files. Both clients encode the request with the SHA-256 frame root and the nonce returned in the signed receipt. The same request bytes can therefore be reproduced for earlier receipts. For OpenSSL, obtain cacert.pem from https://freetsa.org/files/cacert.pem. From the extracted folder, replace ROOT with the frame's 64-character fingerprint and N with its number: openssl ts -verify -digest ROOT -in receipts/N.tsr -CAfile cacert.pem openssl ts -reply -in receipts/N.tsr -text