Version 1 record
This page describes software that has been retired. It is accurate about Version 1 and is not a description of what runs now — see the current site and the archive.
The Version 1 blog
These entries were written during Version 1, one per feature, after the feature worked. They describe a containerised system that has since been retired — see the archive — and they are kept because how something was built is worth more than what it was built out of.
Read them as a record of a particular fortnight, not as documentation of anything
running. Several are not about drogna at all but about drogna's own checks: a gate that
reported a file of deliberate violations as clean, a test that isolated nothing, a
threshold nothing could reach, a return code that meant nothing. Those turned out to be
the useful ones, and the two lessons at the head of the repository's CLAUDE.md are
what was distilled from them.
The Version 2 blog starts fresh, to a different cadence and a tighter shape.
Entries
-
A file a stranger can open — 2026-08-28
Exporting data so that somebody who has never seen your project can plot it without writing bespoke code. The standard that makes it possible also made a provenance scanner report the standard's own vocabulary as suspicious.
-
The average that hid the leak — 2026-08-28
A check scored one number over everything released and reported it safe. One of the released variables was a perfect map of the thing being withheld, and the aggregate is the shape that makes that invisible.
-
Borrowing a clock you are not allowed to read — 2026-08-28
A rule says no component may read the host clock. A display that obeys it literally steps and stutters. The exemption that fixes it is three sentences, and the three sentences are the entire design.
-
A threshold nothing could reach — 2026-08-28
A component compared a measured quantity against a configured threshold. The quantity could not physically reach the threshold, so the component returned "nothing worth doing" every time, correctly, for its whole life.
-
One file, two readings — 2026-08-28
Two halves of a system were built at the same time against one shared convention. They disagreed about five things, every test on both sides passed, and nothing either of them wrote could ever have been read by the other.
-
The return code that meant nothing — 2026-08-28
A component said it had announced itself and the library agreed. The message had been refused at the broker, and the only display whose purpose is to show what is alive had been telling the truth about a lie all along.
-
The shape nobody had declared — 2026-08-28
A check forbids hand-writing the shape of a message that crosses between two programs. It had been passing for weeks with two hand-written copies of one shape sitting in the tree, and the reason is the same sentence in both halves.
-
The box that had nothing to say — 2026-08-27
Every screenshot this project has published shows an application in which nothing is running. The components were running. What none of them had was anything to publish with, and the one piece that could publish was locked inside a component that did not need it.
-
Two ways to compare nothing — 2026-08-27
A screenshot comparison is only evidence if two captures of an unchanging page come back identical. Showing that the check can fail took two sabotages, and they failed in two different places, which turns out to be the whole point.
-
The mean of magnitudes — 2026-08-27
A component published a count and a mean of its errors. Downstream needed a bias, an RMS and a skill score. None of the three survives that summary, and nothing in either component would have said so.
-
A runner with no list — 2026-08-26
Six gates existed and were run one at a time, with CI keeping its own copy of the list. The fix was not a script that runs six things; it was a script that knows about none of them.
-
Three ways to lose a timestamp — 2026-08-26
A requirement predicted one silent failure in a geometry library and prescribed a test for it. Measurement found three, and the one the deployment would actually have met is the one that test would have sailed past.
-
The gate that examined nothing — 2026-08-26
Four scripts enforce the constitution's non-negotiables. Writing the tests for them revealed that two were reporting a file of deliberate violations as clean, and the rule that caught it was the reason the tests existed at all.
-
Eighteen boxes, none of them lit — 2026-08-26
The browser client draws drogna's whole intended architecture and reports that it has heard from none of it. An all-dark display is the correct display, and the rule that makes it correct also forbids the obvious way of improving it.
-
The test that isolated nothing — 2026-08-26
How fast a place forgets a measurement had to become a field rather than a property of a feature. Then a test written to isolate one feature turned out not to isolate it, and the generator was right.
-
One configuration, two destinations — 2026-08-26
A laptop and a small cloud server run the same stack, and the only thing that differs between them is a directory of values — checked by a script, because the drift starts on the day the second destination exists.
-
Taking a requirements document apart — 2026-08-26
Turning a requirements document into sixteen features that can be built in parallel, a constitution enforced by lint gates, and an open-questions section that empties itself.
Coverage
The Version 1 features, against the entries that name them. The table is generated the
same way it always was — counted from the feature directories under specs/ and from
each entry's own front matter — so the gaps are the real ones.
| Feature | Beat | Entries | Shown |
|---|---|---|---|
| 001 | deterministic foundations | A runner with no list, The box that had nothing to say, The gate that examined nothing | partly |
| 002 | edr trajectory spike | Three ways to lose a timestamp | told only |
| 003 | component shell client | Eighteen boxes, none of them lit | shown |
| 004 | environment generator | The test that isolated nothing | told only |
| 005 | compose deployment | One configuration, two destinations | told only |
| 006 | generated types | The shape nobody had declared | told only |
| 007 | observation path | The return code that meant nothing | told only |
| 008 | query layer | One file, two readings | told only |
| 009 | control loop | no entry yet | — |
| 010 | telemetry quality | The mean of magnitudes | told only |
| 011 | adaptive planner | A threshold nothing could reach | told only |
| 012 | visualisation | Borrowing a clock you are not allowed to read | told only |
| 013 | security proxy | The average that hid the leak | told only |
| 014 | offload export | A file a stranger can open | told only |
| 015 | published site | Taking a requirements document apart | told only |
| 016 | visual capture | Two ways to compare nothing | shown |
| 017 | map surface | no entry yet | — |
| 018 | read path boundaries | no entry yet | — |
| 019 | coverage holdings | no entry yet | — |
| 020 | shore advisories | no entry yet | — |
| 021 | operator plane | no entry yet | — |
| 022 | topic tree | no entry yet | — |
| 023 | edr query composer | no entry yet | — |