<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>truecopy blog</title><description>Why truecopy reads a document the way it does, one released change at a time.</description><link>https://truecopy.dev/blog/</link><item><title>A file name does not name a file</title><link>https://truecopy.dev/blog/a-file-name-does-not-name-a-file/</link><guid isPermaLink="true">https://truecopy.dev/blog/a-file-name-does-not-name-a-file/</guid><description>truecopy 2.0.15 gives every document it opens the SHA-256 of its bytes. Why a reading kept for years needs it, and why it is taken before pdf.js touches the file.</description><pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate></item><item><title>A postal code is not a negative number</title><link>https://truecopy.dev/blog/a-postal-code-is-not-a-negative-number/</link><guid isPermaLink="true">https://truecopy.dev/blog/a-postal-code-is-not-a-negative-number/</guid><description>truecopy 2.0.14 lets the caller say what a bracket around a figure means. Why the library stopped guessing, and why the default did not move.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate></item></channel></rss>