CORPUS EXPORT · 12269 calibers · 59387 family views · round round/2026-09-08Compiled from app/public/data/ · corpus 70c0140eba.

Progress · the corpus ledger

Is the universe becoming a graph?

Every other page here shows what the corpus holds. This one shows what it is learning — and it is built to be able to say “nothing useful”. Six relation counts, one row per corpus state, each one a single SQL query that is printed at the foot of this page. A round that lands nine hundred new calibers and no new links has made the universe a denser dust field, not a better graph, and only a per-relation ledger tells those two apart the morning after.

20.5%of the 12,269 calibers in this corpus carry at least one lineage link, in either direction — 2,519 of them. 9,750 carry none. That share was 30.5% on 25 Aug 2026, so it has fallen 10.0% while the corpus grew 16.5×. The graph is growing; the dust is growing faster.
0%25%50%75%100%30.5%25 Aug 15:36227 / 7447faf737322.1%28 Aug 16:082492 / 113008fd1788a22.1%28 Aug 21:462541 / 11492af68173220.7%29 Aug 11:492541 / 12269ba30011f20.7%29 Aug 16:012541 / 12269715f3f7820.5%30 Aug 00:052518 / 12269474a5e3220.5%30 Aug 02:392518 / 122693946c95020.5%30 Aug 11:532518 / 12269cbb7664720.5%30 Aug 13:382518 / 12269cecaedea20.5%30 Aug 13:482518 / 12269ef6422a020.5%30 Aug 21:182518 / 122694d2a2aab20.5%31 Aug 06:302519 / 12269391433b920.5%31 Aug 06:402519 / 12269b956f08920.5%31 Aug 06:542519 / 1226984a1812920.5%31 Aug 07:172519 / 1226933caa59520.5%31 Aug 07:282519 / 122697d111e9320.5%31 Aug 15:492519 / 12269251cf1a820.5%31 Aug 15:592519 / 12269ca91efe020.5%31 Aug 16:092519 / 1226928c4172720.5%31 Aug 16:192519 / 12269dfdd46d620.5%31 Aug 17:182519 / 1226925ac74fa20.5%31 Aug 17:392519 / 12269cb04c3c220.5%31 Aug 17:502519 / 1226947167abb20.5%31 Aug 23:002519 / 122695ef19d9920.5%31 Aug 23:452519 / 1226995234afb20.5%1 Sep 09:532519 / 12269fae763f920.5%1 Sep 10:032519 / 1226966a8a8f520.5%1 Sep 10:312519 / 122690b3e1f2820.5%1 Sep 10:422519 / 12269b08ba5ba20.5%1 Sep 11:182519 / 12269ba63fac220.5%1 Sep 15:292519 / 1226984352ac620.5%1 Sep 17:412519 / 122694e1f3ba820.5%1 Sep 20:302519 / 12269fa575cfc20.5%8 Sep 17:572519 / 1226970c0140e

The filled band is the share of the corpus that sits in a family. The hatched region above it is the share that does not — drawn as absence rather than as a lighter quantity of something, the same rule the coverage matrix uses for an empty cell. The axis runs the full 0–100% and is not allowed to crop: this is a share, and a share plotted on a quarter-height axis flatters itself. The x positions are corpus states, evenly spaced — they are rounds, not clock time, and three of the four landed within thirty-six hours of each other.

The six relations, and what each round moved

Each sparkline is normalised to its own minimum and maximum, because these six live three orders of magnitude apart and a shared scale would flatten five of them into a floor. A sparkline here therefore carries shape only; the level is the number printed beside it, and every step’s delta is spelt out underneath.

