Sources connected, sections added and corrections made. Corrections are listed alongside new features, because a figure that changed needs an explanation more than a new section does.
A weekend with no index no longer looks like a blocked source
The regulator answers a request for a daily index on a day with no publications with an access error rather than a not-found. The ingestion daemon asked for today's index and, every weekend, logged that the source had blocked us.
An alert that lies on a schedule stops being read, so ingestion now takes the most recent day from the listing of indexes that actually exist. The general policy on access errors during document retrieval was not relaxed: it still means blocked, and working around it stays prohibited.
Email delivery of subscribed events
An event from a real source now reaches a mailbox without manual steps: subscription, undelivered events, message, delivery log.
Repeat sends are suppressed by an anti-join against the delivery log rather than by a check in code, so restarting the worker mid-pass does not duplicate anything, and the log is written only after a successful send — otherwise a failed message would count as delivered.
Subject lines follow the same rule as page titles: they state what happened and not what it means. Both dates, the disclaimer and one-click unsubscribe appear in both parts of every message.
First public data sections, with three sources connected
The platform went up with a Rust core and server-rendered pages: insider transactions from U.S. regulatory filings, the U.S. Treasury sanctions list, and the euro foreign exchange reference rates published by the European Central Bank.
Two candidate sources were examined and left out. One returns an access error to automated retrieval, and no permitted route to the same data was found. For the other, no working endpoint could be confirmed. Neither was approximated from a third-party copy.
Indexing is closed by construction while the permanent domain is undecided. A single predicate governs response headers, page metadata, sitemaps and the page generator, so no amount of content can open indexing by accident.
Five more sources, and the sections for filings, calendar, funds and sanctions
Added: three further sanctions lists, two macroeconomic sources, quarterly institutional holdings and tagged financial statement data. Each adapter ships with reference records taken from real published files.
Several defects found on real data, each of which would have corrupted figures silently:
One sanctions list answers with a redirect, and without following it the response is zero
bytes with a success code — indistinguishable from an empty list.
Another has no record element at all: each line is one spelling of a name, and 19,761 lines
correspond to 5,135 designated parties. Counting lines would have inflated the list by
nearly four times.
Three of the four sanctions sources publish no total count, so reconciliation is recorded as
unavailable rather than being set equal to the number of records we parsed.
Institutional holdings values were published in thousands before 2023 and in whole units
afterwards, and the field that supposedly distinguishes them is unreliable. Values are
therefore stored as filed and never scaled by guess.
Two fields in tagged filing data describe the submission rather than the fact, and using
them as the fact's period would misdate figures by a quarter.
One macroeconomic source reports errors in the body of a successful response.
Fixed pages that went blank immediately after loading
The framework passes page data to the browser in inline scripts, and the security policy forbade them. External framework files still loaded, so the client started, found no data and cleared the page.
The policy is now issued per response with a one-time value rather than weakened by allowing inline scripts generally.
The same investigation exposed a second fault: some pages were pre-rendered while the image was being built, when no database or API exists, and "data unavailable" was baked into the HTML. The rates page showed an error on top of a full database of rates. Public pages are now rendered at request time.
Free tools, glossary, learning articles and this changelog
Added a glossary of the terms that actually appear on these pages, a set of articles on how to read the underlying documents, and this changelog.
Four tools were added. The currency converter multiplies an amount by the central bank reference rate published for a stated date, and refuses when no rate was published for that date rather than reusing an earlier one. The cost basis calculator does arithmetic on lots you enter and shows the working, without assuming a jurisdiction. The sanctions check wraps the existing search with an explanation of what a match score does and does not mean.
The dividend date tool was built and ships empty. None of the connected sources publishes a machine-readable dividend calendar, so it reports what the calendar holds — nothing — instead of demonstrating itself on invented data.
Legal texts published in draft
Terms, privacy notice and disclaimer were published as drafts, each marked as awaiting review by a qualified lawyer. Publishing them unmarked would have implied a review that has not happened.
Readable addresses for person pages, and removal of orphaned pages
Person pages were addressed by a bare registry number. They now carry the name as well: the name makes the address meaningful, the number keeps namesakes apart.
A change of identifier used to leave the old address behind in the publication registry — a page with no incoming links and nothing behind it. The generator now removes such pages itself instead of relying on a one-off cleanup.
Routes split by section to allow parallel work
The API was reorganised into one module per subject area so that changes in different sections stop colliding, and the platform migration added the tables behind accounts, tooling and the reference sections.
The site opens without a password; closure to search engines is unchanged
Basic authentication was removed at the operator's instruction. Requests identifying themselves as search or training crawlers are refused instead.
The other three layers are untouched: a no-index header on every response including the API and subdomains, a robots file refusing all crawling, and the absence of the domain from any webmaster console or external link.
Entries describe changes to this site and to how it reads published documents. They are not announcements about any company, and a correction here means our reading changed — the underlying filings did not.