Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 05:07 UTC

alphagov / datagovuk

National Data Library

Python · JinjaMIT★ 3 Sterne⑂ 3 Forksseit März 2026Auf GitHub ansehen ↗

alphagov/datagovuk erreicht einen Gesundheitsindex von 69 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (96/100) ab, am schwächsten bei Community & Adoption (34/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

69
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

69
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

1.570 Follower1.528 öffentliche Reposseit Feb. 2011

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
PyPIdatagovukverweist auf ein anderes Repo — nicht bewertet0.1.3443vor 2809 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

86Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
11.8/36Commit-Rhythmus — 17/52 Wochen mit Commits
18/18Commit-Volumen — 380 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year380
human_commit_share0,77
days_since_last_push0
active_weeks_last_year17

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 25 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1,6 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count25
latest_release_tagv3.0.0
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases1,6
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

34Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
4.9/60Stars — 3 Stars
2.5/25Forks — 3 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks3
stars3
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductja
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

50Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 74 % der Commits
13.5/13.5Breite der Beitragenden — 10 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled10
top_contributor_share0,735
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — 0 % der Issues geschlossen
29.2/38.3PR-Annahme — 171/224 entschiedene PRs gemergt
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Verwendete Eingangsdaten
merged_prs171
open_issues2
closed_issues0
issue_closed_ratio0
closed_unmerged_prs53
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
23/25Reichweite des Inhabers — 1.570 Follower von alphagov
25/25Kontohistorie — 1.528 öffentliche Repos, Kontoalter ca. 15 Jahre
Verwendete Eingangsdaten
followers1.570
owner_typeOrganization
is_verified
owner_loginalphagov
public_repos1.528
account_age_days5.649

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

96Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 10 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration
9.6/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 21 out of 21 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_configja
has_precommit_configja

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://www.data.gov.uk
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepagehttps://www.data.gov.uk
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

78Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
3/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 21 out of 21 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
5/5SAST — SAST tool is run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate7,2
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages16
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von pypi:datagovuk@0.1.3 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 16 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

64Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
18/40Lesbare Commit-Historie — 26 von 77 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,338
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3.309
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — justfile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
8/8Automatisierte Wartung — 23 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesuv.lock
has_dockerfileja
typed_languagenein
bootstrap_filesjustfile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,23
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Python ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/85 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes46.915
source_files_sampled85
oversized_source_files0

Eckdaten

3GitHub-Sterne
10Mitwirkende
380Commits, letzte 12 Monate
0Tage seit letztem Push
25Releases
1Bus-Faktor
2offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • pypi package 'datagovuk' points at a different repository (https://github.com/drewsonne/datagovuk); excluded from ecosystem scoring

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 3 ⇿
0Sterne
3Forks
12Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

12233312026-042026-052026-06
Major 1Minor 6Patch 5
OpenSSF Scorecard 7.2 / 10
7.2Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-23 05:06 UTC

10Binary-Artifactsno binaries found in the repo
4Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests21 out of 21 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
10SASTSAST tool is run on all commits
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Direkte Abhängigkeiten 17
RegistryPaketVersionsvorgabeManifest
PyPIargon2-cffi==25.1.0pyproject.toml
PyPIchartkick==1.1.0pyproject.toml
PyPIdjango==6.0.7pyproject.toml
PyPIdjango-compressor==4.6.0pyproject.toml
PyPIdjango-environ==0.14.0pyproject.toml
PyPIdjango-health-check==4.4.3pyproject.toml
PyPIdjango-libsass==0.9pyproject.toml
PyPIdjango-prometheus==2.5.0pyproject.toml
PyPIgunicorn==26.0.0pyproject.toml
PyPIjinja2==3.1.6pyproject.toml
PyPImistune==3.3.2pyproject.toml
PyPIpillow==12.3.0pyproject.toml
PyPIpysolr==3.11.0pyproject.toml
PyPIpython-frontmatter==1.3.0pyproject.toml
PyPIpython-slugify==8.0.4pyproject.toml
PyPIsentry-sdk==2.64.0pyproject.toml
PyPIwhitenoise==6.12.0pyproject.toml
Alle Abhängigkeiten 105

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 17 direkte und 88 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
PyPIargon2-cffi25.1.0direkt
PyPIchartkick1.1.0direkt
PyPIdjango6.0.7direkt
PyPIdjango-compressor4.6.0direkt
PyPIdjango-environ0.14.0direkt
PyPIdjango-health-check4.4.3direkt
PyPIdjango-libsass0.9direkt
PyPIdjango-prometheus2.5.0direkt
PyPIgunicorn26.0.0direkt
PyPIjinja23.1.6direkt
PyPImistune3.3.2direkt
PyPIpillow12.3.0direkt
PyPIpysolr3.11.0direkt
PyPIpython-frontmatter1.3.0direkt
PyPIpython-slugify8.0.4direkt
PyPIsentry-sdk2.64.0direkt
PyPIwhitenoise6.12.0direkt
PyPIargon2-cffi-bindings25.1.0indirekt
PyPIasgiref3.11.1indirekt
PyPIast-serialize0.5.0indirekt
PyPIasttokens3.0.1indirekt
PyPIcertifi2026.2.25indirekt
PyPIcffi2.0.0indirekt
PyPIcfgv3.5.0indirekt
PyPIcharset-normalizer3.4.6indirekt
PyPIclick8.3.1indirekt
PyPIcolorama0.4.6indirekt
PyPIcoverage7.15.0indirekt
PyPIcssbeautifier1.15.4indirekt
PyPIdatagovuk0.1.0indirekt
PyPIdecorator5.2.1indirekt
PyPIdistlib0.4.0indirekt
PyPIdjango-appconf1.2.0indirekt
PyPIdjango-coverage-plugin3.2.2indirekt
PyPIdjango-debug-toolbar7.0.0indirekt
PyPIdjango-extensions4.1indirekt
PyPIdjango-stubs6.0.6indirekt
PyPIdjango-stubs-ext6.0.2indirekt
PyPIdjlint1.40.4indirekt
PyPIdnspython2.8.0indirekt
PyPIeditorconfig0.17.1indirekt
PyPIexecuting2.2.1indirekt
PyPIfactory-boy3.3.3indirekt
PyPIfaker40.11.1indirekt
PyPIfilelock3.25.2indirekt
PyPIgreenlet3.3.2indirekt
PyPIidentify2.6.18indirekt
PyPIidna3.15indirekt
PyPIiniconfig2.3.0indirekt
PyPIipdb0.13.13indirekt
PyPIipython9.12.0indirekt
PyPIipython-pygments-lexers1.1.1indirekt
PyPIjedi0.19.2indirekt
PyPIjsbeautifier1.15.4indirekt
PyPIjson50.14.0indirekt
PyPIlibrt0.11.0indirekt
PyPIlibsass0.23.0indirekt
PyPImarkupsafe3.0.3indirekt
PyPImatplotlib-inline0.2.1indirekt
PyPImypy2.1.0indirekt
PyPImypy-extensions1.1.0indirekt
PyPInodeenv1.10.0indirekt
PyPIpackaging26.0indirekt
PyPIparso0.8.6indirekt
PyPIpathspec1.0.4indirekt
PyPIpexpect4.9.0indirekt
PyPIplatformdirs4.9.4indirekt
PyPIplaywright1.61.0indirekt
PyPIpluggy1.6.0indirekt
PyPIpre-commit4.6.0indirekt
PyPIprometheus-client0.25.0indirekt
PyPIprompt-toolkit3.0.52indirekt
PyPIptyprocess0.7.0indirekt
PyPIpure-eval0.2.3indirekt
PyPIpycparser3.0indirekt
PyPIpyee13.0.1indirekt
PyPIpygments2.20.0indirekt
PyPIpytest9.1.1indirekt
PyPIpytest-base-url2.1.0indirekt
PyPIpytest-django4.12.0indirekt
PyPIpytest-lazy-fixtures1.4.0indirekt
PyPIpytest-playwright0.8.0indirekt
PyPIpytest-sugar1.1.1indirekt
PyPIpython-discovery1.2.1indirekt
PyPIpyyaml6.0.3indirekt
PyPIrcssmin1.2.2indirekt
PyPIregex2026.3.32indirekt
PyPIrequests2.33.0indirekt
PyPIrjsmin1.2.5indirekt
PyPIruff0.15.20indirekt
PyPIsetuptools83.0.0indirekt
PyPIsix1.17.0indirekt
PyPIsqlparse0.5.5indirekt
PyPIstack-data0.6.3indirekt
PyPItermcolor3.3.0indirekt
PyPItext-unidecode1.3indirekt
PyPItraitlets5.14.3indirekt
PyPItypes-pyyaml6.0.12.20250915indirekt
PyPItyping-extensions4.15.0indirekt
PyPItzdata2025.3indirekt
PyPIurllib32.7.0indirekt
PyPIvirtualenv21.2.0indirekt
PyPIwatchdog6.0.0indirekt
PyPIwcwidth0.6.0indirekt
PyPIwerkzeug3.1.8indirekt
Abhängigkeits-Advisories 0

Die Installation von pypi:datagovuk@0.1.3 zieht 16 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 3715,
      "has_wiki": true,
      "homepage": "https://www.data.gov.uk",
      "languages": {
        "HTML": 3777,
        "Just": 4273,
        "SCSS": 25813,
        "Jinja": 50093,
        "Shell": 2259,
        "Python": 196516,
        "Procfile": 74,
        "Dockerfile": 3353,
        "JavaScript": 20549
      },
      "pushed_at": "2026-07-22T16:09:21Z",
      "created_at": "2026-03-30T09:18:10Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T15:48:51Z",
      "description": "National Data Library",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python",
        "Jinja"
      ]
    },
    "owner": {
      "blog": "https://gds.blog.gov.uk/",
      "name": "Government Digital Service",
      "type": "Organization",
      "login": "alphagov",
      "company": null,
      "location": "The White Chapel Building, 10 Whitechapel High Street, London E1 8QS",
      "followers": 1570,
      "avatar_url": "https://avatars.githubusercontent.com/u/596977?v=4",
      "created_at": "2011-02-02T15:45:37Z",
      "is_verified": null,
      "public_repos": 1528,
      "account_age_days": 5649
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2026-07-22T16:09:22Z"
        },
        {
          "tag": "v2.2.1",
          "kind": "patch",
          "published_at": "2026-07-21T11:26:28Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2026-07-21T09:05:42Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2026-07-20T15:06:36Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2026-07-20T10:45:35Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2026-07-20T08:26:04Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-07-15T14:37:09Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-07-13T18:14:14Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-07-09T15:53:25Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2026-07-08T10:49:06Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-07-07T14:49:17Z"
        },
        {
          "tag": "v1.7.1",
          "kind": "patch",
          "published_at": "2026-07-01T09:16:59Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-06-30T08:05:24Z"
        },
        {
          "tag": "v1.6.2",
          "kind": "patch",
          "published_at": "2026-06-11T15:16:31Z"
        },
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2026-06-11T11:08:02Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-06-11T09:48:00Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-06-05T12:50:26Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-06-04T14:50:42Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-06-02T10:41:01Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-06-01T15:28:37Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-05-28T07:54:32Z"
        },
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-05-21T14:56:16Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-05-19T14:43:57Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-05-19T13:31:31Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-05-13T13:30:11Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "d10197b1bfc974a8e9df7409908ff9bc836bd3e7",
          "body": "Survey banner cookie makes sure that the banner stays closed if a user clicks the close button.\n\nIt's an essential cookie because the close banner option will break without it",
          "is_bot": false,
          "headline": "Set survey-banner cookie to essential (#232)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-22T15:46:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4319332442cf6bf69c5f12df0c9a43fb736a1abd",
          "body": null,
          "is_bot": false,
          "headline": "Update title to Senior User Researcher",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-07-22T12:15:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "935e0bbd43d1457269722645c18bcad1066742fb",
          "body": "Bumps the python group with 2 updates: [django](https://github.com/django/django) and [djlint](https://github.com/djlint/djLint).\n\n\nUpdates `django` from 6.0.6 to 6.0.7\n- [Commits](https://github.com/django/django/compare/6.0.6...6.0.7)\n\nUpdates `djlint` from 1.40.3 to 1.40.4\n- [Release notes](https\n[…]\ndjlint\n  dependency-version: 1.40.4\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-22T09:30:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0b48de9659119bb28a1b81784ee7c92f5068f431",
          "body": null,
          "is_bot": false,
          "headline": "Fix docker platform warning in local dev",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "000c1e9c605da5f0320b094dc2264f678623f903",
          "body": null,
          "is_bot": false,
          "headline": "Make 'just init' call 'just patch-zscaler-ssl'",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bc51fb8279c7ebcf7178485253328d5104cb1d7",
          "body": null,
          "is_bot": false,
          "headline": "Remove overhanging docker network override",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f94c8aaf2c04501679fd4f1692a415646c5e0f2",
          "body": null,
          "is_bot": false,
          "headline": "Make application work with zscaler SSL certs locally",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edfdf4f2550815c69e6fbf75d3c110933e702c18",
          "body": null,
          "is_bot": false,
          "headline": "Ensure failures previewing CSV files are logged",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbf5981d538e80145d89bec24b56080ca7070398",
          "body": null,
          "is_bot": false,
          "headline": "Relocate models in to solr.py to avoid confusion with django models",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01ee9e373a679ea20563bc4f9df6f87c6c5df25d",
          "body": null,
          "is_bot": false,
          "headline": "Change host-exposed port for solr to avoid clashing with CKAN",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T08:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06856f86e317ace2c55fcdcb2ddea19237b719a2",
          "body": "The cookie radio button default selections aren't selected in time. Adding assertions help to add a small enough delay\nto hopefully pass this flaky test",
          "is_bot": false,
          "headline": "Fix flaky smoke test (#227)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-21T11:02:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aab036af7eabee5a5d5874ade9f58e8bbec81f7e",
          "body": "Set the survey banner as a setting in cookies.js . This means if user rejects all cookies\nthen the survey banner cookie will not set",
          "is_bot": false,
          "headline": "Set cookie as setting (#226)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-21T08:48:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d480d944adddf89120953ca07af67603328192c7",
          "body": "Remove v1/search feature from datagovuk/core/jinja2/includes/header.jinja\nwhilst we reconsider how feature flags effect smoke testing in different environments",
          "is_bot": false,
          "headline": "Remove v1/search feature on homepage (#223)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-20T14:42:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30aac9a64dfde58bc56b82f986ca9270b0cba612",
          "body": null,
          "is_bot": false,
          "headline": "Set banner link to dark pink colour (#221)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-20T09:53:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "642aa5bc17e1aaa54094fc5f0e8f2331532eccb4",
          "body": "Bumps the python group with 1 update: [djlint](https://github.com/djlint/djLint).\n\n\nUpdates `djlint` from 1.40.1 to 1.40.3\n- [Release notes](https://github.com/djlint/djLint/releases)\n- [Changelog](https://github.com/djlint/djLint/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/djlint/djLin\n[…]\ndjlint\n  dependency-version: 1.40.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump djlint from 1.40.1 to 1.40.3 in the python group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T09:52:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "151d43b62be9c0ac877c0bca4710d4535c127ca7",
          "body": "showed number of orgs and datasets indexed that was removed, but\ncounts not, so cleanup.",
          "is_bot": false,
          "headline": "chore: org and dataset counts were just for a log statement that",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-07-20T08:47:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "035a71a1647d3b649140128a8e8b39cca8b02dfe",
          "body": "* DGUK-751 Add survey banner\n\nAdd survey banner to all pages\n\nAdd survey banner template, styling and javascript (to close the banner)\n\n* Rename html class attr\n\n* Add cookie when survey banner dismissed\n\nWhen a user closes the survey banner, add a cookie and set it to expire after 30 days.\n\n* Add s\n[…]\n\n* Add E2E tests\n\n* Add css margin-bottom to banner\n\n* Add padding to link\n\nAdd padding around the link\n\nRemove the container element around the anchor tag <a>\n\n* Remove full stop at the end of banner",
          "is_bot": false,
          "headline": "DGUK-751 Add survey banner (#219)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-20T07:40:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f1fab62221031b1fd5feaa22324a16a1497a079a",
          "body": null,
          "is_bot": false,
          "headline": "Bump playwright in dockerfile",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-20T07:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "552dbe0e3cf63c7c634048c664630fd8eb50f81e",
          "body": "Bumps the python group with 5 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.64.0` |\n| [coverage](https://github.com/covera\n[…]\nwright\n  dependency-version: 1.61.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group across 1 directory with 5 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:22:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6fc18d099a092e8bd6775358463f82b55d68dba",
          "body": "Bumps the github-actions group with 5 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [docker/login-action](https://github.com/docker/login-action) | `4.2.0` | `4.4.0` |\n| [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) | `4.1.0` | `4.2.0` |\n| [\n[…]\n\n  dependency-version: 4.2.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the github-actions group across 1 directory with 5 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:10:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1e6652e115e583e7b9b7dc084afd1737a3fcdcc",
          "body": "* Use docker-compose network supplied by ckanext-datagovuk\n\n* Add basic solr search view\n\n* Add feature flag and base directory header link on it\n\n* feat: added a local dockerised solr with approx 750 datasets loaded\ninto solr.\n\nlocal dev compose uses this solr index.\n\n* Add preview page endpoint\n\nA\n[…]\nincreases test coverage too.\n\n* Rename column to Preview\n\n---------\n\nCo-authored-by: Brendan Smith <brendan.smith@digital.cabinet-office.gov.uk>\nCo-authored-by: Adam Shimali <adam.shimali@dsit.gov.uk>",
          "is_bot": false,
          "headline": "DGUK-777 Add preview dataset resource page (#209)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:23:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f5160fbe8387ffe3c3ab4f8fbf0e08c6815b644",
          "body": null,
          "is_bot": false,
          "headline": "Disallow all pages under v1 path not just v1/search (#218)",
          "author_name": "Ken Tsang",
          "author_login": "kentsanggds",
          "committed_at": "2026-07-17T13:49:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "167f3ce7b0ba71ef2a004d7960f3f19af65577d5",
          "body": "* Use docker-compose network supplied by ckanext-datagovuk\n\n* Add basic solr search view\n\n* Add dataset page to solr scaffold\n\n* Add view tests for directory scaffold\n\n* Add a custom docker network for CI tests (temporarily)\n\n* Drop trailing slash from /search\n\n* Add feature flag and base directory \n[…]\nded placeholder preview link in case format is csv\n\nTODO: Emulate tag mappings in rails app.\n\nMinor correction for feature flag doc.\n\n---------\n\nCo-authored-by: Adam Shimali <adam.shimali@dsit.gov.uk>",
          "is_bot": false,
          "headline": "Datagovuk solr scaffold (#204)",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-16T13:10:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9a7a10b4fb523e0aceb5839a6c907e39f76bcdea",
          "body": "* Revise About page for National Data Library transformation\n\nUpdated the content to more clearly explain new sections of the website and thr directory and fix some typos\n\n* Include note on self-publishing open data\n\nAdded note about self-publishing open data in the directory.\n\n* Remove trailing whitespace\n\n* Move tests for different page contents into own file\n\nalso fixed the test for the about page content\n\n---------\n\nCo-authored-by: kentsanggds <ken.tsang@digital.cabinet-office.gov.uk>",
          "is_bot": false,
          "headline": "Antoniaantp patch 2 (#211)",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-15T13:33:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "476e4a5a917cad13dd0889b3c07a28e447a0693b",
          "body": null,
          "is_bot": false,
          "headline": "Update slack notify job to run on any failed job (#212)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-15T13:26:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae1bdb3ab04514066b92b0a4bdca454b7024d55f",
          "body": "* Do not allow bots to crawl /v1/search\n\nThe /v1/search will be the first iteration for porting search over from the Find app, we should stop crawlers indexing it until it is ready for release\n\n* Add E2E test for robots.txt",
          "is_bot": false,
          "headline": "Do not allow bots to crawl /v1/search (#203)",
          "author_name": "Ken Tsang",
          "author_login": "kentsanggds",
          "committed_at": "2026-07-10T16:14:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9d8cd0a07127d32238a19b213e887b3cfe1edf6",
          "body": "Bumps the python group with 1 update: [ruff](https://github.com/astral-sh/ruff).\n\n\nUpdates `ruff` from 0.15.19 to 0.15.20\n- [Release notes](https://github.com/astral-sh/ruff/releases)\n- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/astral-sh/ruf\n[…]\n ruff\n  dependency-version: 0.15.20\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump ruff from 0.15.19 to 0.15.20 in the python group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-10T10:32:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3b064a0cd78ef6b1a90b06932f68d860343853eb",
          "body": null,
          "is_bot": false,
          "headline": "Add trailing slash to URLs",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51b84a39c644d018723a4f09e492f605f229c35c",
          "body": null,
          "is_bot": false,
          "headline": "Fix support content test",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44b8e149c120476073ad6101b7d75a456aa868c0",
          "body": null,
          "is_bot": false,
          "headline": "Fix lint complaints",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "370e9af4a963a89b1e122f0aaa447d9e6372b9d9",
          "body": null,
          "is_bot": false,
          "headline": "Stop markdown rendering inserting space after links",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48994ff3c00c45e71bd4a3415bf8d5637d58e4e6",
          "body": null,
          "is_bot": false,
          "headline": "Fix data curation view test",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0087746a656bbaea6a02a7e40ce8fc606496dbea",
          "body": null,
          "is_bot": false,
          "headline": "Fix roadmap markdown link",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb6d66eac70c3e1b6a5b9b9ef3f122841852e652",
          "body": null,
          "is_bot": false,
          "headline": "Decrease size of medium headings in content pages",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82ae2c329cee881e527f9ca8f987106e3f00cf75",
          "body": null,
          "is_bot": false,
          "headline": "Fix heading formatting in data curation document",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "787d735c60dcce027a5857a3b9fd3555f673df11",
          "body": "Added a link to the data curation criteria for better clarity.",
          "is_bot": false,
          "headline": "Update roadmap.md to include data curation criteria link",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e63f428e4f2ea2b408cd63f777be6f3b40364af",
          "body": "Updated the support section to clarify the type of support needed.",
          "is_bot": false,
          "headline": "Clarify support request instructions",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18ec887d7b6d1c9262165e0c023a021fdc8771d6",
          "body": "Curation guidance added. Reordered to flag support form early in light of getting many support enquiries through the feedback form lately",
          "is_bot": false,
          "headline": "Reorder and add curation page",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b61c96a8cc852d7c47ec49c14e5e5b4d7276ee2",
          "body": "Adding link to how we curate collections",
          "is_bot": false,
          "headline": "Add link to curation process",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d59ff243357e58f53dda46bb4670e873cedeb2fa",
          "body": "Formatting edits to make criteria bullets and elevate 'add a new page' to h2",
          "is_bot": false,
          "headline": "formatting edits",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dd444b74b1652061d4f9111aaccc7134bf8019c",
          "body": null,
          "is_bot": false,
          "headline": "Drop data-curation from footer but retain content page",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f406e4cfe88286301d2a55a1757a0da2d093fbf2",
          "body": null,
          "is_bot": false,
          "headline": "Relocate data curation to be a footer page",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65b821eb5fb1256164d003dd30bfe8d80def55b8",
          "body": "This document outlines the criteria and process for curating data collections on the National Data Library, including scope, relevance, demand, quality, and how to propose new data pages.",
          "is_bot": false,
          "headline": "Add data curation page to data manual",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-07-09T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f545f5bd41947ef5e6745cc562e260a1c4e687f",
          "body": "* update road traffic vis\n\n* update chart title, update instructions\n\n* rename file\n\n* update headline testcase\n\n* update no download field test case\n\n* update collection headline visibility test\n\n* update headline e2e test\n\n* update headline e2e test\n\n* update text in test case\n\n* update str test\n\n* rename column\n\n* update chart title\n\n* update date",
          "is_bot": false,
          "headline": "Feat road traffic mileage (#171)",
          "author_name": "giro090",
          "author_login": "giro090",
          "committed_at": "2026-07-09T07:53:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa054392bfa2fe2f233f41601d4bce8379c95aaa",
          "body": "Bumps [django-debug-toolbar](https://github.com/django-commons/django-debug-toolbar) from 6.3.0 to 7.0.0.\n- [Release notes](https://github.com/django-commons/django-debug-toolbar/releases)\n- [Changelog](https://github.com/django-commons/django-debug-toolbar/blob/main/docs/changes.rst)\n- [Commits](ht\n[…]\nendency-name: django-debug-toolbar\n  dependency-version: 7.0.0\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump django-debug-toolbar from 6.3.0 to 7.0.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-09T06:26:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d3a213315899b1e33c8d6be7543bae54583830f",
          "body": "Bumps the github-actions group with 1 update in the / directory: [actions/setup-python](https://github.com/actions/setup-python).\n\n\nUpdates `actions/setup-python` from 6.2.0 to 6.3.0\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-pyth\n[…]\n\n  dependency-version: 6.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-python in the github-actions group across 1 directory",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-09T05:30:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55bcd36cc3563ae21d715dc68af29a8c66cfe74c",
          "body": "Bumps the python group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [django-environ](https://github.com/joke2k/django-environ) | `0.13.0` | `0.14.0` |\n| [django-health-check](https://github.com/codingjoe/django-health-check) | `4.4.2` | `4.4.3` |\n| [mistune](http\n[…]\n ruff\n  dependency-version: 0.15.19\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group across 1 directory with 8 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-09T05:30:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ee9af6e2c1ac598f3c56959825829e60a681427",
          "body": null,
          "is_bot": false,
          "headline": "Create a specific datagovuk branch to avoid clashing with ckan (#200)",
          "author_name": "Ken Tsang",
          "author_login": "kentsanggds",
          "committed_at": "2026-07-08T10:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfed91386d9f117dce7d7c13f5bbdbfd76838085",
          "body": "* add electricity chart config\n\n* update instructions\n\n* update date, update filenames\n\n* update line names, change production to generation\n\n* add total line, update colours, update label\n\n* split low carbon into renewables and nuclear\n\n* rename file\n\n* feat: update to todays date\n\n---------\n\nCo-authored-by: Adam Shimali <adam.shimali@dsit.gov.uk>",
          "is_bot": false,
          "headline": "Feat electricity sources (#168)",
          "author_name": "giro090",
          "author_login": "giro090",
          "committed_at": "2026-07-07T14:42:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "941019057c2ace7e11bb41130e18c5d1b0a87cc2",
          "body": "* add bus journeys chart config\n\n* update vis path\n\n* update descriptions\n\n* rename files, update chart colour\n\n* Update README.md\n\n* fix indenting",
          "is_bot": false,
          "headline": "Feat bus travel (#170)",
          "author_name": "giro090",
          "author_login": "giro090",
          "committed_at": "2026-07-07T13:19:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65b67b2c600e29fb11a3d079a6f7adc68e8cdea7",
          "body": "Bumps the github-actions group with 3 updates in the / directory: [actions/checkout](https://github.com/actions/checkout), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) and [docker/metadata-action](https://github.com/docker/metadata-action).\n\n\nUpdates `actions/checkout`\n[…]\n\n  dependency-version: 6.1.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the github-actions group across 1 directory with 3 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-02T12:53:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c36766ab251ec3bba0b195ee8d0fbea5a12e697b",
          "body": "Bumps the python group with 1 update: [sentry-sdk](https://github.com/getsentry/sentry-python).\n\n\nUpdates `sentry-sdk` from 2.62.0 to 2.63.0\n- [Release notes](https://github.com/getsentry/sentry-python/releases)\n- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)\n- [Co\n[…]\ntry-sdk\n  dependency-version: 2.63.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump sentry-sdk from 2.62.0 to 2.63.0 in the python group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-02T12:53:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2803c54639e73c87a5910117f1e74a066aded34",
          "body": "Added test to catch such errors.",
          "is_bot": false,
          "headline": "fix: mismatch csv filenames with visualisation config json.",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-07-01T07:38:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca4e825db17a48f52734211d812c46ec2b4b3c3e",
          "body": "Bumps the python group with 1 update in the / directory: [pytest](https://github.com/pytest-dev/pytest).\n\n\nUpdates `pytest` from 9.0.3 to 9.1.0\n- [Release notes](https://github.com/pytest-dev/pytest/releases)\n- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)\n- [Commits](htt\n[…]\n pytest\n  dependency-version: 9.1.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump pytest from 9.0.3 to 9.1.0 in the python group across 1 directory",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T07:21:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf8444be8e5f897db40e9236576408761676c683",
          "body": "* add car driving tests chart\n\n* change values to millions\n\n* update years, update instructions",
          "is_bot": false,
          "headline": "add car driving tests chart (#172)",
          "author_name": "giro090",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:26:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08eca65b964a07a2c32db58054b61e60d8a4d833",
          "body": null,
          "is_bot": false,
          "headline": "switch colours, update years",
          "author_name": "Giselle Rosetta",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e74be99ed172645c641868df62d06d36f80881b",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "giro090",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f129bb7c75852b27501bbb8a15e21d52854f900",
          "body": null,
          "is_bot": false,
          "headline": "reformat numbers to millions",
          "author_name": "Giselle Rosetta",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8256bcc6f95731801679e4090e2db1fbaee66896",
          "body": null,
          "is_bot": false,
          "headline": "add mot tests and failures chart",
          "author_name": "Giselle Rosetta",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:17:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee7dd611f8f73ffae521a14f3d86ccc73286cb6f",
          "body": null,
          "is_bot": false,
          "headline": "update technical language",
          "author_name": "Giselle Rosetta",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:16:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7541ffaf9eb5fdc5b1976b0c0bca17ba43d13b63",
          "body": null,
          "is_bot": false,
          "headline": "add milk prices chart",
          "author_name": "Giselle Rosetta",
          "author_login": "giro090",
          "committed_at": "2026-06-29T15:16:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa7350ce294421f6a6f9d68c25170385645685c5",
          "body": "Bumps the python group with 2 updates: [djlint](https://github.com/djlint/djLint) and [ruff](https://github.com/astral-sh/ruff).\n\n\nUpdates `djlint` from 1.39.0 to 1.39.2\n- [Release notes](https://github.com/djlint/djLint/releases)\n- [Changelog](https://github.com/djlint/djLint/blob/master/CHANGELOG.\n[…]\n ruff\n  dependency-version: 0.15.17\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T08:59:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d04c8ac09d166d045fe875ee2b826039bbf953d9",
          "body": "Bumps the github-actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python).\n\n\nUpdates `actions/setup-python` from 6 to 6.2.0\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v6...v6.2.0)\n[…]\n\n  dependency-version: 6.2.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-python from 6 to 6.2.0 in the github-actions group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-24T10:18:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a4b6cecf8484171267242e4ca5daaeddf15d4f8",
          "body": "Bumps the python group with 1 update: [sentry-sdk](https://github.com/getsentry/sentry-python).\n\n\nUpdates `sentry-sdk` from 2.61.1 to 2.62.0\n- [Release notes](https://github.com/getsentry/sentry-python/releases)\n- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)\n- [Co\n[…]\ntry-sdk\n  dependency-version: 2.62.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump sentry-sdk from 2.61.1 to 2.62.0 in the python group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-24T10:17:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3a24eef14b9238f1257434501da3ca33da6e1bb",
          "body": "Bumps the python group with 1 update: [djlint](https://github.com/djlint/djLint).\n\n\nUpdates `djlint` from 1.38.1 to 1.39.0\n- [Release notes](https://github.com/djlint/djLint/releases)\n- [Changelog](https://github.com/djlint/djLint/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/djlint/djLin\n[…]\ndjlint\n  dependency-version: 1.39.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump djlint from 1.38.1 to 1.39.0 in the python group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-23T09:18:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b71c750a1aab3823c8519001e143672581c35501",
          "body": "Bumps the python group with 2 updates: [djlint](https://github.com/djlint/djLint) and [ruff](https://github.com/astral-sh/ruff).\n\n\nUpdates `djlint` from 1.36.4 to 1.38.1\n- [Release notes](https://github.com/djlint/djLint/releases)\n- [Changelog](https://github.com/djlint/djLint/blob/master/CHANGELOG.\n[…]\n ruff\n  dependency-version: 0.15.16\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T08:26:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "62818578f5db4663d9d317b98b4f7aa24223712c",
          "body": "Bumps the python group with 2 updates: [django](https://github.com/django/django) and [django-health-check](https://github.com/codingjoe/django-health-check).\n\n\nUpdates `django` from 6.0.5 to 6.0.6\n- [Commits](https://github.com/django/django/compare/6.0.5...6.0.6)\n\nUpdates `django-health-check` fro\n[…]\nth-check\n  dependency-version: 4.4.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-18T15:01:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "312e9bd91cecb36f616e97d58001e1a3871f1e8b",
          "body": null,
          "is_bot": false,
          "headline": "Update page last updated date for planning",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-16T16:35:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c56e58167fc729b24951b3a1443b87ddf60d26e",
          "body": "Co-authored-by: Joe Lanman <joelanman@gmail.com>",
          "is_bot": false,
          "headline": "Update datagovuk/content/collections/land-and-property/planning-data.md",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-16T16:23:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "217b1f2a99ec9f7f76f718ea2206a52a52a7aa43",
          "body": null,
          "is_bot": false,
          "headline": "Change ‘portal’ to ‘platform’, add useful API info",
          "author_name": "stevenjmesser",
          "author_login": "stevenjmesser",
          "committed_at": "2026-06-16T16:23:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3b3264add92a0d074b91d343980deefa51cfb92",
          "body": "Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 6.0.2 to 6.0.3\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits\n[…]\n\n  dependency-version: 6.0.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6.0.2 to 6.0.3 in the github-actions group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T12:38:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cff9484f40dbca77611e5ada037b33c594c3dd33",
          "body": null,
          "is_bot": false,
          "headline": "Uncapitalise nav title",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-16T09:03:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c127134c5c615df6f5b8422dc25a585560d9f2d",
          "body": "Bumps the python group with 1 update: [sentry-sdk](https://github.com/getsentry/sentry-python).\n\n\nUpdates `sentry-sdk` from 2.61.0 to 2.61.1\n- [Release notes](https://github.com/getsentry/sentry-python/releases)\n- [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md)\n- [Co\n[…]\ntry-sdk\n  dependency-version: 2.61.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump sentry-sdk from 2.61.0 to 2.61.1 in the python group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-15T11:11:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57321057da887127380859aa64a6e8c8668c93db",
          "body": "Bumps the python group with 2 updates: [sentry-sdk](https://github.com/getsentry/sentry-python) and [ruff](https://github.com/astral-sh/ruff).\n\n\nUpdates `sentry-sdk` from 2.60.0 to 2.61.0\n- [Release notes](https://github.com/getsentry/sentry-python/releases)\n- [Changelog](https://github.com/getsentr\n[…]\n ruff\n  dependency-version: 0.15.15\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-15T08:16:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e80e090aaf84010c18beba9de90c6614ccb70bf5",
          "body": "Provide the release tag from the trigger on.workflow_run.workflows\n\nThe on.workflow_run.workflows triggered create-production-pr but it needs to also provide the release tag",
          "is_bot": false,
          "headline": "DGUK-609 Provide the release tag from the parent workflow (#166)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-11T15:05:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "656e73d6227815ff8c9689a61fa2308e08223de3",
          "body": "* DGUK-609 fix syntax error\n\n* Fix syntax error",
          "is_bot": false,
          "headline": "DGUK-609 Fix Poll staging workflow (#165)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-11T11:05:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eec29d870fd756c27e58d13aa947e9e557b4b4bf",
          "body": "Split create-staging-production-prs.yml into two workflows: create-staging-pr.yaml and create-production-pr.yaml\n\nSet  create-production-pr to depend on  create-staging-pr workflow so that production deployment doesn't start until\nstaging is deployed and smoke tested.\n\nPoll staging to see updated de\n[…]\ndeQL scan issue relating to an attacker having access to secrets.\n\nProvide smoke tests with the specific secrets it needs workflows that call it. This means it doesn't have access to all repo secrets.",
          "is_bot": false,
          "headline": "DGUK-609 Smoke test staging before production deployment (#150)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-10T13:03:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5f87bc5dae27227534ec733c786a99a531ed002",
          "body": "Bumps the python group with 2 updates: [django-prometheus](https://github.com/korfuri/django-prometheus) and [coverage](https://github.com/coveragepy/coveragepy).\n\n\nUpdates `django-prometheus` from 2.4.0 to 2.5.0\n- [Release notes](https://github.com/korfuri/django-prometheus/releases)\n- [Changelog](\n[…]\nverage\n  dependency-version: 7.14.1\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: python\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the python group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-10T10:37:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f64e976f907944c84b916c1c560485c635b1c96",
          "body": "Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 6 to 6.0.2\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](ht\n[…]\n\n  dependency-version: 6.0.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6 to 6.0.2 in the github-actions group",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-10T10:36:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "510f8098e7db0b9b51c81ee2c44ac70918e076f7",
          "body": null,
          "is_bot": false,
          "headline": "Make GTM env var override example more useful",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10f0e291487b3f78312e01beb2b939c4ed66acec",
          "body": null,
          "is_bot": false,
          "headline": "Fixup",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "553e4be837589a5acf61a68a1f249668f8f5f876",
          "body": "…loper overrides",
          "is_bot": false,
          "headline": "Adjust local env file pattern to have sensible defaults with per-deve…",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2286a30e5d3721a1fa42d216b6fc959e7a8051a2",
          "body": null,
          "is_bot": false,
          "headline": "Relocate templates for data manual and collections",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "007fb5ca2b6dd4c62098ba10652f195ca2633711",
          "body": null,
          "is_bot": false,
          "headline": "Load jinja2 templates from app directories",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d992a9eb2e6796f0a2592825a24dd2c977591842",
          "body": null,
          "is_bot": false,
          "headline": "Relocate pages templates to pages app",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6d957d59d9231091785205783fc312191958fc4",
          "body": null,
          "is_bot": false,
          "headline": "Relocate shared templates to core/templates/",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88d509fc84aa446fa58d19ab290e0e4a7c0fca8d",
          "body": null,
          "is_bot": false,
          "headline": "Remove redundant .gitmodules file",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-10T08:27:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa8d84f5887086c8a8583bc405279deaba4eae9f",
          "body": null,
          "is_bot": false,
          "headline": "Always run ci workflow",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T16:38:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6da67f8ce84b97396ca1693ded274d6e7dcc1828",
          "body": null,
          "is_bot": false,
          "headline": "Extend feature flag docs with example PRs",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T16:38:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fadf342a32784a90c113988a77d8f3322f6ce900",
          "body": null,
          "is_bot": false,
          "headline": "update births chart",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-09T15:55:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eabe74f48faaf5a5f6baec82f2cbd74c5b55c6b8",
          "body": null,
          "is_bot": false,
          "headline": "update museum and gallery visits",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-09T15:55:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c114b3e38286a5d4d889c4ec22891341468be1a8",
          "body": null,
          "is_bot": false,
          "headline": "update births",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-09T15:55:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "260f0508d7fd82bc3968a46149e151759f55546f",
          "body": null,
          "is_bot": false,
          "headline": "Fix failing E2E test",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd481b9d4f36564fa86d2ac18b43baf13534182d",
          "body": null,
          "is_bot": false,
          "headline": "Use collection.is_spotlight to identify spotlight items",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb1fe434234d2fe762ce5abbf9d42e2b53b67bcf",
          "body": null,
          "is_bot": false,
          "headline": "Refactor spotlight attribute in collection constants",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "559970e4d94fea60efef939478b740ee4eb87dba",
          "body": null,
          "is_bot": false,
          "headline": "Drop redundant collections constant datastructure",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4a2b5ad0625c95279f894baaccbeec64efdda9e",
          "body": null,
          "is_bot": false,
          "headline": "Re-order collections alphabetically",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T15:15:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ec3400a63a7edf8ffdfe80d22e9781c0ba8564e",
          "body": "Customise the alphagov report-run-failure slack action to run on non-main branch workflows\n\nCustomise the slack notification sent\n\nUpdate /create-staging-production-prs.yml to call slack notify job on failure in the workflow",
          "is_bot": false,
          "headline": "DGUK-615 Customise slack notification action (#125)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-09T12:39:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80191845f0c5062b97f946d06be8e57a80b827fa",
          "body": "Bumps [mypy](https://github.com/python/mypy) from 1.20.2 to 2.1.0.\n- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/python/mypy/compare/v1.20.2...v2.1.0)\n\n---\nupdated-dependencies:\n- dependency-name: mypy\n  dependency-version: 2.1.0\n  dependency-type: direct:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump mypy from 1.20.2 to 2.1.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-09T09:43:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3eed3bcad46d6f4d2576a8c23b5a609b60082ff4",
          "body": null,
          "is_bot": false,
          "headline": "DGUK-583 Use team slack webhook url (#153)",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-08T15:47:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 25,
      "commits_last_year": 380,
      "latest_release_at": "2026-07-22T16:09:22Z",
      "latest_release_tag": "v3.0.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 1.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "datagovuk",
          "exists": true,
          "license": "LGPLv3",
          "keywords": [],
          "ecosystem": "pypi",
          "matches_repo": false,
          "registry_url": "https://pypi.org/project/datagovuk/",
          "is_deprecated": false,
          "latest_version": "0.1.3",
          "repository_url": "https://github.com/drewsonne/datagovuk",
          "versions_count": 3,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 44,
          "first_published_at": "2018-11-10T22:55:25.498801Z",
          "latest_published_at": "2018-11-12T09:37:42.957775Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2809
        }
      ]
    },
    "popularity": {
      "forks": 3,
      "stars": 3,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-24",
            "count": 1
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 3,
        "total_forks": 3
      },
      "star_history": null,
      "open_issues_and_prs": 9
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "justfile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 46915,
      "source_files_sampled": 85,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3309
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 16,
        "malicious_count": 0,
        "assessed_package": "pypi:datagovuk@0.1.3",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "argon2-cffi",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==25.1.0"
        },
        {
          "name": "chartkick",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==1.1.0"
        },
        {
          "name": "django",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==6.0.7"
        },
        {
          "name": "django-compressor",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==4.6.0"
        },
        {
          "name": "django-environ",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==0.14.0"
        },
        {
          "name": "django-health-check",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==4.4.3"
        },
        {
          "name": "django-libsass",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==0.9"
        },
        {
          "name": "django-prometheus",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==2.5.0"
        },
        {
          "name": "gunicorn",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==26.0.0"
        },
        {
          "name": "jinja2",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==3.1.6"
        },
        {
          "name": "mistune",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==3.3.2"
        },
        {
          "name": "pillow",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==12.3.0"
        },
        {
          "name": "pysolr",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==3.11.0"
        },
        {
          "name": "python-frontmatter",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==1.3.0"
        },
        {
          "name": "python-slugify",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==8.0.4"
        },
        {
          "name": "sentry-sdk",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==2.64.0"
        },
        {
          "name": "whitenoise",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": "==6.12.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "argon2-cffi",
            "direct": true,
            "version": "25.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "chartkick",
            "direct": true,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django",
            "direct": true,
            "version": "6.0.7",
            "ecosystem": "pypi"
          },
          {
            "name": "django-compressor",
            "direct": true,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-environ",
            "direct": true,
            "version": "0.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-health-check",
            "direct": true,
            "version": "4.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "django-libsass",
            "direct": true,
            "version": "0.9",
            "ecosystem": "pypi"
          },
          {
            "name": "django-prometheus",
            "direct": true,
            "version": "2.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "gunicorn",
            "direct": true,
            "version": "26.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "jinja2",
            "direct": true,
            "version": "3.1.6",
            "ecosystem": "pypi"
          },
          {
            "name": "mistune",
            "direct": true,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": true,
            "version": "12.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pysolr",
            "direct": true,
            "version": "3.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-frontmatter",
            "direct": true,
            "version": "1.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "python-slugify",
            "direct": true,
            "version": "8.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "sentry-sdk",
            "direct": true,
            "version": "2.64.0",
            "ecosystem": "pypi"
          },
          {
            "name": "whitenoise",
            "direct": true,
            "version": "6.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "argon2-cffi-bindings",
            "direct": false,
            "version": "25.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "asgiref",
            "direct": false,
            "version": "3.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "ast-serialize",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "asttokens",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "certifi",
            "direct": false,
            "version": "2026.2.25",
            "ecosystem": "pypi"
          },
          {
            "name": "cffi",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cfgv",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "pypi"
          },
          {
            "name": "charset-normalizer",
            "direct": false,
            "version": "3.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "click",
            "direct": false,
            "version": "8.3.1",
            "ecosystem": "pypi"
          },
          {
            "name": "colorama",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "pypi"
          },
          {
            "name": "coverage",
            "direct": false,
            "version": "7.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "cssbeautifier",
            "direct": false,
            "version": "1.15.4",
            "ecosystem": "pypi"
          },
          {
            "name": "datagovuk",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "decorator",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "distlib",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-appconf",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-coverage-plugin",
            "direct": false,
            "version": "3.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "django-debug-toolbar",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "django-extensions",
            "direct": false,
            "version": "4.1",
            "ecosystem": "pypi"
          },
          {
            "name": "django-stubs",
            "direct": false,
            "version": "6.0.6",
            "ecosystem": "pypi"
          },
          {
            "name": "django-stubs-ext",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "pypi"
          },
          {
            "name": "djlint",
            "direct": false,
            "version": "1.40.4",
            "ecosystem": "pypi"
          },
          {
            "name": "dnspython",
            "direct": false,
            "version": "2.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "editorconfig",
            "direct": false,
            "version": "0.17.1",
            "ecosystem": "pypi"
          },
          {
            "name": "executing",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "factory-boy",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "pypi"
          },
          {
            "name": "faker",
            "direct": false,
            "version": "40.11.1",
            "ecosystem": "pypi"
          },
          {
            "name": "filelock",
            "direct": false,
            "version": "3.25.2",
            "ecosystem": "pypi"
          },
          {
            "name": "greenlet",
            "direct": false,
            "version": "3.3.2",
            "ecosystem": "pypi"
          },
          {
            "name": "identify",
            "direct": false,
            "version": "2.6.18",
            "ecosystem": "pypi"
          },
          {
            "name": "idna",
            "direct": false,
            "version": "3.15",
            "ecosystem": "pypi"
          },
          {
            "name": "iniconfig",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipdb",
            "direct": false,
            "version": "0.13.13",
            "ecosystem": "pypi"
          },
          {
            "name": "ipython",
            "direct": false,
            "version": "9.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "ipython-pygments-lexers",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "jedi",
            "direct": false,
            "version": "0.19.2",
            "ecosystem": "pypi"
          },
          {
            "name": "jsbeautifier",
            "direct": false,
            "version": "1.15.4",
            "ecosystem": "pypi"
          },
          {
            "name": "json5",
            "direct": false,
            "version": "0.14.0",
            "ecosystem": "pypi"
          },
          {
            "name": "librt",
            "direct": false,
            "version": "0.11.0",
            "ecosystem": "pypi"
          },
          {
            "name": "libsass",
            "direct": false,
            "version": "0.23.0",
            "ecosystem": "pypi"
          },
          {
            "name": "markupsafe",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "matplotlib-inline",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "mypy-extensions",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "nodeenv",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "packaging",
            "direct": false,
            "version": "26.0",
            "ecosystem": "pypi"
          },
          {
            "name": "parso",
            "direct": false,
            "version": "0.8.6",
            "ecosystem": "pypi"
          },
          {
            "name": "pathspec",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "pypi"
          },
          {
            "name": "pexpect",
            "direct": false,
            "version": "4.9.0",
            "ecosystem": "pypi"
          },
          {
            "name": "platformdirs",
            "direct": false,
            "version": "4.9.4",
            "ecosystem": "pypi"
          },
          {
            "name": "playwright",
            "direct": false,
            "version": "1.61.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pluggy",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pre-commit",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "prometheus-client",
            "direct": false,
            "version": "0.25.0",
            "ecosystem": "pypi"
          },
          {
            "name": "prompt-toolkit",
            "direct": false,
            "version": "3.0.52",
            "ecosystem": "pypi"
          },
          {
            "name": "ptyprocess",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pure-eval",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "pypi"
          },
          {
            "name": "pycparser",
            "direct": false,
            "version": "3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pyee",
            "direct": false,
            "version": "13.0.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pygments",
            "direct": false,
            "version": "2.20.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest",
            "direct": false,
            "version": "9.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-base-url",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-django",
            "direct": false,
            "version": "4.12.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-lazy-fixtures",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-playwright",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "pypi"
          },
          {
            "name": "pytest-sugar",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "pypi"
          },
          {
            "name": "python-discovery",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "pypi"
          },
          {
            "name": "pyyaml",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "pypi"
          },
          {
            "name": "rcssmin",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "pypi"
          },
          {
            "name": "regex",
            "direct": false,
            "version": "2026.3.32",
            "ecosystem": "pypi"
          },
          {
            "name": "requests",
            "direct": false,
            "version": "2.33.0",
            "ecosystem": "pypi"
          },
          {
            "name": "rjsmin",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": "0.15.20",
            "ecosystem": "pypi"
          },
          {
            "name": "setuptools",
            "direct": false,
            "version": "83.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "six",
            "direct": false,
            "version": "1.17.0",
            "ecosystem": "pypi"
          },
          {
            "name": "sqlparse",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "pypi"
          },
          {
            "name": "stack-data",
            "direct": false,
            "version": "0.6.3",
            "ecosystem": "pypi"
          },
          {
            "name": "termcolor",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "pypi"
          },
          {
            "name": "text-unidecode",
            "direct": false,
            "version": "1.3",
            "ecosystem": "pypi"
          },
          {
            "name": "traitlets",
            "direct": false,
            "version": "5.14.3",
            "ecosystem": "pypi"
          },
          {
            "name": "types-pyyaml",
            "direct": false,
            "version": "6.0.12.20250915",
            "ecosystem": "pypi"
          },
          {
            "name": "typing-extensions",
            "direct": false,
            "version": "4.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "tzdata",
            "direct": false,
            "version": "2025.3",
            "ecosystem": "pypi"
          },
          {
            "name": "urllib3",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "pypi"
          },
          {
            "name": "virtualenv",
            "direct": false,
            "version": "21.2.0",
            "ecosystem": "pypi"
          },
          {
            "name": "watchdog",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "pypi"
          },
          {
            "name": "wcwidth",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          },
          {
            "name": "werkzeug",
            "direct": false,
            "version": "3.1.8",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 105,
        "direct_count": 17,
        "indirect_count": 88
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 7,
        "merged_prs": 171,
        "open_issues": 2,
        "closed_ratio": 0,
        "closed_issues": 0,
        "closed_unmerged_prs": 53
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "currycoder",
          "commits": 239,
          "avatar_url": "https://avatars.githubusercontent.com/u/3239148?v=4"
        },
        {
          "type": "User",
          "login": "Obsiye",
          "commits": 38,
          "avatar_url": "https://avatars.githubusercontent.com/u/25043924?v=4"
        },
        {
          "type": "User",
          "login": "giro090",
          "commits": 10,
          "avatar_url": "https://avatars.githubusercontent.com/u/135234996?v=4"
        },
        {
          "type": "User",
          "login": "joelanman",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/1132904?v=4"
        },
        {
          "type": "User",
          "login": "antoniaantp",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/182538932?v=4"
        },
        {
          "type": "User",
          "login": "kentsanggds",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/22152807?v=4"
        },
        {
          "type": "User",
          "login": "sho88",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/5948928?v=4"
        },
        {
          "type": "User",
          "login": "ashimali",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/666250?v=4"
        },
        {
          "type": "User",
          "login": "amar-gds-ndl",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/253080203?v=4"
        },
        {
          "type": "User",
          "login": "stevenjmesser",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/23193154?v=4"
        }
      ],
      "contributors_sampled": 10,
      "top_contributor_share": 0.735
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build-image.yaml",
        "ci.yml",
        "codeql-analysis.yml",
        "create-integration-pr.yaml",
        "create-production-pr.yaml",
        "create-staging-pr.yaml",
        "merge-to-main.yaml",
        "smoke-tests.yml",
        "tag-staging-production.yaml",
        "trivy-scans.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "security_signals": {
      "lockfiles": [
        "uv.lock"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 4,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "21 out of 21 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "d10197b1bfc974a8e9df7409908ff9bc836bd3e7",
        "ran_at": "2026-07-23T05:06:55Z",
        "aggregate_score": 7.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T16:24:02Z",
      "oldest_open_prs": [
        {
          "number": 188,
          "created_at": "2026-06-29T16:24:05Z",
          "last_comment_at": "2026-07-16T15:12:46Z",
          "last_comment_author": "giro090"
        },
        {
          "number": 205,
          "created_at": "2026-07-10T12:19:54Z",
          "last_comment_at": "2026-07-13T16:20:07Z",
          "last_comment_author": "giro090"
        },
        {
          "number": 207,
          "created_at": "2026-07-13T15:58:56Z",
          "last_comment_at": "2026-07-16T15:11:19Z",
          "last_comment_author": "giro090"
        },
        {
          "number": 216,
          "created_at": "2026-07-16T16:47:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 224,
          "created_at": "2026-07-20T12:55:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 229,
          "created_at": "2026-07-21T14:26:54Z",
          "last_comment_at": "2026-07-22T08:41:08Z",
          "last_comment_author": "currycoder"
        },
        {
          "number": 233,
          "created_at": "2026-07-22T15:03:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-22T15:46:12Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 13,
          "created_at": "2026-04-15T10:34:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 217,
          "created_at": "2026-05-21T09:52:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/alphagov/datagovuk",
    "host": "github.com",
    "name": "datagovuk",
    "owner": "alphagov"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 78,
        "vitality": 86,
        "community": 34,
        "governance": 50,
        "engineering": 96
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 380,
              "human_commit_share": 0.77,
              "days_since_last_push": 0,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "380 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 380
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 25,
              "latest_release_tag": "v3.0.0",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 1.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "25 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 25
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 34,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 7,
            "inputs": {
              "forks": 3,
              "stars": 3,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "3 forks",
                "points": 2.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 50,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 10,
              "top_contributor_share": 0.735
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 74% of commits",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 74
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "10 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "at_risk",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 44,
            "inputs": {
              "merged_prs": 171,
              "open_issues": 2,
              "closed_issues": 0,
              "issue_closed_ratio": 0,
              "closed_unmerged_prs": 53
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "0% of issues closed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 0
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "171/224 decided PRs merged",
                "points": 29.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 171,
                      "decided": 224
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "followers": 1570,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "alphagov",
              "public_repos": 1528,
              "account_age_days": 5649
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,570 followers of alphagov",
                "points": 23,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1570,
                      "login": "alphagov"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1528 public repos, account ~15 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1528
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 96,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "10 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 16,
                "status": "met",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "21 out of 21 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://www.data.gov.uk",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://www.data.gov.uk",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 78,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 7.2
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "21 out of 21 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:datagovuk@0.1.3 runtime dependency closure — what installing the published package pulls in — 16 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "pypi:datagovuk@0.1.3",
                  "assessed": 16
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 16,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 16,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 64,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "moderate",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.338,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3309
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "26 of 77 human commits state their intent (structured subject or explanatory body)",
                "points": 18,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 26,
                      "sampled": 77
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "uv.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "justfile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.23
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "justfile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "justfile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "23 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 23,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 46915,
              "source_files_sampled": 85,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/85 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 85,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "pypi package 'datagovuk' points at a different repository (https://github.com/drewsonne/datagovuk); excluded from ecosystem scoring"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T05:07:16.242659Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/alphagov/datagovuk.svg",
  "full_name": "alphagov/datagovuk",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.