Catalogue Norway, Denmark, Czechia and Slovakia — the add-country go/no-go gate for four countries #238

Merged
art merged 1 commit from issue-210-catalogue-four-countries into main 2026-10-09 06:58:28 +00:00
Collaborator

Closes #210, closes #211, closes #212, closes #213 — the add-country research gate for
Norway, Denmark, Czechia and Slovakia.

Nothing is imported and no config is added. These are catalogue-and-gate documents in the
docs/country-gr.md shape: sources, licences per dataset (R2), fetch mechanics per source
(R130–R136), and a written verdict per shared layer (R11/R13).

How this was researched

Twelve parallel research subagents were dispatched, one per country per source category, as
the skill prescribes. Eleven of them were killed mid-run by an account spend limit before
writing anything
, so all of the research below except Denmark's transport was redone in
the main session. That is worth saying because it changed the method: rather than
summarising agent reports, every load-bearing endpoint here was fetched directly, and the
counts in the docs are resultType=hits / returnCountOnly results, not estimates.

The Greece vantage discipline was applied throughout: getent ahostsv4 / ahostsv6 before
any reachability claim (this box has no IPv6 default route, verified), and
data.europa.eu's aggregator queried in the national language rather than trusting a
ministry-first search. That last one paid off immediately — Denmark's road register is
published by Vejdirektoratet through a national access point that no portal search surfaced,
and Slovakia's national catalogue turns out not to be CKAN at all.

The four verdicts

Czechia — GO on all fourteen shared layers, from one source, with no provider.
ZABAGED® polohopis (149 feature types, anonymous WFS + bulk GeoPackage) carries roads with
both class and number, rail, stations, the Prague metro (108) and trams (1 440) as
survey geometry rather than GTFS shapes, 34 river ferries, 95 airports, 91 667 named
water bodies, 358 804 watercourses, 35 224 springs, 386 waterfalls, 3.9 M building polygons,
and 11 155 settlements carrying name, population and settlement type in one layer — no
statistics join, unlike Greece and Poland. Licence is a machine-readable per-dataset
CC_BY_4_0 assertion via the Czech open-data podmínky užití vocabulary.

Norway — GO on all fifteen, no credential anywhere, one new provider.
N50 Kartdata was verified by actually ordering and unpacking two municipalities (Fedje,
Alvdal), so its feature types are delivered-file facts: Bygning is gml:Surface
(polygons, so Norway is a buildings country), Stasjon carries navn, and
ElvMidtlinje/InnsjøMidtlinje supply the throughflow centrelines a Strahler network needs
— the exact piece Greece's WFD data lacked. Geonorge's download API is Geotorget's
order→deliver shape without the OAuth: a POST with no account, no email and no token
returned a ReadyForDownload file. Hence geonorge: (#219) and no secrets file.
Two traps recorded: NVDB API v3 is being decommissioned (HTTP 400 code 4018 — pin v4),
and landsdekkende code 0000 exists so the country is one order, not 357.

Denmark — GO, split across two access routes, and the split is the trap.
The anonymous Klimadatastyrelsen INSPIRE route keeps its attributes in every theme except
transport: roadlink is 2 506 759 features with no class, no name and no ref, and
railwaylink/railwaystationarea have geographicalname null throughout. Anyone who reads
"national road network, anonymous, CC BY 4.0, 2.5 M features" and stops has found a layer
that cannot be styled. The semantics are behind a token (#220). Denmark is a
building_points country — 5 994 941 MultiPoint buildings, the Iceland R13 pairing.
Its watercourselink carries flowdirection, which is the friendliest Strahler input
the project has had.

Slovakia — GO whose problem is delivery, not data.
Only two ZBGIS themes are exposed as WFS; the other 92 layers sit behind an ArcGIS MapServer
whose /query endpoint returned HTTP 503 on every attempt, twice, twenty minutes apart.
Per the Greece rule that is recorded as a re-test (#226), not a verdict — the host
resolves, metadata returns 200 throughout, and the response is the cadastre portal's own
load-shedding page. The pilot is unblocked regardless: the mask WFS works, and SAŽP serves
CORINE 2018 with a code_18 column over an anonymous CC BY 4.0 WFS
, so Slovakia's cover
needs neither the clms: provider nor a credential. Also rejected here on shape rather than
licence: ŽSR's "Jednotná železničná mapa" is a CAD drawing exported through WFS —
1 315 888 four-metre segments carrying COLORRGB, STYLE, WEIGHT, MAPNAME — not a rail
network, despite its name and publisher.

What is deliberately not claimed

Three layers are marked UNRESOLVED rather than absent: Denmark's water_points and
ferries, and Slovakia's ferries (provisional). In each case the class list the absence
would rest on — GeoDanmark's object catalogue, SSC/CDB's — has not been read. R6 exists
because Poland's water_points was nearly declared absent on exactly this mistake (#64),
and the skill's version is blunter: a GO verdict gets tested by the import that follows it,
an ABSENT verdict is never tested by anything. So absences get the higher bar and these
three did not clear it.

Norway's water_points and airports are marked GO-unconfirmed for the same reason: the
class lists in that doc come from two delivered municipalities, not from the full N50 object
catalogue.

R7

Green for all four, checked directly against the embedded Go font's cmap (goregular TTF
extracted from golang.org/x/image@v0.44.0). Latin Extended-A is 128/128 complete, so
Czech ě ř ů ď ť ň, Slovak ľ ĺ ŕ, Danish/Norwegian æ ø å and — the genuinely uncertain
one — North Sámi đ ŋ ŧ all produce real glyphs; zero missing across sample names from
all four countries. Recorded in R7's example. The invariant test that keeps it green is
#214.

Follow-on issues filed against these catalogues

Gates #210–#213 · glyphs #214 · pilots #215 (CZ) #216 (SK) #217 (NO) #218 (DK) ·
providers #219 (geonorge:) #220 (dataforsyningen:) ·
Czechia #221 water, #222 roads, #223 rail/transit, #224 places, #225 buildings/airports/ferries ·
Slovakia #226 the /query re-test (blocker), #235 roads/rail, #236 water/places, #237 the rest ·
Norway #227 roads, #228 water, #229 rail/transit, #230 places/buildings/ferries ·
Denmark #231 roads, #232 rail/stations, #233 water/places, #234 building_points/transit.

Review surface

The docs are the deliverable, so the review question is whether each verdict is supported by
what was actually fetched. Every count and every licence in them has a URL behind it; where
something was inferred rather than confirmed, the doc says so.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TzoRW8cpUdAiQyKcXp1rjL

Closes #210, closes #211, closes #212, closes #213 — the add-country research gate for Norway, Denmark, Czechia and Slovakia. Nothing is imported and no config is added. These are catalogue-and-gate documents in the `docs/country-gr.md` shape: sources, licences per dataset (R2), fetch mechanics per source (R130–R136), and a written verdict per shared layer (R11/R13). ## How this was researched Twelve parallel research subagents were dispatched, one per country per source category, as the skill prescribes. **Eleven of them were killed mid-run by an account spend limit before writing anything**, so all of the research below except Denmark's transport was redone in the main session. That is worth saying because it changed the method: rather than summarising agent reports, every load-bearing endpoint here was fetched directly, and the counts in the docs are `resultType=hits` / `returnCountOnly` results, not estimates. The Greece vantage discipline was applied throughout: `getent ahostsv4` / `ahostsv6` before any reachability claim (this box has **no IPv6 default route**, verified), and `data.europa.eu`'s aggregator queried in the national language rather than trusting a ministry-first search. That last one paid off immediately — Denmark's road register is published by Vejdirektoratet through a national access point that no portal search surfaced, and Slovakia's national catalogue turns out not to be CKAN at all. ## The four verdicts **Czechia — GO on all fourteen shared layers, from one source, with no provider.** ZABAGED® polohopis (149 feature types, anonymous WFS + bulk GeoPackage) carries roads with *both* class and number, rail, stations, the Prague metro (108) and trams (1 440) as **survey geometry rather than GTFS shapes**, 34 river ferries, 95 airports, 91 667 named water bodies, 358 804 watercourses, 35 224 springs, 386 waterfalls, 3.9 M building polygons, and 11 155 settlements carrying **name, population and settlement type in one layer** — no statistics join, unlike Greece and Poland. Licence is a machine-readable per-dataset `CC_BY_4_0` assertion via the Czech open-data *podmínky užití* vocabulary. **Norway — GO on all fifteen, no credential anywhere, one new provider.** N50 Kartdata was verified by **actually ordering and unpacking two municipalities** (Fedje, Alvdal), so its feature types are delivered-file facts: `Bygning` is `gml:Surface` (polygons, so Norway is a `buildings` country), `Stasjon` carries `navn`, and `ElvMidtlinje`/`InnsjøMidtlinje` supply the throughflow centrelines a Strahler network needs — the exact piece Greece's WFD data lacked. Geonorge's download API is Geotorget's order→deliver shape **without the OAuth**: a POST with no account, no email and no token returned a `ReadyForDownload` file. Hence `geonorge:` (#219) and no secrets file. Two traps recorded: **NVDB API v3 is being decommissioned** (HTTP 400 code 4018 — pin v4), and `landsdekkende` code `0000` exists so the country is one order, not 357. **Denmark — GO, split across two access routes, and the split is the trap.** The anonymous Klimadatastyrelsen INSPIRE route keeps its attributes in every theme *except* transport: `roadlink` is **2 506 759 features with no class, no name and no ref**, and `railwaylink`/`railwaystationarea` have `geographicalname` null throughout. Anyone who reads "national road network, anonymous, CC BY 4.0, 2.5 M features" and stops has found a layer that cannot be styled. The semantics are behind a token (#220). Denmark is a **`building_points`** country — 5 994 941 MultiPoint buildings, the Iceland R13 pairing. Its `watercourselink` carries **`flowdirection`**, which is the friendliest Strahler input the project has had. **Slovakia — GO whose problem is delivery, not data.** Only two ZBGIS themes are exposed as WFS; the other 92 layers sit behind an ArcGIS MapServer whose `/query` endpoint returned **HTTP 503 on every attempt, twice, twenty minutes apart**. Per the Greece rule that is recorded as a **re-test (#226), not a verdict** — the host resolves, metadata returns 200 throughout, and the response is the cadastre portal's own load-shedding page. The pilot is unblocked regardless: the mask WFS works, and **SAŽP serves CORINE 2018 with a `code_18` column over an anonymous CC BY 4.0 WFS**, so Slovakia's `cover` needs neither the `clms:` provider nor a credential. Also rejected here on shape rather than licence: ŽSR's "Jednotná železničná mapa" is **a CAD drawing exported through WFS** — 1 315 888 four-metre segments carrying `COLORRGB`, `STYLE`, `WEIGHT`, `MAPNAME` — not a rail network, despite its name and publisher. ## What is deliberately *not* claimed Three layers are marked **UNRESOLVED** rather than absent: Denmark's `water_points` and `ferries`, and Slovakia's `ferries` (provisional). In each case the class list the absence would rest on — GeoDanmark's object catalogue, SSC/CDB's — has not been read. R6 exists because Poland's `water_points` was nearly declared absent on exactly this mistake (#64), and the skill's version is blunter: a GO verdict gets tested by the import that follows it, an ABSENT verdict is never tested by anything. So absences get the higher bar and these three did not clear it. Norway's `water_points` and `airports` are marked GO-unconfirmed for the same reason: the class lists in that doc come from two delivered municipalities, not from the full N50 object catalogue. ## R7 Green for all four, checked directly against the embedded Go font's cmap (`goregular` TTF extracted from `golang.org/x/image@v0.44.0`). **Latin Extended-A is 128/128 complete**, so Czech `ě ř ů ď ť ň`, Slovak `ľ ĺ ŕ`, Danish/Norwegian `æ ø å` and — the genuinely uncertain one — **North Sámi `đ ŋ ŧ`** all produce real glyphs; zero missing across sample names from all four countries. Recorded in R7's example. The invariant test that keeps it green is #214. ## Follow-on issues filed against these catalogues Gates #210–#213 · glyphs #214 · pilots #215 (CZ) #216 (SK) #217 (NO) #218 (DK) · providers #219 (`geonorge:`) #220 (`dataforsyningen:`) · Czechia #221 water, #222 roads, #223 rail/transit, #224 places, #225 buildings/airports/ferries · Slovakia #226 the `/query` re-test (blocker), #235 roads/rail, #236 water/places, #237 the rest · Norway #227 roads, #228 water, #229 rail/transit, #230 places/buildings/ferries · Denmark #231 roads, #232 rail/stations, #233 water/places, #234 building_points/transit. ## Review surface The docs are the deliverable, so the review question is whether each verdict is supported by what was actually fetched. Every count and every licence in them has a URL behind it; where something was inferred rather than confirmed, the doc says so. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TzoRW8cpUdAiQyKcXp1rjL
The add-country gate (R5/R6/R2) for the four countries in issues #210-#213. Nothing is
imported; these are catalogue-and-gate documents in the docs/country-gr.md shape, with the
sources verified live rather than taken from a research report.

What the four verdicts are:

- **Czechia** is a GO on every shared layer from a single source. ZABAGED polohopis covers
  roads (with class *and* number), rail, stations, the Prague metro, trams in seven cities,
  34 river ferries, airports, water, 35 224 springs, 386 waterfalls, 3.9 M building
  polygons and settlements carrying name, population and settlement type in one layer. It
  is anonymous WFS plus a bulk GeoPackage, and its licence is a machine-readable
  per-dataset CC BY 4.0 assertion, which is exactly what Greece's YPEN records lack. No
  new importer provider needed.
- **Norway** is a GO on every layer with no credential anywhere. Kartverket's N50 was
  verified by actually ordering and unpacking two municipalities, so the feature-type names
  in the doc are from delivered GML rather than a product spec: Bygning is gml:Surface
  (polygons), Stasjon carries navn, and ElvMidtlinje/InnsjoMidtlinje give the throughflow
  centrelines a Strahler network needs. Geonorge's order API is Geotorget's shape without
  the OAuth - a POST with no account returned a ReadyForDownload file - so Norway needs one
  new provider (#219) and no secrets. NVDB API v3 is decommissioned; v4 is pinned.
- **Denmark** is a GO split across two access routes, and the split is the trap: the
  anonymous INSPIRE route keeps its attributes in every theme *except* transport, where
  roadlink is 2 506 759 features with no class, no name and no ref. Classes, road numbers,
  station names and building footprints are behind a token (#220). Denmark is a
  building_points country - its 5 994 941 buildings are MultiPoint. Transit is unresolved
  rather than absent.
- **Slovakia** is a GO whose problem is delivery, not data. Only two ZBGIS themes are WFS;
  everything else is behind an ArcGIS MapServer whose /query endpoint answered 503 on every
  attempt. That is recorded as a re-test (#226), not a verdict - the host resolves and its
  metadata returns 200, so this is load-shedding, not an unreachable source. The pilot is
  unblocked anyway: the mask WFS works, and SAZP serves CORINE 2018 with a code_18 column
  over an anonymous CC BY 4.0 WFS, so Slovakia needs neither the clms: provider nor a
  credential.

Three absences are deliberately left as UNRESOLVED rather than written down (Denmark's
water_points and ferries, Slovakia's ferries): R6 says an absence is a claim about the
national dataset, and the provider class lists those claims would rest on have not been
read. An absent verdict is never tested by anything, which is why it gets the higher bar.

R7 is green for all four, checked against the embedded Go font's cmap: Latin Extended-A is
128/128, so Czech e-caron/r-caron/u-ring, Slovak l-caron/l-acute/r-acute and North Sami
d-stroke/eng/t-stroke all render. Recorded in R7's example; the invariant test is #214.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TzoRW8cpUdAiQyKcXp1rjL
art merged commit da9e7b9409 into main 2026-10-09 06:58:28 +00:00
art deleted branch issue-210-catalogue-four-countries 2026-10-09 06:58:28 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
art/ismap!238
No description provided.