Version 0.67.0
2026-08-19 22:19:50 UTC
Changed
2The one place in your browser that handles your keys now checks what it is given instead of trusting it.
Your account code, every file key and your wallet's secret pass through a single module in your browser. Until now that module declared what shape each incoming message would have and used it as declared, so nothing was actually checked — it happened to refuse bad input anyway, but by accident, and that accident ends the day a method arrives that does not use its argument. Each value is now checked for what it is, and a wrong one is refused by name. Two honest limits: only our own page code can send messages to this module in the first place, so this adds a layer rather than closing a hole, and the check on structured values proves they are records without proving every field inside them is right.
The tests that check our encryption format now run on every build.
Two test suites check that the same encryption format is read identically by the engine we wrote, the compiled engine your browser downloads, and the code that drives it — 629 checks in total. Neither was wired into anything, so they only ran when somebody remembered, and one of them had been failing on its first check for a full day without anybody noticing, because a function it called had been removed the day before. Both now run on every build, and the gate also counts how many checks actually ran, so a suite that disappears entirely cannot pass as a suite with no failures. It compares the three against a frozen reference; it does not decide whether that reference is the right one.