Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 2.3.1 · 2026-07-31 23:57 UTC

alphagov / datagovuk_find

Beta version of Find Data

JavaScript · RubyKeine Lizenz erkannt★ 18 Sterne⑂ 12 Forksseit Juni 2017Auf GitHub ansehen ↗
ArtNetzwerkdienstwie das ermittelt wird

alphagov/datagovuk_find erreicht einen Gesundheitsindex von 89 von 100 und liegt damit im Bereich Exzellent. Am stärksten schneidet es bei Vitality (92/100) ab, am schwächsten bei AI Readiness (48/100). Zuletzt heute aktualisiert. 7 Mitwirkende tragen den Großteil der jüngsten Arbeit.

89
gesamt / 100
Exzellent

Software-Gesundheitsindex

Metriken werden auf einer standardisierten Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr gewichtetes Mittel, kalibriert auf die Verteilung des öffentlichen Registers, sodass die Stufen Perzentilbedeutung tragen; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze Gefährdet von 34.

89
Außergewöhnlich93-100Die Spitzengruppe des Registers (≈ obere 5 %); erfüllt im Wesentlichen alle geprüften Kriterien
Exzellent80-92Durchgehend stark; geringfügige Lücken
Gut65-79Gesund; Lücken sind begrenzt und beherrschbar
Mittel50-64Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Schwach35-49Wesentliche Schwächen in mehreren Bereichen
Gefährdet20-34Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-19Schwerwiegende 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.

Der gewichtete Gesamtwert 75 wird auf der veröffentlichten Indexskala auf 89 kalibriert (Register-Kalibrierung 2026-08-02).

Eigentümerschaft

1.583 Follower1.530 öffentliche Reposseit Feb. 2011

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

Metriken nach Kategorie

Vitalität

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

92Exzellent · 21 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
21.5/36Commit-Rhythmus — 31/52 Wochen mit Commits
18/18Commit-Volumen — 865 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_year865
human_commit_share0,97
days_since_last_push0
active_weeks_last_year31

Release-Disziplin

100Außergewöhnlich
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 9 Tagen
27/27Release-Rhythmus — ein Release etwa alle 8 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count100
latest_release_tagv6.2.0
releases_from_tagsnein
days_since_latest_release9
mean_days_between_releases8
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?

48Schwach · 17 % des Gesamtindex
Wie die Bewertung erfolgt
20/60Stars — 18 Stars
8.7/25Forks — 12 Forks
9.5/15Watcher — 53 Watcher
Verwendete Eingangsdaten
forks12
stars18
watchers53
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
0/22.5Lizenz — keine Lizenzdatei erkannt
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licensenein
readme_badges
has_contributingja
has_issue_templatenein
has_code_of_conductja
readme_badge_services
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

87Exzellent · 23 % des Gesamtindex
Wie die Bewertung erfolgt
51.3/54Bus-Faktor — 7 Beitragende decken die Hälfte aller Commits ab
20.4/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 9 % der Commits
13.5/13.5Breite der Beitragenden — 60 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 12 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor7
contributors_sampled60
top_contributor_share0,093
Wie die Bewertung erfolgt
40.4/42Issue-Lösungsquote — 96 % der Issues geschlossen
18.2/30PR-Annahme — 1.060/1.750 entschiedene PRs gemergt
0/13Newcomer PR acceptance — kein PR eines Erstbeitragenden in 30 Tagen entschieden
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Verwendete Eingangsdaten
merged_prs1.060
open_issues6
closed_issues150
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio0,962
closed_unmerged_prs690
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): newcomer_pr_acceptance. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
23/25Reichweite des Inhabers — 1.583 Follower von alphagov
25/25Kontohistorie — 1.530 öffentliche Repos, Kontoalter ca. 15 Jahre
Verwendete Eingangsdaten
followers1.583
owner_typeOrganization
is_verified
owner_loginalphagov
public_repos1.530
account_age_days5.658

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

80Exzellent · 19 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 6 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .rubocop.yml
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 1 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsdatagovuk
has_wikinein
homepage
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

68Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
6/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 7 out of 7 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
2.5/2.5Contributors — project has 12 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Lizenz — license file not 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
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
9.5/35Direkte Abhängigkeiten ohne bekannte Advisories — 4 betroffen: faraday 1.10.5 (high 7.5), puma 6.5.0 (high 7.5), nokogiri 1.19.3 (moderate 6.5), +1 weitere
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
40/40Keine offenen Advisories — kein Advisory ist länger als 90 Tage öffentlich
Verwendete Eingangsdaten
sourceosv
advisories24
affected_packages11
assessed_packages235
unassessed_packages0
affected_by_severitycritical 1, high 3, moderate 5, low 2
direct_affected_packages4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories. Die verbleibenden Gewichte wurden renormalisiert. 235 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. Dieses Repository veröffentlicht kein Paket, das der Index auflöst; bewertet wurde daher der Abhängigkeitsgraph des Repositorys. Dieser Graph vermischt Entwicklungs- und Test-Pins mit ausgelieferten Abhängigkeiten, daher werden nur die deklarierten Laufzeit-Abhängigkeiten bewertet; transitive Befunde werden als Kontext ausgewiesen und fließen nicht in die Bewertung ein. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Trägt ein bewusst kleines Gewicht (4 %): Agenten-Tooling ist ein echtes Pflegesignal, doch ein Repository ohne jedes Signal kann weiterhin 100/100 erreichen.

48Schwach · 4 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
17.6/40Lesbare Commit-Historie — 32 von 97 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,33
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .rubocop.yml
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
8/8Automatisierte Wartung — 3 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
lockfilesGemfile.lock, yarn.lock
has_dockerfileja
typed_languagenein
bootstrap_filesMakefile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,03
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — JavaScript ohne Typprüfungs-Konfiguration
54.5/55Handhabbare Dateigrößen — 1/104 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes632.483
source_files_sampled104
oversized_source_files1

Eckdaten

18GitHub-Sterne
60Mitwirkende
865Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
7Bus-Faktor
6offene Issues
npm, RubyGemsPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'datagovuk_find' from its registry

Weitere Details

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

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.

0246810121222017-082022-022026-07
Major 4Minor 53Patch 43

Jeder Punkt umfasst 9 Tage.

OpenSSF Scorecard 6.8 / 10
6.8Gesamtwert

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-31 23:56 UTC

10Binary-Artifactsno binaries found in the repo
8Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests7 out of 7 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
10Contributorsproject has 12 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not 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
0Vulnerabilities24 existing vulnerabilities detected
Direkte Abhängigkeiten 29
RegistryPaketVersionsvorgabeManifest
RubyGemsrails7.2.3.1Gemfile
RubyGemsbootsnapGemfile
RubyGemsbrowserGemfile
RubyGemschartkickGemfile
RubyGemsfaradayGemfile
RubyGemsfaraday_middlewareGemfile
RubyGemsfront_matter_parserGemfile
RubyGemsgovuk_elements_railsGemfile
RubyGemsgovuk_publishing_components~> 28.7.1Gemfile
RubyGemshtmlentitiesGemfile
RubyGemsjquery-railsGemfile
RubyGemskaminariGemfile
RubyGemslogrageGemfile
RubyGemslogstash-eventGemfile
RubyGemsmime-typesGemfile
RubyGemsnokogiriGemfile
RubyGemsplek~> 4.1Gemfile
RubyGemspumaGemfile
RubyGemsrack-attackGemfile
RubyGemsredcarpetGemfile
RubyGemsrsolrGemfile
RubyGemssass-railsGemfile
RubyGemssecure_headersGemfile
RubyGemssentry-railsGemfile
RubyGemssentry-rubyGemfile
RubyGemssprockets-railsGemfile
RubyGemsterserGemfile
npmaccessible-autocomplete^2.0.2package.json
npmchartjs-plugin-datalabels^2.2.0package.json
Alle Abhängigkeiten 235

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

