Skip to content

United Kingdom pipeline — country #19, 6/6 extracted, 0 stubs - #23

Merged
bdevloed merged 3 commits into
mainfrom
add-uk-pipeline
Sep 6, 2026
Merged

bdevloed merged 3 commits into
mainfrom
add-uk-pipeline

Conversation

@bdevloed

@bdevloed bdevloed commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

The first post-Brexit register in the corpus, and the first where both of the usual spines are unavailable: the UK is no longer in the EU GI scheme (Sussex, registered 2022, was never an EU registration), and Bétard 2022 is an EU PDO layer carrying no PDO-GB-* geometry. Both are replaced by UK-domestic sources.

Corpus

6 registered wine GIs — 4 PDO (English, Welsh, Sussex, Darnibole) + 2 PGI (English Regional, Welsh Regional). Every one ships a public product specification, so the UK is the only country with no stub tier, no national-spec fallback layer and no WAF bootstrap.

kind region grapes terroir facts geometry
English DOP England 81 10 ONS country
Welsh DOP Wales 81 10 ONS country
English Regional IGP England 85 10 ONS country
Welsh Regional IGP Wales 85 8 ONS country
Sussex DOP England 28 8 E+W Sussex ∪ Brighton and Hove
Darnibole DOP England 1 5 reconstructed (below)

Sources

Spine (gb/00): the GOV.UK protected food and drink names register, via the site's own search + content API. The register publishes no GI file number, so stage 00 bridges slug → PDO-GB-* against the EU register. A 7th name (The Crouch Valley) is still an application and is filtered out.

Specs (gb/01 → gb/02): 5 PDF + Sussex's .docx, in three unrelated layouts handled by _lib/gb/spec.py — defra-pfn-2011 (PART blocks + upper-case VINE VARIETIES), defra-pfn-application (Darnibole, no link section so terroir falls back to the demarcated-area definition) and uk-gi-single-document (Sussex). Roster parsing rejoins PDF line-wraps by run (so Blau\nPortugueser stays one variety) but splits bulleted one-per-line rosters, and classifies prose out by item shape. Two source typos are repaired structurally because they split a name before any alias could apply.

Geometry: ONS Open Geography (OGL v3.0). Areas verified against published figures — England 130,522 vs 130,279 km²; Wales 20,790 vs 20,779; Sussex 3,788 vs 3,782. Brighton and Hove is unioned in deliberately: without it the Sussex coastline has a hole.

Darnibole

A 5 ha single vineyard with no published polygon anywhere. Its spec defines the area narratively but ships an OS/RPA parcel plan, and those 4-digit parcel numbers are National Grid references (easting/northing in 10 m units within the km square). The boundary is reconstructed from them — 6.1 ha against a declared 5 ha, no fudge factor — and anchored three ways: internal N/S+E/W consistency (including a km-line visible on the plan), an EU-DEM transect confirming a ~13 % south-facing slope above a valley floor at 11–14 m, and the ONS centroid of the vineyard's postcode 502 m away. The panel discloses it as approximate; see _lib/gb/darnibole.py.

