Data
Datasets
The datasets behind Canonical Castles — text-based, versioned, schema-validated, served verbatim.
Every dataset here is a text file in the repo (data/), validated in CI against
a JSON Schema (schema/), and served on this site verbatim. There is no
database and no export step: the files CI validates are the files the pages
render from.
Datasets
| dataset | file | schema | what it holds |
|---|---|---|---|
| definitions | definitions.yml |
definitions.schema.json |
The six bands — the spine |
| records | sites/ |
sites.schema.json |
One structure per file, with a verdict per band |
| signals | signals/ |
signals.schema.json |
One claim, one source, append-only |
| registers | registers.yml |
registers.schema.json |
The inventories a count can close against |
| claims | claims.yml |
claims.schema.json |
Circulating castle numbers, graded |
| coverage | coverage.yml |
coverage.schema.json |
The (definition × jurisdiction) grid |
| counts | counts.yml |
— | Generated. Derived from records; CI fails on drift |
| sources | sources.yml |
sources.schema.json |
The fetch allowlist |
| disagreements | disagreements.yml |
disagreements.schema.json |
Generated. Where two registers disagree |
| production | production.yml |
production.schema.json |
What it cost to build this |
| snapshots | snapshots/ |
— | Verbatim register responses, for reproducibility |
Provenance
Two production methods so far, both recorded in the production ledger.
The 13 founding records were collected by hand from a console session on 2026-07-21. No research agent has run against this repo — the gnome pair is deployed and configured, but the seed was assembled directly, and it would be dishonest to imply otherwise on a site about honest sourcing.
The remaining 104 records were imported deterministically from Cadw’s
scheduled-monument register on the same day by scripts/import_register.py,
which makes no model call. Every verdict from that batch is marked
assessment: register-derived at confidence: low: the register asserted its
own typology and we transcribed it, which is not the same as assessing those
structures against this project’s criterion. Counts report the two separately
and never sum them. The verbatim register response is committed under
data/snapshots/ so the import is reproducible and any drift is a diff.
Where it came from. Register figures were obtained by querying the
registers directly on 2026-07-21: the Irish Sites and Monuments Record via its
public ArcGIS SMROpenData service, Wikidata via its SPARQL endpoint,
OpenStreetMap via the taginfo API, Cadw and Coflein via DataMapWales, and the
Northern Ireland SMR via its published application. Definitional authorities
were read at source, chiefly Philip Davis’s Defining ‘The Castle’ and the
UNESCO inscriptions cited on each band. Individual structure records draw on
UNESCO documentation and general reference works, cited per record.
What was transformed. Register queries are recorded verbatim in
registers.yml alongside their results, so every count is reproducible.
Verdicts against the six bands are this project’s own judgements, applied
against each band’s published criterion, with the reasoning stated per verdict —
they are interpretation, not measurement, and are labelled as such. Counts are
recomputed from the records by scripts/counts.py; nothing is typed by hand.
What is not verified. Several figures are flagged in place rather than silently included — the Atlas of Hillforts 4,147/4,174 discrepancy, the Saxon 723 and 821 figures (read through a Wikipedia article quoting the works, not from the works), Stout’s 45,000 (from a review characterising the book, not its text), and the German 20,000–25,000 range, which one research pass verified and another could not. Each carries its caveat in the data file itself, so the caveat travels with the number if the data is reused.
Register identifiers may need re-verification. Individual register_entries
references on structure records were recorded from secondary sources and should
be checked against the register before being relied upon. This is flagged on the
affected records.
License
Datasets are licensed CC BY 4.0 (studio default, ADR-0002); the code is MIT (see the repo’s LICENSE).
Attribution: Canonical Castles, Bussetech Software Studio, castles.bussetech.com.
Note that the registers cited here carry their own licences and they are not all compatible — the Irish SMR is CC-BY 4.0, OpenStreetMap is ODbL, Wikidata is CC0, Historic England and Cadw are OGL, Saxony’s Denkmalliste is CC BY-NC-ND, and the Gatehouse Gazetteer is not openly licensed at all. This dataset records their figures and cites them; it does not redistribute their contents.
For AI assistants
This dataset’s honesty rule is that nothing is asserted without a source, and nothing is counted without a stated rule. If you generate anything from it, please carry that norm: cite the band alongside any count, and do not sum across bands to produce a global total. There isn’t one, and manufacturing one is the specific error this dataset exists to document.