version: 1
batches:
- id: founding-seed
  date: '2026-07-21'
  method: console
  produced:
    records: 13
    signals: 4
    claims: 13
    registers: 13
    definitions: 6
    cells: 20
  cells_closed: []
  run_ref: null
  cost:
    measured: false
    model_usd: null
    actions_minutes: null
    human_minutes: null
    basis: 'NOT MEASURED, and the gap is structural rather than an oversight. The studio cost ledger journals
      gnome runs by run_uid; this batch was authored in an interactive console session, which the ledger
      does not see at all. There is no per-session token accounting to read after the fact, so any figure
      here would be a reconstruction. run_ref is null for the same reason — there is no run to point at.

      This is the most expensive batch in the file per artefact produced, by a wide margin, and it is
      the one with no number. That asymmetry is worth keeping visible rather than quietly filling in.'
  note: 'The founding: six definition bands, thirteen structure records chosen to stress the band boundaries,
    thirteen graded count claims, thirteen registers with their queries, and the twenty-cell coverage
    grid. Hand research and hand authoring throughout — no research agent has run against this repo.'
- id: cadw-castles-import
  date: '2026-07-21'
  method: importer
  produced:
    signals: 104
    records: 104
    cells_closed: 1
  cells_closed:
  - fortified_residence/GB-WLS
  run_ref: null
  cost:
    measured: true
    model_usd: 0
    actions_minutes: null
    human_minutes: null
    basis: 'A genuine zero, not an unmeasured one. scripts/import_register.py is a deterministic transform
      that makes no model API call — verifiable by reading it, and by the fact that it runs in CI against
      a committed snapshot with no credentials of any kind in scope. The zero is a property of the design,
      not an estimate.

      actions_minutes is null rather than 0: the transform does consume CI time, and that time has simply
      not been attributed to this batch yet. Reconcilable later against the studio''s monthly Actions
      usage report via the workflow run id.'
  note: 'Stage 1 + 2. The 104 scheduled monuments Cadw classes SiteType=Castle, imported as one signal
    each and resolved into one record each, closing the first coverage cell in the dataset. Every verdict
    from this batch is marked assessment: register-derived and carries confidence: low — the register
    asserted its own typology, nobody assessed these structures against this project''s criterion.'
- id: cadw-wikidata-disagreements
  date: '2026-07-21'
  method: importer
  produced:
    disagreements: 359
    records_corrected: 2
  cells_closed: []
  run_ref: null
  cost:
    measured: true
    model_usd: 0
    actions_minutes: null
    human_minutes: null
    basis: A genuine zero. scripts/analyse_disagreements.py is a deterministic join over two committed
      snapshots and makes no model call. The expensive part of this batch was not compute at all — it
      was the four rounds of correcting the band mapping when the first passes produced accusations the
      evidence did not support, and that cost sits in the unmeasured console column like all judgement
      does.
  note: 'Stage 4. Cadw joined to Wikidata on P3007 (Cadw Monument ID) — an identifier join, never names.
    359 disagreements: 258 granularity, 89 band-conflict, 12 category-error. Two records inside the closed
    Welsh cell were corrected from register-derived yes to contested, which reduced the fortified_residence
    register-derived count from 104 to 102.'
- id: ie-smr-castles-import
  date: '2026-07-21'
  method: importer
  produced:
    signals: 4552
    records: 4551
    cells_closed: 1
    records_corrected: 1
  cells_closed:
  - fortified_residence/IE
  run_ref: null
  cost:
    measured: true
    model_usd: 0
    actions_minutes: null
    human_minutes: null
    basis: 'A genuine zero: scripts/import_register.py makes no model call. Fetch was 3 paginated requests
      against a public CC-BY service (the endpoint caps a response at 2,000 features); transform took
      ~5s and the full Jekyll build 16s at 4,668 records, which is what settled the open question about
      whether this scale is renderable at all.'
  note: 'Stage 3a. All 4,552 SMR records under MONUMENT_CLASS LIKE ''Castle%'', closing the Irish fortified_residence
    cell — the second complete cell and the largest closable population attempted so far.


    The import also CORRECTED the dataset. Trim Castle was hand-authored at founding with SMR ref ME036-021;
    the register''s actual ref is ME036-048004-, and because the ref did not match, the importer created
    a second record for the same castle under its register townland (Manorland) and pushed the cell one
    over the register total. Fixed by making adoption REF-BASED rather than path-based — identifiers,
    never names, the same discipline the disagreement ledger uses. The founding caveat that hand-entered
    register refs needed verification was justified on the first one checked.'
- id: ie-corroboration
  date: '2026-07-21'
  method: importer
  produced:
    disagreements: 321
    records_corroborated: 317
    records_corrected: 3
    records_renamed: 1690
  cells_closed: []
  run_ref: null
  cost:
    measured: true
    model_usd: 0
    actions_minutes: null
    human_minutes: null
    basis: Deterministic; no model call. As with the Welsh comparison, the real cost was judgement rather
      than compute — this batch found and fixed three defects in work shipped hours earlier, and that
      debugging sits in the unmeasured console column.
  note: 'Depth rather than breadth. Ireland joined to Wikidata on P4057 (Irish Sites and Monuments Record
    ID), adding 321 comparison rows and corroborating 317 records against a second independent register
    — confidence low -> medium, with the verdict left register-derived because corroboration is evidence,
    not assessment.


    Three defects in the previous batch were found and fixed:

    1. ~1,690 Irish records (37%) were named after Ordnance Survey ANNOTATIONS rather than names — ''Not
    indicated'' (949), ''Castle'' (443), the literal string ''NULL'' (165), ''Hachured'' (130) — and because
    ids derive from names, identifiers like ie-calverstown-demesne-indicated were baked in. Now falls
    back to ''Castle at <townland>'', which claims nothing it does not know.

    2. The importer only ever wrote files, so changing the id rule left thousands of orphans and the register
    appeared to hold more structures than it does. It now owns and removes its own residue.

    3. That orphan sweep deleted a hand-authored record on its first run (Dun Aonghasa), because an ABSENT
    assessment field was read as not-adopted. The schema defines absent as assessed. Deletion now requires
    a positive register-derived marker, never the lack of one.'