RegistryPaketVersionBeziehung
npmaccessible-autocomplete2.0.2direkt
npmchartjs-plugin-datalabels2.2.0direkt
RubyGemsbootsnap1.24.3direkt
RubyGemsbrowser5.3.1direkt
RubyGemschartkick5.2.1direkt
RubyGemsfaraday1.10.5direkt
RubyGemsfaraday_middleware1.2.1direkt
RubyGemsfront_matter_parser1.0.1direkt
RubyGemsgovuk_elements_rails3.1.3direkt
RubyGemsgovuk_publishing_components28.7.1direkt
RubyGemshtmlentities4.4.2direkt
RubyGemsjquery-rails4.6.1direkt
RubyGemskaminari1.2.2direkt
RubyGemslograge0.14.0direkt
RubyGemslogstash-event1.2.02direkt
RubyGemsmime-types3.7.0direkt
RubyGemsnokogiri1.19.3direkt
RubyGemsplek4.1.0direkt
RubyGemspuma6.5.0direkt
RubyGemsrack-attack6.8.0direkt
RubyGemsrails7.2.3.1direkt
RubyGemsredcarpet3.6.0direkt
RubyGemsrsolr2.6.0direkt
RubyGemssass-rails6.0.0direkt
RubyGemssecure_headers6.5.0direkt
RubyGemssentry-rails6.5.0direkt
RubyGemssentry-ruby6.5.0direkt
RubyGemssprockets-rails3.4.2direkt
RubyGemsterser1.2.6direkt
npmgovuk-frontend6.0.0indirekt
npmpreact8.4.2indirekt
RubyGemsactioncable7.2.3.1indirekt
RubyGemsactionmailbox7.2.3.1indirekt
RubyGemsactionmailer7.2.3.1indirekt
RubyGemsactionpack7.2.3.1indirekt
RubyGemsactiontext7.2.3.1indirekt
RubyGemsactionview7.2.3.1indirekt
RubyGemsactivejob7.2.3.1indirekt
RubyGemsactivemodel7.2.3.1indirekt
RubyGemsactiverecord7.2.3.1indirekt
RubyGemsactivestorage7.2.3.1indirekt
RubyGemsactivesupport7.2.3.1indirekt
RubyGemsaddressable2.9.0indirekt
RubyGemsast2.4.2indirekt
RubyGemsbase640.3.0indirekt
RubyGemsbenchmark0.4.0indirekt
RubyGemsbigdecimal3.1.9indirekt
RubyGemsbinding_of_caller1.0.0indirekt
RubyGemsbrakeman8.0.4indirekt
RubyGemsbuilder3.3.0indirekt
RubyGemsbyebug13.0.0indirekt
RubyGemscapybara3.40.0indirekt
RubyGemscgi0.5.1indirekt
RubyGemscoderay1.1.3indirekt
RubyGemsconcurrent-ruby1.3.7indirekt
RubyGemsconnection_pool2.5.0indirekt
RubyGemscrack1.0.0indirekt
RubyGemscrass1.0.6indirekt
RubyGemsdate3.5.1indirekt
RubyGemsdebug_inspector1.2.0indirekt
RubyGemsdiff-lcs1.6.0indirekt
RubyGemsdocile1.4.0indirekt
RubyGemsdrb2.2.1indirekt
RubyGemserubi1.13.1indirekt
RubyGemsexecjs2.10.0indirekt
RubyGemsfactory_bot6.4.6indirekt
RubyGemsfaraday-em_http1.0.0indirekt
RubyGemsfaraday-em_synchrony1.0.1indirekt
RubyGemsfaraday-excon1.1.0indirekt
RubyGemsfaraday-httpclient1.0.1indirekt
RubyGemsfaraday-multipart1.2.0indirekt
RubyGemsfaraday-net_http1.0.2indirekt
RubyGemsfaraday-net_http_persistent1.2.0indirekt
RubyGemsfaraday-patron1.0.0indirekt
RubyGemsfaraday-rack1.0.0indirekt
RubyGemsfaraday-retry1.0.4indirekt
RubyGemsffi1.16.3indirekt
RubyGemsglobalid1.3.0indirekt
RubyGemsgoogle-protobuf3.25.5indirekt
RubyGemsgoogleapis-common-protos-types1.12.0indirekt
RubyGemsgovuk_app_config9.24.0indirekt
RubyGemsgovuk_frontend_toolkit9.0.1indirekt
RubyGemsgovuk_personalisation0.15.0indirekt
RubyGemsgovuk_test4.1.3indirekt
RubyGemshashdiff1.1.2indirekt
RubyGemsi18n1.14.7indirekt
RubyGemsio-console0.8.0indirekt
RubyGemsirb1.15.1indirekt
RubyGemsjson2.10.2indirekt
RubyGemskaminari-actionview1.2.2indirekt
RubyGemskaminari-activerecord1.2.2indirekt
RubyGemskaminari-core1.2.2indirekt
RubyGemskramdown2.4.0indirekt
RubyGemslanguage_server-protocol3.17.0.4indirekt
RubyGemslint_roller1.1.0indirekt
RubyGemslisten3.8.0indirekt
RubyGemslogger1.7.0indirekt
RubyGemslogstasher2.1.5indirekt
RubyGemsloofah2.24.0indirekt
RubyGemsmail2.9.0indirekt
RubyGemsmarcel1.1.0indirekt
RubyGemsmatrix0.4.3indirekt
RubyGemsmethod_source1.1.0indirekt
RubyGemsmime-types-data3.2026.0317indirekt
RubyGemsmini_mime1.1.5indirekt
RubyGemsmini_portile22.8.9indirekt
RubyGemsminitest5.25.5indirekt
RubyGemsmsgpack1.8.0indirekt
RubyGemsmultipart-post2.4.1indirekt
RubyGemsnet-imap0.6.4indirekt
RubyGemsnet-pop0.1.2indirekt
RubyGemsnet-protocol0.2.2indirekt
RubyGemsnet-smtp0.5.1indirekt
RubyGemsnio4r2.7.5indirekt
RubyGemsopentelemetry-api1.2.5indirekt
RubyGemsopentelemetry-common0.20.1indirekt
RubyGemsopentelemetry-exporter-otlp0.26.3indirekt
RubyGemsopentelemetry-instrumentation-action_pack0.9.0indirekt
RubyGemsopentelemetry-instrumentation-action_view0.7.0indirekt
RubyGemsopentelemetry-instrumentation-active_job0.7.1indirekt
RubyGemsopentelemetry-instrumentation-active_model_serializers0.20.1indirekt
RubyGemsopentelemetry-instrumentation-active_record0.7.0indirekt
RubyGemsopentelemetry-instrumentation-active_support0.5.1indirekt
RubyGemsopentelemetry-instrumentation-all0.56.0indirekt
RubyGemsopentelemetry-instrumentation-aws_sdk0.5.1indirekt
RubyGemsopentelemetry-instrumentation-base0.22.3indirekt
RubyGemsopentelemetry-instrumentation-bunny0.21.2indirekt
RubyGemsopentelemetry-instrumentation-concurrent_ruby0.21.2indirekt
RubyGemsopentelemetry-instrumentation-dalli0.25.0indirekt
RubyGemsopentelemetry-instrumentation-delayed_job0.22.1indirekt
RubyGemsopentelemetry-instrumentation-ethon0.21.3indirekt
RubyGemsopentelemetry-instrumentation-excon0.22.0indirekt
RubyGemsopentelemetry-instrumentation-faraday0.23.4indirekt
RubyGemsopentelemetry-instrumentation-grape0.1.6indirekt
RubyGemsopentelemetry-instrumentation-graphql0.27.0indirekt
RubyGemsopentelemetry-instrumentation-gruf0.1.1indirekt
RubyGemsopentelemetry-instrumentation-http0.23.2indirekt
RubyGemsopentelemetry-instrumentation-http_client0.22.3indirekt
RubyGemsopentelemetry-instrumentation-koala0.20.2indirekt
RubyGemsopentelemetry-instrumentation-lmdb0.22.1indirekt
RubyGemsopentelemetry-instrumentation-mongo0.22.2indirekt
RubyGemsopentelemetry-instrumentation-mysql20.25.0indirekt
RubyGemsopentelemetry-instrumentation-net_http0.22.4indirekt
RubyGemsopentelemetry-instrumentation-pg0.26.1indirekt
RubyGemsopentelemetry-instrumentation-que0.7.1indirekt
RubyGemsopentelemetry-instrumentation-racecar0.3.0indirekt
RubyGemsopentelemetry-instrumentation-rack0.24.0indirekt
RubyGemsopentelemetry-instrumentation-rails0.30.0indirekt
RubyGemsopentelemetry-instrumentation-rake0.2.1indirekt
RubyGemsopentelemetry-instrumentation-rdkafka0.4.2indirekt
RubyGemsopentelemetry-instrumentation-redis0.25.3indirekt
RubyGemsopentelemetry-instrumentation-resque0.5.1indirekt
RubyGemsopentelemetry-instrumentation-restclient0.22.3indirekt
RubyGemsopentelemetry-instrumentation-ruby_kafka0.21.0indirekt
RubyGemsopentelemetry-instrumentation-sidekiq0.25.2indirekt
RubyGemsopentelemetry-instrumentation-sinatra0.23.2indirekt
RubyGemsopentelemetry-instrumentation-trilogy0.58.0indirekt
RubyGemsopentelemetry-registry0.3.0indirekt
RubyGemsopentelemetry-sdk1.4.0indirekt
RubyGemsopentelemetry-semantic_conventions1.10.0indirekt
RubyGemsparallel1.26.3indirekt
RubyGemsparser3.3.7.1indirekt
RubyGemspp0.6.2indirekt
RubyGemsprettyprint0.2.0indirekt
RubyGemsprometheus_exporter2.3.1indirekt
RubyGemspry0.16.0indirekt
RubyGemspry-byebug3.12.0indirekt
RubyGemspry-stack_explorer0.6.1indirekt
RubyGemspsych5.2.3indirekt
RubyGemspublic_suffix7.0.5indirekt
RubyGemsracc1.8.1indirekt
RubyGemsrack2.2.23indirekt
RubyGemsrack-proxy0.7.7indirekt
RubyGemsrack-session1.0.2indirekt
RubyGemsrack-test2.2.0indirekt
RubyGemsrackup1.0.1indirekt
RubyGemsrails-dom-testing2.2.0indirekt
RubyGemsrails-html-sanitizer1.6.2indirekt
RubyGemsrailties7.2.3.1indirekt
RubyGemsrainbow3.1.1indirekt
RubyGemsrake13.2.1indirekt
RubyGemsrb-fsevent0.11.2indirekt
RubyGemsrb-inotify0.10.1indirekt
RubyGemsrdoc6.12.0indirekt
RubyGemsregexp_parser2.12.0indirekt
RubyGemsreline0.6.0indirekt
RubyGemsrequest_store1.6.0indirekt
RubyGemsrexml3.4.4indirekt
RubyGemsrouge4.2.0indirekt
RubyGemsrspec3.13.0indirekt
RubyGemsrspec-core3.13.3indirekt
RubyGemsrspec-expectations3.13.3indirekt
RubyGemsrspec-mocks3.13.2indirekt
RubyGemsrspec-rails7.1.1indirekt
RubyGemsrspec-support3.13.2indirekt
RubyGemsrubocop1.74.0indirekt
RubyGemsrubocop-ast1.39.0indirekt
RubyGemsrubocop-capybara2.22.1indirekt
RubyGemsrubocop-govuk5.1.0indirekt
RubyGemsrubocop-rails2.30.3indirekt
RubyGemsrubocop-rake0.7.1indirekt
RubyGemsrubocop-rspec3.5.0indirekt
RubyGemsruby-progressbar1.13.0indirekt
RubyGemsruby2_keywords0.0.5indirekt
RubyGemsrubyzip3.3.0indirekt
RubyGemssass3.7.4indirekt
RubyGemssass-listen4.0.0indirekt
RubyGemssassc2.4.0indirekt
RubyGemssassc-rails2.1.2indirekt
RubyGemssecurerandom0.4.1indirekt
RubyGemsselenium-webdriver4.43.0indirekt
RubyGemssimplecov0.22.0indirekt
RubyGemssimplecov-html0.12.3indirekt
RubyGemssimplecov_json_formatter0.1.4indirekt
RubyGemsspring4.4.2indirekt
RubyGemsspring-commands-rspec1.0.4indirekt
RubyGemsspring-watcher-listen2.1.0indirekt
RubyGemssprockets3.7.2indirekt
RubyGemsstatsd-ruby1.5.0indirekt
RubyGemsstringio3.1.5indirekt
RubyGemsthor1.4.0indirekt
RubyGemstilt2.3.0indirekt
RubyGemstimeout0.6.1indirekt
RubyGemstsort0.2.0indirekt
RubyGemstzinfo2.0.6indirekt
RubyGemsunicode-display_width3.1.4indirekt
RubyGemsunicode-emoji4.0.4indirekt
RubyGemsuseragent0.16.11indirekt
RubyGemswebmock3.25.1indirekt
RubyGemswebrick1.9.1indirekt
RubyGemswebsocket1.2.11indirekt
RubyGemswebsocket-driver0.8.0indirekt
RubyGemswebsocket-extensions0.1.5indirekt
RubyGemsxpath3.2.0indirekt
RubyGemszeitwerk2.6.18indirekt
Abhängigkeits-Advisories 11

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 235 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 11 tragen bekannte Advisories, davon 4 direkte.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
activestorage7.2.3.1indirektkritisch18.1.3.1
faraday1.10.5direkthoch12.14.3
puma6.5.0direkthoch28.0.2
websocket-driver0.8.0indirekthoch40.8.2
nokogiri1.19.3direktmittel81.19.4
secure_headers6.5.0direktmittel17.3.0
loofah2.24.0indirektmittel12.25.2
msgpack1.8.0indirektmittel11.8.2
net-imap0.6.4indirektmittel30.6.4.1
json2.10.2indirektniedrig12.19.9
rails-html-sanitizer1.6.2indirektniedrig11.7.1

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": [
        "datagovuk"
      ],
      "is_fork": false,
      "size_kb": 9337,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "HTML": 61351,
        "Ruby": 169363,
        "SCSS": 46532,
        "Shell": 2931,
        "Makefile": 514,
        "Dockerfile": 1261,
        "JavaScript": 746277
      },
      "pushed_at": "2026-07-31T13:16:42Z",
      "created_at": "2017-06-28T12:56:55Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-31T13:32:33Z",
      "description": "Beta version of Find Data",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "Ruby"
      ]
    },
    "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": 1583,
      "avatar_url": "https://avatars.githubusercontent.com/u/596977?v=4",
      "created_at": "2011-02-02T15:45:37Z",
      "is_verified": null,
      "public_repos": 1530,
      "account_age_days": 5658
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v6.2.0",
          "kind": "minor",
          "published_at": "2026-07-22T16:50:35Z"
        },
        {
          "tag": "v6.1.0",
          "kind": "minor",
          "published_at": "2026-07-22T16:15:20Z"
        },
        {
          "tag": "v6.0.1",
          "kind": "patch",
          "published_at": "2026-07-20T10:44:15Z"
        },
        {
          "tag": "v6.0.0",
          "kind": "major",
          "published_at": "2026-07-20T08:25:09Z"
        },
        {
          "tag": "v5.2.0",
          "kind": "minor",
          "published_at": "2026-06-04T15:17:20Z"
        },
        {
          "tag": "v5.1.0",
          "kind": "minor",
          "published_at": "2026-06-04T10:12:53Z"
        },
        {
          "tag": "v5.0.0",
          "kind": "major",
          "published_at": "2026-05-27T11:02:57Z"
        },
        {
          "tag": "v4.9.2",
          "kind": "patch",
          "published_at": "2026-05-18T14:06:39Z"
        },
        {
          "tag": "v4.9.0",
          "kind": "minor",
          "published_at": "2026-05-12T10:03:59Z"
        },
        {
          "tag": "v4.8.1",
          "kind": "patch",
          "published_at": "2026-05-11T11:24:19Z"
        },
        {
          "tag": "v4.8.0",
          "kind": "minor",
          "published_at": "2026-05-08T10:53:25Z"
        },
        {
          "tag": "v4.7.1",
          "kind": "patch",
          "published_at": "2026-04-29T13:34:01Z"
        },
        {
          "tag": "v4.7.0",
          "kind": "minor",
          "published_at": "2026-04-29T08:22:10Z"
        },
        {
          "tag": "v4.6.0",
          "kind": "minor",
          "published_at": "2026-04-28T07:35:29Z"
        },
        {
          "tag": "v4.5.0",
          "kind": "minor",
          "published_at": "2026-04-22T08:45:34Z"
        },
        {
          "tag": "v4.4.0",
          "kind": "minor",
          "published_at": "2026-04-21T10:21:36Z"
        },
        {
          "tag": "v4.3.1",
          "kind": "patch",
          "published_at": "2026-04-16T14:38:00Z"
        },
        {
          "tag": "v4.3.0",
          "kind": "minor",
          "published_at": "2026-04-13T09:01:25Z"
        },
        {
          "tag": "v4.2.1",
          "kind": "patch",
          "published_at": "2026-03-31T12:43:34Z"
        },
        {
          "tag": "v4.2.0",
          "kind": "minor",
          "published_at": "2026-03-27T10:33:05Z"
        },
        {
          "tag": "v4.1.1",
          "kind": "patch",
          "published_at": "2026-03-25T14:44:41Z"
        },
        {
          "tag": "v4.1.0",
          "kind": "minor",
          "published_at": "2026-03-25T13:09:57Z"
        },
        {
          "tag": "v4.0.2",
          "kind": "patch",
          "published_at": "2026-03-24T14:05:35Z"
        },
        {
          "tag": "v4.0.1",
          "kind": "patch",
          "published_at": "2026-03-24T13:57:27Z"
        },
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2026-03-24T13:49:07Z"
        },
        {
          "tag": "v3.10.0",
          "kind": "minor",
          "published_at": "2026-03-10T13:11:40Z"
        },
        {
          "tag": "v3.8.0",
          "kind": "minor",
          "published_at": "2026-02-23T10:40:51Z"
        },
        {
          "tag": "v3.5.1",
          "kind": "patch",
          "published_at": "2026-01-19T15:36:20Z"
        },
        {
          "tag": "v3.5.0",
          "kind": "minor",
          "published_at": "2026-01-14T12:07:43Z"
        },
        {
          "tag": "v3.4.0",
          "kind": "minor",
          "published_at": "2026-01-07T19:23:58Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2026-01-05T16:03:06Z"
        },
        {
          "tag": "v3.2.7",
          "kind": "patch",
          "published_at": "2025-12-31T16:18:49Z"
        },
        {
          "tag": "v3.2.6",
          "kind": "patch",
          "published_at": "2025-10-21T11:24:27Z"
        },
        {
          "tag": "v3.2.5",
          "kind": "patch",
          "published_at": "2025-08-12T15:20:53Z"
        },
        {
          "tag": "v3.2.2",
          "kind": "patch",
          "published_at": "2025-03-18T10:54:29Z"
        },
        {
          "tag": "v3.2.1",
          "kind": "patch",
          "published_at": "2025-03-11T15:03:50Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2025-03-03T12:25:10Z"
        },
        {
          "tag": "v3.1.2",
          "kind": "patch",
          "published_at": "2025-02-11T16:05:00Z"
        },
        {
          "tag": "v3.1.1",
          "kind": "patch",
          "published_at": "2025-02-03T13:10:34Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2025-02-03T11:59:04Z"
        },
        {
          "tag": "v3.0.14",
          "kind": "patch",
          "published_at": "2025-01-22T15:25:01Z"
        },
        {
          "tag": "v3.0.12",
          "kind": "patch",
          "published_at": "2025-01-17T12:14:53Z"
        },
        {
          "tag": "v3.0.11",
          "kind": "patch",
          "published_at": "2025-01-16T17:27:12Z"
        },
        {
          "tag": "v3.0.10",
          "kind": "patch",
          "published_at": "2025-01-16T15:50:50Z"
        },
        {
          "tag": "v3.0.8",
          "kind": "patch",
          "published_at": "2025-01-14T15:21:29Z"
        },
        {
          "tag": "v3.0.7",
          "kind": "patch",
          "published_at": "2025-01-14T10:56:54Z"
        },
        {
          "tag": "v3.0.4",
          "kind": "patch",
          "published_at": "2025-01-06T13:05:11Z"
        },
        {
          "tag": "v3.0.2",
          "kind": "patch",
          "published_at": "2025-01-03T17:02:06Z"
        },
        {
          "tag": "v3.0.1",
          "kind": "patch",
          "published_at": "2025-01-03T15:18:00Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2025-01-03T12:35:56Z"
        },
        {
          "tag": "v2.47.0",
          "kind": "minor",
          "published_at": "2024-12-18T10:27:58Z"
        },
        {
          "tag": "v2.46.0",
          "kind": "minor",
          "published_at": "2024-12-17T16:52:30Z"
        },
        {
          "tag": "v2.45.0",
          "kind": "minor",
          "published_at": "2024-09-26T13:54:38Z"
        },
        {
          "tag": "v2.44.0",
          "kind": "minor",
          "published_at": "2024-08-28T10:35:20Z"
        },
        {
          "tag": "v2.43.0",
          "kind": "minor",
          "published_at": "2024-06-11T16:00:36Z"
        },
        {
          "tag": "v2.41.3",
          "kind": "patch",
          "published_at": "2024-04-04T15:11:16Z"
        },
        {
          "tag": "v2.41.2",
          "kind": "patch",
          "published_at": "2024-04-03T16:01:04Z"
        },
        {
          "tag": "v2.41.1",
          "kind": "patch",
          "published_at": "2024-04-02T12:46:32Z"
        },
        {
          "tag": "v2.41.0",
          "kind": "minor",
          "published_at": "2024-02-27T16:49:56Z"
        },
        {
          "tag": "v2.39.4",
          "kind": "patch",
          "published_at": "2024-02-08T11:06:59Z"
        },
        {
          "tag": "v2.39.2",
          "kind": "patch",
          "published_at": "2024-01-16T17:34:36Z"
        },
        {
          "tag": "v2.39.1",
          "kind": "patch",
          "published_at": "2024-01-16T17:14:24Z"
        },
        {
          "tag": "v2.39.0",
          "kind": "minor",
          "published_at": "2024-01-16T12:01:58Z"
        },
        {
          "tag": "v2.38.0",
          "kind": "minor",
          "published_at": "2023-09-08T15:54:30Z"
        },
        {
          "tag": "v2.37.4",
          "kind": "patch",
          "published_at": "2023-08-30T13:32:45Z"
        },
        {
          "tag": "v2.37.3",
          "kind": "patch",
          "published_at": "2023-08-14T10:13:52Z"
        },
        {
          "tag": "v2.37.2",
          "kind": "patch",
          "published_at": "2023-08-07T15:37:32Z"
        },
        {
          "tag": "v2.37.1",
          "kind": "patch",
          "published_at": "2023-08-07T14:21:54Z"
        },
        {
          "tag": "v2.37.0",
          "kind": "minor",
          "published_at": "2023-08-07T12:21:45Z"
        },
        {
          "tag": "v2.36.0",
          "kind": "minor",
          "published_at": "2023-07-13T14:14:18Z"
        },
        {
          "tag": "v2.35.0",
          "kind": "minor",
          "published_at": "2023-06-02T10:30:50Z"
        },
        {
          "tag": "v2.34.1",
          "kind": "patch",
          "published_at": "2023-05-17T12:23:33Z"
        },
        {
          "tag": "v2.34.0",
          "kind": "minor",
          "published_at": "2022-11-29T10:57:38Z"
        },
        {
          "tag": "v2.33.0",
          "kind": "minor",
          "published_at": "2022-10-20T11:10:35Z"
        },
        {
          "tag": "v2.32.0",
          "kind": "minor",
          "published_at": "2022-08-31T16:14:17Z"
        },
        {
          "tag": "v2.31.0",
          "kind": "minor",
          "published_at": "2022-08-25T16:22:24Z"
        },
        {
          "tag": "v2.30.0",
          "kind": "minor",
          "published_at": "2022-07-18T11:45:38Z"
        },
        {
          "tag": "v2.29.0",
          "kind": "minor",
          "published_at": "2022-03-31T18:26:29Z"
        },
        {
          "tag": "v2.28.0",
          "kind": "minor",
          "published_at": "2022-03-17T15:33:02Z"
        },
        {
          "tag": "v2.27.0",
          "kind": "minor",
          "published_at": "2022-02-24T10:17:33Z"
        },
        {
          "tag": "v2.26.0",
          "kind": "minor",
          "published_at": "2021-12-20T17:43:28Z"
        },
        {
          "tag": "v2.25.0",
          "kind": "minor",
          "published_at": "2021-12-14T12:07:24Z"
        },
        {
          "tag": "v2.24.3",
          "kind": "patch",
          "published_at": "2021-11-10T10:50:30Z"
        },
        {
          "tag": "v2.24.2",
          "kind": "patch",
          "published_at": "2021-08-10T09:44:33Z"
        },
        {
          "tag": "v2.24.1",
          "kind": "patch",
          "published_at": "2021-07-27T10:14:29Z"
        },
        {
          "tag": "v2.24.0",
          "kind": "minor",
          "published_at": "2021-07-15T11:18:38Z"
        },
        {
          "tag": "v2.23.0",
          "kind": "minor",
          "published_at": "2021-03-10T10:25:15Z"
        },
        {
          "tag": "v2.22.0",
          "kind": "minor",
          "published_at": "2021-03-01T12:51:21Z"
        },
        {
          "tag": "v2.21.0",
          "kind": "minor",
          "published_at": "2021-02-26T14:36:35Z"
        },
        {
          "tag": "v2.20.0",
          "kind": "minor",
          "published_at": "2020-12-09T10:01:43Z"
        },
        {
          "tag": "v2.19.0",
          "kind": "minor",
          "published_at": "2020-11-19T14:16:45Z"
        },
        {
          "tag": "v2.18.0",
          "kind": "minor",
          "published_at": "2020-11-10T14:36:31Z"
        },
        {
          "tag": "v2.17.1",
          "kind": "patch",
          "published_at": "2020-10-22T09:18:36Z"
        },
        {
          "tag": "v2.17.0",
          "kind": "minor",
          "published_at": "2020-10-20T14:25:29Z"
        },
        {
          "tag": "v2.16.1",
          "kind": "patch",
          "published_at": "2020-09-22T10:13:56Z"
        },
        {
          "tag": "v2.16.0",
          "kind": "minor",
          "published_at": "2020-09-15T13:24:50Z"
        },
        {
          "tag": "v2.14.0",
          "kind": "minor",
          "published_at": "2020-08-25T13:31:24Z"
        },
        {
          "tag": "v2.13.0",
          "kind": "minor",
          "published_at": "2020-08-20T13:46:12Z"
        },
        {
          "tag": "v2.12.0",
          "kind": "minor",
          "published_at": "2020-08-10T13:08:26Z"
        },
        {
          "tag": "v2.11.1",
          "kind": "patch",
          "published_at": "2020-07-06T15:23:22Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "1e64e1622088fb1e1acf1a3322493add2696d0c5",
          "body": "[DGUK-785] Modify copy when a dataset has no resources",
          "is_bot": false,
          "headline": "Merge pull request #1919 from alphagov/DGUK-785-change-no-resource-text",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-22T16:28:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0b8ae648408fbb9fca8a5fa2857a3b7d9ebc81b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into DGUK-785-change-no-resource-text",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-22T16:24:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0644d9f16c90f69c57d98f7ee903c7bbe96c9184",
          "body": "…essential\n\nDGUK-751 Set survey-banner cookie to essential",
          "is_bot": false,
          "headline": "Merge pull request #1920 from alphagov/DGUK-751-set-banner-cookie-to-…",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-22T15:58:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f477127addc23a30e990eccd86f4c308c048d67a",
          "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\n\nAdd feature test for survey banner. Including a scenario around when cookies are rejected",
          "is_bot": false,
          "headline": "Set survey-banner cookie to essential",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-22T15:45:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9cffe9567daa9890893c67e66d26999b53328b0",
          "body": null,
          "is_bot": false,
          "headline": "Fix rubocop complaint",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T14:51:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3156aec362890e6be74f9cdbf3228508223ea67a",
          "body": null,
          "is_bot": false,
          "headline": "Modify copy when a dataset has no resources",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-07-22T10:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9696f95ae6c543019901a7950672e8364b2708cc",
          "body": "DGUK-751 Forward fix banner link colour",
          "is_bot": false,
          "headline": "Merge pull request #1918 from alphagov/DGUK-751-fix-banner-link-colour",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-20T10:21:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c5c16ee0e523d8c1722937b64163a4fbad8f5d8",
          "body": null,
          "is_bot": false,
          "headline": "Set banner link to dark pink colour",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-20T10:08:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73b9f1eac5e448295d0a606e99f8111c372d8c68",
          "body": "DGUK-751 Add new survey banner",
          "is_bot": false,
          "headline": "Merge pull request #1916 from alphagov/DGUK-751-add-new-ndl-banner",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-20T07:40:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1772adbfd9801127a3be73ca20b711fff9f9f00c",
          "body": null,
          "is_bot": false,
          "headline": "Remove full stop at the end",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T17:39:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efa366b9141ac301ec057569db1c74b19a9d1ebb",
          "body": null,
          "is_bot": false,
          "headline": "Add padding around link",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T16:55:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25d71b2442696a7ce372da182fdedeb853f3b40e",
          "body": null,
          "is_bot": false,
          "headline": "Add margin-botom to banner",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:58:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "047fc2589cf01361ace5ca767370a78e4c2c887b",
          "body": "Set survey cookie maxage to 15 days\n\nUpdate JS naming to be more easy to read",
          "is_bot": false,
          "headline": "Set survey cookie expiry to 15 days",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:37:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8878aa37621474bf9d25213dc0471a39544c7205",
          "body": null,
          "is_bot": false,
          "headline": "Use vertical padding style",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:06:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4234f12e33d4f5b2ede205026f3e6c6832058076",
          "body": null,
          "is_bot": false,
          "headline": "Make use of govuk cookie helper",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:06:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e57b5c0b2753aced27301f6acfa91be1ac510c4a",
          "body": null,
          "is_bot": false,
          "headline": "Fix indentation of styling",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:06:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1179628a70673b330ea0c7ac83101560e155248b",
          "body": "Add new survey banner above the header section\n\nAdd survey banner as a cookie that expires after 60 days\n\nAdd unit and feature tests",
          "is_bot": false,
          "headline": "DGUK-751 Add new survey banner",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:06:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e93b606e5a39ce7a1be7ae311678c11230ee9a81",
          "body": "Update brakeman config",
          "is_bot": false,
          "headline": "Merge pull request #1917 from alphagov/supress-rails-eol-warning",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T14:05:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bba8125c1ec956fdf9d65b2217d9abf0a19c6fa",
          "body": null,
          "is_bot": false,
          "headline": "Update brakeman config",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-17T13:09:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b688674dcdcc8a4308b50938cb230eee35aed416",
          "body": "…ruby-1.3.7\n\nBump concurrent-ruby from 1.3.5 to 1.3.7",
          "is_bot": false,
          "headline": "Merge pull request #1912 from alphagov/dependabot/bundler/concurrent-…",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-07-02T09:27:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e621e0aa9e6ce5e965c767ec3859d2737453cf0",
          "body": "Bumps [concurrent-ruby](https://github.com/ruby-concurrency/concurrent-ruby) from 1.3.5 to 1.3.7.\n- [Release notes](https://github.com/ruby-concurrency/concurrent-ruby/releases)\n- [Changelog](https://github.com/ruby-concurrency/concurrent-ruby/blob/master/CHANGELOG.md)\n- [Commits](https://github.com\n[…]\n/compare/v1.3.5...v1.3.7)\n\n---\nupdated-dependencies:\n- dependency-name: concurrent-ruby\n  dependency-version: 1.3.7\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump concurrent-ruby from 1.3.5 to 1.3.7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-23T23:51:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a066364b40d590c2e05f17da0f851f6789879a3c",
          "body": "…tagovuk-find\n\n[DGUK-497] Drop V2 related content/controllers/views/tests",
          "is_bot": false,
          "headline": "Merge pull request #1907 from alphagov/DGUK-497-move-markdown-from-da…",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T10:16:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2bc01dfd3b2a470df9f4a9135e44fbcf0c838e05",
          "body": null,
          "is_bot": false,
          "headline": "Make support path a variable again",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-09T10:00:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c19c2798f888f4d33ad1e90c9a71d6773b3f8594",
          "body": null,
          "is_bot": false,
          "headline": "Fix rubocop complaint",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T15:55:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4f66ea51c13078d2eb113f4aa530304e6e8fb96",
          "body": null,
          "is_bot": false,
          "headline": "Fix basic auth spec tests now homepage returns a 301",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T15:49:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8288a8cf77c29c1c45e0196a7b5ddd79095c34d",
          "body": null,
          "is_bot": false,
          "headline": "Remove V2 views and components",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3f3364584259717f3f6bfbeacaf7411b990b987",
          "body": null,
          "is_bot": false,
          "headline": "Improve dev experience for dev Dockerfile",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ea88e253a6c4c30f57b46482efb3338ca2ac1fe",
          "body": null,
          "is_bot": false,
          "headline": "Fix spec tests",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42c69645c087a78294abac32121ba8e48b0400e3",
          "body": null,
          "is_bot": false,
          "headline": "Re-instate mistakenly deleted pages views",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d62eb19e3afafeb955b221998aa80ce3b0215194",
          "body": null,
          "is_bot": false,
          "headline": "Remove markdown render from dockerfile",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "566c80f50cd981e6bbfc4921fac8ea60536e447b",
          "body": null,
          "is_bot": false,
          "headline": "Remove overhanging V2 references",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "650be6295cdf8fd7feadf6e89f507a011258b119",
          "body": null,
          "is_bot": false,
          "headline": "Drop V2 related tests",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4b7c2f3cd38ececc6affcf40e0e8a752c77361f",
          "body": null,
          "is_bot": false,
          "headline": "Remove content, controllers and views for v2",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-08T14:52:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "213aa6b884fa06b4bdb75fe9959235f4963f13df",
          "body": "Add 3 visualisations for early years collection",
          "is_bot": false,
          "headline": "Merge pull request #1906 from alphagov/early-years-visualisation",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-05T10:57:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c83a377bad88aeacf39924cbf7eb07bb3abacaa5",
          "body": "fixed % for  percentage points",
          "is_bot": false,
          "headline": "Update value_change to use percentage points",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-06-05T10:13:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f72f02dea387d07b65f9ce2377762225081ad86d",
          "body": "fix value change to percentage points",
          "is_bot": false,
          "headline": "Update childcare-providers.json",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-06-05T10:12:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f35862d194ed10ec1880641d3770eb3d9157937d",
          "body": null,
          "is_bot": false,
          "headline": "Update mmr2 chart title",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-05T09:25:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd9ca5cd197d62c7b6ecb17c9d7aa16a7524661d",
          "body": "Use a String with percentage character in the early years headline charts\n\nthis is because the values for that chart are all in percentages e.g. +4% rather than +1000 (4%)",
          "is_bot": false,
          "headline": "Set early years headline json to use string",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-04T14:15:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7b740f4e59d3b5d9ab4244ea49713f8ba4f8f5d",
          "body": "Set the percentage_change to null so that it appears like +4 (%) on the chart rather than +4 (3%) etc.\n\nAt some point, we will need to handle percentage_change differently e.g. change: {unit: \"percent\", value: ..., suffix: \"%\"}",
          "is_bot": false,
          "headline": "Set percentage_change to null for early-years headline charts",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-04T14:15:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bee7471338d6aa8c71e0e4f35a6d68b2db8eeff",
          "body": null,
          "is_bot": false,
          "headline": "Fix typo",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-04T14:15:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32393524380a4a25f313dc3bc2f6b00723934257",
          "body": null,
          "is_bot": false,
          "headline": "Add 3 visualisations for early years collection",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-06-04T14:15:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13211ec3a33044e4044bd5420251650a314e1a5a",
          "body": "Add spotlight menu item to directory",
          "is_bot": false,
          "headline": "Merge pull request #1905 from alphagov/spotlight-header",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-04T13:22:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc22542177d77c4d4e84260a52b5b1651fa81022",
          "body": null,
          "is_bot": false,
          "headline": "Tweak spotlight header item",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-04T13:18:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1191cf339eb57f7e3bd11a493267b543006911bf",
          "body": null,
          "is_bot": false,
          "headline": "Add spotlight menu item to directory",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-04T13:18:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c437b0d9a21a769c25fb5a6d372d6d85756471e9",
          "body": "Minor changes to content",
          "is_bot": false,
          "headline": "Merge pull request #1904 from alphagov/tech-writer-review",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-04T13:08:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0049f11ff23d8916f3417443ca86711327adf36",
          "body": null,
          "is_bot": false,
          "headline": "- Add find an oftead report to education statistics",
          "author_name": "CarrJ",
          "author_login": null,
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "234a448ec3891e44366edad557a24a209165431a",
          "body": "Co-authored-by: Joe Lanman <joelanman@gmail.com>",
          "is_bot": false,
          "headline": "Update app/content/collections/early-years/childhood-vaccinations.md",
          "author_name": "DSIT JC",
          "author_login": "JC-DSIT",
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "389fdd0fb9f470a9d299a1900eab2a8bc1c5657d",
          "body": null,
          "is_bot": false,
          "headline": "- split the sentence up",
          "author_name": "CarrJ",
          "author_login": null,
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "597ce76cb86f76bddeb3fa85f2b98d4415458658",
          "body": null,
          "is_bot": false,
          "headline": "- fix typos",
          "author_name": "CarrJ",
          "author_login": null,
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "886f3de031248e5fd339bba8ab6b1031e6fdc003",
          "body": null,
          "is_bot": false,
          "headline": "- fix typos",
          "author_name": "CarrJ",
          "author_login": null,
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d3e30f9c54fa6be2f6d20cddda3c86c365e6e66",
          "body": null,
          "is_bot": false,
          "headline": "- fix typos",
          "author_name": "CarrJ",
          "author_login": null,
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ba9903f9ae61362eb7669b4938a9af3a9e57c5e",
          "body": null,
          "is_bot": false,
          "headline": "- minor changes to content",
          "author_name": "CarrJ",
          "author_login": null,
          "committed_at": "2026-06-04T12:23:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70bf63997c97c2199a0a00dbb65a46c75f37bb77",
          "body": "NDL content review",
          "is_bot": false,
          "headline": "Merge pull request #1902 from alphagov/antoniaantp-NDLcontent-review",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-04T12:23:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd9603cc8af11d0719654a39178871e4e9dae000",
          "body": null,
          "is_bot": false,
          "headline": "Update app/content/content-pages/about.md",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-04T12:19:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1745379e5f705bfed04dea682dfb9b5a04a4bd24",
          "body": null,
          "is_bot": false,
          "headline": "Fix spec test for roadmap",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07aec4ce75418c14684641b3c2da1d0d498b3fa6",
          "body": "Updated the date of the accessibility statement preparation.",
          "is_bot": false,
          "headline": "Revise accessibility statement preparation date",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aec9fb097f7481e6e808065308c550c3a061d8a7",
          "body": null,
          "is_bot": false,
          "headline": "Update app/content/content-pages/roadmap.md",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f42dd1562f48c4e9eea9b354765b07a4278ee747",
          "body": "Clarified the description of the previous functionality and its new name.",
          "is_bot": false,
          "headline": "Update description of previous data.gov.uk functionality",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac12f2ca82f0b292e6cbecdba247abc555e4f643",
          "body": null,
          "is_bot": false,
          "headline": "Adding github data pages",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "faab1fac3caf983ecc8680fff7287362ecb7afc2",
          "body": "Added links to GitHub repository for user feedback on data pages.",
          "is_bot": false,
          "headline": "Adding github upcoming data to content",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dee49da09b6d1e6a8787ee5b0fccbdefd94bb022",
          "body": "Removed the section about the Data Marketplace service. It is likely to be closed down and replaced so no point promoting it",
          "is_bot": false,
          "headline": "Remove Data Marketplace section from data-sharing.md",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "940df6d18299210c457010921eaf6d0fdfb23dc7",
          "body": null,
          "is_bot": false,
          "headline": "Update team title from 'data.gov.uk' to 'National Data Library'",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e89c24c28a72beee7a348176fcf6b6e7d043e299",
          "body": null,
          "is_bot": false,
          "headline": "Update support page for National Data Library",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e3e2f265f05c07ea9c5c212028fc40440b9e6be",
          "body": null,
          "is_bot": false,
          "headline": "Update references from data.gov.uk to National Data Library",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efee13ba29adb1e8e90885a1f8bd631f7f26942f",
          "body": null,
          "is_bot": false,
          "headline": "Update roadmap to reflect National Data Library changes",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "314cc67648ced9cce0cb75fd8e9cdc99d0707632",
          "body": "…change",
          "is_bot": false,
          "headline": "Update accessibility statement to reflect National Data Library name …",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74e4b122f73edfb056fbd3078d5cbab3feb1c8e5",
          "body": "Updated the content to reflect the rebranding of data.gov.uk to the National Data Library, including new features and changes to the directory.",
          "is_bot": false,
          "headline": "Revise 'About' section for National Data Library",
          "author_name": "antoniaantp",
          "author_login": "antoniaantp",
          "committed_at": "2026-06-04T12:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "393c754ed0c16d75d32cd428d1798001c9f2a46a",
          "body": "[DGUK-607] Align with ndl",
          "is_bot": false,
          "headline": "Merge pull request #1903 from alphagov/DGUK-607-align-with-ndl",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-04T12:13:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df6da087625c59e76faa454fd39d3fa1b68e433c",
          "body": null,
          "is_bot": false,
          "headline": "update header css",
          "author_name": "Joe Lanman",
          "author_login": "joelanman",
          "committed_at": "2026-06-04T10:09:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf54e0bd022aefc37d12cfd0e0eb1a51870d556a",
          "body": null,
          "is_bot": false,
          "headline": "Change directory title attribute suffix to NDL",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-03T19:16:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "038fd4d293b7df789222491d0876c3c9ec30e0c9",
          "body": null,
          "is_bot": false,
          "headline": "Reword banner",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-03T19:16:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23e3ae541378fd1e3f1bf897c91364e8b8a5aefe",
          "body": null,
          "is_bot": false,
          "headline": "Update directory logo",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-03T16:52:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ca7ebb38b184bdee801ad9f70a7068c85981213",
          "body": "Early years collection content",
          "is_bot": false,
          "headline": "Merge pull request #1901 from alphagov/feat/early-years-collection",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-03T14:16:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "086aae7b7a25be0db5f4dd975a2ad74ebd278b6e",
          "body": null,
          "is_bot": false,
          "headline": "Update early years content",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-03T13:48:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95b52a761023bb0494ce4320ec3c195c8a2c6b43",
          "body": null,
          "is_bot": false,
          "headline": "feat: added placeholder long eterm development studies",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-06-03T13:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ec2b7d16c5b5a0e8aa66e64a6b88e9d6948ca5a",
          "body": null,
          "is_bot": false,
          "headline": "feat: updated with current draft list",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-06-03T13:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e489267df14cffb1813d553d6f01ecc79afc12c",
          "body": null,
          "is_bot": false,
          "headline": "feat: placeholder early years pages",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-06-03T13:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac9dfa7a4607bd4fd3d2c26d66cf99ef8f37a3b",
          "body": null,
          "is_bot": false,
          "headline": "feat: start early years collection",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-06-03T13:28:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bcd90aec3cd618c0c92a8d08b0ee533ae88cfd8",
          "body": "Change sample early years publication status",
          "is_bot": false,
          "headline": "Merge pull request #1900 from alphagov/fix-early-years-sample",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-02T15:27:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18a14614147c1287888ab1ab23b151cd7cf63ddf",
          "body": null,
          "is_bot": false,
          "headline": "Change sample early years publication status",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-02T15:24:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a8b5cd529bfa1066e6e1906ee3aad6ec954224f",
          "body": "Add sample early years collection content",
          "is_bot": false,
          "headline": "Merge pull request #1899 from alphagov/initial-early-years",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-02T15:18:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "affe1b4844e18936ff63d85dce325b98f971b15e",
          "body": null,
          "is_bot": false,
          "headline": "Add sample early years collection content",
          "author_name": "Brendan Smith",
          "author_login": "currycoder",
          "committed_at": "2026-06-02T14:30:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a8b0d631e5cbbe13398c483683f2f7fecf710a8",
          "body": "…ns-githubactions\n\nDGUK-486 Add slack notifications to GA workflows",
          "is_bot": false,
          "headline": "Merge pull request #1895 from alphagov/DGUK-486-add-slack-notificatio…",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-29T13:31:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54d2019ae5c53849415989a29a96765d406e2ecb",
          "body": "Add slack notifications for failures on create-pr-on-tags",
          "is_bot": false,
          "headline": "DGUK-486 Add slack notification for failure on job",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-28T08:45:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc9a92a42aa00ff0b1504a83c50296e0894d5746",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into DGUK-486-add-slack-notifications-githubactions",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-28T08:23:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4f3b2fadaa6e1d4cbb48581f162a0855ee47118",
          "body": "Update data-management.md",
          "is_bot": false,
          "headline": "Merge pull request #1897 from alphagov/update-data-manual-content",
          "author_name": "Adam Shimali",
          "author_login": "ashimali",
          "committed_at": "2026-05-28T07:10:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65019244e0c89e644d627b5d937cbf35ea231a61",
          "body": "Added data asset management policy and reordered some other items",
          "is_bot": false,
          "headline": "Update data-management.md",
          "author_name": "rickyGH-work",
          "author_login": "rickyGH-work",
          "committed_at": "2026-05-27T16:01:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e689a0b9bc4f941af3c99149d8b6e46429a0a044",
          "body": "Run slack notifications if jobs fail on the main branch.",
          "is_bot": false,
          "headline": "DGUk-486 Run slack notifications if jobs fail",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T15:27:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d945ff433bfed57c962a18369fa2e70daba36374",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into DGUK-486-add-slack-notifications-githubactions",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T15:19:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45a706d08e35800d4cf6c59480bfb83fe8e752d0",
          "body": "Use slack webhook url from repo secrets",
          "is_bot": false,
          "headline": "DGUK-486 Use slack webhook url from github",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T15:18:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c654d53827b7e0bc2e59b88aaef6c8a27f41c014",
          "body": "…s-found\n\nDGUK-540 Bug fix search results found",
          "is_bot": false,
          "headline": "Merge pull request #1894 from alphagov/DGUK-540-bug-fix-search-result…",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T10:48:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "833893af7a57a948017929a6bc6e8dc4a92b84ea",
          "body": "Send slack notifications upon failure of github action workflows",
          "is_bot": false,
          "headline": "DGUK-486 Add slack notifications to GA workflows",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T09:55:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a6f3c0852f48e2c425e9276e0307db088f2410c",
          "body": "Refactor search results feature test to have scenarios",
          "is_bot": false,
          "headline": "DGUK-540 Refactor search results feature test",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T08:30:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d0e4b4b9391fb9ea78aec7f8a43f4eea0e5bb06",
          "body": "Display the number of search results found when search params are empty e.g. \"3 search results found\"\n\nAdd tests",
          "is_bot": false,
          "headline": "DGUK-540 Fix search results found",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-27T07:44:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63405adb417fa1c9ac1e3508bb0f636df85eab17",
          "body": "…s-4.4.2\n\nBump htmlentities from 4.3.4 to 4.4.2",
          "is_bot": false,
          "headline": "Merge pull request #1888 from alphagov/dependabot/bundler/htmlentitie…",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-20T09:32:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d1e3eda7ed108f5cf1bd198ae12b82b1d62cb35",
          "body": "Bumps [htmlentities](https://github.com/threedaymonk/htmlentities) from 4.3.4 to 4.4.2.\n- [Changelog](https://github.com/threedaymonk/htmlentities/blob/main/History.txt)\n- [Commits](https://github.com/threedaymonk/htmlentities/commits)\n\n---\nupdated-dependencies:\n- dependency-name: htmlentities\n  dependency-version: 4.4.2\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump htmlentities from 4.3.4 to 4.4.2",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-19T03:17:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b11562b00c65057fede79082ed4a68116a1fe044",
          "body": "…4.1.3\n\nBump govuk_test from 4.1.1 to 4.1.3",
          "is_bot": false,
          "headline": "Merge pull request #1878 from alphagov/dependabot/bundler/govuk_test-…",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-18T13:55:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cdaa9351167aa2c3631afe7d3820d06d6d7436e",
          "body": "Bumps [govuk_test](https://github.com/alphagov/govuk_test) from 4.1.1 to 4.1.3.\n- [Changelog](https://github.com/alphagov/govuk_test/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/alphagov/govuk_test/compare/v4.1.1...v4.1.3)\n\n---\nupdated-dependencies:\n- dependency-name: govuk_test\n  dependency-version: 4.1.3\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump govuk_test from 4.1.1 to 4.1.3",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-12T09:57:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9eca1e52eee49b485b14ff70d10f1147516f5c1",
          "body": "Upgrade Rails Patch Update",
          "is_bot": false,
          "headline": "Merge pull request #1879 from alphagov/security-update-rails",
          "author_name": "Abdirizak Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-12T09:56:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97160a455f0e5e7e38f4a1cb23e7324005739a2c",
          "body": "Upgrade rails from 7.2.2.1 to 7.2.3.1 to resolve a high CVE",
          "is_bot": false,
          "headline": "Upgrade Rails patch update",
          "author_name": "Obsiye",
          "author_login": "Obsiye",
          "committed_at": "2026-05-12T09:34:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 865,
      "latest_release_at": "2026-07-22T16:50:35Z",
      "latest_release_tag": "v6.2.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 31,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 8
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 12,
      "stars": 18,
      "watchers": 53,
      "fork_history": {
        "days": [
          {
            "date": "2017-08-15",
            "count": 1
          },
          {
            "date": "2018-01-26",
            "count": 1
          },
          {
            "date": "2018-07-12",
            "count": 1
          },
          {
            "date": "2019-03-06",
            "count": 2
          },
          {
            "date": "2019-08-29",
            "count": 2
          },
          {
            "date": "2020-12-25",
            "count": 1
          },
          {
            "date": "2021-04-10",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-07-31",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 12,
        "total_forks": 12
      },
      "star_history": null,
      "open_issues_and_prs": 23
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 632483,
      "source_files_sampled": 104,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Gemfile",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "activestorage",
            "direct": false,
            "version": "7.2.3.1",
            "severity": "critical",
            "ecosystem": "rubygems",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-xr9x-r78c-5hrm"
            ],
            "fixed_version": "8.1.3.1",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "faraday",
            "direct": true,
            "version": "1.10.5",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-98m9-hrrm-r99r"
            ],
            "fixed_version": "2.14.3",
            "advisory_count": 1,
            "oldest_advisory_days": 42
          },
          {
            "name": "puma",
            "direct": true,
            "version": "6.5.0",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2vqw-3mp8-cgmx",
              "GHSA-qpgp-93vx-g8v8"
            ],
            "fixed_version": "8.0.2",
            "advisory_count": 2,
            "oldest_advisory_days": 53
          },
          {
            "name": "websocket-driver",
            "direct": false,
            "version": "0.8.0",
            "severity": "high",
            "ecosystem": "rubygems",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-2x63-gw47-w4mm",
              "GHSA-33ph-fccm-39pj",
              "GHSA-8j3g-f24p-4mpw",
              "GHSA-ghhp-3qvg-889p"
            ],
            "fixed_version": "0.8.2",
            "advisory_count": 4,
            "oldest_advisory_days": 16
          },
          {
            "name": "nokogiri",
            "direct": true,
            "version": "1.19.3",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-5prr-v3j2-97mh",
              "GHSA-5v8h-3h3q-446p",
              "GHSA-8678-w3jw-xfc2",
              "GHSA-9cv2-cfxc-v4v2",
              "GHSA-p67v-3w7g-wjg7",
              "GHSA-phwj-rprq-35pp",
              "GHSA-wfpw-mmfh-qq69",
              "GHSA-wjv4-x9w8-wm3h"
            ],
            "fixed_version": "1.19.4",
            "advisory_count": 8,
            "oldest_advisory_days": 42
          },
          {
            "name": "secure_headers",
            "direct": true,
            "version": "6.5.0",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 4.7,
            "advisory_ids": [
              "GHSA-rqq5-2gf9-4w4q"
            ],
            "fixed_version": "7.3.0",
            "advisory_count": 1,
            "oldest_advisory_days": 21
          },
          {
            "name": "loofah",
            "direct": false,
            "version": "2.24.0",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 4.7,
            "advisory_ids": [
              "GHSA-9wjq-cp2p-hrgf"
            ],
            "fixed_version": "2.25.2",
            "advisory_count": 1,
            "oldest_advisory_days": 10
          },
          {
            "name": "msgpack",
            "direct": false,
            "version": "1.8.0",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": 4,
            "advisory_ids": [
              "GHSA-4mrv-5p47-p938"
            ],
            "fixed_version": "1.8.2",
            "advisory_count": 1,
            "oldest_advisory_days": 1
          },
          {
            "name": "net-imap",
            "direct": false,
            "version": "0.6.4",
            "severity": "moderate",
            "ecosystem": "rubygems",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-46q3-7gv7-qmgg",
              "GHSA-8p34-64r3-mwg8",
              "GHSA-c4fp-cxrr-mj66"
            ],
            "fixed_version": "0.6.4.1",
            "advisory_count": 3,
            "oldest_advisory_days": 52
          },
          {
            "name": "json",
            "direct": false,
            "version": "2.10.2",
            "severity": "low",
            "ecosystem": "rubygems",
            "cvss_score": 3.7,
            "advisory_ids": [
              "GHSA-x2f5-4prf-w687"
            ],
            "fixed_version": "2.19.9",
            "advisory_count": 1,
            "oldest_advisory_days": 8
          },
          {
            "name": "rails-html-sanitizer",
            "direct": false,
            "version": "1.6.2",
            "severity": "low",
            "ecosystem": "rubygems",
            "cvss_score": 0,
            "advisory_ids": [
              "GHSA-cj75-f6xr-r4g7"
            ],
            "fixed_version": "1.7.1",
            "advisory_count": 1,
            "oldest_advisory_days": 10
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "low": 2,
          "high": 3,
          "critical": 1,
          "moderate": 5
        },
        "advisory_count": 24,
        "affected_count": 11,
        "assessed_count": 235,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 4
      },
      "ecosystems": [
        "npm",
        "rubygems"
      ],
      "dependencies": [
        {
          "name": "rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "7.2.3.1"
        },
        {
          "name": "bootsnap",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "browser",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "chartkick",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "faraday",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "faraday_middleware",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "front_matter_parser",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "govuk_elements_rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "govuk_publishing_components",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 28.7.1"
        },
        {
          "name": "htmlentities",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "jquery-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "kaminari",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "lograge",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "logstash-event",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "mime-types",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "nokogiri",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "plek",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": "~> 4.1"
        },
        {
          "name": "puma",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "rack-attack",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "redcarpet",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "rsolr",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "sass-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "secure_headers",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "sentry-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "sentry-ruby",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "sprockets-rails",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "terser",
          "manifest": "Gemfile",
          "ecosystem": "rubygems",
          "version_constraint": null
        },
        {
          "name": "accessible-autocomplete",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.2"
        },
        {
          "name": "chartjs-plugin-datalabels",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "accessible-autocomplete",
            "direct": true,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chartjs-plugin-datalabels",
            "direct": true,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "bootsnap",
            "direct": true,
            "version": "1.24.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "browser",
            "direct": true,
            "version": "5.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "chartkick",
            "direct": true,
            "version": "5.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday",
            "direct": true,
            "version": "1.10.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday_middleware",
            "direct": true,
            "version": "1.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "front_matter_parser",
            "direct": true,
            "version": "1.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk_elements_rails",
            "direct": true,
            "version": "3.1.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk_publishing_components",
            "direct": true,
            "version": "28.7.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "htmlentities",
            "direct": true,
            "version": "4.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "jquery-rails",
            "direct": true,
            "version": "4.6.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "kaminari",
            "direct": true,
            "version": "1.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "lograge",
            "direct": true,
            "version": "0.14.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "logstash-event",
            "direct": true,
            "version": "1.2.02",
            "ecosystem": "rubygems"
          },
          {
            "name": "mime-types",
            "direct": true,
            "version": "3.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "nokogiri",
            "direct": true,
            "version": "1.19.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "plek",
            "direct": true,
            "version": "4.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "puma",
            "direct": true,
            "version": "6.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-attack",
            "direct": true,
            "version": "6.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails",
            "direct": true,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "redcarpet",
            "direct": true,
            "version": "3.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rsolr",
            "direct": true,
            "version": "2.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-rails",
            "direct": true,
            "version": "6.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "secure_headers",
            "direct": true,
            "version": "6.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sentry-rails",
            "direct": true,
            "version": "6.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sentry-ruby",
            "direct": true,
            "version": "6.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sprockets-rails",
            "direct": true,
            "version": "3.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "terser",
            "direct": true,
            "version": "1.2.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk-frontend",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "preact",
            "direct": false,
            "version": "8.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "actioncable",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionmailbox",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionmailer",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionpack",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "actiontext",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "actionview",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "activejob",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "activemodel",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "activerecord",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "activestorage",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "activesupport",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "addressable",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "ast",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "base64",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "benchmark",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "bigdecimal",
            "direct": false,
            "version": "3.1.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "binding_of_caller",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "brakeman",
            "direct": false,
            "version": "8.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "builder",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "byebug",
            "direct": false,
            "version": "13.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "capybara",
            "direct": false,
            "version": "3.40.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "cgi",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "coderay",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "concurrent-ruby",
            "direct": false,
            "version": "1.3.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "connection_pool",
            "direct": false,
            "version": "2.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "crack",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "crass",
            "direct": false,
            "version": "1.0.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "date",
            "direct": false,
            "version": "3.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "debug_inspector",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "diff-lcs",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "docile",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "drb",
            "direct": false,
            "version": "2.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "erubi",
            "direct": false,
            "version": "1.13.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "execjs",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "factory_bot",
            "direct": false,
            "version": "6.4.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-em_http",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-em_synchrony",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-excon",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-httpclient",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-multipart",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-net_http",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-net_http_persistent",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-patron",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-rack",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "faraday-retry",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "ffi",
            "direct": false,
            "version": "1.16.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "globalid",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "google-protobuf",
            "direct": false,
            "version": "3.25.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "googleapis-common-protos-types",
            "direct": false,
            "version": "1.12.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk_app_config",
            "direct": false,
            "version": "9.24.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk_frontend_toolkit",
            "direct": false,
            "version": "9.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk_personalisation",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "govuk_test",
            "direct": false,
            "version": "4.1.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "hashdiff",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "i18n",
            "direct": false,
            "version": "1.14.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "io-console",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "irb",
            "direct": false,
            "version": "1.15.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "json",
            "direct": false,
            "version": "2.10.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "kaminari-actionview",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "kaminari-activerecord",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "kaminari-core",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "kramdown",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "language_server-protocol",
            "direct": false,
            "version": "3.17.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "lint_roller",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "listen",
            "direct": false,
            "version": "3.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "logger",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "logstasher",
            "direct": false,
            "version": "2.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "loofah",
            "direct": false,
            "version": "2.24.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "mail",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "marcel",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "matrix",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "method_source",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "mime-types-data",
            "direct": false,
            "version": "3.2026.0317",
            "ecosystem": "rubygems"
          },
          {
            "name": "mini_mime",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "mini_portile2",
            "direct": false,
            "version": "2.8.9",
            "ecosystem": "rubygems"
          },
          {
            "name": "minitest",
            "direct": false,
            "version": "5.25.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "msgpack",
            "direct": false,
            "version": "1.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "multipart-post",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-imap",
            "direct": false,
            "version": "0.6.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-pop",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-protocol",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "net-smtp",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "nio4r",
            "direct": false,
            "version": "2.7.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-api",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-common",
            "direct": false,
            "version": "0.20.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-exporter-otlp",
            "direct": false,
            "version": "0.26.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-action_pack",
            "direct": false,
            "version": "0.9.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-action_view",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-active_job",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-active_model_serializers",
            "direct": false,
            "version": "0.20.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-active_record",
            "direct": false,
            "version": "0.7.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-active_support",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-all",
            "direct": false,
            "version": "0.56.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-aws_sdk",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-base",
            "direct": false,
            "version": "0.22.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-bunny",
            "direct": false,
            "version": "0.21.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-concurrent_ruby",
            "direct": false,
            "version": "0.21.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-dalli",
            "direct": false,
            "version": "0.25.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-delayed_job",
            "direct": false,
            "version": "0.22.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-ethon",
            "direct": false,
            "version": "0.21.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-excon",
            "direct": false,
            "version": "0.22.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-faraday",
            "direct": false,
            "version": "0.23.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-grape",
            "direct": false,
            "version": "0.1.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-graphql",
            "direct": false,
            "version": "0.27.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-gruf",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-http",
            "direct": false,
            "version": "0.23.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-http_client",
            "direct": false,
            "version": "0.22.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-koala",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-lmdb",
            "direct": false,
            "version": "0.22.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-mongo",
            "direct": false,
            "version": "0.22.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-mysql2",
            "direct": false,
            "version": "0.25.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-net_http",
            "direct": false,
            "version": "0.22.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-pg",
            "direct": false,
            "version": "0.26.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-que",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-racecar",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-rack",
            "direct": false,
            "version": "0.24.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-rails",
            "direct": false,
            "version": "0.30.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-rake",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-rdkafka",
            "direct": false,
            "version": "0.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-redis",
            "direct": false,
            "version": "0.25.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-resque",
            "direct": false,
            "version": "0.5.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-restclient",
            "direct": false,
            "version": "0.22.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-ruby_kafka",
            "direct": false,
            "version": "0.21.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-sidekiq",
            "direct": false,
            "version": "0.25.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-sinatra",
            "direct": false,
            "version": "0.23.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-instrumentation-trilogy",
            "direct": false,
            "version": "0.58.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-registry",
            "direct": false,
            "version": "0.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-sdk",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "opentelemetry-semantic_conventions",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "parallel",
            "direct": false,
            "version": "1.26.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "parser",
            "direct": false,
            "version": "3.3.7.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "pp",
            "direct": false,
            "version": "0.6.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "prettyprint",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "prometheus_exporter",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "pry",
            "direct": false,
            "version": "0.16.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "pry-byebug",
            "direct": false,
            "version": "3.12.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "pry-stack_explorer",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "psych",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "public_suffix",
            "direct": false,
            "version": "7.0.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "racc",
            "direct": false,
            "version": "1.8.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack",
            "direct": false,
            "version": "2.2.23",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-proxy",
            "direct": false,
            "version": "0.7.7",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-session",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rack-test",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rackup",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-dom-testing",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rails-html-sanitizer",
            "direct": false,
            "version": "1.6.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "railties",
            "direct": false,
            "version": "7.2.3.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rainbow",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rake",
            "direct": false,
            "version": "13.2.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-fsevent",
            "direct": false,
            "version": "0.11.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rb-inotify",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rdoc",
            "direct": false,
            "version": "6.12.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "regexp_parser",
            "direct": false,
            "version": "2.12.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "reline",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "request_store",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rexml",
            "direct": false,
            "version": "3.4.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "rouge",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec",
            "direct": false,
            "version": "3.13.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-core",
            "direct": false,
            "version": "3.13.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-expectations",
            "direct": false,
            "version": "3.13.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-mocks",
            "direct": false,
            "version": "3.13.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-rails",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rspec-support",
            "direct": false,
            "version": "3.13.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop",
            "direct": false,
            "version": "1.74.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-ast",
            "direct": false,
            "version": "1.39.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-capybara",
            "direct": false,
            "version": "2.22.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-govuk",
            "direct": false,
            "version": "5.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-rails",
            "direct": false,
            "version": "2.30.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-rake",
            "direct": false,
            "version": "0.7.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubocop-rspec",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "ruby-progressbar",
            "direct": false,
            "version": "1.13.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "ruby2_keywords",
            "direct": false,
            "version": "0.0.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "rubyzip",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass",
            "direct": false,
            "version": "3.7.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "sass-listen",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sassc",
            "direct": false,
            "version": "2.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sassc-rails",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "securerandom",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "selenium-webdriver",
            "direct": false,
            "version": "4.43.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov",
            "direct": false,
            "version": "0.22.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov-html",
            "direct": false,
            "version": "0.12.3",
            "ecosystem": "rubygems"
          },
          {
            "name": "simplecov_json_formatter",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "spring",
            "direct": false,
            "version": "4.4.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "spring-commands-rspec",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "spring-watcher-listen",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "sprockets",
            "direct": false,
            "version": "3.7.2",
            "ecosystem": "rubygems"
          },
          {
            "name": "statsd-ruby",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "stringio",
            "direct": false,
            "version": "3.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "thor",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "tilt",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "timeout",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "tsort",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "tzinfo",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "rubygems"
          },
          {
            "name": "unicode-display_width",
            "direct": false,
            "version": "3.1.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "unicode-emoji",
            "direct": false,
            "version": "4.0.4",
            "ecosystem": "rubygems"
          },
          {
            "name": "useragent",
            "direct": false,
            "version": "0.16.11",
            "ecosystem": "rubygems"
          },
          {
            "name": "webmock",
            "direct": false,
            "version": "3.25.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "webrick",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "rubygems"
          },
          {
            "name": "websocket",
            "direct": false,
            "version": "1.2.11",
            "ecosystem": "rubygems"
          },
          {
            "name": "websocket-driver",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "websocket-extensions",
            "direct": false,
            "version": "0.1.5",
            "ecosystem": "rubygems"
          },
          {
            "name": "xpath",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "rubygems"
          },
          {
            "name": "zeitwerk",
            "direct": false,
            "version": "2.6.18",
            "ecosystem": "rubygems"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 235,
        "direct_count": 29,
        "indirect_count": 206
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 17,
        "merged_prs": 1060,
        "open_issues": 6,
        "closed_ratio": 0.962,
        "closed_issues": 150,
        "closed_unmerged_prs": 690
      },
      "bus_factor": 7,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "currycoder",
          "commits": 236,
          "avatar_url": "https://avatars.githubusercontent.com/u/3239148?v=4"
        },
        {
          "type": "User",
          "login": "Obsiye",
          "commits": 213,
          "avatar_url": "https://avatars.githubusercontent.com/u/25043924?v=4"
        },
        {
          "type": "User",
          "login": "hannako",
          "commits": 206,
          "avatar_url": "https://avatars.githubusercontent.com/u/17908089?v=4"
        },
        {
          "type": "User",
          "login": "kentsanggds",
          "commits": 197,
          "avatar_url": "https://avatars.githubusercontent.com/u/22152807?v=4"
        },
        {
          "type": "User",
          "login": "ashimali",
          "commits": 176,
          "avatar_url": "https://avatars.githubusercontent.com/u/666250?v=4"
        },
        {
          "type": "User",
          "login": "AgaDufrat",
          "commits": 175,
          "avatar_url": "https://avatars.githubusercontent.com/u/38078064?v=4"
        },
        {
          "type": "User",
          "login": "TobyRet",
          "commits": 133,
          "avatar_url": "https://avatars.githubusercontent.com/u/5256922?v=4"
        },
        {
          "type": "User",
          "login": "govuklaurence",
          "commits": 131,
          "avatar_url": "https://avatars.githubusercontent.com/u/28868663?v=4"
        },
        {
          "type": "User",
          "login": "andrewgarner",
          "commits": 99,
          "avatar_url": "https://avatars.githubusercontent.com/u/2715?v=4"
        },
        {
          "type": "User",
          "login": "maxf",
          "commits": 94,
          "avatar_url": "https://avatars.githubusercontent.com/u/69542?v=4"
        }
      ],
      "contributors_sampled": 60,
      "top_contributor_share": 0.093
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "actionlint.yml",
        "build-image-on-tags.yaml",
        "build-image.yaml",
        "ci.yml",
        "create-pr-on-tags.yaml",
        "create-pr.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".rubocop.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Gemfile.lock",
        "yarn.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": 8,
            "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": "7 out of 7 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": 10,
            "reason": "project has 12 contributing companies or organizations",
            "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": 0,
            "reason": "license file not 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": 0,
            "reason": "24 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "1e64e1622088fb1e1acf1a3322493add2696d0c5",
        "ran_at": "2026-07-31T23:56:44Z",
        "aggregate_score": 6.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-31T15:00:17Z",
      "oldest_open_prs": [
        {
          "number": 1305,
          "created_at": "2024-09-17T10:56:42Z",
          "last_comment_at": "2025-02-03T10:08:03Z",
          "last_comment_author": "andysellick"
        },
        {
          "number": 1451,
          "created_at": "2025-03-06T11:36:38Z",
          "last_comment_at": "2025-04-08T11:18:08Z",
          "last_comment_author": "jasonBirchall"
        },
        {
          "number": 1847,
          "created_at": "2026-03-31T17:58:41Z",
          "last_comment_at": "2026-04-28T07:48:36Z",
          "last_comment_author": "Obsiye"
        },
        {
          "number": 1858,
          "created_at": "2026-04-16T17:52:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1867,
          "created_at": "2026-04-27T21:47:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1890,
          "created_at": "2026-05-20T21:59:42Z",
          "last_comment_at": "2026-06-03T10:41:36Z",
          "last_comment_author": "Obsiye"
        },
        {
          "number": 1891,
          "created_at": "2026-05-20T22:00:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1909,
          "created_at": "2026-06-09T01:04:38Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1910,
          "created_at": "2026-06-09T18:50:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1911,
          "created_at": "2026-06-23T14:24:14Z",
          "last_comment_at": "2026-07-02T09:28:43Z",
          "last_comment_author": "Obsiye"
        },
        {
          "number": 1913,
          "created_at": "2026-06-30T12:00:54Z",
          "last_comment_at": "2026-07-02T09:27:39Z",
          "last_comment_author": "Obsiye"
        },
        {
          "number": 1914,
          "created_at": "2026-07-11T01:10:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1921,
          "created_at": "2026-07-24T04:54:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1922,
          "created_at": "2026-07-24T15:00:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1923,
          "created_at": "2026-07-24T18:33:03Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1924,
          "created_at": "2026-07-27T01:45:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1925,
          "created_at": "2026-07-31T13:16:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-22T16:28:37Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 1454,
          "created_at": "2025-03-11T16:21:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1881,
          "created_at": "2026-05-15T12:33:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1882,
          "created_at": "2026-05-15T12:41:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1883,
          "created_at": "2026-05-15T12:46:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1884,
          "created_at": "2026-05-15T12:50:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1886,
          "created_at": "2026-05-15T14:46:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/alphagov/datagovuk_find",
    "host": "github.com",
    "name": "datagovuk_find",
    "owner": "alphagov"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "excellent",
      "name": "Overall health",
      "note": "The weighted overall 75 is calibrated to 89 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 75,
            "calibrated": 89,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 89,
      "inputs": {
        "security": 68,
        "vitality": 92,
        "community": 48,
        "governance": 87,
        "calibration": "2026-08-02",
        "engineering": 80,
        "ai_readiness": 48,
        "weighted_overall_raw": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 92,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "commits_last_year": 865,
              "human_commit_share": 0.97,
              "days_since_last_push": 0,
              "active_weeks_last_year": 31
            },
            "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": "31/52 weeks with commits",
                "points": 21.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 31
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "865 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 865
                    }
                  }
                ],
                "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": "exceptional",
            "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": 100,
              "latest_release_tag": "v6.2.0",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 8
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 11,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 11 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 11
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "weak",
        "name": "Community & Adoption",
        "value": 48,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "weak",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "forks": 12,
              "stars": 18,
              "watchers": 53,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "18 stars",
                "points": 20,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 18
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "12 forks",
                "points": 8.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "53 watchers",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 53
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "readme_badges": null,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [],
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": "excellent",
        "name": "Sustainability & Governance",
        "value": 87,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "exceptional",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 95,
            "inputs": {
              "bus_factor": 7,
              "contributors_sampled": 60,
              "top_contributor_share": 0.093
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "7 contributor(s) cover half of all commits",
                "points": 51.3,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 9% of commits",
                "points": 20.4,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 9
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "60 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 60
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 12 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 85,
            "inputs": {
              "merged_prs": 1060,
              "open_issues": 6,
              "closed_issues": 150,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": 0.962,
              "closed_unmerged_prs": 690,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "96% of issues closed",
                "points": 40.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1060/1750 decided PRs merged",
                "points": 18.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1060,
                      "decided": 1750
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "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": 1583,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "alphagov",
              "public_repos": 1530,
              "account_age_days": 5658
            },
            "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,583 followers of alphagov",
                "points": 23,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1583,
                      "login": "alphagov"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1530 public repos, account ~15 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1530
                    }
                  },
                  {
                    "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": 80,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": ".rubocop.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".rubocop.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "7 out of 7 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "datagovuk"
              ],
              "has_wiki": false,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": "1 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 68,
        "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": 68,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 6.8
            },
            "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": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 7 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 12 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "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": "24 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "good",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 235 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 235
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "source": "osv",
              "advisories": 24,
              "affected_packages": 11,
              "assessed_packages": 235,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 3, moderate 5, low 2",
              "direct_affected_packages": 4
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "4 affected: faraday 1.10.5 (high 7.5), puma 6.5.0 (high 7.5), nokogiri 1.19.3 (moderate 6.5), +1 more",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 4,
                      "packages": "faraday 1.10.5 (high 7.5), puma 6.5.0 (high 7.5), nokogiri 1.19.3 (moderate 6.5)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "exceptional",
            "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": 235,
              "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": "exceptional",
            "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"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 11
            },
            "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": "weak",
        "name": "AI Readiness",
        "value": 48,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.33,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "32 of 97 human commits state their intent (structured subject or explanatory body)",
                "points": 17.6,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 32,
                      "sampled": 97
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Gemfile.lock",
                "yarn.lock"
              ],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.03
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": ".rubocop.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".rubocop.yml"
                    }
                  }
                ],
                "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": "3 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 3,
                      "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": 54,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 632483,
              "source_files_sampled": 104,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/104 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 104,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "labels": [
        "network-service"
      ],
      "scores": {
        "network-service": 4
      },
      "primary": "network-service",
      "evidence": [
        {
          "tier": "dependencies",
          "label": "network-service",
          "source": "dep:rails",
          "weight": 4
        }
      ],
      "artifacts": [],
      "confidence": "low",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": false
    },
    "metrics_version": "2.3.1"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'datagovuk_find' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-31T23:57:11.589526Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/alphagov/datagovuk_find.svg",
  "full_name": "alphagov/datagovuk_find",
  "license_state": "absent",
  "license_spdx": null
}

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 v2.3.1, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistiken.