What has shipped, dated, newest first, and what is coming next. Nothing here is planned in the past tense.
Follow by feed if you would rather not come back to check. It is an ordinary Atom feed and it is built from this page, so it cannot say anything this page does not.
Join the Discord to hear about new tools as they ship, and to tell us what broke.
Shipped
22 October 2026
Billing
New prices for new subscriptions: everything for US$9 a month, any one application for US$4
All of OBSCURA Pro is now US$9 a month or US$79 a year, with 7 days free. Any one application on its own is US$4 a month or US$35 a year; two still cost a little less than everything, and at three everything is the better buy. Saving from one of the free tools for a day is US$2, paid once. A subscription started before today keeps the price it began at, for as long as it is paid. The Workspace stays free.
21 October 2026
Apps
OBSCURA Converter: files from one format to another, a folder at a time
Converter takes pictures, documents, spreadsheets, audio, video, fonts, subtitles, maps and tracks, contacts, calendars, archives and 3D models, knows each by its contents, and makes it the format you need: HEIC to JPEG, Word to PDF, an iPhone’s MOV to MP4 without re-encoding it, Excel to CSV. A whole folder at once, saved as one zip or straight into a folder, with presets for the common jobs and a folder watched for new files. Part of Pro. Old .doc and .xls files and AVI are not read; its page says what else it does not do.
7 October 2026
Billing
Lower prices: everything for US$5 a month, any one application for US$2, one tool for a day for US$1
All of OBSCURA Pro is now US$5 a month or US$48 a year, with 7 days free. Any one of the fifteen applications can be had on its own for US$2 a month or US$19 a year; two cost a little less than everything, and at three everything is the better buy. Saving from one of the free tools for a day is US$1, paid once. The day, week and gift passes are no longer sold, and a pass already bought keeps the terms it was sold on. Team and Business are no longer offered: each person now needs a plan of their own, and a team or business that already has one keeps it and goes on adding people and taking them off at /seats. Each place you pay now offers two choices at most: an application on its own or everything, or a tool for the day or everything.
7 October 2026
Site
Security headers on every response, and signing out clears the offline Pro code
Responses from the site’s own functions now carry the same security headers as its pages, and the Pro lock adds HSTS. Signing out takes the copy of Pro code kept for working offline off the device as well as the key. Opening a Keep or Practice file has a ceiling on the work its key derivation can ask for, so a crafted file cannot hang the tab. PDF Studio’s signing moved to node-forge 1.3.2, which fixes three published faults in how 1.3.1 read the .p12 file a signer brings.
7 October 2026
Billing
Site
What Pro is, said before you pay
The front door says who the site is for and what Pro costs, with the way to every application; the Photo Editor and PDF Studio have full tiles beside the others. Each application’s page, without a key, carries the site’s bar, the price under its button, the one thing it does not do that most often decides it, and its comparison guides. The panel names the application it is on, and offers the month and the year as two equal choices, each saying what follows the free days. Every price says US$, the currency Stripe charges in. New comparison guides: Adobe Illustrator and Affinity Designer beside Vector, Audacity and Adobe Audition beside Sound.
6 October 2026
Apps
OBSCURA Vector: vector illustration and design
Vector draws logos, icons, illustration and posters with the pen, shapes, type, gradients, layers and artboards, with unite, subtract, intersect and exclude worked out on the curves, and SVG, PDF and PNG out. Part of Pro. It has no brushes, symbols or effects yet, and opens SVG rather than Illustrator files; its page says what else it does not do.
6 October 2026
Apps
OBSCURA Sound: a multitrack audio editor
Sound records, cuts, cleans up and mixes podcasts, voice-overs and music on a multitrack timeline, measures loudness to ITU-R BS.1770-4 and sets it for a podcast on export, with markers as chapters. Part of Pro. It exports WAV, and Opus or AAC where the browser can, but not MP3.
6 October 2026
Site
The OBSCURA OS desktop, at /os
/os runs the site as a desktop: every application and tool in a window of its own that can be moved, resized, snapped and minimised to a taskbar, a launcher that searches every tool, and Files, which opens a document in the right application. On a phone it is a grid of applications, each full screen. It is the same pages, from this site, and nothing leaves the device.
6 October 2026
Apps
OBSCURA Practice, Write and Authorship
Three applications, each part of Pro. Practice is practice management for a small firm: clients, the conflict check, matters, time, bills and client money, encrypted on the device. Write is for novels and screenplays: a binder, a corkboard, screenplay format and a compile to standard manuscript format. Authorship keeps a tamper-evident record of how a piece of writing was made, which anyone can check free at /verify-authorship.
5 October 2026
Apps
OBSCURA Books, Keep, Roots and Research
Four applications, each part of Pro and kept on the device. Books keeps a small business’s books, from the bank statement to the VAT return and the year end; it works the return out, and you submit it with bridging software. Keep holds documents, passwords and two-step codes, encrypted before anything is stored. Roots is family history, with GEDCOM in and out, charts and a book. Research puts statistics and interview coding in one project. The bar now has four tabs, Workspace, Keep, Apps and Other, and every paid application is a tile on Apps.
1 October 2026
Apps
OBSCURA Umbra: a code editor that runs your code
Umbra edits a folder of code where it is, runs JavaScript, TypeScript and Python in a sandbox walled off from the site, previews a web page as you write it, and commits with git on the device. Part of Pro. It has no terminal and runs no servers.
30 September 2026
Apps
OBSCURA Case and PDF Studio
Case is e-discovery on your own computer: a matter’s email and documents loaded, deduplicated, threaded, searched, coded, redacted and produced with Bates numbers and load files. PDF Studio changes the words already in a PDF, redacts them out of the file, signs with your certificate and makes scans searchable. Both are part of Pro; the free PDF editor in the Workspace is unchanged.
30 September 2026
Site
A security pass across the site
Every library is pinned by its hash, a spreadsheet exported from any tool is guarded against formulas that run when it is opened, the Pro lock answers every kind of request, the payment webhook refuses an oversized body before reading it, and the way back from checkout never leaves the site. The security page says how to report a fault.
29 September 2026
Site
Sovereign
Engineering
A help centre you can search, a tour in two more applications, and tags on this page
Help is now thirty-three short answers under six topics: the jobs people come for, Pro and billing (passes, trials, cancelling, refunds, keys and seats), working offline and where work is kept, what to do when work has gone, Business, and the first steps in each suite. Each has an address of its own, such as /help#cancel. The box at the top searches them as you type, and lists the tools and guides the site search finds for the same words. The list of every other page is still underneath.
The first visit to the front door shows one line, how the site is used in three steps, which can be closed and is not shown again. The Sovereign Suite and the Engineering Suite now offer a short tour the first time they are opened, as the Photo Editor does: it is offered, never started by itself, and Help, Take the tour, runs the Engineering Suite's again.
Every entry on this page now carries tags (Workspace, Sovereign, Photo, Engineering, Billing, Site), which filter the list, and the feed carries them too. When something has been added here since you last read it, a dot appears beside the name in the bar.
29 September 2026
Billing
Saving from the ten busiest tools is checked by the server
In CLOAK, SEAL, SCRUB, DOCSCRUB, CLEANSHEET, DOTS, FLATTEN, TRAIL, STAPLE and AVSCRUB, the code that writes the saved file is now Pro code, which the server sends only to a paid key, as it does for the Pro applications. Checking a file is unchanged: free, on the page, and offline. With a key, the first save fetches the writer and every save after it works offline too. The Field Kit checks files with these tools and says plainly that saving needs the site.
29 September 2026
Workspace
Photo
Continue where you left off, hand a file to the next application, and three more formats out
The front door lists the last eight documents from Docs, Sheets, Slides, Notes, the PDF editor and the Photo Editor's autosave, each with a small preview, its application's mark and the time, and opens each where it was. The list is kept in this browser only; Clear forgets the list, not the documents.
Drive's Open with hands a file to the application for its kind, CLOAK hands a cleaned photo to VEIL or the Photo Editor, the PDF editor sends a page to the Photo Editor, and Sheets sends a block of cells to CHART. Settings, Available offline, shows what this browser holds and fetches the rest. The Install link uses the browser's own install prompt where it has one. Docs now writes ODT, Sheets writes ODS, and Slides writes a PDF of its notes pages.
29 September 2026
Engineering
Assemblies in the Engineering Suite
An assembly brings parts together: from this device, from a project, from a STEP or STL file, or from the standard parts. Joints (rigid, revolute, slider, cylindrical, planar and ball) are picked in the view, and a component drags only as its joints allow. There are exploded views in steps, a bill of materials with part numbers, materials and masses, as a CSV and as a parts list on a drawing, and a check for interference between components. The standard parts are screws, nuts, washers and pins from the ISO tables, and the 6000 series of bearings.
29 September 2026
Engineering
The Engineering Suite in inches, with your own keys, templates and configurations
A part can be in millimetres, centimetres, metres, inches or feet, and any field takes units typed into it (1/4 in + 3 mm). The History has a rollback marker, folders and renaming in place; the undo history is labelled; the keys can be changed, with a printable sheet of them. Part templates and examples (a bracket, an enclosure, an involute gear), ISO and ANSI drawing templates, and configurations from a design table. The hole tables were checked against published tables, the few values that were wrong were corrected, and what could not be checked is marked on the hole.
29 September 2026
Site
The front door's marks, in colour
Each suite and application on the front door has a mark in a colour of its own, drawn as a line over a lightly filled shape, and the Continue list wears the same marks. The contrast check now measures every one of them, in light and dark.
29 September 2026
Site
Four pages about how the site keeps its word: trust, status, accessibility and support
Trust sets out what the server sees, route by route, who else handles any data (Cloudflare, and Stripe for payments), what the Pro lock answers, and how to check all of it yourself; the build stops if the page no longer covers the code. Status shows whether the site has been answering, from a check run every thirty minutes. Accessibility names the standard aimed at and the gaps still open. Support writes the email for you, with an optional description of this browser that you read before sending, and says what to do when work has disappeared.
28 September 2026
Billing
Business, and a key for each person on Team and Business
Business is US$299 a month or US$2,990 a year for up to 100 people, with 14 days free. On /seats, whoever holds the subscription's key adds people by name and email address, one at a time or from a CSV file, and each gets a one-time link to a key of their own. Removing somebody stops their key within about two minutes wherever they are online. Every change is kept in a record for auditors. A team already sharing one Team key can go on doing so. On Business, the Sovereign Suite's reports carry the organisation's name and logo, and the yearly plan can be bought through a purchase order; for teams says how, and has a security questionnaire to download.
28 September 2026
Site
No advertising, ever
The site carries no ads and loads no third-party trackers, and that is now a rule rather than the current state of things: revenue is Pro, and nothing else. An old ads.txt file, left from before, has been removed.
28 September 2026
Site
The site's own page count, and exactly what it carries
The one request the site sends about a visit now carries three things: the path with no query or fragment, one event from a fixed list, and the kind of place the visit came from. Nothing is sent where the browser asks for no tracking (Global Privacy Control or Do Not Track), and the server refuses anything else. Privacy lists every value it can carry.
28 September 2026
Sovereign
The Sovereign Suite grows to forty-nine services, and a forensic workbench
Frameworks, controls and policies; an evidence locker, audit packs, questionnaires, a trust page, a board report and a compliance calendar; building and shipping safely; people, access reviews and training; vendors, risks, assets and privacy; incidents, monitoring and secrets. Set up asks a few questions and switches on what fits, with a first-90-days plan, or opens a demonstration company to look around. What is due gathers every date from every register. The registers can be sealed with a passphrase, backed up in one file, and kept in several workspaces. The Sovereign Console is a full-window workbench for looking hard at a file.
28 September 2026
Photo
The Photo Editor: a start screen, a private Export As, and selecting the subject on the device
With no picture open, the editor shows a start screen: open, new, paste or the sample, recent pictures, common sizes and templates. Export As shows a before and after at the chosen quality and an accurate size, and has a switch, on each time, that keeps the place and the camera out of the file; every file is read back before it is saved, and one that still says where it was taken, against the switch, is not saved. Quick Export repeats the last one.
Also: Select Subject, Remove Background and the Object Selection Tool, all worked out on the device; Develop's colour mixer, colour grading and tone curve; smart guides; Export Layers and Artboards; fingers and a pen, as on an iPad; symmetry painting; shortcuts and workspaces of your own; noise reduction in the background; and a tour of four stops, the first time, if asked for.
28 September 2026
Engineering
The Engineering Suite: a sketcher, exact geometry, and drawings from the part
Sketches held by constraints and dimensioned in the part's variables, with the degrees of freedom left counted. Faces, edges and corners picked in the view and measured. Shell, loft, sweep and springs. An exact kernel, OpenCascade in a worker, for fillets and chamfers on the edges you pick and exact STEP. A part's views put on a Foundry sheet with a title block, and kept up to date. Foundry itself gained sheets, plot styles, DXF 2000, underlays and constraints.
28 September 2026
Site
Workspace
Reference pages, guides in clusters, and asking the browser to keep your work
New reference pages: every function in Sheets, keyboard shortcuts, file formats, a glossary and templates. The guides are filed in clusters, linked to one another, and found from the search and from Where to start. Every Workspace application, and the Photo Editor's autosave, now asks the browser to keep the site's storage, and where it says no, says once what keeps the work safe: installing the site, or choosing a folder.
27 September 2026
Sovereign
Six new services in the Sovereign Suite, for the people who build and run the systems
The Sovereign Suite now has twenty-four services. Three are in a new section, Build and ship safely, next to signing a release. Check cloud and container config reads Terraform, Kubernetes manifests, Dockerfiles, Compose files, GitHub Actions workflows and IAM policies, and flags sixty kinds of setting that expose data or hand out too much access, each with the line it is on and the fix; the results save as SARIF for GitHub code scanning. Dependencies and SBOM reads lockfiles from npm, Yarn, pnpm, Python, Go, Rust, PHP and Ruby into a software bill of materials in CycloneDX or SPDX, sorts every licence against a policy you set, and, only when you press the button, checks the versions against the public OSV.dev vulnerability database. That check sends each package's name, version and ecosystem and nothing else, and it goes through this site, so OSV never sees your address. Track vulnerabilities takes findings from scanners and penetration tests, scores them with CVSS 3.1 and 4.0, gives each an owner and a date to fix by from its severity, and reports on what is open and what was fixed on time.
The other three sit with SOC 2 readiness. Review who has access compares the user lists exported from your systems, including the AWS credential report and Microsoft Entra ID, with your staff list, flags leavers still enabled, admins without two-step sign-in and accounts nobody recognises, and records each decision and the sign-off. Vendor register keeps each supplier's data, assurance reports, agreements and review dates, and says which need attention. Staff security records keeps policy acknowledgements by version, training due dates, and joiner and leaver checklists. Each saves its evidence as a report an auditor can read, and none of them makes anybody compliant; they keep the records a review needs.
Like the rest of the Suite, they are part of OBSCURA Pro and run on your own machine: the files you give them are read in the browser window and never uploaded.
27 September 2026
Engineering
Billing
The Engineering Suite: parametric 3D modelling, part of Pro
The Engineering Suite is a CAD program in the tab. A part is a list of features, each editable after the fact: boxes, cylinders, cones and spheres; sketches extruded or revolved; holes with counterbores along any axis; joins, cuts and intersections; moves, mirrors and patterns. Every dimension takes arithmetic and named variables, so a plate drawn with w = 90 becomes a longer plate when w changes, with its holes where they belong. It measures as you go: size, volume, surface area, through-holes and mass in ten materials, and the distance between two points. Parts leave as STL and 3MF for a slicer or a machine shop and OBJ for a renderer, and an STL comes back in as a solid. The geometry is computed on your machine by manifold-3d, drawn by three.js, and never uploaded. Like the Sovereign Suite and the Photo Editor, the whole of it is part of OBSCURA Pro.
27 September 2026
Sovereign
Photo
Billing
The Sovereign Suite and the Photo Editor are now part of Pro
Yesterday's entry below drew the line in one place, and today it moves. The whole Sovereign Suite application is now part of OBSCURA Pro: all eighteen of its services, from SOC 2 readiness and finding sensitive data to cleaning files before sharing, sending a file securely, unlocking a shared file, backing up passwords and codes, and your data. Without Pro the page shows a lock screen. So is the whole Photo Editor, not only camera raw and saving as PSD: editing, layers, export, all of it. Without Pro the page shows what the editor looks like and asks for a plan.
What that replaces. Yesterday this page said the Photo Editor was free to edit in and to export JPEG and PNG from, that five services in Sovereign were Pro, and that opening a file somebody locked for you and backing up your own data in Sovereign would never be charged for. None of that holds for the application any more.
What does not change. The single tools under the Sovereign tab, such as CLOAK, X-RAY and LOCKBOX, are still free to open and to check a file with, and saving the result is Pro, as it is for every other tool outside the Workspace. The Workspace stays free for everyone, with no account: Docs, Sheets, Slides, Notes, Calendar, Tasks, Contacts, Plan, Drive and the PDF editor. The prices are the same: Pro is US$15 a month or US$144 a year with 7 days free, Team is US$69 a month or US$690 a year for up to 25 people with 14 days free, and a pass is US$5 for a day or US$9 for a week. And Pro runs on your device like everything else here: nothing is uploaded.
26 September 2026
Billing
OBSCURA Pro, and what stays free
Ten days ago this page said there was nothing to buy. That was a bet that a free site could be paid for by people chipping in, and the numbers since have settled it: it cannot, and a site that cannot pay for itself does not stay up. So the chip in page is gone, and there is one thing to buy instead, OBSCURA Pro.
What is free. The Workspace, all of it: Docs, Sheets, Slides, Notes, Calendar, Tasks, Contacts, Plan, Drive and the PDF editor. And every other tool is free to open and to check a file with. It still shows you the location in the photograph, the author in the document, the text under the redaction that did not take; you see your own problem before anything is asked of you. The Photo Editor is free to edit in and to export JPEG and PNG from.
What is Pro. Saving or exporting the result in the tools outside the Workspace: the cleaned photo, the redacted PDF, the report. The five services in Sovereign that security teams otherwise buy a platform for (SOC 2 readiness, finding sensitive data, a certificate inventory, release signing and folder watch). And camera raw and saving as PSD in the Photo Editor. Pro is US$15 a month or US$144 a year; Team is US$69 a month for up to 25 people; and for somebody with one job to do, a pass is US$5 for a day or US$9 for a week, paid once.
What is never charged for. Opening a file somebody locked for you, and backing up your own data. Holding either back would be holding people hostage.
How it keeps the rest of the site’s word. Pro is a key, not an account. Stripe sells it; the key is a signed statement of the plan and its end date, checked on your own device, so the tools work offline. On another device you sign in with the email you paid with, and there is no password. The one thing that ever leaves your machine is the key, when Pro code is fetched, so the server can see it is paid for. Your files never do, on Pro or off it.
22 September 2026
Site
Four tools were telling you things that were not true, and one of them was about your location
A sweep fed every tool that takes a file a zero-byte one and a .png that was really text. Nothing crashed, which turned out to be the wrong question. What it led to was worse than a crash, because a crash at least tells you something is wrong.
AVSCRUB reported a video's location removed while the whole route was still in the file. A phone does not write location once. iOS also records it into a timed metadata track: a whole track beside the picture, a reading every second or so for the length of the clip. Stripping removed the single fix, struck “Location” through in the list, said the entries were gone, and left every coordinate in place. Measured, not guessed: a test clip with three fixes in such a track came back with all three intact. AVSCRUB now finds the track and says plainly that it does not remove it, in the list and again in the line you read after stripping, because that is the moment somebody decides the file is safe to send.
STEGOSCAN was blind to the case its own test was written for. It ran the pairs-of-values test on the whole picture, and sequential embedding fills the beginning and stops, so a picture carrying twelve per cent of its capacity came out described in the same words as a clean one. It now scans a growing prefix, finds it, and brackets how long the message is.
Slides and Calendar said the opposite of what had happened. Both swallowed a failure and then let the save bar say “Opened notes.txt” over the top of it. And all twelve apps sharing that bar answered a refused file with “Could not open that file” while the app that refused it was holding the actual reason, which it did show you if you dragged the file in instead. They say why now.
WIRE's all-clear claimed more than it had checked, saying “no flow on a regular timer” when the check only ever counts TCP connections. It says TCP now, and names what it did not look at.
Three tools that had no test at all (AVSCRUB, PACK and STEGOSCAN), and the save bar those twelve apps share now have 78 checks between them, on files built byte by byte so each one exercises the case it is about.
22 September 2026
Site
A new tool, built because the search results asked for it, and ten guides
PLUGGED reads a Windows setupapi.dev.log and lists the USB drives that were attached to that machine, decoding each into vendor, product, revision and serial. It is careful about the two things that make this easy to get wrong: Windows writes a line when it installs a device and nothing when an installed one is plugged in again, so it answers when a drive was first attached and never implies a count; and a drive that reports no serial gets an identifier Windows made up, which means nothing on any other computer, so every row says which kind it is.
The question had been checked and rejected that morning, because the site had nothing that answered it. So the tool was built, and then the page written: that order, not the other one. It ships with 29 checks of its own, against a log carrying one of each case that changes the answer.
A hundred and thirty questions that were written, stored, linked to, and rendered nowhere
Every tool on this site has a line at the bottom of its page pointing at its questions on /faq, and the questions themselves live in one data file that the build turns into the page. The build walked a list of suite headings to do it, and that list had five entries where the site has eight. Standard, Yard and Trace were not on it. (Yard has since become the Desk Suite.) So twenty-six tools (FALL, SLING, AXLE, ZS, RAMP, WEL, VOLTDROP, BALANCE, TORQUE, PALLET, HEAT, LUX, CUT, LEVEL, CONCRETE, PAINT, BEACON, SHADOW, BASERATE, LOGON, TIMESTOMP, TDOA, HOMOGLYPH, ENTROPY, ORIGIN and DGA) had their questions written and stored, had a link to them on their own page, and had that link land on an anchor for a fold the build had never made. Nothing errored. The page was valid, the data was complete, and a hundred and thirty answers existed in the repository and nowhere a reader could reach. The headings are there now (the Yard tools went into a Desk Suite while this was being fixed, so it is Standard, Desk and Trace that were added), and the build refuses to run if a suite turns up in the data with no heading to file it under, or with a heading and no place in the order. That refusal is the only part of this worth keeping. While the file was open: eighty-two tools were listed on /faq with their name and a blank where the one-line description goes, because the entries were made before the descriptions existed. They are filled in from the same place the suite pages take them, so a fold now says what the tool is before you open it. /faq carries 337 tools and 2,001 questions.
21 September 2026
Site
The glow that was painting into nothing, and the seventy pixels between a page and the rest of it
A row on this site is meant to do three things under the pointer: slide its chevron, lift the icon, and take a soft glow that follows the pointer across it. The glow is a background-image on .os-row. Two rules further up the stylesheet set background: transparent and background: var(--paper-inset) on a row inside a card, and the shorthand resets background-image along with everything else, so the gradient was thrown away on every one of the five hundred and fifty-six rows the site has. The code was there, the transition was there, the coordinates were being written thirty times a second by motion.js, and nothing was being painted. Both rules set only a background colour now, which is all they ever meant. The four-pixel lift had the opposite problem: it was written for a and button, and the group headings on a suite page are summary elements, so the biggest rows on the site were the only ones that never moved. Rows inside a card still do not lift, deliberately (the card’s hairlines are drawn by the rows themselves and lifting one tears the grid it is part of), and the motion test now says so, so nobody puts it back by mistake. Then the left edges. The blocks under a tool (the questions link, “Worth reading first”, the related tools) are written in by the build after the closing </main>, so they are siblings of the page rather than part of it and they have to draw their own column. Theirs was 760px wide where the page’s was 944, which put a seventy-pixel step into the middle of two hundred pages: the heading and the tool at one margin, everything under them at another. On a page that keeps the same blocks inside <main> they had the opposite fault, drawing a column inside a column and centring themselves in it a hundred pixels right of the prose they belonged to; and on Sheets and Slides, whose pages are flex columns, a pair of auto side margins does not centre a full-width block at all (it shrinks the block to its text), so the questions line sat three hundred pixels in from everything else. All of it is one column now, and there is a check that walks all 362 pages, finds the landmarks that are supposed to start at the page’s margin, and fails if they disagree by more than a pixel. A suite page was listing its tools down a 416px strip of a 1280px screen, because the block holding them had no width of its own inside a centred flex column and shrank to its longest group name; it takes the site’s 900px column now, which is also why an expanded group reads two tools across instead of one. And the things that were styled and worn by nothing. A hundred and ten lines styling a header badge, an upgrade link and a “pro active” state for a paid tier that was removed months ago and no page has carried since; a redaction tool’s sheet, preset row and certificate card, rebuilt under other names; a dozen more. Thirty-eight class names in total, styled by the sheets and worn by nothing at all. They are gone, and the check that found them runs in the suite now: every class the stylesheets mention has to be worn by a page or built by a script, or the build fails and prints the line number. That is the fourth failure named at the top of the motion test (a selector for something that is not there), and it now has something watching for it. Two smaller things in the same pass: a place to drop a file has an edge again, a dashed ring that closes and brightens when a file is over it rather than a flat coloured banner; and the press on a button went from 0.94 to 0.97 with half a pixel of travel, because a scale is a ratio and 0.94 moves a 28px icon button one pixel and a full-width button on a phone nineteen, which reads as rubber rather than as a button going down.
21 September 2026
Site
Five tools where being approximately right is the same as being wrong
Most of what is on this site degrades gracefully: a slightly wrong readability score is still useful. These five do not. A barcode with the wrong check digit scans on nothing, a loan quoted the wrong way is out by a factor of two, a pseudonym that can be reversed is not a pseudonym, a reconciliation that misses the near-matches finds nothing, and a transcript that repaginates cannot be cited. So all five are checked against published values rather than against themselves. LOAN exists for one number. A flat rate is charged on the whole amount for the whole term, and you do not have the whole amount for the whole term: you are repaying it as you go, so on average you have had about half of it. Five per cent flat over three years is 9.31% nominal and 9.72% effective: very nearly double the number in the advertisement, and that is the general rule rather than a contrived example. The page computes the schedule, solves for the effective rate against what you actually received so a fee taken out of the advance is in it, and puts the flat-rate equivalent beside it whichever way round you came. The solver is bisection, and the test checks that it returns exactly the rate the payment was built from. BARCODE draws Code 128, EAN-13, UPC-A, EAN-8 and Code 39 in millimetres with the quiet zone, which is part of the symbol rather than a margin. Two things ruin a barcode and both are discovered after the labels are printed: a check digit that does not agree, which a scanner simply refuses, and a symbol scaled to fit a box, which loses the module width. It computes the check digit, and where the one you typed disagrees it says so rather than quietly replacing it. Code 128 switches to its numeric set automatically, which puts sixteen digits in half the width. The test holds the pattern table to its 107 entries, the checksums to a hand calculation, and the check digits to published examples. ANON replaces identifying columns with codes from a keyed hash. This matters more than it sounds: hashing a name does not anonymise it, because there are only so many names and anybody can hash all of them and look yours up; the same goes for dates of birth, postcodes and every other identifier whose space is small enough to enumerate. An HMAC with a key you hold cannot be attacked that way, gives the same code for the same person across files and years, and gives entirely different codes under a new key. It also counts how many rows are still unique on their remaining quasi-identifiers, and says on the page, in the report and in the notes that pseudonymisation is not anonymisation. RECONCILE matches two lists in passes, hardest evidence first, so a pairing found on a reference is never overwritten by a coincidence of amount, and finds the cases a lookup formula silently drops: right reference and wrong amount, and one payment covering three invoices, which it locates by a bounded subset search because an unbounded one finds coincidences. FOLIO paginates a transcript at a fixed column and a fixed number of lines so that page-and-line citations are stable, never breaks a word, numbers the blank lines so two printings cannot disagree, and builds the citation index an advocate otherwise makes with a highlighter. The test suite is 204 checks over thirty-five tools now, every expected figure computed from the definition rather than read off the page.
21 September 2026
Site
Eleven guides, and the bug a test suite found in its first run
The thirty-five tools added over the last two days shipped without the two things every other tool here has: a test that holds them to arithmetic computed outside them, and a guide explaining the thing they are about. Both now exist. The test is 158 checks in a real browser, and every expected figure in it is computed from the definition rather than read off the page, so a refactor that changes a result has to change the test too. It found a real bug on its first run, and it is the kind that never gets reported because it is silent: CHART split its input on commas, so a label reading "Carrow, B" came out as "Carrow, the numbers after it shifted one column left, and the chart drawn from it was wrong with nothing on screen to say so. SPLIT had a proper parser; CHART and SAMPLE did not. There is one parser now, in kit.js, handling a quoted field containing the separator, a quoted field containing a newline, and a doubled quote inside a quoted field (all of which turn up in real exports), and detecting the separator from the first line outside quotes, so a tab inside a quoted field cannot make a comma-separated file look tab-separated, which the obvious implementation gets wrong. The other six failures were the test being wrong rather than the tools, and correcting them made it a better test: the rolling-window case I first wrote was one a calendar week would also have caught, which proves nothing, and is now two weeks of forty hours each with fifty-six in the seven days spanning them. And eleven guides, which is the site’s own standard: every tool that does something worth explaining gets a page explaining it. Why a bar chart has to start at zero works through the arithmetic of the distortion: a four per cent difference drawn as a threefold one, and the distortion has no ceiling, because sliding the baseline makes the apparent ratio as large as you like with the data unchanged. When the mean is the wrong average covers the four diagnostics and then the thing most plain-English advice leaves out: the mean times the count gives you a total and the median tells you nothing about a total, which is why the mean is not simply the worse average. Days between has three answers, not two, because clear days excludes both ends and is what court rules mean. Checking a rota, printing a booklet, writing an account of a use of force, the triage sieve against START and where they genuinely disagree, why a sample needs a seed and why the seed should be published rather than kept secret, the units that are two units with one name, what readability scores are worth, and what a cordon costs in people. Sixty-three guides now. The shared guide rules that eleven new pages each carried a copy of went into theme.css, which took 59KB of duplicated inline CSS off the site.
20 September 2026
Workspace
Thirty tools for the Workspace, which was the thinnest suite by a long way
The Sovereign Suite held a hundred and three tools and the Workspace held twenty-six, which is the wrong shape for a site whose front door sends most people to the Workspace first. These thirty are the ordinary work that actually fills a shift, in four new groups. Briefing and command:BRIEF writes to IIMARCH, SMEAC or a plain structure and names what is absent from a briefing rather than calling it incomplete (a clock time, a place somebody can be driven to, a named person against a task, a sentence about what happens when it does not work, and how people will talk to each other), then generates the one-page card, because a card maintained separately from its brief disagrees with it within a week. DEBRIEF refuses to treat a learning point as an action until it has an owner and a date, which is the entire reason the same point comes back at the next debrief. RISK takes the score before and after controls separately, so a control that does not move the residual is visible as the sentence it is; it asks who accepted a residual above your threshold, because acceptance is a thing a person does; and it keeps every reassessment, because a dynamic risk assessment is a sequence and keeping only the latest destroys what an inquiry wants to see. CHECKLIST records the run rather than the list. HANDOVER counts how many handovers an item has survived, which is the one fact a notebook cannot give you and the one that gets an item dealt with. SOP marks the four defects that make written procedure unfollowable. Rotas and people:ROSTER checks the gaps rather than the days (rest between shifts, consecutive runs, and every rolling seven-day window rather than calendar weeks, which is how a rota that passes Sunday to Saturday hides its worst fortnight), and reports the spread of nights and weekends, which nothing checks and everybody argues about. TIMESHEET counts night minutes by the minute across a band that wraps midnight. ONCALL generates deterministically, so the same inputs always give the same rota and it can therefore be defended. LEAVE holds everything in hours, because a day is a different length for each person, and checks every working day against minimum cover. CAPACITY takes abstractions off strength rather than establishment (a vacancy does not take annual leave), and prices a change in the unit that matters, which is bodies on a shift. Charts and diagrams:CHART draws the SVG in the page instead of uploading your figures, and bars always include zero. ORGCHART and FLOW are written rather than dragged. MATRIX computes how far each weight would have to move to flip the answer, and says plainly when the winner is inside the noise. SEATING checks the must-sit and must-not rules continuously rather than on the day. Printing: everything in millimetres with a real page rule, because pixels are why browser label printing comes out three millimetres small: LABELS, ENVELOPE with a test print you hold against a real envelope, BADGE where the name is the biggest thing rather than the logo, POSTER with an overlap it will not pretend can be zero, and BOOKLET, which imposes a PDF for saddle stitch and writes the first two sheets out page by page because nobody believes the order until they see it. And in the existing groups: PLAIN, OUTLINE, HOUSESTYLE, SPEECH, CONVERT, DATES, FIGURES, SPLIT and SAMPLE. Thirty pages would have been nine hundred copies of the same nine CSS rules, and the check that watches for exactly that would have said so, so there is now a shared kit in tool.css and each page carries only what is genuinely its own. All thirty were driven in a real browser: every page renders, no script throws, and nothing leaves the origin. The tap-target check then found five controls that were forty-four pixels tall and thirty-odd wide, because the small button had a height floor and no width one.
20 September 2026
Site
Five tools for the hour when nothing has a signal
Everything on this site so far assumed a desk. These five assume a road at two in the morning. NINELINE builds the messages that get read out over a radio: the NATO nine-line medical evacuation request, the unexploded ordnance report that is also nine lines and is a different nine lines, METHANE, SALUTE, MIST, a contact report and a situation report. A nine-liner is a script rather than a form: it is read in a fixed order because the person at the other end is writing it down on a pad in the dark and is listening for line four to arrive after line three. So the letter codes sit beside the line they belong to rather than in anybody's memory, the mandatory lines that are still empty are named by number instead of the message being called "incomplete", and the whole thing is rendered as it is spoken, in the phonetic alphabet and the military numerals, with an estimate of how many seconds it will hold the net. TRIAGE is a board rather than a calculator, because triage itself is twenty seconds of questions and what fails at a multiple-casualty scene is the bookkeeping: nobody can say how many are in each category, so the casualty line of the message that orders the ambulances is a guess; and the person who walked away from the vehicle and was marked Delayed at minute four is not looked at again for fifty minutes, which is the one a major incident kills. It runs the sieve as taught here or START as taught in the United States (both, separately, because they disagree about a casualty breathing at twenty-six who cannot follow a command, and quietly merging them would produce a category neither system would give), scores the secondary sort, keeps the count, and puts a clock on every casualty that says out loud when one is overdue. CORDON does the arithmetic nobody does: a four hundred metre cordon is two and a half kilometres of perimeter, half a square kilometre enclosed, and twenty-five posts before anybody is relieved. It holds the published stand-off distances with both figures, since quoting the one nobody may be inside as though it were the distance where glass stops being the hazard is how an evacuated crowd ends up standing under a window; and it turns a centre and a radius into eight positions on the ellipsoid that a unit can actually be sent to, plus the log of who held which corner and when they were relieved. FORCE writes an account of a use of force in the order the decision is judged in and then reads it back, marking the four habits that cost writers most: a conclusion where a description should be, an event in the passive voice with nobody in it, a fact that arrived afterwards sitting in the paragraph about what you believed at the time, and the trade dialect that is heard as a euphemism by everybody outside the job. It also says what is absent from the whole account (the warning, the necessity, the proportionality, the effect, the aftercare, and a single clock time anywhere in the document), because absence is invisible to the person who wrote it. It rewrites nothing, deliberately: an account in somebody else's words is not their account. And SIGNAL answers whether the radio will reach, whether the path will close, and what everybody does when it stops: radio horizon under standard refraction with the geometric horizon beside it, free space path loss, a fade margin given as a sentence rather than a number, the sixty per cent Fresnel clearance that a path which is line of sight on a map still needs, and a PACE card that refuses to treat a tier as planned until somebody has written down the trigger for moving off it. All five make no network call at all, which is both the privacy property and the only sane way to build something whose entire purpose is to be used where there is no network.
21 September 2026
Sovereign
A hundred and three tools, and nowhere to search them
Sovereign Suite is the first thing most people click from the front door. It lists 103 tools inside fifteen collapsed groups, and it had no input on the page at all: no search box, and no Search button either, because these pages carry the plain centred chrome rather than the bar that has one. The only way to search was a keyboard shortcut that nothing on the page mentioned. The front door has had a wide search row for months; its three children had nothing. It is the front door's own component rather than a new one: same button, same class, same place above the list, with wording that suits each suite, because "redact, invoice, EPUB" is no help on the page about spreadsheets. Clicking it opens the same palette Ctrl K does. Wiring it took one word rather than three pages of markup: command-palette.js already carried a single delegated handler for the Search button in every page's bar, so that handler now covers this row too, and the front door's own copy of the binding, which would have opened the palette twice on one click, came out. Adding the row to any future page is now a line of markup and nothing else.
20 September 2026
Sovereign
A tool that was a blank page, and the two thirds of the site that never moved
Two findings, and the first is the worst thing on this page in a long time. QRMAKER was a blank white page. Not slow, not broken-looking: nothing at all, on load, always, for everybody. Its own script asked the document for every element carrying data-kind so it could show one form section and hide the rest, and every tool page here carries <body data-kind="tool">, put there by the page chrome so the stylesheet can tell a tool from a guide. "tool" is never the kind of QR code being made, so the very first call set document.body.hidden and took the whole page with it: heading, form, top bar, footer. Nothing in the harness could see it. There was no script error, so the crawler was content. The tool test drives elements by id and reads their values, which works perfectly well on a hidden page. The contrast and tap-target checks skip anything with no box, and a page where nothing has a box has nothing to complain about. Every one of them asks whether some part of a page is wrong; not one asked whether there was a page. Now the stupidest check in the suite does exactly that, on all 265 of them, and it was run against the broken version first to be sure it fails. The second finding is why the site still felt flat after a fortnight of motion work: it was on the wrong third of it. Opening every page and counting what actually ran found twenty-two that animated nothing, and they were not obscure. Sovereign Suite is the first thing anybody clicks on the front door, and its fifteen group rows sat perfectly still, because the visible row of a collapsible group is a summary (a child of its details, never of a list), so every row rule written so far missed all of them. Why, Privacy, About and sixteen other prose pages have no panel and no header block at all, so nothing matched anything and nineteen pages arrived with a hard cut. Both shapes move now, and the count is one page out of 265 rather than twenty-two, and that one was QRMAKER, which was not a motion problem at all.
20 September 2026
Workspace
The document you open first said nothing, at length
Opening Documents used to greet you with a page headed Executive Meeting Notes that said "this document is powered by OBSCURA OS sovereign document editor" and that "all typing, formatting, and mathematical structures remain strictly in your browser", followed by a table of Performance Metrics reporting that the Local State Engine had 0ms Latency and was Operational. None of that means anything. It is the sound of writing rather than writing, and it was the first thing anybody saw in the flagship app. What a starter document is for is to put one of everything on the page (a heading, a rule, a checklist, a table) so that deleting it leaves you with the formatting already to hand, and to be plausible enough that you can type over it without first working out what it was pretending to be. So it is a monthly review now, with names to fill in, three things agreed and two dates, and one short line saying what it is and that you should type over it. Two of its three action items were also spelled the American way, which is the other half of this entry: a sweep of every page for American spellings in text somebody actually reads found six, in the Docs toolbar, on the privacy page and on the threat model. Six is not many and that is rather the point: nobody files a bug about a spelling, they just read the page as slightly unproofed. The build now checks for it on every run, looking only at what a reader sees, with the platform's own names (prefers-color-scheme, screen.colorDepth), the blend modes Photoshop and the CSS specification both spell that way, and the one sentence that contrasts the two spellings on purpose, all named as fine rather than left to trip it every time.
20 September 2026
Site
Six boxes nobody had styled, including the two you type in first
The same screenshot that found the invisible button also showed the search box on the workbench rendered as the browser's own: a two-pixel inset border, square corners, no padding at all, and nineteen pixels tall next to a page of forty-four-pixel controls. Asking every box you can type into, on all 265 pages, whether anybody had styled it turned up six of them. The workbench and Where to start, which are the two places somebody is most likely to type first. The waitlist, which is where they give an address. And three more in Cards, the ledger and the photo editor's layer search. The cause was a shared-looking class, .txt, that was styled in six pages' own style blocks and in neither shared stylesheet, so every page that did not happen to repeat the rule got nothing, and nothing said so. Nineteen pixels is also well under the forty-four a finger needs. Nothing in the harness could have caught it: the contrast check reads colours, and a default box has perfectly good contrast; the tap-target check measures the things you press, not the things you type into; the crawler looks for errors and overflow, and an ugly box is neither. So there is now a check that asks the question directly, on every page, on a desktop and on a phone, and the whole suite runs it. Finding a bug in a screenshot is a poor way to find bugs. It was the only way this one was ever going to be found, and the answer is not to take more screenshots but to make the harness ask the question that was never being asked.
20 September 2026
Site
Pictures in the install prompt, and a button with nothing written on it
Installing this as an app used to offer a one-line bar saying the name of a website. It now offers a card with the name, what it is and pictures of it, because the manifest carries screenshots: three wide and two narrow, taken from the running site rather than drawn, so a design change followed by one command makes the prompt right again rather than slowly out of date. Taking them found something worse than a missing picture. The first attempt captured the front door with an empty white pill sitting next to a working button. The label was there, and it was white on white. .btn sets the colour a button needs when it is carrying the accent behind it; .btn-secondary replaces the accent with paper and never put the colour back, so class="btn btn-secondary" produced a perfectly ordinary button with nothing written on it. Ten of those are on Subscriptions and two on the metadata scrubber, and the only reason nobody saw them is that both pages load a second stylesheet that happens to set the colour again afterwards. On a page without it (the front door among them), the label simply was not there. Neither the contrast checker nor the crawler could have found it: both read pages as they are served, and every use of the pair was either on a page carrying that second sheet or written by script at run time. A screenshot could, because a screenshot is what the thing actually looks like. The colour is now set where it belongs, the checks cover both buttons in light and in dark, and the screenshot script refuses to write a picture with a notice in it rather than trusting me to notice.
20 September 2026
Site
One offer, once, and a bug of my own on every phone
Two things, and the second is a correction. A device whose system asks for reduced motion still gets a completely still site by default, because that is what the setting means and quietly overriding it would be the wrong thing to do. But that setting is very often switched on years earlier, for one badly behaved application, on a machine since replaced, and the person has no idea it is still on, so they get a site that does not move, no explanation, and no reason to suppose there is a control for it. There is now one quiet line at the foot of the first page they open: this device asks for reduced motion, so nothing here moves; that is usually right, and if it was not what you meant you can turn it on. Two buttons, either answer remembered, never shown again. It overrides nothing by itself. It offers, and the person decides, which is the difference between a control and a trick. It also does not animate in, because a bar sliding up to tell you the site is not moving would be answering its own question. And the correction: the watcher that notices an answer arriving was added to the same file as the glow that follows the pointer, underneath the early return that keeps the glow off machines with no real pointer, so the thing I had just described as fixing the flattest part of the site was switched off on every phone and every tablet, and working on the desktop it was tested on. That is the exact shape of bug that never gets found by looking at one screen, and it was found by running the same test in a phone-sized browser with touch, which the suite now does on every run: the arrival happens there, and the glow still does not. Forty-six checks now, up from twenty-two when this began.
20 September 2026
Site
The answer arrives now, instead of blinking into existence
Every tool here shows its result the same way: it takes hidden off an element, or removes a class called hide from it. Two hundred and fifty-two places do the first and eighty do the second. Both change display, and a change of display is a discrete step with nothing in between for a stylesheet to animate through, so the answer you had just worked for simply appeared, in every tool on the site, with nothing to lead your eye from the button you pressed to the thing that had changed. That was the single largest remaining reason the site read as flat. It can be done in pure CSS with @starting-style, but only for elements a selector can name, and there is no selector for "an element that is sometimes hidden": the class names in question are every class name on the site. So motion.js now notices the change and adds one class, and the stylesheet decides what an arrival looks like, which keeps the shape of every movement on the site in one file. Four things had to be right and three of them are ways to get it wrong: a substring match would have fired on unhide and hidden-fields, the same mutation fires when something is hidden as well as shown, and a class never taken off again would animate the first showing and silently refuse every one after it. All four are now checked in a real browser. The marker on a question at the FAQ also turns instead of being swapped: it had carried a transform transition for months and never changed a transform, which is the quietest kind of dead code, a rule that looks like motion and is not. A copy button gives a short press-and-settle as well as changing its word, because on a phone your finger is over the button while the word changes. A notice slides up from the foot of the window. A picture fades in as it decodes. And all of it, as before, stops dead when Motion is set to None in Settings: the arrival is not even marked in that case, rather than being marked and animated to nothing.
20 September 2026
Site
The last three tools without a page explaining them
Three tools have been doing careful work behind a page that only showed the controls. Keeping a decision log starts from the thing most people have backwards: a log does not exist to show that the decisions were good ones, and it cannot, because it is written before anybody knows how things turned out. It is examined for what was known at the time, what else was considered, and when it was written down, and the rejected options are the field nobody fills in and the one that does the most damage when it is missing, because it cannot credibly be added later. It is also blunt about the hash chain: a chain kept entirely under your own control proves nothing to somebody who does not trust you, because anybody who can edit the browser's storage can recompute every seal. What it gives you is that an alteration cannot be made quietly, and the value is in the head seal you write down somewhere outside the log, not in the arithmetic inside it. Reading a schedule of call data is about the two errors that do almost all of the harm. Read a month-first export as day-first and every event moves by up to eleven months: every pattern is wrong, every window around a moment holds the wrong calls, and nothing on the page looks broken, because the dates all parse and the totals all add up. And a cell site is not a location: a cell serves an area that can be miles across, cells are chosen for signal and load rather than proximity, and the schedule records the cell serving the call rather than where the handset was. Association charts explains why the measure everybody looks at first is the least useful one. The person with forty connections is a switchboard; the person worth finding has three connections and sits on the only path between two groups, and on the chart they are a small node off to one side. Only betweenness finds them, which is the entire reason to compute anything rather than just draw a picture. That brings the site to fifty-two guides, and every tool that does something worth explaining now has a page that explains it.
20 September 2026
Site
The site moves, and you get to say whether it does
A site with no movement in it reads as cheap, and this one had movement that nobody could see. Two things were wrong at once. The distances were too small to register (a page arriving four pixels over a tenth of a second is, on any machine made this decade, indistinguishable from not arriving at all), and, more seriously, the whole lot was wrapped in a media query, so anybody whose computer has "reduce motion" switched on got a completely static site with no way to say otherwise. That switch is often turned on years earlier, for one badly behaved application, on a machine since replaced, and it is not a preference anybody remembers holding. Both are fixed. Rows lift further and their chevrons travel further; the title block, the panels and the rows deal themselves out with delays you can actually follow; a navigation now has a direction, the old page leaving upward as the new one arrives from below, with the bar, the mark and the tab you are on carried across rather than faded; a dialog fades and lifts in instead of blinking into existence. And motion is now governed by an attribute written before the first paint rather than by the media query directly, which means Settings has a Motion control with three positions. System is still the default and still means exactly what the media query meant, so nothing changes for anybody who does not go looking, but Full overrides a machine that asks for less, None overrides one that does not, and the page says in plain words which way your device is currently voting. Thirty-one checks now open real pages in a real browser, hover a real row and measure what the cascade actually produced, in both directions, because motion is the one part of a stylesheet that reading cannot verify.
20 September 2026
Site
Twenty-nine guides stop asking a question about a question
At the foot of every guide is a line pointing at the questions people ask about it. The phrase in that line came from the guide's spec, and a guide written without one fell back to the guide's own heading, so twenty-nine pages invited you to "Questions people ask about Does a photo show where it was taken?", which is a heading wearing a noun's clothes. It is the sort of thing nobody files a bug about and everybody notices. The obvious fix is to write twenty-nine phrases into twenty-nine pages, and it is the wrong one, because the next time any of those pages is regenerated from its spec the old wording comes back and nothing says so. Instead the phrase for every guide (all forty-nine, including the twenty that already read correctly, so the file is the whole truth rather than a patch over part of it) now lives in one map in guide-list.mjs. A build step writes the line from it on every build, and the page generator reads the same map when it makes a new guide, so the two cannot drift apart and the phrase is edited in one place instead of in twenty-nine. The build proving all 262 pages byte-identical on a second run is also the proof that the step is idempotent: it settles, rather than rewriting the same line differently each time.
20 September 2026
Site
Three more guides, and two numbers of my own corrected
Three more of the calculating tools now have a page explaining the thing they do. Fuzzy name matching is the one worth reading even if you never use the tool, because the received wisdom is wrong: the intuition that two unrelated names score near zero, so a threshold of 50 is generously inclusive, does not survive measurement. Scored over a spread of genuinely unrelated pairs, about half come out at zero and the rest land between 42 and 59, while real spelling variants of the same name (Catherine and Katherine, Macdonald and Mcdonald, Steven and Stephen) start around 85. There is a clean gap between 59 and 85 and the sensible place to stand is inside it, which is why the threshold here has a floor of 65 with the reason printed beside it rather than a slider that goes to zero and quietly invites you to drag it there. Checking a dataset before you publish it covers why removing the name column is not anonymising, what k actually measures and why the minimum group matters rather than the average, and the part almost always left out: a group can satisfy k-anonymity and still give the answer away, because if all ten rows in it carry the same diagnosis then finding the group is finding the answer. Sorting files by hash answers the question that confuses people reasonably: MD5 is broken and MD5 is the right tool here, and both are true because a collision between two files an attacker makes is a different thing from making a file collide with a hash already published in somebody else's list. Writing them corrected two figures in earlier entries on this page. The claim that Jaro-Winkler gives unrelated names "something near half by its nature" was wrong: half of them score nothing at all, and it is the tail between 42 and 59 that makes a low threshold dangerous. And the worked skid example said a 22 to 24 metre skid at a drag factor of 0.65 to 0.75 gives between fifty and fifty-five miles an hour. It gives between 37.5 and 42.0. Both are fixed above rather than quietly left, because the new guides state the right figures and a site that contradicts itself is worse than one that was simply wrong.
20 September 2026
Site
Five guides for the tools that do arithmetic
Eleven tools went up here over the last fortnight that work something out rather than change a file (coordinates, timestamps, ledgers, skid marks, the detention clock), and not one of them had a page explaining the thing it does. That matters more for these than for most, because in every one of these subjects the common free answer online is confidently wrong in a way the reader cannot check. So: five guides, under a heading of their own on the index. Converting coordinates starts with the error that actually happens: the same three digits read as degrees-minutes-seconds and as degrees and decimal minutes are up to 729 metres apart, the gap being the seconds figure over nine thousand, which is nothing when the seconds are small and most of a kilometre when they are large, so the mistake is invisible in exactly the case somebody picks to test a converter with. It goes on to what a datum is, why a British National Grid reference done properly needs the Ordnance Survey's OSTN15 correction grid rather than the seven-parameter shortcut that is five metres out and almost never disclosed, and the three UTM irregularities that separate a correct implementation from a nearly-correct one. What is this timestamp is a reference table: seventeen formats with their epochs and tick sizes, every one written as the same instant so the shapes can be compared at a glance, plus why the epochs are the strange dates they are (1601 because it starts the first whole four-hundred-year Gregorian cycle, 1899-12-30 because Lotus thought 1900 was a leap year and Excel copied the bug on purpose) and the thing a timestamp will never tell you, which is a time zone. Benford's law spends as much space on when the test does not apply as on when it does, because running it on a column it was never going to hold for and calling the failure a finding is the most common misuse in auditing. Speed from skid marks shows why the answer should be a band: a skid of 22 to 24 metres at a drag factor between 0.65 and 0.75 is between 37.5 and 42.0 mph, and four and a half miles an hour of width comes out of measurements nobody would call sloppy. And the PACE detention clock sets out why it does not start at the arrest, what hangs off the relevant time, and why the review interval runs from the last review carried out rather than from when it was due. Every figure quoted in them was computed and checked here rather than recalled, which caught two of my own errors before they shipped, one in a date library that silently maps year 1 to 1901, and one claim about a formula's behaviour that was shakier than I had written it.
20 September 2026
Site
The site moves
Everything here was already there the instant it painted, and a page where nothing has ever moved reads as flat however good the type is, because weight in an interface is communicated almost entirely by how things arrive. So: the bar at the top is now handed from one page to the next rather than faded out and back in, so a navigation looks like an application changing what it is showing instead of a document being replaced. Under it, a hairline fills as you read. Titles and panels rise a few pixels into place one after another, and a list of rows deals itself out; the distance is deliberately small, because a long slide reads as a template and a short one reads as substance settling. Panels further down do the same as they are scrolled to, driven by the browser’s own scroll timeline rather than by a script watching the page, so there is no scroll handler anywhere on this site and nothing to stutter on a slow machine. The things you touch now move with a direction: a row lifts and its chevron goes on ahead of it, its icon takes a moment of its own colour, a light the size of a hand follows the pointer across it, and a primary button catches a highlight once across its face. A panel of answers opens to its height rather than snapping to it, a focus ring grows into place, and a result arrives with a little overshoot, which is the one place here anything overshoots at all. Not one of these changes where a single thing sits: the layout is the layout, and only the way it settles is new. Anyone whose system has been asked for less motion gets a completely static site rather than a slower one, and that is checked rather than assumed: a browser is opened with the preference set and every element on the page is measured, and one that still has a duration on it is a failure. Three real faults came out of writing the check and none of them would have been visible by reading the file. An entrance that held its last frame was pinning every row in every list to its resting position, which silently killed the hover lift on the commonest element on the site. Sliding the chevron with a plain translate was un-rotating it back into the square it is drawn from. And the delays down a page were landing one place out, because the rule counted elements of the same tag rather than panels and the title block above them is a tag of the same kind.
20 September 2026
Site
SIEVE: which of these files has anybody seen before
The first hour of looking at a machine goes on deciding what not to look at. Most of its files are the operating system, the applications, the fonts and the icons, and they are byte-for-byte identical on millions of other machines; hashing them against a list of things already known takes them off the table in seconds, and what is left is where the time belongs. SIEVE does that in the tab. Every file gets MD5, SHA-1 and SHA-256 in one pass, because published hash sets are in all three depending on when they were made and a tool that computes only one cannot read half the lists that exist, and rehashing a whole machine because the list you were handed turned out to be MD5 is an afternoon nobody has. MD5 is written out by hand here, since browsers deliberately do not offer it, and the page is straight about what that is for: MD5 and SHA-1 are broken for showing a file has not been tampered with and are not broken for looking something up in a list somebody else made, which is what those lists are in. SHA-256 is recorded for every file so the evidential hash exists too. Lists arrive in whatever shape they arrive in (one hash a line, the output of sha256sum, a CSV column, an NSRL-style export), so every token on every line that is thirty-two, forty or sixty-four hex characters is taken, and whatever is left of the line becomes the label, which is the difference between "this is known" and "this is known to be a Windows font". The number the page leads with is not how many files there are but what share of them the lists removed, because that is the figure that says whether the lists you carry are any use on this machine. And two findings arrive with no list at all: the same content under two different names, which is sometimes a backup and sometimes a rename meant to hide something and the hash does not care which; and the same name holding different content. The test checks MD5 against the vectors printed in RFC 1321 itself, then against an independent implementation at every block boundary where a hand-written one goes wrong (55, 56, 64 bytes) and on text outside ASCII. The files being triaged are the evidence, so nothing is uploaded and nothing is kept.
20 September 2026
Site
SKID: collision speeds, and how wrong they could be
The arithmetic in collision reconstruction is old, published and undisputed. What goes wrong is that it is fed a drag factor somebody remembered, a skid length somebody paced, and a middle ordinate measured with a tape held at one end, and then produces a single confident number that goes into a statement and is read out in court as though it were measured. So SKID does not take figures. Every box is a pair, the lowest the value could be and the highest, and every answer is a range: a drag factor between 0.65 and 0.75 over a skid between 22 and 24 metres does not give forty miles an hour, it gives between 37.5 and 42.0, and that is the sentence that survives cross-examination. The width of the band is frequently the real finding, and the page says so when it exceeds a quarter of the answer, because knowing the measurements are doing more to the result than the collision is worth far more before a hearing than during one. The band is found by sampling the whole input space rather than by evaluating its corners, which matters for exactly one reason: the radius of a yaw falls and then rises as the middle ordinate grows, so its extremes are not at its corners, and a corner method would be quietly wrong on the one calculation where an honest band matters most. It covers speed from a slide with grade, braking efficiency and a speed still on at the end of the marks; several surfaces one after another, where adding the energies is right and averaging the drag factors is wrong whenever the distances differ; critical speed in a yaw; thinking and stopping distance and the speed still on at a hazard, which is the question usually actually being asked; launch speed from a vault or a fall; and the two approach speeds of a two-vehicle collision from momentum, which says plainly that there is nothing to solve when the approach directions are parallel rather than dividing by something near zero. No drag factors are built in, on purpose: one belongs to that surface, that tyre and that day, and a table inside software is not evidence of any of them. And the critical speed equation carries a warning beside it rather than in a footnote, because it is confidently wrong in the middle of its range more often than anything else in the field. The output is a calculation sheet naming every formula, every figure entered and every band produced, with room to record who measured what and in what conditions. It works at the roadside with no signal and nothing is uploaded.
19 September 2026
Site
BEARING: coordinates, with the reading it used printed
Three things go wrong with coordinates and all three go wrong quietly. The first is the format: 51 28 40N is degrees, minutes and seconds, 51 28.67N is degrees and decimal minutes, and each read as the other is four hundred metres out and looks entirely reasonable: enough to search the wrong field. So BEARING prints the reading it took beside the answer and refuses anything genuinely ambiguous rather than guessing. The second is the model of the earth: a great circle on a sphere is quick and up to a fifth of a per cent wrong, while Vincenty’s method on the WGS84 ellipsoid is right to under a millimetre. Both are given with the difference in metres and as a percentage, because across a town it is a centimetre and across a continent it is tens of metres, and only the person using the number knows whether that matters. Where Vincenty genuinely cannot answer (two points almost exactly opposite each other on the earth, where the iteration does not converge), it says so instead of quietly handing back the spherical figure. The third is the datum, and this is where the tool says no. Converting WGS84 to the Ordnance Survey grid properly needs the OSTN15 transformation grid; the seven-parameter shortcut almost every free converter actually uses is about five metres out and almost none of them mention it. Five metres is nothing for a walk and a great deal for a scene, so rather than hand over a quietly wrong number the British National Grid is not offered at all, and the page says exactly why. UTM and MGRS are offered because they are projections of WGS84 with no datum change in them, and they are implemented with the exceptions that are usually the first thing left out: south-west Norway’s widened zone 32, Svalbard’s four unusual zones, and the X latitude band being twelve degrees deep rather than eight, which is what makes an implementation right everywhere anybody would think to test it and wrong precisely where somebody is working in the Arctic. Also destination from a bearing and range, the midpoint of a great circle (which is not the average of the two coordinates, and between two points at sixty north is noticeably not), and a bulk mode for a column. Nothing in the test is checked against a remembered figure: everything is checked against something exactly true by definition (500000 on the central meridian at every latitude, zero northing at the equator, a quarter of the equator being the semi-major axis times pi over two, out-and-back returning you home, and every coordinate round-tripping through UTM and MGRS to the millimetre).
19 September 2026
Site
DIGITS: people are bad at making numbers up, and it shows
Asked to invent expense claims or invoice totals, people produce too few figures beginning with one, too many beginning with five and six, too many round hundreds, and a suspicious bunching just under whatever needs a second signature. None of it is visible by reading the column. DIGITS looks for all of it. The best known test is Benford’s law (in figures that arise naturally and span several orders of magnitude the leading digit is a one about thirty per cent of the time and a nine about four and a half), and it is also the most misapplied result in auditing, because it does not hold for numbers that are bounded, assigned, or all of a similar size. So this decides whether the column is a candidate before it tests anything: how many values, how many orders of magnitude, how many distinct, whether it looks like a run of assigned reference numbers. Where it does not qualify the page says so in red, names the reason, and withholds the grade, while still drawing the distribution, because looking is fine and concluding is not. The tests that do not depend on Benford are given regardless, since they rest only on the smallest digits not being chosen deliberately: repeated exact amounts (forty claims for exactly 47.63 is a template, not a coincidence), an excess of round figures, and the spread of the last two digits. And the one that catches real fraud is the threshold test: give the figure above which something else has to happen and the amounts within a few per cent below it are counted against the ones just above, because a process indifferent to the limit puts roughly the same number either side and splitting a purchase to stay under an approval limit does not. The p-values are computed from the incomplete gamma function in the page rather than read off a table, so they are exact for any degrees of freedom (eight for the first digit, eighty-nine for the first two, ninety-nine for the last two), and there is no table to have copied wrongly. Two real bugs came out of testing that: the tail probability was being worked out as one minus its complement, which collapses to a flat zero once the answer is smaller than about 1e-16 and claims impossibility where the truth is one in 1e44, and an accountant’s trailing-minus negative was being read as positive. The page is also blunt that none of this is evidence: a column can fail every test for honest reasons and pass every one while wholly invented. It says which of ten thousand rows to look at first, which is worth a great deal and is not the same thing.
19 September 2026
Site
LINK: an association chart, and the arithmetic underneath it
A chart drawn by hand shows you what you already believed. The value is in the measures underneath, because they answer questions nobody can answer by looking at a picture. LINK takes a CSV of pairs (call data, a visitor log, directorships, co-defendants, people seen together) and computes the network properly. The finding worth having is the broker: somebody with three links who lies on the shortest path between forty pairs of other people. On the chart they are a small node off to one side; in the network they are the point of failure, and counting connections will never find them. Betweenness will, and it is computed by Brandes' method rather than approximated, so the number is the real one and can be quoted. Alongside it: degree and weighted degree, closeness worked out inside each connected piece rather than across pieces that are not connected at all, triangles and the clustering coefficient, the connected components, and, by one pass of Tarjan's low-link numbering, the bridges whose removal breaks the network in two and the articulation points whose removal does the same. Both are drawn on the chart and named in the findings, because "if this one link goes, these forty people stop being connected to those twenty" is the sentence an analyst is usually trying to write. There is a shortest-chain lookup between any two names that also says how many equally short routes exist, since "three steps apart by one route" and "by forty routes" are different findings. The layout is deterministic: a force simulation with a fixed number of rounds and a seed taken from the names themselves, so the same file always draws a byte-identical chart. That is not a detail: a picture that rearranges itself every time cannot go in a report, cannot be compared with last month's, and cannot be reproduced by somebody else. And the page is blunt about what a line means, which is only that the file said there was a link: nothing about what it was for, whether it was innocent, or whether the two have ever met. A network chart is the most over-read picture in analysis and every measure on it is a property of the data loaded, not of the world. The test checks every measure against graphs small enough to work by hand with the derivation written out: a path, a star, a triangle, a bowtie, two triangles joined by one link, and a diamond where two equally short routes each take half the credit.
19 September 2026
Site
EPOCH: a timestamp is a number, and the number does not say what it means
Pull a timestamp out of a device, a database, a log or a file system and you have a number. 133601616000000000 is a date in at least two formats and a different date in each, and choosing wrong puts an event years out with nothing downstream looking broken. EPOCH therefore does not ask which format it is: it tries all seventeen it knows, works out the date each one gives, and ranks them by whether that date could plausibly be real. Unix in seconds, milliseconds, microseconds and nanoseconds; Windows FILETIME; Chrome, WebKit and Edge; Apple Cocoa absolute time at two scales; HFS and HFS+; .NET ticks; NTP; OLE automation dates as Excel and COM write them; packed MS-DOS and FAT; the time field of a version 1 UUID; GPS seconds; and Twitter and Discord snowflakes. Each answer prints the instant it counts from and the size of its tick (100 nanoseconds from 1601 for a FILETIME, seconds from 2001 for an Apple time, days from 1899 for an OLE date), so the arithmetic can be checked rather than believed, and so anybody who has to explain the figure in a statement has the sentence ready. Hex is read most significant byte first and least significant byte first, always, because a raw disk image and an already-parsed document hand you opposite answers and the day somebody forgets to reverse the bytes is the day the answer is quietly wrong. A run of bare digits is read as decimal and only decimal, since every digit is also a hex digit and reading it both ways would treble the answers with readings nobody meant; say 0x, or space the bytes out, to be read as hex. Nothing is hidden for being unlikely: the plausibility window is a guess, it is yours to move, and a reading outside it is greyed and pushed down with its year shown rather than dropped, because an examiner working on a 1987 floppy needs the answer that guess would bury. It will not choose between a FILETIME and a .NET tick either: both count 100-nanosecond intervals and the number genuinely cannot tell them apart, so both are shown and the decision stays with whoever knows where the value came from. There is the other direction too, one instant into every encoding, and a bulk mode for a whole column once you know what it is. The value being decoded is usually evidence, forensic workstations frequently have no network at all, and this runs in the tab and works offline. Every format is checked in the test against arithmetic done independently: the gaps between epochs are recomputed from the calendar rather than copied from the page, so a passing test means two separate pieces of arithmetic agree rather than one agreeing with itself.
19 September 2026
Site
CROWD: find out whether anybody in your data is alone
Taking the names out of a table does not make it anonymous. What identifies somebody is almost never their name; it is the combination of ordinary facts about them that nobody else in the table shares, and a date of birth with a postcode and a sex picks out most people on its own. A table stripped of names but still carrying those three is not anonymous, it is pseudonymised: still personal data, still the responsibility of whoever publishes it. CROWD measures that. Group every row by the combination of the columns somebody could already know, count the smallest group, and that is k: if it is one, at least one person is unique and anybody holding those facts can find their row and read everything else on it. The useful output, though, is neither k nor the list of people who are alone. It is knowing which column is costing you and what each way of blurring it would buy (what k becomes if the date of birth is cut to a year, the postcode to its district, an age to a five-year band), and every one of those figures is worked out by actually doing it and recounting rather than estimated, shown beside how many distinct values you would have left, because the decision is a trade between usefulness and safety and nobody can make it holding one number. k alone is not enough either, so l is here: a crowd of eight who all share one diagnosis protects nobody, since finding the crowd is learning the answer, and the count of distinct sensitive values in the least varied crowd sits next to k with a warning where it comes out at one. The page is equally clear about what it does not do. k says nothing about a release that still has a name in it, nothing about what an attacker knows from somewhere else, nothing about what two of your own releases reveal side by side, and nothing about hidden sheets or document metadata, which are different failures with their own tools here. And marking no columns at all does not read as a pass: the page says in as many words that it makes the release unchecked rather than safe. There is no good free browser-based tool for this (the serious ones are desktop Java applications with a steep learning curve), and the file you are checking for personal data is the last one anybody should upload anywhere, so this reads it in the tab and does not keep it. The test works a twelve-row table by hand first: seven combinations, three people alone, k of one, l of one, and then the chain of blurrings that does and does not fix it, ending with the finding that no single change to one column helps and the tool correctly offering nothing rather than something that would not work.
19 September 2026
Site
MATCH: screen a list of names against a watchlist, in the tab
Screening names against a sanctions list, a PEP list or an internal one is ordinary work with an absolute constraint: the names are customers, applicants or subjects, and they cannot be pasted into somebody else's website. MATCH opens both lists in the browser and neither leaves it. What makes the job hard is that the match is never exact (the same person is Mohammed, Muhammad, Mohamad and Mehmet, is written surname first in one list and given name first in the other, and has a middle name in one and not the other), and a miss is invisible where a false hit costs somebody five minutes. That asymmetry decides every judgement in here. Each pair is scored five ways and all five are shown: Jaro-Winkler with Winkler's own constants; Levenshtein as a ratio, which catches the whole dropped syllable that Jaro-Winkler is weak on; a token alignment that pairs each part of one name with its best partner in the other and ignores the order entirely, so "Ali Hassan Mahmoud" and "Mahmoud, Ali" meet; Soundex, which the page says plainly is an English-language algorithm and weak on exactly the names that matter most here; and a written-out equivalence table of the transliteration families that actually cause misses, which can be read and argued with rather than trusted. An initial meets the name it stands for, because lists are full of "J Smith" and scoring one character against seven with a string measure puts a real match near forty. Particles come out, so "Osama bin Laden" and "Osama Laden" are one name, and a legal suffix comes out, so a company is not hidden by being a Ltd on one list and a Limited on the other. A date of birth or country that agrees raises a hit up the queue and is kept visibly apart from the name score; neither ever clears a hit, because a list holding the wrong date for somebody is far commoner than two unconnected people whose names are this close. The page says whether it compared every possible pair or indexed the list first, and what the rule for skipping was, because "we did not compare that pair" is not something a screening tool should keep to itself. The threshold will not go below sixty-five, and the page explains why: measured over a spread of genuinely unrelated pairs, Jaro-Winkler runs as high as 59 (about half of them score nothing at all and the rest land between 42 and 59), while real spelling variants of the same name start around 85. A threshold below sixty-five sits inside the unrelated distribution, so it is not caution, it is a trap that matches strangers. Every hit takes a verdict and a note, and the download is the run with the reason written beside each one, which is what somebody asks for a year later. The test checks the measures against the values in the literature before it checks anything else: Winkler's own MARTHA/MARHTA, DIXON/DICKSONX and DWAYNE/DUANE, and Soundex against the examples in the specification, because an implementation checked only against itself is worthless and a threshold set against a wrong one means nothing.
19 September 2026
Site
COMMS: read a schedule of call data without uploading it
A schedule of communications data is the one kind of file nobody should be putting through a website: thousands of other people's telephone numbers, most belonging to somebody with nothing to do with the matter. COMMS reads it in the tab. Every network and every single point of contact writes a different schedule, so the columns are matched up from the headings where they are recognisable (calling party, A party, MSISDN, CGI and the rest) and then shown to you to check, because every figure on the page rests on those being right. Then three things that decide whether the reading is worth anything. Numbers are normalised first: 07700 900123, +447700900123, 447700900123 and 00447700900123 are one telephone number and four strings, and a summary that counts them separately buries the pattern you opened the file to find. Direction is taken from the calling and called party columns rather than from the schedule's own direction column, because that column is written from the subscriber's point of view and reading it as the caller's marks every incoming call as outgoing for whoever placed it. And dates are settled before any row is read: 03/02/2026 is the third of February or the second of March depending on who exported the file, so the whole column is examined, any date with a first part above the twelfth settles the order, and the page says which reading it used and why. Where every row reads both ways it says so in red and asks, because getting that wrong moves every event by up to eleven months and nothing on the page would look broken. From there: per-number counts, talk time and distinct contacts; who spoke to whom with the longest silence in each pair; activity by hour of the day; everything within a window either side of a given moment with how long before or after; and which numbers used the same cell within a set time. That last one carries its caution beside it rather than in a footnote: a mast serves an area that can be miles across, cells change under load rather than movement, and two handsets on one cell were both somewhere in that area, which is not the same as being together. A number is not a person either, and nothing here attributes one. The file is opened by the browser's own file reader, nothing is uploaded, and the schedule is not kept across a reload because it is not ours to keep. The test drives a twenty-two row schedule written in a provider's shape (four spellings of one number, a location column full of commas, a byte-order mark, CRLF endings, durations as both seconds and mm:ss, two deliberately unreadable rows) and checks every figure against the count done by hand, including all seven same-cell coincidences worked through one at a time.
19 September 2026
Site
DECISION: a decision log where changing an entry shows
A senior investigating officer keeps a policy file. A firearms authorising officer keeps a log, a Gold commander keeps one, a local authority keeps one, and a company keeps one the moment it is being sued. They are all the same document: a numbered running record of decisions with the reasons behind them, written at the time. What it is read for two years later is never whether the decision was right on facts nobody had yet, but what was known then and what else was weighed, so DECISION asks for the reasoning, the options that were rejected and why, what the decision rested on, and what was not known, which written at the time is a defence and written afterwards is an excuse. It records when the decision was made and, separately, when it was written down, and shows the gap: a policy file typed up at the end of the week is a different document from one written as things happened, and everyone reading it later knows that, so hiding it serves nobody. Each entry is then sealed with a SHA-256 taken over the entry and the seal of the entry before it, so the entries form a chain and altering one stops it verifying while everything after it is marked as intact but no longer following on. The part worth being precise about is how the head seal is worked out: by walking the chain from the first entry forward, never by trusting the seals already sitting in the file. Verify each entry against the seal stored beside it and somebody can alter an entry, recompute that one seal so it passes on its own, and leave the last seal (the one written down elsewhere) untouched. Recomputed forward, a change anywhere moves the head, which is why the head seal is at the top of the page with a line asking you to write it down somewhere outside the browser now. And the page says plainly what the chain cannot do: anybody able to edit this browser's storage can recompute all of it, so the chain shows the log is internally consistent, and it is the head seal recorded elsewhere at the time that catches the author. Correcting a typo re-seals the entry and everything after it, and the page says so in red before and after; a decision that has actually changed belongs in a new entry that supersedes the old one, and both stay, each marked with the other. Entries past their review date with nothing superseding them are listed. Out as a printed log with every seal, or a CSV with every field. The test does not check that the seals look like hashes; it attacks the log the four ways somebody would (a word changed in the reasoning, a seal repaired to match the altered text, an entry cut out of the middle, a fresh entry written on top of a tampered log) and checks that each one shows, and shows as the right kind of break.
19 September 2026
Site
CUSTODY: the PACE detention clock, with the section beside every figure
Everything in Part IV of the Police and Criminal Evidence Act 1984 hangs off one moment, the relevant time, and it is not the time of arrest. Section 41(2) gives four different answers depending on where the arrest happened and how the person came to be at the station: arrested and taken in, the clock runs from arriving at the first station; already there voluntarily and arrested on the spot, it runs from the arrest; arrested in another force area, or outside England and Wales, from the earlier of arriving in the investigating area and twenty-four hours. Get the limb wrong and every limit and every review moves with it, so CUSTODY works out which one applies, names it, and says why, rather than asking anybody to remember. From there it carries the answer through the twenty-four hours under s.41, the thirty-six on a superintendent's authority under s.42, a warrant of further detention under s.43 and its extension under s.44, against the ninety-six hours from the relevant time that s.44(3) says nothing passes, and it assumes no authority that has not been entered, because twenty-four hours is the answer however long the warrant application is going to take. Time at hospital comes off under s.41(6), unless the person was questioned there for evidence, in which case the whole of it counts and the row says so. The reviews under s.40 fall six hours after detention was authorised and then at intervals of not more than nine, measured from the last review actually carried out, which is what the section says and not what a printed timetable gives: record one late and every review after it moves. The other clock is there too, the custody time limits in the 1987 Regulations, counted in calendar days with day one named, because adding blocks of twenty-four hours puts the date a day out the moment the clocks go back. Every figure carries its section number, the whole calculation is written out as a record with a SHA-256 of itself, and nothing is uploaded, which is the only way a tool like this belongs anywhere near a custody suite. Two things are deliberately left out rather than approximated: detention under Schedule 8 to the Terrorism Act 2000, which is a different regime, and pre-charge bail, whose periods changed in 2022. A detention clock that is nearly right is worse than none, so the test drives the page against hand-worked examples: all four limbs of s.41(2) including both ways the two "earlier of" limbs can fall, a warrant cut short by the ninety-six hour ceiling, a short warrant that does not shorten the thirty-six hours that preceded it, the s.41(6) deduction and its exception, the reviews running from the last one carried out, twenty-four hours across the night the clocks go forward, and a limit in days across the night they go back.
19 September 2026
Workspace
PLAN: a Gantt chart that knows which tasks actually matter
A Gantt chart that only draws bars is a picture of a plan. The useful part is the arithmetic underneath, and it is the part free planners tend to leave out: PLAN does the critical path method properly. A forward pass gives every task the earliest it can start and finish, a backward pass from the project's end gives the latest it can without moving that end, and the difference is its float. The chain with none of it is the critical path, drawn in red; everything else has slack you can spend. All four dependency types are here, each with a lead or a lag (finish to start, start to start, finish to finish and start to finish), because a plan written with only the first one grows invented tasks to express the others. Durations are in working days, so five days from a Thursday is the following Wednesday and the chart does not quietly promise work at the weekend. A baseline can be taken and kept beside the plan, which is the only way to see slippage at all: a plan rewritten as it slips always looks on time, and the summary will tell you it is eight days behind. Tasks that wait for each other in a circle are named and explained rather than hung on. It reads a CSV out of whatever you were planning in, writes one back, saves the chart as an SVG that prints and scales, and keeps everything on the device. What it does not do is level resources; it will add up what each person is carrying and show you, but moving tasks around on your behalf is a decision a tool should not make quietly. The test checks the arithmetic rather than the drawing: every early and late start and finish in a nine-task plan against the numbers worked out by hand, including a start-to-start dependency with ten days of lag and two branches that are deliberately not critical.
19 September 2026
Workspace
REFLOW: a PDF back into a document you can edit
There were nineteen PDF tools here and not one of them got a document back out, which is the single most searched-for thing anybody does to a PDF and the one where every free site wants the file first. REFLOW does it in the tab. The thing worth understanding is that a PDF contains no paragraphs at all (only glyphs at coordinates, with the paragraph supplied by your eye), so a converter is not extracting structure, it is inferring it. Lines come from shared baselines, words from the gaps between glyphs, paragraphs from a wide gap or a line that stops short of a margin every other line reaches, headings from the type size ranked against whatever most of the document is set in, and bold and italic from the names of the embedded fonts. Three things then separate a usable document from a wall of lines, and all three are invisible when they work: the running head and page number repeating on every page are found and dropped, and counted, so they do not land as a stray line every page; a page set in two columns is split at its gutter (which has to be looked for in the glyphs, because a line on the left and a line on the right share a baseline and grouping into lines first welds them together) and read down one side before the other, which is the difference between a paper and nonsense; and a word broken across a line ending is only rejoined where the document hyphenates often enough for that to be what the hyphen means, so unpre-pared comes back whole and long-standing keeps its hyphen. Pictures are pulled out of the page's drawing instructions along with the transform that placed them, so they return at the right size and in the right place in the reading order rather than all at the end. Out as a Word file with real heading styles, real list numbering and real tables, as Markdown, or straight into Docs with no download. What it will not do is said on the page rather than found out later: a scan has no text in it and is sent to OPTIC first instead of being handed back as an empty file; the fonts, colours and exact layout are not carried, because a Word file that reproduces a page by pinning every line to a coordinate stops being editable the moment you change a word. And the page shows you what it decided (headings found, furniture dropped, columns split, hyphens joined), because a converter that shows none of that is asking to be taken on faith. A test builds five PDFs and checks the result of each, down to the heading being a Heading 1 style rather than merely large text.
19 September 2026
Site
Five more, including the two questions this site is best placed to answer
Two of these are the kind of page almost nobody writes honestly, because almost everybody writing about it is the thing being asked about. Sending a scan of your passport or driving licence: what that image is actually worth (account opening, account takeover, the SIM swap that ends at your bank), which fields to black out for which purpose, why marking a copy with who it is for has worked for solicitors for a century, and why a website offering to redact ID documents is by construction a pile of unredacted ID documents. Uploading your CV: what to leave off, what a Word CV says about whoever it was adapted from, and the hidden-text problem from both sides of the desk, including the part people are not told, which is that a downloaded template can arrive with somebody else's invisible text already in it. Then three tool guides. Blurring faces, which explains why this site pixelates rather than blurs: a blur averages pixels and can be computationally undone, and there are real recoveries of blurred faces and blurred text. Transcribing a recording, which says plainly that a model small enough to run in a tab is less accurate than a paid service's, that there are no speaker labels, and that Whisper models are known to invent fluent sentences over silence, because a transcript of a grievance hearing that nobody checked is worse than no transcript. And signing a PDF, which separates the three quite different things that word means and says which one you are usually being asked for, and which one this cannot do.
19 September 2026
Site
Six guides for the jobs this site was already doing quietly
There are 166 tools here and there were 29 guides, and the gap was not random: the tools with no guide were mostly the ones doing the jobs people actually search for. Six of them now have one, and each was written against the tool rather than around it. Compressing a PDF: why a file is 42MB, what the four savings really are, which setting to pick, and the four kinds of file that will not shrink at all. Password protecting a PDF: a PDF can carry two passwords, only one of them is security, and the "remove restrictions" sites are re-saving files that were never locked. Password protecting a zip: one of the two kinds has been broken since 1994, Windows and macOS cannot open the good kind with what they ship, and a locked zip still hands over every file name. Getting text out of a picture: what OCR reads well, what it reads badly, why handwriting is out of scope whatever a site claims, and how to make a scan searchable. Flashcards without an account: the same SM-2 scheduler, and the four things Anki has that this does not, shared decks first. A password manager with no account: what a vault is underneath, and the four things you give up, starting with sync and ending with the fact that nobody can recover your passphrase. Every one of them ends with a table of what this does and what it does not, because a page that only lists what it can do is an advert. And the thirteen guides written before this round were all sharing one generic share image, which is now thirteen cards drawn from their own headings, with a rule in the build so the next one cannot slip through.
19 September 2026
Site
One bar, one footer, one stylesheet
The bar across the top, the brand, the Search and Settings buttons and the footer are the same on every page here, and they were written out four times: once in the shared stylesheet, once in the stylesheet the tool pages link, and once each in the style block of forty-two pages. The copies loaded last, so the copies won. That is not an abstract tidiness problem; it is why the small key beside Search was a different size and a different colour on half the site, why the footer sat four pixels lower on some pages than others, and why on a phone the two header controls never shrank to the icon buttons the shared sheet draws, which is the thing that lets the brand and the controls share one row on a narrow screen. Four thousand lines of duplicate came out. The rules live in one place now, and two other faults came out with them: fifteen pages were putting two columns of form fields side by side on a 390-pixel phone because the rule that folds them into one column had only ever been written on the pages that happened to say it for themselves, and the whole site now gets its side margins back on a small screen rather than only the forty-two. Nothing about the design has changed; the pages that disagreed now agree with the rest. Two things keep it that way: a rule in the build that fails any page whose own stylesheet redefines the shared chrome, and a test that opens all 229 pages on a desktop and on a phone, reads the chrome as the browser actually ends up drawing it, and names any page that differs.
18 September 2026
Workspace
Nothing is saved in silence any more
A browser that is full, or set to keep nothing, throws when a page tries to store something. Thirty-five files here caught that and carried on, which is the worst of the options available: the screen says the invoice is saved, and the next visit says there are no invoices. Two apps had already been fixed one at a time; the rest had not, and nothing was looking. There is now one place in the shared kit that keeps somebody's work and says it when the browser refuses: once, not on every keystroke, pointing at the export the tool already has, and again only after the storage has taken something since, because by then it is news again. Twenty-seven tools were moved onto it: Invoices, WITNESS, TOKEN and the rest of the Record Suite, and the keyring and the signature you draw in PDF. The ones that keep a preference rather than work (which colourway, which record was last open, the list of files recently handed to a tool) are deliberately left alone, because losing a preference costs a click and interrupting somebody for it is its own kind of rudeness. A house rule in the build now fails any tool that goes back to swallowing a refusal, and a test makes the browser refuse the way a full one does and works three tools the way a person would to watch the sentence arrive.
18 September 2026
Workspace
Every picture this site writes into a Word file can now say what it is
A test written to check that the plates in a Word document survive being made into an EPUB found something worse on the way past, and in a place nobody would have looked: the Word writer this whole site shares was putting every picture into every .docx with no description on it at all. Word keeps the words that describe a picture on the drawing itself, as descr, and that is where a screen reader, Word's own accessibility checker and every converter look for them. Ours was empty, so a picture exported from Docs, Notes, CV or BOOK went out mute, and the alt text somebody had written was lost the moment the document left the tab. It is written now, on both the drawing and the picture inside it, and the round trip is checked end to end: a Word file is written here with a described picture in it, opened again by BOOK, and the description is still on the picture in the EPUB that comes out, which READER then draws at the size it really is. The pictures themselves were already surviving that journey as files of their own, byte for byte, in the manifest; that is now held in place by a test rather than by luck.
18 September 2026
Site
A CV with your face on it, a sidebar, and one for the machines
CV had three layouts and no way to put a photograph on one. It now has five and does. The portrait is squared off from the middle and drawn down to 320 pixels, which is enough for the 28 millimetres a printed CV gives it and small enough to live in this browser and inside a Word file; it reaches the page and the .docx. The page says where a photograph helps and where it does not, rather than leaving somebody to find out at the interview: usual in much of Europe, a liability in Britain, Ireland, the United States, Canada and Australia, where employers often ask for CVs without one to keep hiring blind. Sidebar is the new layout for people who want one: a column the full height of the page carrying the name, the contact details, the skills and the languages, with the work beside it. Plain is the opposite and is the one nobody else offers honestly: no colour, no rules, one column, no photograph, nothing that turns into gibberish when a machine scrapes the PDF before a person ever sees it. Moving sections and entries up and down was already there and stays; the order is the order the PDF, the Word file and the plain text all come out in. A test chooses a tall portrait and checks it comes back square, measures the sidebar column against the page beside it, reads the computed style of the plain layout to be sure there is no rule under the headings, and unzips the Word file to find the picture in it.
18 September 2026
Site
An invoice with your logo on it, half paid, and coming round again next month
Invoices could make one invoice, once, unpaid or paid. Four things it could not do are the four things that made people keep a spreadsheet beside it. It now carries a logo: choose a PNG or a JPEG and it goes at the top of the page and of the PDF, drawn down to 360 pixels wide, which is wider than a printer will use and small enough not to eat the few megabytes this browser keeps. A payment can be part of the bill: put the amount and the date down and the page shows what has come in and what is left, the list says part paid with the balance beside it, the totals at the top count the money in as paid and only the rest as outstanding, and the PDF lists each payment and ends with the balance due. Paid is worked out from the payments rather than remembered, so taking a payment off takes the paid mark with it, and Mark as paid writes the rest down as a payment instead of leaving a mark that disagrees with the arithmetic underneath. An invoice can repeat (weekly, fortnightly, monthly, quarterly, yearly), and when the next one is due the list says so and offers to make it, which is a button rather than something that happens in the background, because an invoice that appears by itself is an invoice nobody checked; the new one is dated when it is due, numbered next, a draft, with none of the first one's payments on it, and a monthly bill dated the 31st lands on the last day of a shorter month. And the numbers can start again each year, INV-2026-001, with the year remembered so the restart happens once. The accountant's CSV gained a Paid and a Balance column to match. A test drives all four and reads the answers back out of the PDF with pdf.js, including the logo's own bytes.
18 September 2026
Workspace
An address book that holds more than one number, and cards that take a piece out of a sentence
Contacts held one email and one phone number per person. It knew it was not enough (an import counted the second number and said so), but counting is not keeping. A contact now holds as many of each as they have, with the kind each one is, and the vCard it writes marks the first as preferred, which is the one a phone puts in the To box. A birthday comes in from a card and goes back out, and says "birthday in eight days" beside the name while it is close and nothing at all when it is not. A picture is kept: the one on an imported card, or one you choose, squared off and drawn down to 192 pixels because this browser keeps about five megabytes in all and a photograph off a phone is more than that on its own. The categories on a card are groups, drawn as a row of filters over the list, travelling to a phone and back as the vCard's own field. And an import of somebody who is already here no longer skips the card: the two are made one, so the mobile number that was only on the phone and the work address that was only here end up on the same person, with nothing already filled in overwritten. The CSV has a column for each address and number, the way the address books people actually export from write them, and reads them all back. Two things are still not kept, and both say so: an honorific before or after a name, which has nowhere to go, and a picture held as a link rather than carried in the card, which is left alone because fetching it would tell that server who is reading the card.
Cards could only ask a question and show an answer. It now also takes a piece out of a sentence: write The capital of {{c1::Peru}} is {{c2::Lima}}. and you get one card per number, each asking about its own piece with the rest left to read, which is how a fact learnt in context is learnt; a second pair of colons puts a hint in the blank. Ticking a box adds the pair the other way round as well, because recognising a word and producing it are two different things to know. And how many new cards a day a deck starts is now the deck's own number rather than twenty for everything, because that figure is about how much time somebody has. A test writes a sentence with two pieces taken out and checks both cards, presses the keys that grade them, and checks the deck's limit is obeyed by the session rather than only printed on the screen.
18 September 2026
Workspace
Drive shows you the file, and keeps the one you deleted
Drive could list a file and hand it back, and nothing in between: to see what was in one you downloaded it and opened it somewhere else, and to be sure of what a file was you had to trust the name. Press a file now and it opens in the page. A picture is drawn at the size it really is, and the panel says what that size is. A PDF is drawn as a page by the same pdf.js the reader uses, turned with the arrow keys and counted off as page three of twelve. Anything that is text is read out, the first two hundred kilobytes of it, saying so when there is more. Sound and video play. A kind of file that cannot be shown on a page says so in words rather than drawing an empty box. None of it goes anywhere: the bytes come out of this browser's own storage and the reader is this site's own vendored copy. Delete has stopped being a trapdoor. A deleted file goes to a wastebasket, keeping its bytes and the folder it came from, and Put it back puts it back where it was; the panel on the left says how much space the wastebasket is holding, because a wastebasket that quietly costs you a gigabyte is not a kindness. Emptying it is the step that asks first. A folder can also leave in one piece, as a .zip built here in the tab, with two files of the same name kept apart rather than one landing on the other; and on a browser that can open a folder, every file here copies out into one you choose, each folder here a folder in there, or every file in a folder on your disk comes in, its subfolders becoming folders here. Both directions are a copy made when you press the button, and it says so: keeping two places in step means guessing which side won, and a file manager that guesses is worse than one that copies when asked. A test puts three real files in, opens each one and checks what was drawn, reads the pixels of the PDF page to be sure there is ink on it, deletes a file and puts it back and then deletes it for good, unzips the folder it exported, and drives both folder directions through a directory handle made up for the test.
18 September 2026
Workspace
A note keeps its pictures, and leaves as paper or Word
A note in Notes was words and nothing else: a picture pasted into one either vanished or would have had to be written into the middle of the sentence as a megabyte of base64, which is what stops a markdown note being a file you can read anywhere. Pictures now live beside the notes rather than inside them. Drop one into the editor, paste it, or press Picture on the bar, and the note gets the ordinary markdown line every other markdown app writes, while the bytes are saved under attachments: in the connected folder if you have one, in this browser if you have not. The reading view finds them again and draws them at the size they really are, and a note pointing at a picture nobody has says so in words instead of showing a broken icon. The zip export puts each picture under the same path the markdown points at, so the export opens in any markdown app with its pictures rather than with holes in it. The note can also leave as something other than a text file. Print puts it on paper as the reading view draws it, pictures and all, with the app and the site around it left off, and the page stays laid out for paper until the browser says the printing is over rather than being taken away the moment print is called. Save as Word writes a real .docx with the pictures in it as media parts at the size they are, built here in the tab like everything else. A test drops a forty by twenty picture into a note, reads the markdown line, finds the bytes in this browser under that path, checks the reading view draws it at forty by twenty, unzips the Word file to find one picture part measured to the EMU, prints the note and reads the PDF back to check the app and the site are not on it, and opens the zip to find the picture beside the markdown that points at it.
18 September 2026
Workspace
A slide with nothing fixed on it
Every slide in Slides was one of six layouts, which is what makes a deck look like a deck and what made it impossible to put a logo in a corner. There is now a seventh that fixes nothing: a free canvas. A text box, a picture, a rectangle, an ellipse or a line goes anywhere on it, dragged with the mouse, resized by a corner, nudged a tenth of a per cent at a time with the arrow keys or a whole one with Shift, with the edges and the middles snapping to the other elements and to the middle of the slide. Every element is held as a percentage of the slide rather than in pixels, which is the one unit that means the same thing in the editor, in the filmstrip, in the show at whatever size the projector is, on the printed page and in the twelve-million-EMU coordinate space of a PowerPoint file, so nothing is converted twice and nothing drifts. The file gets each one exactly where it was put, with the rectangle and the line written as PowerPoint's own shapes rather than as pictures of them, and opening that file again brings the positions back. The same reading now rescues a PowerPoint slide somebody else laid out by hand: it used to arrive as a heap of text in the bullet layout with every position lost, and it now arrives as a canvas slide with its boxes where they were, measured against the file's own slide size so a four by three deck is not stretched. A deck can also carry a footer and slide numbers on every slide, drawn outside the layout and outside the canvas so nothing can sit on top of them, and they go into the PDF and the PowerPoint file too. A test puts four elements on a slide, drags one with the mouse, resizes one by a corner, nudges one with the keyboard, then unzips the exported file and checks each is where it was put to the EMU.
18 September 2026
Site
Every page carries its own card, and the build says so
A sweep across all 229 pages of what a link to one shows in a search result, a chat window or a feed. Every page now carries a title, a description under the length a search result cuts off at, a canonical address, the four Open Graph tags, both Twitter tags and structured data; the fourteen guides had the share picture but not the tag naming it, one description had crept a character past 160, and the four pages that ask not to be indexed had no card at all, which is not the same thing: nobody searches for Settings, but people paste a link to it. They have their own cards now, and the page that is not here borrows the front door's. Four new rules in the build check make each of those a build failure rather than something to find again in six months, and the sitemap lists every page that asks to be indexed and none that does not.
18 September 2026
Photo
The editor fills a hole with the picture, writes a TIFF, and tells you what your photo is carrying
Taking something out of a photograph asks one question: what was behind it? The Photo Editor used to answer it by spreading the colours inward from the edge of the hole, which is right for a plain wall and a smear on anything else, because a photograph is texture and a smear has none. It now answers it with PatchMatch and the iterative vote: the hole is filled with pieces of the picture itself, found by a search that runs coarse to fine in a Worker, and the seam is matched to the light around it. The spot heal brush, Remove what is selected, the patch tool and content-aware move all go through it, and a long fill can be stopped with Escape. A test cuts a disc out of a brick wall and holds the fill to the wall's own mean and standard deviation within fifteen per cent, because "filled with the texture around it" is a claim about pixels and there is a number for it. Alongside: Export as writes the formats a canvas cannot, a TIFF plain or LZW and a sixteen bit PNG, written here byte by byte, with AVIF offered only where the browser really has it. The Info panel now reads what a photo carries besides its pixels, the camera, the lens, the exposure, the date and the position, straight from the bytes of the file, and an export offers to strip all of it, to keep the camera fields and drop the position, or to keep everything; a second test reads the written files back and searches the bytes for the position that should not be in two of the three. Image size offers nearest, bilinear, bicubic and Lanczos 3, each widening its window as the picture shrinks so a reduction averages the detail rather than skipping it. And Levels gains eyedroppers for the black, grey and white points, a clipping view under Alt that shows what is about to be thrown away, and Curves takes a point typed in by number as well as dragged.
18 September 2026
Workspace
Forms that ask the next question, and say what the answers came to
Forms asked everyone everything. A question can now carry rules against the answers above it, showing it only when a choice is one thing, is not another, is answered, or contains some text, matching all the rules or any of them; a question its rules hide is not asked and no answer for it is kept. A page break splits a long form into pages the person filling it in walks with Next and Back, keeping what they have typed as they move, and a required box that is empty or an address that is not one is refused with the keyboard put on the box at fault rather than a message at the top. The summary now counts each answer, averages a linear scale, and draws the counts as a bar, a pie or a line with a PNG of each chart to hand: the chart is drawn by the same code the spreadsheet uses, so a bar here and a bar in Sheets are the same picture in the same colours rather than two drawers slowly drifting apart. A test builds a form with a conditional question, a scale, a grid, a page break and an email address, opens the share link in a browser that has never seen this site, fills it in twice, and checks the counts, the average and that the chart on the page is really drawn rather than an empty box.
18 September 2026
Workspace
Docs: comments that Word can read, version history, page numbers
Three of the things a document goes through before it is finished, and one of the reasons people still open Word. Docs now takes comments: select the words and press Ctrl+Alt+M, and the comment is anchored to those words so it cannot drift off them, with replies threaded under it. Your name is typed once and kept in this browser; nothing about you leaves the device. They are written into the Word file as a real word/comments.xml, with the range markers around the right words and the replies threaded through commentsExtended, which is how Word itself stores them, so Word, LibreOffice and Google Docs all show them, and opening that file here puts them back on the same words. On paper they are hidden, because a highlight nobody asked for is not part of the document; ticking print with comments keeps them and adds the threads as a list at the end. Version history keeps the document as it stood at each autosave that changed the words, with the time, the word count and a word-level diff of what changed: preview one read only, name one to keep it for good, or restore it, and the state a restore replaced is kept first so the restore can itself be undone. The last twenty-five are held, or about two megabytes, and history is never allowed to be the reason a document will not save. Page setup can number the printed pages, bottom left, centre or right, drawn by the print itself rather than written into the words, so the number is the sheet's own and stays right however much you edit. Insert, Special character offers about three hundred characters searchable by name, so a euro sign, an em dash or an é is a word away. Clicking a picture now sets its width, which side of the page it sits on and its alt text, and the Word file's extent follows. Clear formatting strips the markup and leaves the comment anchors standing. A test drives all of it and reads the finished Word file and the printed PDF back.
18 September 2026
Workspace
Several calendars, reminders that say what they cannot do, and a board that repeats
The Calendar held one undifferentiated pile of events. It now keeps as many calendars as you like, each with a name and a colour, and an event belongs to exactly one of them. Unticking a calendar takes its events off the grid without deleting anything, and removing one moves its events rather than losing them. An event can carry a reminder counted back from its start, and a new shared schedule fires it from an open tab: the page says in as many words that nothing here can wake a closed browser, and a reminder that came due while the site was shut is reported as missed rather than announced as though it were now. The desktop notification is the browser's own, and it is only ever asked for from a press of the button. The .ics carries the reminder as a VALARM and the calendar's name and colour with it, so a file that goes out and comes back lands in the calendar it left; a file from anywhere else asks which calendar its events should go in before a single one is written. An event can be dragged from one day to another, a repeat asking first. The week is now seven columns of clock time with a grip at the foot of each event for changing when it ends, falling back to seven day cells on a phone. There is a search across titles and notes, and week numbers down the side of the month for anyone who works in them. Tasks gains the same reminders, a checklist on each card, repeats that make the next task when one is finished with its steps unticked, a list beside the board grouped by tag, and keys for adding, searching and moving about. The calendar shows an open task as a chip on the day it is due, linked to the board and never written by the calendar. One bug found along the way: the site search was opening on top of a page that had already answered the same key, so pressing the board's search key put the cursor in one box and an overlay in front of another.
18 September 2026
Workspace
Sheets works a formula out the way Excel does
Sheets could add a column up and little else, which is why an .xlsx that used anything else came in showing the answer Excel had cached rather than working it out again. It now has the functions real workbooks are built from. Looking things up: VLOOKUP, HLOOKUP, XLOOKUP, MATCH and INDEX, where an exact lookup that finds nothing says #N/A instead of quietly taking the nearest row. Conditions: SUMIFS, COUNTIFS, AVERAGEIFS, MAXIFS, MINIFS and SUMPRODUCT, taking as many condition pairs as you give them, with comparisons written as text and patterns with a star. Dates: DATE, DATEVALUE, EDATE, EOMONTH, WEEKDAY, WEEKNUM, DATEDIF, NETWORKDAYS and WORKDAY, on the serial numbers Excel counts from 30 December 1899. Statistics: STDEV.S and STDEV.P, the variances, LARGE, SMALL, MODE, RANK.EQ, PERCENTILE.INC and QUARTILE.INC, interpolated the way Excel interpolates them. Money over time: PMT, FV, PV, NPER, RATE, IPMT, PPMT, NPV and IRR, keeping Excel's sign convention so what you pay out is negative and interest and capital add up to the payment. And words: PROPER, CLEAN, FIND, SEARCH, SUBSTITUTE, REPLACE, TEXTJOIN, NUMBERVALUE, and a TEXT that reads its format code instead of ignoring it, so "mmm yyyy" gives Mar 2026 and "#,##0.00" gives 1,240.00. A test drives the grid with about a hundred formulas whose answers were worked out by hand against Excel, then writes the workbook as .xlsx and opens it again to check the formulas came back. Two things it caught on the way: IPMT had the wrong sign, and TEXT was returning the value untouched.
18 September 2026
Sovereign
Ten more Sovereign Suite tools: the jobs that still wanted an upload
Each of these is a thing people do every day on a website that takes the file first. PADLOCK puts a password on a PDF or takes one off, writing AES-256 with the handler the PDF standard describes, and says plainly that an owner password is a request rather than a lock. PRESS makes a PDF smaller by walking its images, downsampling and re-encoding them in place, and shows a page before and after so you can judge it. STRATA digs out every earlier version a PDF kept inside itself and shows what changed between them, page by page. LANTERN finds the text written for a machine to read and a person to miss: white on white, a point high, off the page, in an invisible render mode, or zero-width characters in a Word file, and it flags the instructions people now hide in documents for a model to obey. LINEAGE reads the editing sessions a Word file keeps about itself and colours the passages by the sitting that wrote them, marking the ones pasted in from somewhere else. STRONGBOX makes and opens password-protected zips, and is honest that the format never hides the names. SIGIL checks a PGP, minisign or SSH signature on a download. MANIFEST opens an Android app or a browser extension and lists what it asks for, which trackers are built into it and which hosts it names. TAKEOUT opens the export Google, Meta or Apple gave you and shows what they were keeping, including the location history, drawn without fetching a map tile. HUSH bleeps, silences or garbles words in a recording. Every one of them has a test that feeds it a file made in the browser and checks the answer.
18 September 2026
Site
Ten more Record Suite tools: the paperwork that is always a sign-up form
Free templates for these exist, and nearly all of them want an email address and a server. QUOTE writes a numbered quote with its validity and deposit, and turns it into an invoice in INVOICES when it is accepted. MILEAGE keeps a mileage log with the HMRC, IRS and CRA rate tables built in and the threshold split shown as arithmetic. RECEIPTS reads photographs of receipts on the device and gives back a tidy expense list with each image hashed. INVENTORY records a property room by room, or a home's contents, with photos hashed as they arrive and a check-out that shows every item's condition then and now. SNAP takes a photograph that carries its own proof: the hash, the time, the place if you switch it on, and a signature from a key this device keeps. POST turns a mailbox export into a numbered chronological bundle with the originals embedded. SCREENS turns a stack of chat screenshots into a transcript with each screenshot as its exhibit. DEMAND writes a letter before claim with the interest and the deadline worked out. REQUEST drafts a freedom of information or subject access request and runs its clock in that regime's own counting. ROPA keeps the record of processing activities Article 30 asks for, and says which required fields are still empty. None of them is legal advice, and each says so. Every one has a test that drives it and checks the arithmetic or reads the finished PDF back.
18 September 2026
Site
The front door: a search row, a line under each door, and the tools you used last
The home page keeps its shape and gains three things. A search row above the menu opens the same search Ctrl K does, because a hundred and forty-six tools behind seven rows is a lot to browse. Each row carries one line saying what is behind it, and the three suites their count, read from the catalogue. Under the menu, Recently used lists the last three tools this browser opened, from the list the search already kept, and only once there is one to list; it is local storage and nothing else. In the dark, the rows get a hairline so they lift from the page. The footer on every page gains a link to this page. While doing it, the search was found to describe tools in words the rows no longer used, and to have no line at all for ten Sovereign tools; the build now copies every tool's blurb from the catalogue into the search and adds what is missing.
18 September 2026
Site
Less to read on a tool page: the explanations moved to the FAQ
A tool page used to carry the tool and, under it, paragraphs on why it matters, how it works, what it does not do, and a reference or two. On a hundred and fifty pages that is a manual under every tool. Each page now carries the tool, a lead of at most two sentences, one line of instruction under a heading where one is needed, and a link to its questions. Everything cut that was worth keeping became a question on the FAQ: two hundred and fifty of them, written as the question a person would type, filed under the tool. Two lines stayed on purpose: MIRAGE's note on where a decoy must not be used, and CLAUSE's that its clauses are not legal advice.
18 September 2026
Workspace
Slides: the speaker's view, and a second screen for the audience
Present in Slides now gives the speaker what they look at while talking: a strip with the time since the show began (click it to start from zero), the clock, and the words of the next slide, over the slide and the notes. B blacks the screen for a pause and W whites it; any key brings the slide back. Home and End go to the ends, and a number then Enter goes to that slide. Second screen opens the same deck in a window of its own that draws only the slide, to drag to the projector and make full screen; it follows the speaker's window slide for slide over a channel inside the browser, the arrow keys in it steer the speaker's window back, and ending the show closes it. The deck is read from this browser's storage, so nothing is sent anywhere. A test starts the show, reads the strip, presses the keys, opens the second window and watches it follow and steer.
18 September 2026
Workspace
Docs: page setup, page breaks, a table of contents, and a test that prints
File, Page setup gives a document its paper (A4 or Letter), its orientation, its margins (normal, narrow or wide) and a header and a footer repeated on every printed sheet; the page on screen takes the paper's width and margins, Print / PDF takes all of it, and the Word file gets the paper and the margins. Ctrl+Enter, or Insert, Page break, starts a new sheet on paper and in Word. Insert, Table of contents lists the headings with links and is brought up to date in place when inserted again. Page numbers are left out on purpose: the browser's print cannot count pages. Docs had no test of its own; it has one now, which opens a Word file, types, sets the page up, breaks it, prints it to a PDF and reads the sheets back, and takes the Word file apart. The test found the site's own top bar on every printed document, which is fixed.
18 September 2026
Workspace
Sheets: sort, find and replace, freeze panes, column widths, colour rules and printing
The things a spreadsheet is expected to do besides hold numbers. Sort orders every row with something in it, or a selected block, by one column, A to Z or Z to A, numbers as numbers, with the header kept; Undo puts the rows back. Ctrl+F opens find and replace in a panel beside the grid, with Match case and Whole cell. Freeze row and Freeze col keep the first row and column in place while the rest scrolls. A column's width is set by dragging the edge of its letter. Rules colour cells by what they hold (greater than, less than, equal to, containing, empty, not empty) in six tints, and follow the numbers as they change. Print / PDF prints the cells that hold something, in landscape, with the title, and none of the page. Frozen panes and widths are kept with the sheet, go into an Excel file, and arrive from one. A test drives all of it, reads the printed PDF back, and takes the workbook apart.
18 September 2026
Workspace
The workbench hands a Word file to Docs, a deck to Slides, a CV to CV and a note to Notes
A file on the workbench is offered to every tool that takes it, and until now Docs, Slides and CV only took one through their own Open button, so a .docx there could go to DOCSCRUB and BOOK but not to Docs. Each of the three now carries a hidden file input the workbench feeds, and the file opens the way Open opens it: a Word file in Docs or CV, a .pptx in Slides, the CV's own .cv.json in CV, and a markdown or text file, or a zip of them, in Notes, which imports them as notes. A test puts a Word file, a markdown file and a PowerPoint deck on the workbench and follows them to all five apps.
18 September 2026
Site
BOOK: make an EPUB from a document, in the tab
A new Workspace tool, BOOK. Drop in a Word file, a markdown file, plain text or a web page, or paste the text; the chapters are cut at the headings (several Heading 1s, else Heading 2s, else rules, else one chapter, and plain text at lines that read like Chapter Three), each can be renamed, and the title, author and language are set. A cover is a picture resized to a JPEG or one drawn from the title. Write the EPUB gives a standard EPUB 3 with the EPUB 2 contents table as well, the pictures stored as files, and the chapters built as real XML documents the browser serialises, so a stray character in the source cannot make a file a reader refuses. What a book cannot hold (a script, a form, a picture on the web) is left out and counted. A test writes a book with a pasted picture, a web picture, a table and a script in it, takes the zip apart, and opens it in READER. A guide, how to make an EPUB from a Word file without uploading it, says what an EPUB is and what to check.
18 September 2026
Site
CV: build a CV in the tab, out as PDF or Word
A new Workspace app, CV. A form on the left (who you are, a summary, and sections of entries with dates, labels with details, bulleted lines or a paragraph, in any order), the page on the right as it will print, three layouts, seven accent colours, A4 or Letter, and a line where each sheet ends. Print / PDF gives the PDF; Save to computer writes a Word file in one column that Word, LibreOffice and Pages open; Export also gives plain text and the CV's own .cv.json, which opens here again exactly as it was. Open takes a Word CV and reads its headings and bold paragraphs into sections and entries, and says so. The CV is kept in this browser as it is typed. Nothing is uploaded, and there is no sign-up, watermark or paid layout. A guide, a free CV builder with no sign-up, watermark or upload, says what is there and what is deliberately not.
18 September 2026
Workspace
Slides: a PowerPoint file opens
Slides now reads a .pptx as well as writing one. Open takes the file, and each slide's words come in by placeholder (title, subtitle, body), lists as bullets or numbers, bold, italic and underline as emphasis, pictures as pictures, and the notes page as speaker notes; two bodies side by side make a two-column slide, and a slide with only a title becomes a title slide. PowerPoint's own layouts, transitions, charts, tables and SmartArt have no equivalent here and do not come across, which the notice says. The file is read in the tab. A test opens a deck written by python-pptx and one written here and checks every slide against what was put in.
18 September 2026
Workspace
Slides: the deck out as a PowerPoint file
Slides writes a .pptx. Every slide's words go out as text boxes placed by its layout, with bold, italic and underline as run properties, lists as bullets and numbers, pictures as picture files with picture shapes pointing at them, speaker notes as notes pages, and the deck's colours as each slide's background and text. The file opens and is editable in PowerPoint, Keynote and LibreOffice; the other program lays the text out its own way, so a slide that fits here may run long there, which the page says. Save to computer now writes the .pptx into your folder; Export HTML and Print / PDF stay. The zip is written in the tab, and a test takes the file apart part by part and, where the machine has python-pptx, opens it the way PowerPoint would. A guide, a free PowerPoint alternative that runs in your browser, says what is there and what is not.
18 September 2026
Workspace
Sheets: formulas across sheets, and a guide to opening an Excel file without Excel
A formula in Sheets can now name another sheet of the book, the way Excel writes it: =Costs!B4*2, =SUM(Costs!B2:B3), and ='Notes & dates'!C1 when the name has a space. A sheet that does not exist is #REF!, and a circle through two sheets is caught as a circle rather than mistaken for two cells with the same address. Such formulas go out to Excel as written and come back in live when the workbook has the sheet they name. A guide, how to open an Excel file without Excel, and without uploading it, says what an .xlsx is inside, what comes across and what does not, and how to save it back.
18 September 2026
Workspace
Sheets: several sheets in one spreadsheet, Excel files in and out, and charts
Sheets was one grid per file. A spreadsheet is now a book: tabs along the bottom switch between sheets, + adds one, a double-click renames it, × removes it, and the whole book is saved together. Import takes an .xlsx as well as CSV and every sheet in the workbook becomes a tab, with its values, the formulas the engine knows (a formula it does not know keeps the value Excel saved), bold, italic, alignment, and money, percentage and date formats. Export Excel writes every sheet back as an .xlsx with formulas and their values and the same formats, and Save to computer writes that file into your folder; it opens in Excel, Numbers and LibreOffice. The zip is read and written in the tab, and a test builds a workbook, opens it, exports it and reads it back. And charts: select a block of cells and press Chart for bars, lines or a pie, drawn on a canvas in the tab; a first row of words names the series and a first column the categories; the chart follows the cells, is kept with the sheet as its cells and kind rather than as a picture, and Save as PNG gives a picture to put in a document. A chart does not go into an Excel file.
18 September 2026
Site
Two guides: merging PDFs without uploading them, and making a photo smaller
How to merge, split and reorder PDFs without uploading them: why the merge sites want the file, how STAPLE copies pages instead, what happens to the size and the metadata, and what to do about a locked file. How to make a photo smaller without uploading it: what makes the file big, the longest side and quality to pick for a chat, an email, a website or print, JPEG against WebP against PNG, the iPhone's HEIC, and why the result carries no location. Both end at the tool and both say what it does not do.
18 September 2026
Workspace
PDF: open, fill, sign and edit a PDF in the tab
A new Workspace application, PDF. Open a PDF and it is drawn page by page with its text under the cursor. Turn, move, remove and add pages (another PDF's, or pictures) from the thumbnails. Fill its form in a panel and watch the answers land on the page. Highlight, draw, write, box, and place a signature you draw or type. Black out an area, and on saving that page is written as a picture with the box burned in, so what was under it is not in the file. Every other mark is drawn into its page when you save, so any reader shows it. Find in the document, export a page as PNG, every page as a zip, a page as its own PDF, or the text as .txt; see and clear what the file says about itself. Save to computer writes into your folder. pdf.js draws and pdf-lib writes, both served from here, and nothing leaves the tab. A test opens the sample, does all of it, and reads the saved file back to check. A guide, a free PDF editor that never uploads your file, says what it does, what it does not, and which of the site's PDF tools does each job best.
18 September 2026
Site
Five guides: printer tracking dots, writing style, sharing a run, a free office suite, a free notes app
One header across the Workspace: Sheets and Slides get the Docs header; Forms, Drive and Calendar get a proper page heading
Sheets and Slides each had a header of their own, smaller and in another face, with a monospace "saved" badge and square buttons. They now carry the header Docs and Notes carry: the app's mark, the name of what is open with a line under it saying where it is saved, and the actions as pills. The saved line is coloured by its state (saved, saving, not saved because storage is full) in the colourway's own colours rather than a fixed hex. The Save to computer and Open buttons that appear in those headers take the header's own button style instead of a third one. Forms, Drive and Calendar had no visible heading at all, only one for screen readers; each now opens with the same title, codename and one-paragraph description every other page opens with, sized down on a phone. One shared block of stylesheet holds the header, so the next app gets it for free.
18 September 2026
Workspace
Notes, laid out like the rest of the site, with a formatting row
Notes looked like a code editor: a column of unlabelled icons down the left, and the note itself in a typewriter face with the markdown marks in bold. It now has the header Docs has (the app's mark, the note's name, where it is saved, and New note, Use a folder, Graph and Export), a row of named tools where the icons were (Files, Search, Starred, Tags, Today, Jump to a note, Commands), and the note set in the site's own face at a readable size. A formatting row over the editor writes the markdown for you (bold, italic, a heading, lists, a task, a quote, code, a link to another note, a table) and an Edit and Read switch sits at its end, in both views. Every highlight in the editor is a colour and nothing else, so the painted copy under the caret keeps exactly the caret's metrics. On a phone the header takes two rows and the tool row scrolls. Nothing about where notes are kept has changed.
18 September 2026
Sovereign
Photo
Three new Sovereign tools: DOTS, TELLS and TRAIL. OBSCURA Photo Editor: a Develop panel, Photomerge, and the last of the single keys
DOTS reads a colour scan of a printed page and finds the pale yellow dots most colour laser printers and copiers hide on every page, the code that traces a page to a machine. It shows the pattern, reads the one layout with a published decoding (the Xerox DocuColor block of fifteen by eight, with its parity checked), and writes a copy of the scan with the dots painted out. TELLS reads a text and lists the habits that identify its author, in order of how unusual each is (the dash, the double space, the mixed spelling, the pet phrase), flattens the mechanical ones with one press, and compares two texts by their function words, punctuation and rhythm; it says plainly what flattening cannot do. TRAIL reads a GPX or TCX track from a run or a ride, draws it with no map under it, cuts a distance from each end and everything within a circle round any place you mark, drops the times and the heart rate, and writes a plain GPX to share. In the editor, Image, Develop is the basic panel a raw converter opens with: exposure, contrast, highlights, shadows, whites, blacks, clarity, dehaze, vibrance, saturation, temperature and tint, in one adjustment that can be a layer. Layer, Photomerge lays several frames of one scene into one wide picture, finding each shift by phase correlation and fading each frame in across its overlap. D puts the colours back to black and white, a digit sets the brush's or the layer's opacity, Tab hides the tools and panels, and F goes full screen. A sweep of every page on a desktop and a phone (script errors, failed requests, broken links, overflow, missing names) found nothing to fix, and is kept as a script for next time.
18 September 2026
Site
The questions come off every page and go to the FAQ; every page ends with the same six links
A hundred and sixty pages carried the same grey blocks under a different tool: "What this is, and what it is not", and "Questions people ask". They are gone from the pages. The questions, all seven hundred of them, are on the FAQ now, filed by suite and tool, with a search box that narrows them as you type; each tool page keeps one line that points at its own. Every page ends the way the front door does: Help, FAQ, All tools, Install, Chip in, and the address. The page that does not exist ends that way too.
18 September 2026
Photo
OBSCURA Photo Editor: looks, reduce noise, auto colour, a sample picture, sizes to start from, recent pictures with thumbnails; and quieter tool pages
In the editor, Image, Looks shows thirteen looks on your own picture, from matte film to cinema teal and orange, and one click puts the chosen one on as a group of adjustment layers you can open, change, switch off or delete, or flat onto the pixels. Filter, Reduce noise treats luminance and colour noise separately, the way a raw converter does, with a slider to keep fine detail; auto colour takes a cast out by bringing the channels' means together. The start screen has a Paste button, a sample picture drawn on the spot so the tools can be tried before you have a file, and the pictures you were working on with a thumbnail each. New starts from the size of a post, a story, a thumbnail, a banner, a business card or an A4 or Letter sheet at 300 dpi. A bug is fixed as well: closing one of two open pictures left the start screen sitting over the one that remained. Across the site, a long description under a tool shows two lines and a more.
18 September 2026
Site
Settings, laid out like the rest of the site, with a tool finder
Settings was the one page left with its own shape: a narrow column of folding groups and no way back to the suites. It now has the site's top bar, page header, panels and footer, a jump row to each section, and every section open rather than folded away. The tools list has a finder that narrows it as you type, sits in two columns where there is room, and counts how many are on and off. Every switch on the page is a real button, so it works from the keyboard and reads its state aloud. Nothing about what the page does has changed, and nothing on it leaves the device.
18 September 2026
Photo
OBSCURA Photo Editor: proof views, a clipping warning, compare, focus area, exposure fusion, focus stacking, SVG and PDF export, DPI tags, named snapshots, layer search and labels
In the editor, under View: the picture as someone with protanopia, deuteranopia or tritanopia sees it, by the Machado matrices; a clipping warning that paints blown highlights red and blocked shadows blue; and a compare with the opened picture, held on the backslash key. Under Select, focus area picks the parts that are sharp by the detail around each pixel. Under Layer, exposure fusion blends several exposures, each a layer, by contrast, colour and exposure through Laplacian pyramids, and focus stacking takes the sharpest of each place the same way; both make a new layer and neither needs a model. Under File, the document exports as SVG with shapes and text kept as vectors and everything else embedded, and as a one-page PDF at the picture's resolution. Image size gained a resolution in pixels per inch with the print size read out, and PNG and JPEG exports now carry sRGB, gamma and DPI tags. The History panel keeps named snapshots outside the undo list, and the Layers panel has a search box and six colour labels, saved in the project. An SVG file opens as a picture. The browser test checks the deuteranopia numbers, the fused exposures, the SVG's path data, the PDF's cross-reference table and the bytes of the tags.
18 September 2026
Photo
OBSCURA Photo Editor: guide layouts, distribute, styles copied and pasted, a measure tool that straightens, colour dynamics, sample sizes and a command finder
Under View in the editor, a guide layout lays columns and rows with a gutter and a margin in one go. Under Layer, distribute spaces three or more picked layers evenly across or down, and styles copy from one layer and paste onto the picked ones. A measure tool sits with the eyedropper (Shift I): drag a line along a horizon or a table edge to read its length and angle, then straighten the layer or the whole picture to it. The eyedropper averages a 3, 5 or 11 pixel square when asked. The brush has hue, saturation and brightness jitter and wet edges, with a watercolour and a confetti preset. Ctrl Shift P opens a finder that lists every menu item and tool by a few letters of its name and runs the one picked. The browser test measures a 100 pixel line at 30 degrees, distributes three squares, lays out guides and drives the finder.
18 September 2026
Photo
OBSCURA Photo Editor: twelve more filters, histograms in Levels and Curves, and an animated GIF or PNG from the layers
Under Filter in the editor: radial blur (spin and zoom), surface blur, dust and scratches, smart sharpen (held inside the local range, so no halos), twirl, spherize, ripple, polar coordinates, colour halftone, clouds, difference clouds and oil paint, each with a live preview and each usable as a smart filter. The Levels dialog now shows the histogram of what it is working on with the black, midtone and white points marked on it, and Curves draws the histogram behind the curve. Under File, an animation from the layers: each visible layer a frame, on its own or with the layers beneath it, at a frame time you set, saved as an animated GIF (a 255-colour palette cut from the frames by median cut, LZW packed) or an animated PNG in full colour; both encoders run in the tab. The browser test drives every filter and decodes the GIF and the PNG it wrote.
18 September 2026
Photo
OBSCURA Photo Editor: all twenty-seven blend modes, fill layers, mask density and feather, quick mask, and autosave with recovery
The editor's blend list is now Photoshop's whole list: the eleven modes a browser canvas does not have (dissolve, darker and lighter colour, linear burn and dodge, vivid, linear and pin light, hard mix, subtract, divide) are drawn by hand on the pixels beneath, and a PSD carries each by its own key both ways. Fill layers of a solid colour, a gradient or a pattern are drawn from their settings at the picture's size and changed later by double-clicking them; a selection becomes their mask. Every mask has a density and a feather in the Layers panel, neither of which touches the mask's own pixels. Q is the quick mask: the selection becomes a scratch layer to paint on with any brush, red over what is not selected, and Q again turns the paint back into the selection. A few seconds after each change the open picture is packed into the browser's own database on this device and offered back on the next visit, so a crashed tab or a closed window is not a lost afternoon; closing a picture on purpose forgets its copy, and nothing is sent anywhere. The sticky panels column scrolls inside its own height. The browser test checks each blend mode against the textbook numbers and reloads the page to recover the autosave.
18 September 2026
Photo
OBSCURA Photo Editor: smart objects and smart filters, actions and batches, several pictures at once, export presets, a turned view
In the editor, any layer becomes a smart object from the Layer menu: it keeps its source pixels and is drawn from them each time, so scaling it down and back up loses nothing, and an adjustment or filter applied to it is a smart filter, listed in a dialog where each can be changed, moved or removed. Its contents can be replaced with another picture, or opened in a tab of their own and saved back into the layer. Actions, under View, record what the menus do with the numbers from the dialogs, keep it under a name on this device, and play it on the current picture or run it on a set of files, each opened in a tab, treated, exported and closed. Opening a file now adds a tab rather than replacing the picture; each tab has its own history and view, and a layer copied in one pastes into another. The export dialog has presets for the web, social, email and thumbnails, exact width and height, an estimate of the file size, and a way to keep your own preset; every layer can be exported as its own PNG. The view can be turned from the View menu or the navigator for drawing at a comfortable angle. The sticky panels column now scrolls inside its own height instead of spilling over the page below. The browser test covers each of these.
18 September 2026
Photo
OBSCURA Photo Editor: channel mixer, replace and match colour, .cube lookup tables, lens correction, HDR toning, and histogram, info, navigator and channels panels
Under Image in the editor: a channel mixer with a row per output channel, a constant and a monochrome switch; replace colour, which picks a colour off the picture with a fuzziness and moves its hue, saturation and lightness; match colour, which puts another layer's palette on this one by Reinhard's transfer with luminance, intensity, fade and neutralise; and colour lookup, with seven looks built in and any .cube file, 1D or 3D, loaded from disk and kept in the project file. All but match colour can be adjustment layers. Under Filter: lens correction, which removes or adds barrel and pincushion distortion, red and cyan fringing and vignetting, and HDR toning. Under View: a histogram of the picture or the active layer with the mean, median and spread; an info panel with the pointer's place and the colour under it in RGB, hex and HSB; a navigator with the visible part boxed, dragged to pan, with a zoom slider; and a channels panel that shows red, green and blue on their own and keeps a selection as a named alpha channel, to load back, add, subtract or intersect, saved in the project. The browser test reads each of these back in numbers.
18 September 2026
Photo
OBSCURA Photo Editor: skew, distort, perspective and warp, Liquify, content-aware scale and a perspective crop
Free transform in the editor has four more modes, from the Edit menu or the Mode select in its options: skew slides an edge along itself, distort drags any corner, perspective moves a corner and its partner in together so the layer tapers, and warp bends the layer over a sixteen-point mesh. Each is previewed while you drag, applied with Enter, and is one undo step; a text or shape layer becomes pixels when it is applied and the status line says so. Liquify, under Filter, opens the layer in a dialog with a forward warp, twirls both ways, pucker, bloat, and a reconstruct brush that undoes by brushing; Reset puts everything back. Content-aware scale, under Image, resizes a layer by carving out the least noticeable seams one at a time, and can keep a selection whole. A perspective crop tool sits with the crop tool (Shift C): click the four corners of a sign, a page or a painting photographed at an angle and the picture is cropped to it and pulled square, with every layer, mask and guide carried along. The browser test drags each of these and reads where the paint ended up.
18 September 2026
Photo
OBSCURA Photo Editor: ten layer styles, Blend If, a gradient editor, patterns, swatches, a colour picker and a brush engine
The editor's styles dialog now has the full set, each shown live: drop and inner shadow, outer and inner glow, bevel and emboss lit from an angle and altitude, satin, colour, gradient and pattern overlays, and a stroke inside, outside or centred in a colour or a gradient. Blend If holds a layer's pixels back by their own tone or the tone beneath, with split points for a soft fade. Gradients are edited on a bar with as many stops as you like, each with an opacity, in linear, radial, angle, reflected and diamond shapes, dithered; they drive the gradient tool, the fill dialog and the overlays. Patterns are defined from a selection and saved with the project. A swatches panel and a colour picker with a hue strip and a square, HSB, RGB and hex, that can pick off the picture, replace the browser's own colour box. The brush has presets with a preview stroke, an elliptical tip at an angle, scatter, size, angle and opacity jitter, pen pressure on size or opacity, an airbrush, smoothing, a chalk texture, and a way to save a brush under a name. The browser test reads every one of these back in pixels.
18 September 2026
Photo
OBSCURA Photo Editor: the pen, shape layers, paragraph text, warps and your fonts
Geometry in the editor stays geometry now. A shape layer is a rectangle with rounded corners, an ellipse, a polygon, a star, a line or a drawn path, with a fill and a solid, dashed or dotted stroke inside, outside or on the edge; restyle it later with the layer picked, drag its points with the direct selection tool, or scale and turn it with free transform without a pixel going soft. The pen draws paths with corners and curves, closes them on the first point, and keeps them in a Paths panel where a path becomes a selection, a fill, a brush stroke along its line, or a shape layer. Text can be dragged out as a box the words wrap inside, has tracking, leading and underline, bends with seven warps, scales and turns as words under free transform, and the fonts on your computer join the list where the browser allows. The tool options scroll inside themselves past a third of the window so the Layers panel stays in reach. The browser test draws, reshapes, strokes and saves every one of these.
18 September 2026
Photo
OBSCURA Photo Editor: quick selection, magnetic lasso, patch, content-aware move, and the rest of the retouching kit
Eight more tools in the editor. A quick selection brush that grows the selection across pixels of a similar colour under the stroke. A magnetic lasso that clings to the strongest edge near the pointer as you move along it, fastening a point every few pixels. Refine the edge: smooth, feather, contrast and shift on any selection, shown live, and sent to the selection, a mask or a new layer. A patch tool that borrows a clean part of the picture for a marked area and blends the seam. Content-aware move, which slides a thing elsewhere, blends it in and fills the gap it left. A red-eye tool. A background eraser that clears the colour under the centre of the brush and a magic eraser that clears a colour with a click. A history brush that paints an earlier state back in, with the state chosen in the History panel. Shift and a letter step through a tool family, as the shortcuts do in Photoshop, and the toolbar is two columns. Every one of them is driven by the browser test and read back in pixels.
Layers now sit in groups that nest and fold, each with its own opacity, blend mode, mask and effects, or a pass-through mode that lets the members blend with what is beneath. A layer can be clipped to the one under it. Several layers can be picked at once with Ctrl or Shift and dragged about in the panel, into and out of groups. Photoshop files open with their layers, groups, masks, clipping, blend modes, guides and the common adjustment layers, from 8-bit and 16-bit files in RGB, greyscale, indexed or CMYK, and the editor saves a PSD back with the same; text goes over as pixels and layer styles are left out, and the status line says so. Rulers along two edges, guides dragged out of them, and snapping of moved layers, selections and crops to guides, the picture's edges and other layers. The browser test drives all of it, opens a PSD written by hand from the format, and, where psd-tools is installed, has that independent reader check the PSD the editor wrote.
17 September 2026
Photo
Site
A guide to the editor as a Photoshop alternative, and the first-visit tour is gone
A new guide, a free Photoshop alternative that runs in your browser, says exactly what OBSCURA Photo Editor does and, in the same detail, what it does not: no vector paths, no camera raw, no PSD, no CMYK, no layer groups, no plugins. A table matches ten ordinary jobs against the list so you can tell in a minute whether it is the tool for yours. Separately, the three-card tour that covered every page for a first-time visitor has been removed. It stood between a person arriving from a search and the thing they came for, and every one of the site's own tests had to switch it off before it could look at a page.
17 September 2026
Photo
OBSCURA Photo Editor: masks, adjustment layers, editable text and effects
The editor now has the parts a layered editor is judged by. A mask on any layer, painted with the brush and eraser or made from a selection, turned off and on, inverted, applied or deleted. Adjustment layers for levels, curves, colour balance, vibrance, black and white and the rest: they change everything beneath them, never touch a pixel, and open again with a double-click. Text that stays words and can be edited later. A drop shadow, an outer glow and a stroke drawn from a layer's edge. Free transform with handles, a polygon lasso, colour range selection, dodge, burn and sponge, smudge, a blur and sharpen brush, a transparency lock, a history panel you can click back through, and a grid. Ten more adjustments (colour balance, vibrance, shadows and highlights, photo filter, gradient map, solarize, desaturate, auto levels, auto contrast, equalize) and four more filters (motion blur, noise reduction, unsharp mask, high pass). Remove what is selected fills an area from its surroundings, ring by ring and then patch by patch, and says plainly what it can and cannot do. The project file keeps all of it, and a browser test drives every one of these with a pointer and reads the pixels back.
17 September 2026
Site
Your folder, on the front door
A row on the front page sets up the folder on your own computer that everything you make saves into, as ordinary files: Workspace, Sovereign Suite, Record Suite, Notes and now Photo Editor each get a folder inside it. Once it is chosen, open the site and carry on; the row says which folder is connected and reconnects it in one click when the browser forgets. Chrome and Edge on a computer; elsewhere your work stays in the browser and Settings backs it up.
17 September 2026
Site
One bar and one footer on every page
The header had drifted into three widths and the footer into three shapes across 180 hand-written pages, and 40 pages had none. The build now writes one bar and one footer into every page, at the same width, with the suite's tab marked from the catalogue; the five full-window apps get the same bar in a slim form. Settings took the front door's shape too. The Search button works on the eleven pages where it did nothing.
16 September 2026
Photo
A photo editor with layers
The Photo Editor is a layered editor that runs in the tab: brush, eraser, gradient, shapes and text; rectangle, ellipse, lasso and magic wand selections that confine what an adjustment touches; levels, curves, hue and saturation, colour temperature, black and white, threshold and posterise, all previewed live before they are applied; blur, sharpen, noise, pixelate, vignette, emboss and edge filters; crop, resize, canvas size, free transform, undo and redo. Open a JPEG, PNG, WebP or HEIC, or paste from the clipboard. A project saves as one file with every layer inside, an ordinary zip that any archive tool can open, and exports flatten to PNG, JPEG or WebP. Nothing is uploaded, and it is on the front page beneath Notes.
16 September 2026
Billing
One way to pay: chip in
The commercial licence, the pass and the pricing page are gone. Every tool is free for everyone, at work included, with nothing held back and nothing to buy. The one place money changes hands is the chip in page: pay what you like if the site earns its keep, or twenty-five dollars to back software that is free and local. Nothing checks and nothing behaves differently either way. The old pricing and licence addresses now land on that page.
12 September 2026
Site
Every tool on the site was taken apart and driven
Each of the 115 tools was exercised in a real browser, with its answers checked against something else: hashes against a separate library, signatures against OpenSSL, PDFs read back with a different engine than the one that wrote them, calendar and spreadsheet output parsed by a reader written from the specification rather than from our own code. More than ninety faults came out of it and every one is fixed. The ones worth naming: SHARD told a single shareholder one value the secret could not be, which breaks the promise the page makes about holding fewer shares than the threshold. DISARM and CLEANROOM listed things as removed that were still in the file they handed back, an attached payload among them. JOT called a forged token genuine. SVGCLEAN returned files that still called home. PRIVLOG called every date unreal for anyone east of Greenwich, and INVOICES made a fourteen-day term thirteen days for the same reason. DEALBOOK lost money out of a waterfall. DOCSCRUB and CLEANSHEET quietly changed documents they promise not to touch. REEL threw the microphone away. Notes did not work on a phone at all. Codes made by QRMAKER scanned back as nonsense if the text had an accent in it.
12 September 2026
Site
Things the build now refuses to ship
Four new checks run before anything goes out: a credential written into a file rather than held as a deployment secret, a tool count in the copy that disagrees with the shelf, a script that does not parse, and a raw control byte that makes a file unsearchable to ordinary text tools. Each one is there because it caught something real.
12 September 2026
Site
Ten new tools in the Record Suite
LEDGER is a cash book that adds up and gives your accountant the summary they ask for. DSAR tracks a subject access request against its deadline, and BREACH runs the 72-hour clock and writes the notification. REDACTLOG records what was redacted and why, RETENTION says what you keep and for how long, and CONSENT keeps the record that proves consent was given. CONFLICT is a register of interests, THREAD a contemporaneous note of every conversation, WITNESS a statement built to hold up, and MINUTES minutes with the decisions picked out. The Record Suite is 26 tools.
12 September 2026
Sovereign
Ten new tools in the Sovereign Suite
FLATTEN burns a filled-in form into the page, and drops the fields a viewer was never shown rather than printing them across your document. CERTLENS takes a certificate chain apart and checks the signatures. MAILBOX reads a raw email and shows the route it took. DECODE works out what something is encoded as and unwraps it. FINGERPRINT shows what your browser hands every site you visit. PAPERKEY prints a key you can actually type back in, with check characters that catch a misread row. WATERMARK stamps every page, behind the text. SVGCLEAN makes an SVG safe to open, UNSEEN finds the characters you cannot see, and JOT reads a token without sending it anywhere.
12 September 2026
Workspace
Notes is a real notebook now
Notes was rebuilt as a markdown knowledge base: links between notes, backlinks, a graph, tags, folders, templates, a command palette, split panes and full-text search. It can keep its files in a folder you choose on your own disk, as plain .md files you can read without this site.
12 September 2026
Site
Invoices moved to the Record Suite
INVOICES was filed under Sovereign, which is where privacy tools live. Billing is paperwork, so it sits with the rest of the paperwork now. The address is unchanged.
8 September 2026
Site
Faster on a phone, smoother everywhere
Pages you have already opened now come straight from your device and refresh quietly in the background, instead of waiting on the network every time. Plain pages carry about a third less JavaScript. Buttons press, menus rise in, and moving between pages crossfades instead of cutting, all on one motion curve, and all of it switched off if your device asks for reduced motion.
8 September 2026
Site
Dark mode that stays put
Light, Dark and System in Settings now stick. System follows your device, and keeps following it if the device switches while a page is open. Docs is fully dark, including the page you write on.
8 September 2026
Site
A proper waitlist page
Sync, the desktop app, iOS, Android, Publish and Teams each have a box at /waitlist. Tick what you want, leave an address, and you will hear the day it opens. You can leave any time at /unsubscribe. Since then: none of the six is being built as a separate product, and /waitlist now says where each one stands.
8 September 2026
Sovereign
MIGRATOR catches the passwords that only look strong
MIGRATOR now scores passwords with the same estimator Dropbox published, so a leetspeak classic like P@ssw0rd123! is flagged as weak instead of waved through on character count. Still entirely in your browser.
8 September 2026
Site
The threat model, written down
/threat-model says, tool by tool, what each one protects against and what it does not, what was deliberately not built, and where the open questions are. If you are deciding whether to trust this site with something, start there.
7 September 2026
Site
VAULT transfers restored
For about a day, VAULT told every visitor their browser could not do WebRTC. It could. An unrelated change had reused the filename its library lived under. The original is back under its own name, and a check now runs after every deploy so a clash like that fails loudly.
7 September 2026
Site
Nothing loads from a third-party CDN any more
Fifteen tools used to pull libraries from cdnjs or jsDelivr in your browser, and two pulled models from Hugging Face and TensorFlow Hub. Every one of those files is now served from obscuraos.com itself, and a Content Security Policy enforces it.
7 September 2026
Billing
Free for personal use, permanently
Every tool, no account, nothing uploaded. Work use needed a licence at the time; from 16 September there was nothing to buy at all, only the optional chip in. Nothing checks, and nothing behaves differently either way. Since then: on 26 September OBSCURA Pro replaced the chip in. The Workspace is still free for everyone, with no account.
7 September 2026
Site
Keyboard and contrast
Thirty controls that a screen reader could not name now have names. The Docs side drawer, its template cards and the document outline can be reached from the keyboard. Secondary text in all eight light colourways now passes WCAG AA.
September 2026
Site
Install it like an app, use it offline
OBSCURA is a full progressive web app. On a phone or computer you can install it to your home screen, and once loaded it keeps working with the network off, because the tools never needed a server to begin with.
September 2026
Site
Seven new tools
PWNCHECK checks if a password has leaked, POLICYLENS reads the fine print of a privacy policy, DATASCAN finds personal data in a spreadsheet, UNSUB finds the real unsubscribe link in an email, CHECKSUM verifies a download was not tampered with, DOCSCRUB cleans a Word file, and QRSHIELD shows where a QR code really points. That brings the Sovereign Suite to 47 tools.
On the roadmap
Next
More tools, and the ones you ask for
The suite keeps growing. If there is a private tool you wish existed, tell us and it may be next.
Two things this list used to promise are no longer on it: a sync service we would host, and versions in the app stores. Everything here runs on your own device, so that nothing costs money to run, and a hosted service or a store listing would. There is no account, so there is nothing for us to sync; two machines, no account says how to keep the same work on both, and the site installs from the browser as an app on a computer or an Android phone.