diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index ca6936d..c1dbedc 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -33,6 +33,8 @@ jobs: - run: npm ci - name: Verify the complete publication surface run: npm test + - name: Check primary external links + run: npm run check:links refresh-review: if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && inputs.refresh_data) diff --git a/GOVERNANCE.md b/GOVERNANCE.md index e794f3a..9050472 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -7,9 +7,12 @@ publication process; no maintainer owns the underlying facts. - Scientific claims require a primary source, data date and stated limitation. - Legal claims require the operative text, jurisdiction and date checked. -- Material data, method and copy changes are made by pull request. -- At least one review is required before `main` changes. Authors do not approve - their own pull requests. +- Material data, method and copy changes require a pull request and passing + publication checks. +- Independent scientific or legal review is required before a contribution is + described as reviewed or relied upon; authors do not certify their own + specialist review. Until independent reviewers participate, merges are + maintainer decisions and the review status remains explicit. - Generated data refreshes receive the same review as hand-written changes. - Uncertainty is disclosed next to the claim it qualifies. diff --git a/build/14-pages.py b/build/14-pages.py index 337028a..2f97395 100644 --- a/build/14-pages.py +++ b/build/14-pages.py @@ -37,7 +37,7 @@ 'svg', 'script', 'style'} OPAQUE = {'svg', 'script', 'style'} VOID = {'meta', 'link', 'br', 'hr', 'img', 'input', 'source', 'wbr', 'col', 'area'} -ATTRS = ('title', 'aria-label', 'alt', 'placeholder') +ATTRS = ('title', 'aria-label', 'aria-roledescription', 'alt', 'placeholder') META = ('description', 'og:title', 'og:description', 'og:site_name', 'og:image:alt') ENTITY = re.compile(r'&(?:#\d+|#x[0-9a-fA-F]+|[a-zA-Z]+);') diff --git a/build/pages/de.json b/build/pages/de.json index 3e8c37f..4c2017d 100644 --- a/build/pages/de.json +++ b/build/pages/de.json @@ -22,6 +22,8 @@ "The Swiss river network beside the title Water and ice in Switzerland, with counts for river reaches, dams and glacier bodies.": "Das Schweizer Flussnetz neben dem Titel Wasser und Eis in der Schweiz, mit Zahlen zu Gewässerabschnitten, Stauanlagen und Gletscherkörpern.", "Swiss rivers, live. Reservoirs against 26 years of their own record. Glaciers across five dated inventories. A measured base layer for legal work on climate.": "Schweizer Fliessgewässer, live. Speicherseen gegen 26 Jahre der eigenen Reihe. Gletscher über fünf datierte Inventare. Eine gemessene Grundlage für die juristische Arbeit am Klima.", "Skip to the layer controls": "Direkt zur Ebenensteuerung", + "Skip to the interactive map": "Direkt zur interaktiven Karte", + "interactive map": "interaktive Karte", "Rivers read live from the federal gauges. Ice across five surveys. Reservoirs against their own record.": "Flüsse live aus den Messstellen des Bundes gelesen. Eis über fünf Aufnahmen. Speicherseen gegen die eigene Reihe.", "Loading…": "Wird geladen…", "What is drawn, by class of evidence": "Was gezeichnet ist, nach Beweisklasse", @@ -127,6 +129,9 @@ "Prior art": "Bestehende Arbeiten", "Colophon": "Kolophon", "A measured base layer, and an argument about age": "Eine gemessene Grundlage und ein Argument über das Alter", + "Follow the water. Protect its pathways.": "Dem Wasser folgen. Seine Wege schützen.", + "Riverflow makes Switzerland’s water cycle observable—from mountain precipitation, snow and ice to groundwater, rivers, lakes, wetlands, use and return. The purpose is practical: detect change, test whether essential pathways are protected, and support evidence-led legal action when they are not.": "Riverflow macht den Wasserkreislauf der Schweiz beobachtbar – vom Niederschlag im Gebirge, von Schnee und Eis bis zu Grundwasser, Flüssen, Seen, Feuchtgebieten, Nutzung und Rückführung. Der Zweck ist praktisch: Veränderungen erkennen, den Schutz wesentlicher Wege prüfen und rechtliche Schritte auf Belege stützen, wenn der Schutz versagt.", + "Last revised 22.08.2026. Sources and comparisons were checked against their published records.": "Zuletzt überarbeitet am 22.08.2026. Quellen und Vergleiche wurden anhand der veröffentlichten Unterlagen geprüft.", "Switzerland is upstream of four European sea basins, and almost everything published about that water is inference over registers that are years old. The inference is unavoidable. Hiding it is not.": "Die Schweiz liegt oberhalb von vier europäischen Meereseinzugsgebieten, und fast alles, was über dieses Wasser publiziert wird, ist Schluss aus Registern, die Jahre alt sind. Der Schluss ist unvermeidlich. Ihn zu verbergen ist es nicht.", "Last revised 19.08.2026. Prior art checked the same day, by fetching rather than from memory.": "Zuletzt überarbeitet am 19.08.2026. Die bestehenden Arbeiten am selben Tag geprüft, durch Abruf und nicht aus dem Gedächtnis.", "One country, four seas": "Ein Land, vier Meere", diff --git a/build/pages/fr.json b/build/pages/fr.json index 7786173..dab61c0 100644 --- a/build/pages/fr.json +++ b/build/pages/fr.json @@ -22,6 +22,8 @@ "The Swiss river network beside the title Water and ice in Switzerland, with counts for river reaches, dams and glacier bodies.": "Le réseau hydrographique suisse à côté du titre L’eau et la glace en Suisse, avec le nombre de tronçons, de barrages et de corps glaciaires.", "Swiss rivers, live. Reservoirs against 26 years of their own record. Glaciers across five dated inventories. A measured base layer for legal work on climate.": "Les cours d’eau suisses, en direct. Les retenues face à 26 ans de leur propre série. Les glaciers à travers cinq inventaires datés. Une base mesurée pour le travail juridique sur le climat.", "Skip to the layer controls": "Aller aux commandes des couches", + "Skip to the interactive map": "Aller à la carte interactive", + "interactive map": "carte interactive", "Rivers read live from the federal gauges. Ice across five surveys. Reservoirs against their own record.": "Cours d’eau lus en direct depuis les stations de la Confédération. Glace à travers cinq relevés. Retenues face à leur propre série.", "Loading…": "Chargement…", "What is drawn, by class of evidence": "Ce qui est dessiné, par classe de preuve", @@ -127,6 +129,9 @@ "Prior art": "État de l’existant", "Colophon": "Colophon", "A measured base layer, and an argument about age": "Une base mesurée, et un argument sur l’âge", + "Follow the water. Protect its pathways.": "Suivre l’eau. Protéger ses voies.", + "Riverflow makes Switzerland’s water cycle observable—from mountain precipitation, snow and ice to groundwater, rivers, lakes, wetlands, use and return. The purpose is practical: detect change, test whether essential pathways are protected, and support evidence-led legal action when they are not.": "Riverflow rend observable le cycle de l’eau en Suisse — des précipitations en montagne, de la neige et de la glace jusqu’aux eaux souterraines, aux cours d’eau, aux lacs, aux zones humides, aux usages et aux retours. Le but est concret : détecter les changements, vérifier si les voies essentielles sont protégées et étayer une action en justice lorsqu’elles ne le sont pas.", + "Last revised 22.08.2026. Sources and comparisons were checked against their published records.": "Dernière révision le 22.08.2026. Les sources et les comparaisons ont été vérifiées à partir des documents publiés.", "Switzerland is upstream of four European sea basins, and almost everything published about that water is inference over registers that are years old. The inference is unavoidable. Hiding it is not.": "La Suisse se trouve en amont de quatre bassins maritimes européens, et presque tout ce qui se publie sur cette eau est une inférence tirée de registres vieux de plusieurs années. L’inférence est inévitable. La cacher ne l’est pas.", "Last revised 19.08.2026. Prior art checked the same day, by fetching rather than from memory.": "Dernière révision le 19.08.2026. L’état de l’existant a été vérifié le même jour, en consultant les sources et non de mémoire.", "One country, four seas": "Un pays, quatre mers", diff --git a/build/pages/index.en.html b/build/pages/index.en.html index 9d50e84..ca1d16f 100644 --- a/build/pages/index.en.html +++ b/build/pages/index.en.html @@ -33,14 +33,15 @@ - + - +
+Skip to the interactive map Skip to the layer controls