Connected calibers20.5%
2,519
28 Aug 16:08 +2,26528 Aug 21:46 +4929 Aug 11:49 029 Aug 16:01 030 Aug 00:05 -2330 Aug 02:39 030 Aug 11:53 030 Aug 13:38 030 Aug 13:48 030 Aug 21:18 031 Aug 06:30 +131 Aug 06:40 031 Aug 06:54 031 Aug 07:17 031 Aug 07:28 031 Aug 15:49 031 Aug 15:59 031 Aug 16:09 031 Aug 16:19 031 Aug 17:18 031 Aug 17:39 031 Aug 17:50 031 Aug 23:00 031 Aug 23:45 01 Sep 09:53 01 Sep 10:03 01 Sep 10:31 01 Sep 10:42 01 Sep 11:18 01 Sep 15:29 01 Sep 17:41 01 Sep 20:30 08 Sep 0

Designs touching at least one lineage edge at either end. The singleton number: how much of the corpus is a graph rather than a dust field.

Lineage edges
1,695
28 Aug 16:08 +1,50628 Aug 21:46 +3329 Aug 11:49 029 Aug 16:01 030 Aug 00:05 -1230 Aug 02:39 030 Aug 11:53 030 Aug 13:38 030 Aug 13:48 030 Aug 21:18 031 Aug 06:30 031 Aug 06:40 031 Aug 06:54 031 Aug 07:17 031 Aug 07:28 031 Aug 15:49 031 Aug 15:59 031 Aug 16:09 031 Aug 16:19 031 Aug 17:18 031 Aug 17:39 031 Aug 17:50 031 Aug 23:00 031 Aug 23:45 01 Sep 09:53 01 Sep 10:03 01 Sep 10:31 01 Sep 10:42 01 Sep 11:18 01 Sep 15:29 01 Sep 17:41 01 Sep 20:30 08 Sep 0

Every recorded descent link — derived_from, variant_of, clone_of and the rest — in any lane and at any status.

Usage edges
6,277
28 Aug 16:08 +14228 Aug 21:46 029 Aug 11:49 +4,51429 Aug 16:01 030 Aug 00:05 030 Aug 02:39 +1,03330 Aug 11:53 +19630 Aug 13:38 030 Aug 13:48 030 Aug 21:18 031 Aug 06:30 031 Aug 06:40 031 Aug 06:54 +931 Aug 07:17 031 Aug 07:28 031 Aug 15:49 031 Aug 15:59 031 Aug 16:09 031 Aug 16:19 031 Aug 17:18 031 Aug 17:39 031 Aug 17:50 031 Aug 23:00 031 Aug 23:45 01 Sep 09:53 01 Sep 10:03 01 Sep 10:31 01 Sep 10:42 01 Sep 11:18 01 Sep 15:29 01 Sep 17:41 01 Sep 20:30 08 Sep 0

A watch model wearing a caliber execution. The direction-1 harvest lane.

Calibers with a watch2.0%
247
28 Aug 16:08 +128 Aug 21:46 +6429 Aug 11:49 +2429 Aug 16:01 030 Aug 00:05 030 Aug 02:39 +2230 Aug 11:53 +830 Aug 13:38 030 Aug 13:48 030 Aug 21:18 031 Aug 06:30 031 Aug 06:40 031 Aug 06:54 031 Aug 07:17 031 Aug 07:28 +131 Aug 15:49 031 Aug 15:59 031 Aug 16:09 031 Aug 16:19 031 Aug 17:18 031 Aug 17:39 031 Aug 17:50 031 Aug 23:00 031 Aug 23:45 01 Sep 09:53 01 Sep 10:03 01 Sep 10:31 01 Sep 10:42 01 Sep 11:18 01 Sep 15:29 01 Sep 17:41 +31 Sep 20:30 08 Sep 0

Designs a sourced watch model actually reaches, through an execution that resolves to a design. The corpus's thinnest relation.