Also in this PR

  • grape lexicon: 7 UK varieties (Cascade, Madeleine Angevine/Sylvaner, Roter Veltliner — distinct from Frühroter — Frühgipfler via its synonym Senator, Triomphe d'Alsace, Gagarin Blue) + Blau Portugueser / Elbling White aliases. VIVC ids verified.
  • fix(map): grape pills showed another country's spelling. emit_html dropped a record's own name whenever it matched its slug, and the client fell back to the most frequent spelling corpus-wide — so English "Optima" rendered as Germany's "Optima 113", German "Müller Thurgau" as Hungarian "Rizlingszilváni", Spanish "godello" as Portuguese "Gouveio". 1,047 substantive cases across 10 countries.
  • fix(it): tarantino and rotae were bound to the wrong appellation's Wikipedia article (Trentino, Roma) — and rotae shipped a wiki-sourced terroir bullet about the Roma DOC in all four locales. Both pinned missing; 02d/02e re-run.
  • audit_terroir_facts: wire GB in, and make unsupported countries an explicit counted skip instead of a KeyError swallowed as a corrupt cache (it silently covered only FR/ES — 1,030 records across 18 countries).
  • geometry-outlier whitelist for the four national GB records (Isles of Scilly, Anglesey); WineGB as the England/Wales trade body.

Verification

368 tests (16 new GB parser tests), ruff clean, eslint 0 errors, duplicate-key audit clean, audit_gb_coverage --strict passes. Rendered and visually checked in a browser at all four locales. Deployed and smoke-tested live.

🤖 Generated with Claude Code

Boris De Vloed and others added 3 commits August 27, 2026 08:22
…k, corpus-walk widening

- 02: `lien\b` carve-out in IGP_SECTION_HDR_RE's uppercase title guard —
  Côte Vermeille's "10- lien avec la zone géographique" was never sliced,
  so its lien (7,110 chars) and terroir facts were lost; verified
  byte-identical lien lengths corpus-wide on re-extraction.
- 04: fall back to the SIQO `categories` list when the manifest
  `categorie` is empty — Côte roannaise + Muscat du Cap Corse were
  is_wine=0 (mirror/override-path records) and off the wine facet.
- 02g + grape_corpus: walk mt/cy/nl/be/lu/ch/hu extracted dirs and the
  BG/GR/SK/RO national-spec sidecars (register-fiche dirs deliberately
  excluded — stage 04 reads only their terroir text). Surfaced 141
  VIVC-invisible corpus slugs, since swept.
- lexicon: `ryzlink-buketovy` own slug (blanc) — CZ legacy zemské-víno
  variety from the fiche §6 legacy block; identity contested
  (Goldriesling #4884 vs Bukettraube #1611), no fold.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… 2 FR SIQO ghosts

- VIVC: 40 ambiguous slugs pinned (research-verified against live
  passports + NN 25/2020 / NN 81/2022 / NFJ 2024 / Genes 2020 DNA);
  korithi + schiava pinned vivc_id:false; cristina (RO) brand suspicion
  refuted — real SCDVV Murfatlar crossing #21045. Pins recorded in the
  CURATOR_TODO restore block (slug_overrides.json is gitignored).
- SI: belokranjec + metliska-crnina promoted to full EU-OJ extractions
  (OJ C/2026/3572 + C/2026/3598, the due re-check found both).
- FR: Cabernet de Saumur + Côtes de Blaye verified RETIRED (2016 arrêté /
  2026 EU cancellation) — intentionally absent from SIQO, no pinning.
- Reconciliation log: stale-audit pass + action pass + pin-pass entries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The first post-Brexit register in the corpus, and the first where BOTH of
the usual spines are unavailable: the UK is no longer in the EU GI scheme
(Sussex, registered 2022, was never an EU registration), and Bétard 2022 is
an EU PDO layer carrying no PDO-GB-* geometry. Both are replaced by
UK-domestic sources.

Corpus: 6 registered wine GIs — 4 PDO (English, Welsh, Sussex, Darnibole)
+ 2 PGI (English Regional, Welsh Regional). Every one ships a public
product specification, so the UK is the only country with no stub tier, no
national-spec fallback layer and no WAF bootstrap.

Spine (gb/00): the GOV.UK "protected food and drink names" register, via
the site's own search + content API. The register publishes no GI file
number, so stage 00 bridges slug → PDO-GB-* against the EU register.
A 7th name (The Crouch Valley) is still an application and is filtered out.

Specs (gb/01 → gb/02): 5 PDF + Sussex's .docx, three unrelated layouts
handled by _lib/gb/spec.py — defra-pfn-2011 (PART blocks + upper-case
VINE VARIETIES), defra-pfn-application (Darnibole, no link section so
terroir falls back to the demarcated-area definition) and
uk-gi-single-document (Sussex). Roster parsing rejoins PDF line-wraps by
run (so "Blau\nPortugueser" stays one variety) but splits bulleted
one-per-line rosters, and classifies prose out by item shape. Two source
typos are repaired structurally because they split a name before any alias
could apply.

Geometry: ONS Open Geography (OGL v3.0) — England/Wales country polygons
and the East Sussex ∪ West Sussex ∪ Brighton and Hove union. Areas verified
against published figures (England 130,522 vs 130,279 km²; Sussex 3,788 vs
3,782). Darnibole, a 5 ha single vineyard with no published polygon, is
reconstructed from the OS/RPA parcel references on its own specification
plan — 6.1 ha against a declared 5 ha, anchored three ways (internal
consistency, an EU-DEM slope transect, the ONS postcode centroid) and
disclosed in the panel as approximate.

Terroir: 02d/02e ship 51 cahier-primary bullets across all 6 wines,
translated to fr/es/nl. Unlike Malta (the other English-source corpus) the
UK specs carry a real link narrative, so a missing Wikipedia article is not
disqualifying.

Also in this change:
- grape lexicon: 7 UK varieties (Cascade, Madeleine Angevine/Sylvaner,
  Roter Veltliner — distinct from Frühroter — Frühgipfler via its synonym
  Senator, Triomphe d'Alsace, Gagarin Blue) + Blau Portugueser / Elbling
  White aliases. VIVC ids verified 2026-09.
- fix(map): grape pills showed another country's spelling. emit_html
  dropped a record's own name whenever it matched its slug, and the client
  fell back to the most frequent spelling corpus-wide — so English "Optima"
  rendered as Germany's "Optima 113", German "Müller Thurgau" as Hungarian
  "Rizlingszilváni", Spanish "godello" as Portuguese "Gouveio". 1,047
  substantive cases across 10 countries.
- fix(it): tarantino and rotae were bound to the wrong appellation's
  Wikipedia article (Trentino and Roma), and rotae shipped a wiki-sourced
  terroir bullet about the Roma DOC in all four locales. Both pinned
  missing; 02d/02e re-run for the two slugs.
- audit_terroir_facts: wire GB in, and make unsupported countries an
  explicit counted skip instead of a KeyError swallowed as a corrupt cache
  (it silently covered only FR/ES — 1,030 records across 18 countries).
- geometry-outlier whitelist for the four national GB records (Isles of
  Scilly, Anglesey).
- WineGB as the England/Wales trade body.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@bdevloed
bdevloed merged commit 271d20b into main Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant