Urgent.News

What's breaking now, across thousands of outlets.

Tech

How we check every hour that our PDF API stores nothing

Every hour, a script sends a document with a unique marker through our public API, then searches our logs, temp files, containers and database for it. If it finds the marker anywhere, the check fails, and the latest result is public on pagenull.dev/proof. Almost every PDF API says it doesn't keep your documents. Most mean it. But a promise in a privacy policy is hard to check, and the invoices,…

Every hour, a script tests our PDF API to ensure it does not store any documents sent through it. This is done by sending a document with a unique marker through the public API and searching for the marker in various locations, including the API's own files, logs, temp files, databases and containers. If the marker is found anywhere, the test fails and the result is published on a public page.

Most PDF APIs claim they do not keep your documents, but verifying this claim is difficult as most privacy policies are hard to check. The reason for this is because documents are often stored in unexpected places, such as Chromium's files, logs, crash dumps, and delivery options. To address these issues, our HTML to PDF API, called pagenull, is built to prevent any document storage.

This is achieved by setting up a strict setup that closes off all potential storage locations. The setup includes a read-only filesystem, fresh incognito context per render, crash reporter disabled, and a logger that only accepts specific metadata. Additionally, pagenull does not have any storage option built-in and refuses to keep documents in private or cloud metadata addresses.

The marker used in the tests is a unique string that is only present in one request and can be easily searched for in all potential storage locations. This marker is placed in an HTML document and sent through the API as a free test render. The test searches for the marker in the test render's response, container logs, renderer temp files, all files written by any container, and a dump of the database.

The result of this test is then published on a public page for transparency. In addition to the hourly check, the code is also tested through automated tests before every deployment. These tests specifically check that no files are written, no traces are left on disk, and no write paths are present in the code. This helps to prevent any potential issues from arising in future updates.

Lastly, every render comes back with a signature, called a receipt, which proves what was produced, when, where and with which build. This receipt is an Ed25519 signature over various pieces of information including the render id, SHA-256 of the PDF, the time and region, the renderer build, and stored: false. Anyone can check this receipt against a public key to verify the integrity of the produced document.

However, this method cannot prove that any data has been deleted, only that it was not stored at the time of the test.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

I made a free, open source alternative to Brilliant (140+ interactive math and science courses)

What a Free, Open-Source Brilliant Clone Teaches Us About Lazy Eye Training Someone on Lemmy posted a free, open-source alternative to Brilliant this week: 140+ interactive courses, 1000+ lessons in…

  • OpenAha project offers 140+ interactive math and science courses
  • Feedback loop approach encourages user engagement and contributions
  • AmblyoPunch shares similar adaptive difficulty system for vision training

It won on the steady sellers and lost on the rest

On one Walmart store, a machine-learning forecast was 3.9 percent worse than a 28-day moving average on absolute error, and the worse forecast for 58 percent of the 823 items.

  • Walmart's machine-learning forecast performed 3.9% worse than 28-day moving average on average error
  • Model excelled on steady sellers but struggled with intermittent and lumpy items
  • Moving average outperformed model for 77% of the store's items

Serving Sage-A1.5 on an RTX 4090: one broken flag, one queue, and a self-check mode to measure

Run Sage-A1.5 as a research agent on your own card and the surprises are not in the model. They hide in a reasoning flag, a request limit, a token budget and one system prompt string.

  • Sage-A1.5 runs efficiently on a single RTX 4090 with compressed 22 GB GGUF file
  • Reasoning flag and sub-agents may cause compatibility issues with llama.cpp
  • Verification mode improves accuracy on BrowseComp benchmark from 72.5% to 82.9%

Auditing the Gaps Around Recurly's Own Dunning

Recurly ships a serious dunning system. Automated retries, account updater integrations, and configurable campaigns handle the mechanical core of failed-payment recovery competently, and teams…

More from Sunday 8 November →