Calibers with a maker53.0%
6,499
28 Aug 16:08 +5,21028 Aug 21:46 +14929 Aug 11:49 +82529 Aug 16:01 030 Aug 00:05 030 Aug 02:39 030 Aug 11:53 030 Aug 13:38 030 Aug 13:48 030 Aug 21:18 031 Aug 06:30 031 Aug 06:40 031 Aug 06:54 031 Aug 07:17 031 Aug 07:28 031 Aug 15:49 031 Aug 15:59 031 Aug 16:09 031 Aug 16:19 031 Aug 17:18 031 Aug 17:39 031 Aug 17:50 031 Aug 23:00 031 Aug 23:45 01 Sep 09:53 01 Sep 10:03 01 Sep 10:31 01 Sep 10:42 01 Sep 11:18 01 Sep 15:29 01 Sep 17:41 01 Sep 20:30 08 Sep 0

Designs whose producer the corpus can name at all — reviewed or not.

Calibers placed in time42.3%
5,188
28 Aug 16:08 +3,30928 Aug 21:46 +529 Aug 11:49 029 Aug 16:01 030 Aug 00:05 030 Aug 02:39 030 Aug 11:53 030 Aug 13:38 030 Aug 13:48 030 Aug 21:18 031 Aug 06:30 031 Aug 06:40 031 Aug 06:54 031 Aug 07:17 031 Aug 07:28 031 Aug 15:49 031 Aug 15:59 031 Aug 16:09 031 Aug 16:19 031 Aug 17:18 031 Aug 17:39 031 Aug 17:50 031 Aug 23:00 031 Aug 23:45 01 Sep 09:53 01 Sep 10:03 01 Sep 10:31 01 Sep 10:42 01 Sep 11:18 +1,1131 Sep 15:29 +3151 Sep 17:41 01 Sep 20:30 08 Sep 0

Designs carrying a year a source stated, or a bound this corpus derived. The era axis can place these; everything else sits in the reservoir.

Scale, for the denominators: 12,269 designs · 180,161 claims · 12,386 watch models — 0, +1,011 and 0 against the previous corpus state.

Last night’s round

gates greennightly/2026-08-29on corpus 715f3f78d2ef51e0 · 29 Aug 2026 · 608s
sources fetched 0unchanged (conditional GET) 0changed upstream 0rows staged 125citations added 0claims minted 0gates 54 / 54, 0 violationssources quarantined 0waiting on a human 6model tokens spent 0
LaneRowsWhat it writesWhat it refused, and why
direction2_corroboration125refs appended to existing claims; no claim minted
watch is not a corpus model ×29
claim carries a qualifier this lane will not reproduce ×10
lineage note needs a design this corpus does not hold ×2
designation_resolution0one `designates` claim per row, in the staging lane at status unverified — it does NOT resolve the execution until a human promotes it into corpus/ (compile.py resolves on accepted targets only). The loop stages evidence; it does not accept it.
no design with this number from this issuer ×250
designation already carries an adjudicated designates target ×6

No source was quarantined. A source is parked when its yield per page falls below 60% of its own seven-night median — not when it errors, because a template change that still parses badly is the failure that corrupts a corpus, and an exception is not how you catch it. 0 of 0 sources produced a measurable parse tonight and 0 do not yet have the three nights a median needs, so the rule could not have fired on them either way — which is stated rather than hidden, because a rule that cannot fire yet is not a rule that passed.

Tier 4 of the escalation ladder — work the loop is deliberately not allowed to do on its own, in data/pipeline/needs-human.jsonl:

  • lineage-notes/direction2 mint decision
  • unowned-harvest/cjk-citizen promotion round needed
  • unowned-harvest/cjk-cn-rest promotion round needed
  • unowned-harvest/cjk-seagull promotion round needed
  • unowned-harvest/cjk-seiko promotion round needed
  • vocabulary/specimen-lane vocabulary decision

Not published. the round did not reach the deploy. The round made 0 model calls and spent 0 tokens: every number above came out of a regex, a SQL query or a byte comparison.

The ledger, in full

One row per corpus state, keyed on corpus_sha — so recompiling the same corpus updates its row instead of appending a second one, and a loop that runs twice cannot manufacture a flat night. The source column is not decoration: 3 of these 34 rows were recovered from static export trees left on disk by earlier builds, because this repository has a single commit and git log reconstructs nothing. The recovery is only allowed to write a row when the export tree agrees with itself about which corpus it is, and it is cross-checked against the database on the one corpus both can measure.

CompiledCorpusConnected calibersLineage edgesUsage edgesCalibers with a watchCalibers with a makerCalibers placed in timeScaleMeasured from
8 Sep 2026
17:57
70c0140ebad3f9a6
round/2026-09-08
2,5191,6956,2772476,4995,18812,269 designs
180,161 claims
12,386 models
db/caliber.db
1 Sep 2026
20:30
fa575cfc7ff00b86
round/2026-09-01
2,5191,6956,2772476,4995,18812,269 designs
179,150 claims
12,386 models
db/caliber.db
1 Sep 2026
17:41
4e1f3ba84a7595c6
round/2026-09-01
2,5191,6956,2772476,4995,18812,269 designs
179,150 claims
12,386 models
db/caliber.db
1 Sep 2026
15:29
84352ac608aabe36
round/2026-09-01
2,5191,6956,2772446,4995,18812,269 designs
179,138 claims
12,386 models
db/caliber.db
1 Sep 2026
11:18
ba63fac25ff9ab19
round/2026-09-01
2,5191,6956,2772446,4994,87312,269 designs
179,088 claims
12,386 models
db/caliber.db
1 Sep 2026
10:42
b08ba5bae34337fa
round/2026-09-01
2,5191,6956,2772446,4993,76012,269 designs
169,554 claims
12,386 models
db/caliber.db
1 Sep 2026
10:31
0b3e1f28eb52ca3e
round/2026-09-01
2,5191,6956,2772446,4993,76012,269 designs
166,028 claims
8,860 models
db/caliber.db
1 Sep 2026
10:03
66a8a8f5544e2453
round/2026-09-01
2,5191,6956,2772446,4993,76012,269 designs
165,887 claims
8,719 models
db/caliber.db
1 Sep 2026
09:53
fae763f96ffb8a3d
round/2026-09-01
2,5191,6956,2772446,4993,76012,269 designs
165,895 claims
8,721 models
db/caliber.db
31 Aug 2026
23:45
95234afb64956040
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
165,372 claims
8,464 models
db/caliber.db
31 Aug 2026
23:00
5ef19d9951a38738
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
163,997 claims
8,464 models
db/caliber.db
31 Aug 2026
17:50
47167abbf859aec0
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
162,408 claims
6,875 models
db/caliber.db
31 Aug 2026
17:39
cb04c3c2fb32a0d9
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
162,408 claims
6,875 models
db/caliber.db
31 Aug 2026
17:18
25ac74fac66cdbe5
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
162,050 claims
6,875 models
db/caliber.db
31 Aug 2026
16:19
dfdd46d6a637fc61
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
161,124 claims
6,875 models
db/caliber.db
31 Aug 2026
16:09
28c4172795feb849
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
161,124 claims
6,875 models
db/caliber.db
31 Aug 2026
15:59
ca91efe01b07aaef
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
161,058 claims
6,875 models
db/caliber.db
31 Aug 2026
15:49
251cf1a8ae24973a
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
161,128 claims
6,875 models
db/caliber.db
31 Aug 2026
07:28
7d111e9351608687
round/2026-08-31
2,5191,6956,2772446,4993,76012,269 designs
161,052 claims
6,875 models
db/caliber.db
31 Aug 2026
07:17
33caa5954077ac39
round/2026-08-31
2,5191,6956,2772436,4993,76012,269 designs
161,052 claims
6,875 models
db/caliber.db
31 Aug 2026
06:54
84a1812997b96fad
round/2026-08-31
2,5191,6956,2772436,4993,76012,269 designs
161,042 claims
6,875 models
db/caliber.db
31 Aug 2026
06:40
b956f08989cf854e
round/2026-08-31
2,5191,6956,2682436,4993,76012,269 designs
161,033 claims
6,875 models
db/caliber.db
31 Aug 2026
06:30
391433b97fac186c
round/2026-08-31
2,5191,6956,2682436,4993,76012,269 designs
161,033 claims
6,875 models
db/caliber.db
30 Aug 2026
21:18
4d2a2aab99bd5a46
round/2026-08-30
2,5181,6956,2682436,4993,76012,269 designs
161,033 claims
6,875 models
db/caliber.db
30 Aug 2026
13:48
ef6422a038a70297
round/2026-08-30
2,5181,6956,2682436,4993,76012,269 designs
161,033 claims
6,875 models
db/caliber.db
30 Aug 2026
13:38
cecaedea296cb293
round/2026-08-30
2,5181,6956,2682436,4993,76012,269 designs
161,033 claims
6,875 models
db/caliber.db
30 Aug 2026
11:53
cbb76647435fc9dc
round/2026-08-30
2,5181,6956,2682436,4993,76012,269 designs
160,505 claims
6,875 models
db/caliber.db
30 Aug 2026
02:39
3946c950e7947f20
round/2026-08-30
2,5181,6956,0722356,4993,76012,269 designs
159,297 claims
6,780 models
db/caliber.db
30 Aug 2026
00:05
474a5e327cf625e6
round/2026-08-30
2,5181,6955,0392136,4993,76012,269 designs
154,621 claims
5,726 models
db/caliber.db
29 Aug 2026
16:01
715f3f78d2ef51e0
round/2026-08-29
2,5411,7075,0392136,4993,76012,269 designs
154,620 claims
5,726 models
db/caliber.db
29 Aug 2026
11:49
ba30011f835a7d19
round/2026-08-29
2,5411,7075,0392136,4993,76012,269 designs
154,620 claims
5,726 models
db/caliber.db
28 Aug 2026
21:46
af6817320e3d65fa
round/2026-08-28
2,5411,7075251895,6743,76011,492 designs
132,898 claims
615 models
backfill:app/out/data
28 Aug 2026
16:08
8fd1788a58812cd2
round/2026-08-28
2,4921,6745251255,5253,75511,300 designs
131,726 claims
615 models
backfill:app/.next-stale/data
25 Aug 2026
15:36
7faf7373424fd28c
round/2026-08-25
227168383124315446744 designs
12,169 claims
383 models
backfill:app/.next-r13/data

