Validation
Three things, in order: whether the two presentations of the knowledge base are one object, the relational tables themselves — their actual values, filterable, with any filter openable in the graph — and the results of every check run over them. Hover any check name to read what it tests.
1 · Graph–relational isomorphism
Each rule computed twice — relational algebra on the
left of the ==, graph traversal on the right — verdicts compared subject
by subject. The dot is the agreement of the two sides, which is what
this section certifies; the count beside it is the size of the set they
enumerate, and each row says which set that is. Some rules count the
subjects that satisfy them, so a bigger number is better;
others count the subjects that violate them, and zero is
clean. Full statement:
docs/GRAPH-RELATIONAL-ISOMORPHISM.md; the paper in
preparation is cited from the epistemology chapter.
| Check | Dual formulation | What the two sides count | |
|---|---|---|---|
| Every phenomenon has a derivation | semi-join on proves_id / owes_statement_id == in-degree(proves) + out-degree(owes) >= 1 |
668 satisfy phenomena carrying a derivation | |
| grounded-in-foundations | transitive closure by iterated join == reachability to a ground node |
2896 satisfy statements reaching an axiom, postulate or definition | |
| Every experiment names its prediction | distinct experiment_id in experiment_tests == out-degree(tests) >= 1 |
49 satisfy experiments naming a prediction | |
| Every phenomenon is tested, or says it is not | semi-join phenomena against experiment_tests.target_id == in-degree(tests) >= 1 |
35 satisfy phenomena an experiment tests | |
| Equations are connected | anti-join against every semantic relation, either endpoint, and container not a statement/proof == no semantic edge and no statement/proof container |
715 violate equations connected to nothing | |
| Citations say why they are cited | group by source_id where role='unclassified' == out-edges(cites) partitioned by role |
62 violate experiments citing without a role | |
| Edges connect the right kinds of thing | join junction endpoints to their entity kind == endpoint node-type predicate |
0 violate experiments whose \tests names neither a phenomenon nor an equation | |
| acyclic-derivations | iterated deletion of leaf rows == Kahn's algorithm |
acyclic over depends_on, step_from and proves together | |
| declared-coverage | count declared rows grouped by file == count nodes with a declared out-edge, grouped by file |
71 satisfy chapter files carrying a declared \dependson | |
| quotient-chapter | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
157/3331 clusters / aggregated edges | |
| quotient-part | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
21/315 clusters / aggregated edges | |
| quotient-section | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
1364/13820 clusters / aggregated edges | |
| quotient-subsection | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
4906/29245 clusters / aggregated edges | |
| quotient-kind | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
23/351 clusters / aggregated edges | |
| quotient-chapter-kind | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
1252/11617 clusters / aggregated edges | |
| quotient-part-kind | GROUP BY over FK memberships == contraction of graph.json links, both == the committed artifacts |
217/2660 clusters / aggregated edges |
2 · The relational tables
The knowledge base itself — the values, not an index of table names. Every column filters, every column sorts, and the filter is a spec that travels in the URL, so any view here is shareable and opens as the same set of objects in the graph. That the two are the same set is what section 1 proves.
objects —
121 rows shown ·
read-only view of docs/latex/graph/objects.csv
3 · Checks on the relational db
DOI sweep — last run:
2026-08-25T09:52:14Z
· oldest check still relied on
10 days old ·
refresh with python tools/validate.py --online
Every check, and what it tests
One registry — graph_extract.CHECKS — over
one relational database. A check cannot be shown to a reader without
saying what it means, and cannot emit a finding under a name that is
not here. Aggregations of the results — findings by check and by part,
coverage by part, the graph's canonical variables — live on
/analytics, once, because the two presentations
share one set of results.
| Tier | Check | What it tests | Flagged |
|---|---|---|---|
| 1 | Artifacts match the sourcesartifact-fresh |
The committed CSV tables and graph.json are compared byte for byte against a fresh extraction from the LaTeX. Fails if either was hand-edited or if the sources moved on without a rebuild. | — |
| 1 | Control files name real thingscontrol-files |
Entries in graph-strict.txt and untested.txt must match a real chapter file or statement. A typo would silently switch enforcement off for that chapter. | — |
| 1 | Every reference resolvesreferential-integrity |
Every foreign key and junction endpoint must name a row that exists, and the objects table must be a bijection with the entity tables. This is what makes the relational and graph views interchangeable. | — |
| 1 | Label prefixes mean what they saylabel-discipline |
A pend: label must bind to a pending-derivation box, and the retired pos: postulate prefix must not reappear. | — |
| 1 | Markup is attached to somethingextraction-warning |
Every edge macro must sit where it can be attributed -- \dependson inside a statement, \derivationof inside a proof, \bystep immediately after a labelled display block. A stray macro is an authoring error, not a silent no-op. | — |
| 1 | The derivation order is acyclicacyclic |
The depends-on, step-from and proves edges together must form a DAG: nothing may rest on itself, however indirectly. A cycle means a circular derivation. | — |
| 2 | Chains reach the foundationsphenomenon-grounded |
In a migrated (strict-listed) chapter, following declared dependencies from a phenomenon must arrive at an axiom, a postulate or a definition. A chain that stops in mid-air proves nothing. | — |
| 2 | Citations say why they are citedcitation-roles |
Under an experiment's primary references, each source is tagged with its role -- evidence, data, method, history or context -- instead of a bare \cite. | 62 |
| 2 | Edges connect the right kinds of thingedge-hygiene |
A \tests edge points at a phenomenon or an equation, a step-from edge joins two equations, and so on. Catches markup that parses but means nothing. | — |
| 2 | Equations are connectedorphan-equations |
Counts labelled equations that sit outside any statement or proof and carry no derivation edge. Advisory: it measures how much of the step-level chain is still to be declared. | 62 |
| 2 | Every experiment names its predictionexperiment-tests |
An experiment declares, with \tests, which phenomenon or equation it puts to the test -- so the theory it confirms is machine-readable, not left to the prose. | 61 |
| 2 | Every long proof is connected to its statementprooflink-target |
A \prooflink says the derivation lives in Appendix A. It must name the statement it discharges, with a \derivationof immediately after it. Left to positional adjacency the link binds to whatever label happens to end within 300 characters -- often an intervening remark, and often nothing at all, which silently disconnects the appendix proof from the book. | — |
| 2 | Every phenomenon has a derivationphenomenon-derivation |
Editorial rule 2: an observed phenomenon carries a proof, a link to a long proof, or an explicit pending marker -- never silence. In a migrated chapter the link must be declared with \derivationof rather than merely adjacent in the source. | 6 |
| 2 | Every phenomenon is tested, or says it is notphenomenon-tested |
Each phenomenon is either the target of some experiment's \tests edge, or listed in untested.txt with a disclaimer in its chapter. Scope rule 1: the book carries only physics with evidence. | 632 |
| evidence | Cross-references point at somethingxref-target-exists |
Every \cref and \ref target must be a label that exists somewhere in the book. A dangling one prints as ?? and breaks the reader's trail. | — |
| evidence | DOIs actually resolvedoi-resolves |
Checked against doi.org when the validator is run with --online, and the outcome cached. Note that a DOI resolving is not proof it resolves to the work you meant -- that is checked by hand on deposit. | — |
| evidence | DOIs are well formeddoi-syntax |
A DOI must look like 10.xxxx/suffix. A malformed one cannot resolve, so it is a broken promise of retrievability rather than a typo. | — |
| evidence | Entries carry their expected fieldsbib-expected-fields |
The recommended extras, above all a DOI on modern work. Missing ones are amber, not red: a pre-1990 paper predates the DOI system and is excused. | 107 |
| evidence | Entries carry their required fieldsbib-required-fields |
Author (or editor for a book or collection), title and year -- the fields without which the reader cannot find the work at all. The venue fields an entry type calls for (journal, volume, pages, publisher, DOI) are graded separately, as amber, under bib-expected-fields. | — |
| evidence | Every citation has an entrycitation-resolves |
Each \cite key in the manuscript must exist in references.bib. A key that does not resolve prints as a bare marker in the PDF and cites nothing. | — |
| evidence | Experiment chapters carry their dataexperiment-data-available |
A chapter that reports measurements should cite at least one source whose dataset is stored under docs/library/data, so the numbers in the tables can be recomputed rather than taken on trust. | 11 |
| evidence | No unused entriescitation-orphan |
An entry in references.bib that nothing cites. Not wrong, but it is dead weight the reader must wade through, and often the residue of a duplicate key. | 3 |
| evidence | That answer is recentdoi-freshness |
A resolution ages. Green when the DOI was verified within the last 30 days, amber within the year, red when it is older than that or has never been verified at all -- because a link that worked a year ago is a promise nobody has kept since. Refresh with `python tools/validate.py --online`, which re-pings only what has gone stale. | — |
| evidence | The reader can reach the sourcesource-availability |
Green: retrievable now (a copy in this repository, or declared open access). Amber: it exists but not from here -- a paywalled article with a valid DOI, or a printed book. Red: no DOI, no stored copy, no declared route, so the claim cannot be checked. | — |
Declared coverage by chapter
The migration meter: of the phenomena, theorems and experiments in each chapter, how many carry a declared edge. Showing the 1 chapter(s) inside the active filter, of 128.
| Chapter file | declared | owed | ratio |
|---|---|---|---|
| parts/01-foundations/02-measurement-si-error.tex | 5 | 6 | 83% |
Findings
0 under the active
filter (Part I — Foundations) · 944 in the
book. The first 80 are shown, those inside the filter first and red
before amber. Full list:
docs/latex/graph/graph-findings.csv.
| Check | Subject | Detail | |
|---|---|---|---|
Entries carry their expected fieldsbib-expected-fields |
bib:Adame:2025 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Alfven:1950 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Ampere:1826 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Anderson:2023 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Archimedes:1897 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Bartholin:1669 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Batchelor:1967 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Berezin:1966 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Berger:1966 | missing recommended field(s): volume, pages bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Bernoulli:1691 | missing recommended field(s): volume, pages bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Bernoulli:1696 | missing recommended field(s): volume bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Birkhoff:1923 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Birrell:1982 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Bjorken:1964 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Blundell:2001 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Bogoliubov:1959 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Bohr:1969 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Born:1954 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Born:1999 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Breuer:2002 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Cardy:1996 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Cauchy:1823 | missing recommended field(s): volume bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Chandrasekhar:1939 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Chapman:1970 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Clarke:2004 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Clausius:1879 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Coleman:1985 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Condon:1935 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:DeDonder:1935 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Descartes:1637 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Dirac:1930b | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Duerr:2008 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Duffing:1918 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Eddington:1926 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Feynman:1965 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Fowler:1939 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Gaisser:2016 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:GellMann:1961 | missing recommended field(s): volume, pages bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Giunti:2007 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Glatzmaier:1995 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Glimm:1987 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Goldenfeld:1992 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Haag:1992 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Hawking:1973 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Heaviside:1892 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Heitler:1954 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Hertzsprung:1911 | missing recommended field(s): pages bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Herzberg:1950 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:IceCube:2018 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Itzykson:1980 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Jost:1965 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Kato:1966 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Khalatnikov:1965 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Kippenhahn:2012 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Kittel:2005 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Konig:2007 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Krane:1988 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Lamb:1932 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Landau:1975 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Landau:1986 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Lorentz:1909 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Loudon:2000 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Madelung:1936 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Madelung:2004 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Mandel:1995 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Maxwell:1873 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Maxwell:1879 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Newcomb:1895 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Newton:1704 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:OHare:2021 | missing recommended field(s): doi bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Ohm:1827 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Onnes:1911 | missing recommended field(s): pages bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Pauling:1960 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Peebles:1993 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Peskin:1995 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Pethick:2008 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Polchinski:1998 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Prange:1990 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Prigogine:1967 | missing recommended field(s): address bib/references.bib |
|
Entries carry their expected fieldsbib-expected-fields |
bib:Richardson:1922 | missing recommended field(s): address bib/references.bib |