The rule is that every block of code stands under a declared owner, so that for any function you can ask which stated responsibility it serves and get one answer. The rule had existed for a while. Nothing had ever counted it.
The first census:
| kind | total | under an owner | orphan |
|---|---|---|---|
| code blocks | 10,238 | 3,520 | 6,718 |
| Rust functions | 2,004 | 1,088 | 916 |
| proof declarations | 600 | 213 | 387 |
| cross-layer edges | 50 | 35 | 15 |
Sixty-six percent of the code blocks had no owner. That is the kind of number that ends a meeting.
The big number was one decision
The census also printed where the orphans were, and the answer was all of them in the same place:
blocks with no owner = 6,718
of those, under tools/ = 6,718 (100%)
The instrument directory had never been declared. Every script that checks, counts or verifies something lived outside the ownership model entirely, not because anyone decided to exclude it but because the model had been written while thinking about the product and the tools had accumulated beside it.
So this was not 6,718 problems. It was one missing declaration, and the number went to zero when a layer for the instruments was declared and the devices were listed under it. The largest finding in the census was the cheapest one in it.
The small number was real work
The 916 orphan Rust functions looked smaller and were not:
orphan Rust functions = 916
top three crates = 142, 101, 91
crates involved = 14
Nothing groups those. They are spread across fourteen crates, and the top crate holds fifteen percent of them. There is no single row that covers this. It is fourteen passes of reading, one crate at a time, deciding for each function which stated responsibility it serves or declaring it a helper of one.
The same census produced two opposite kinds of finding
| finding | count | concentration | what it is | cost |
|---|---|---|---|---|
| unowned blocks | 6,718 | 100% in one directory | a missing declaration | one row |
| unowned functions | 916 | 15% in the largest crate | genuine backlog | fourteen passes |
The counts point the wrong way. Read as bare totals, the first looks like the catastrophe and the second like a rounding error. Grouped, they swap places.
What grouping is actually doing
It is asking whether the findings share a cause. A flat list of N findings silently asserts that there are N decisions to make, and that assertion is almost never checked, because a census feels finished the moment it produces a number.
The failure mode is not that you file 6,718 tickets. Nobody does that. What actually happens is you look at 66 percent, conclude the rule is unenforceable at this scale, and quietly stop measuring. A number too large to act on gets treated as a statement about the rule rather than a statement about the code, and the census that produced it does not get run again.
So the census prints the concentration next to every count, and a finding without a grouping column is not yet a finding.
The estimate that started it was wrong
One more thing from the same run, worth its own paragraph.
The task was written with an estimate in it: roughly 653 proof declarations. That number came from someone's memory. When the work actually counted, three different ways of counting gave three different answers:
declarations, by three greps: 554 589 600
The right move is the one that was taken: report all three, flag the disagreement, and do not correct any of them yet. Each grep encodes a different guess about what counts as a declaration, so the spread is a statement about an undefined term rather than about the code.
Choosing one, especially the one closest to the estimate in the brief, would have converted an open question into a fact by preference. Once a denominator is written down, nobody re-derives it.
Two things I keep
Print the concentration beside every count. A census that reports totals makes every finding look like the same kind of thing, and the whole value of a census is telling apart the finding that is one decision from the finding that is a month.
When two instruments disagree about a denominator, the disagreement is the finding. Not an inconvenience to resolve before reporting. The gap between 554 and 600 is the most informative output of that run, because it says the term being counted was never defined.
Top comments (0)