How each number is defined

These are not descriptions of the queries. They are the queries: tools/ledger.py runs this text against db/caliber.db and writes the same string into the payload this page reads, so a definition cannot drift away from the number it produced.

MetricWhat it countsQuery
Connected calibers
connected_designs
Designs touching at least one lineage edge at either end. The singleton number: how much of the corpus is a graph rather than a dust field.SELECT COUNT(*) FROM (SELECT src_design AS d FROM lineage_edge UNION SELECT dst_design FROM lineage_edge)
Lineage edges
lineage_edges
Every recorded descent link — derived_from, variant_of, clone_of and the rest — in any lane and at any status.SELECT COUNT(*) FROM lineage_edge
Usage edges
usage_edges
A watch model wearing a caliber execution. The direction-1 harvest lane.SELECT COUNT(*) FROM model_uses_execution
Calibers with a watch
calibers_with_user
Designs a sourced watch model actually reaches, through an execution that resolves to a design. The corpus's thinnest relation.SELECT COUNT(DISTINCT e.resolved_design_id) FROM model_uses_execution m JOIN execution e ON e.execution_id = m.execution_id WHERE e.resolved_design_id IS NOT NULL
Calibers with a maker
designs_with_maker
Designs whose producer the corpus can name at all — reviewed or not.SELECT COUNT(*) FROM design WHERE maker_agent_id IS NOT NULL
Calibers placed in time
dated_or_bounded
Designs carrying a year a source stated, or a bound this corpus derived. The era axis can place these; everything else sits in the reservoir.SELECT COUNT(*) FROM design WHERE intro_year IS NOT NULL OR bound_lo IS NOT NULL OR bound_hi IS NOT NULL
Designs
designs
scale, not a relation — the denominator the six are read againstSELECT COUNT(*) FROM design
Claims
claims
scale, not a relation — the denominator the six are read againstSELECT COUNT(*) FROM claim
Watch models
models
scale, not a relation — the denominator the six are read againstSELECT COUNT(*) FROM watch_model

What these numbers do not say

An isolated caliber is one this corpus records no relative for — never one that has none. 9,750 of 12,269 calibers carry no lineage link here. That is what the sources say, not what horology did: the archive most of this corpus is drawn from records a family block on a minority of its pages. No caption, filter or count on this site may state the second thing, and the falling share above is a statement about our coverage, not about watchmaking.

Lineage edges are counted in every lane and at every status. The number here is the same one the landing universe draws — all 1,695 of them, including the inbox staging lane. This paragraph used to continue “a far smaller set has been reviewed and accepted”, and pointed at coverage as the answer to “what anyone has checked”. That question was retired on 2026-08-29: nobody was ever going to review 154,620 claims, so the answer would have stayed “almost none” forever while the corpus said something else. What is left is one question, and it is the one that was always doing the work — what does the corpus record, and what is behind each record? Every edge counted here carries a source url, a retrieval date and a verbatim quote, and clicking any of them shows all three.

The staging lane is a place, not a caveat. A claim in inbox/ has not been through a promotion step into corpus/, and gate G3 plus a schema CHECK make it structurally impossible for one to assert anything else — that guard is what allows an unattended pipeline to run at all, and it did not move. What changed is that the site stopped DRAWING the lane: staged edges are no longer dotted, staged values no longer hatched, and the default family profile no longer hides them. The effect on this page is none at all, because both metrics above were always lane-blind; the effect on the universe and the family pages was to stop showing a fifth of what the corpus holds.

3 of these 34 rows are archaeology, not a nightly log. Nothing was running to record history, so the earlier points were reconstructed from static export trees this repository still had on disk — each one carrying its own corpus_sha, its own compile timestamp and its own counts. Where an older payload predates the field that names the connected count, the number was taken from the edge list it ships instead, which is the same measurement and is asserted to be so on every tree that carries both. Rows are labelled with the tree they came from. Nothing was interpolated, smoothed or invented, and there is no point here for a day the corpus was not compiled.

A row is a corpus state, not a night. The x axis is evenly spaced because rounds are, and clock time is not: three of the first four states were compiled inside thirty-six hours. The schedule exists but is installed disabled — the owner arms it — so until it is armed the spacing is still rounds, and reading the slope as a rate would be reading a ratio of two things that were never rates.

A night that adds nothing is a normal night, not a broken one. Most of what the loop does is confirm that eighteen catalogues still say what they said yesterday, which costs a few dozen conditional requests and produces no rows at all. The block above reports a zero the same way it reports a thousand, because a pipeline that only appears in this page when it has news is a pipeline whose silence you cannot read.

Nothing here relaxes a gate. The ledger is written after make lint passes, so a corpus that fails the integrity gates never reaches this page at all — it aborts the round instead. Growth that arrived by lowering the standard would not show up as growth; it would show up as a build that stopped.

The real progress bar is the picture. Every new lineage edge lifts a caliber out of the reservoir and into a family, so the universe itself densifies as these numbers move. This page exists to say by how much, and in which direction, on a morning when the picture looks about the same as it did yesterday.

Provenance of this page

Ledgerdata/pipeline/ledger.jsonl · 34 rows · keyed on corpus_sha
Generatortools/ledger.py v1 → app/public/data/progress.json
Clocknone. A row’s timestamp is the database’s own meta.built_at — when that corpus state was compiled — so the emitted JSON stays a pure function of files already on disk and make verify keeps proving what it proves.
Current corpusround/2026-09-08 · corpus 70c0140ebad3f9a6 · compiled 2026-09-08T17:57:55