Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 2.3.1 · 2026-07-31 23:57 UTC

alphagov / datagovuk_find

Beta version of Find Data

JavaScript · RubyЛіцензію не виявлено★ 18 зірок⑂ 12 форківз черв. 2017 р.Переглянути на GitHub ↗
ТипМережевий сервісяк це визначено

alphagov/datagovuk_find має індекс здоров’я 89 зі 100, що відповідає смузі «Відмінний». Найвищий показник — Vitality (92/100), найнижчий — AI Readiness (48/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконують 7 учасників.

89
загалом / 100
Відмінний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє зважене середнє, відкаліброване за розподілом публічного реєстру, тож діапазони мають перцентильний зміст; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 34 («У зоні ризику»).

89
Винятковий93-100Верхній щабель реєстру (≈ топ-5%); відповідає практично всім перевіреним критеріям
Відмінний80-92Сильний за всіма напрямами; незначні прогалини
Добрий65-79Здоровий; прогалини обмежені та керовані
Помірний50-64Прийнятний, але з помітними прогалинами; рекомендовано перевірку
Слабкий35-49Суттєві недоліки в кількох сферах
У зоні ризику20-34Суттєві слабкі місця; впровадження потребує обережності
Критичний1-19Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Зважений загальний бал 75 калібровано до 89 за шкалою опублікованого індексу (калібрування реєстру 2026-08-02).

Власність

Government Digital ServiceОрганізація
1 583 підписники1 530 публічних репозиторіївз лют. 2011 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

92Відмінний · 21% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 0 дн. тому
21.5/36Ритм комітів — 31/52 тижнів із комітами
18/18Обсяг комітів — 865 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year865
human_commit_share0,97
days_since_last_push0
active_weeks_last_year31
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 100 релізів
36/36Свіжість релізів — останній реліз 9 дн. тому
27/27Ритм релізів — реліз кожні ~8 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count100
latest_release_tagv6.2.0
releases_from_tagsні
days_since_latest_release9
mean_days_between_releases8
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

48Слабкий · 17% загального індексу
Як обчислюється оцінка
20/60Зірки — 18 зірок
8.7/25Форки — 12 форків
9.5/15Спостерігачі — 53 спостерігачів
Використані вхідні дані
forks12
stars18
watchers53
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
0/22.5Ліцензія — файлу ліцензії не виявлено
18/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseні
readme_badges
has_contributingтак
has_issue_templateні
has_code_of_conductтак
readme_badge_services
has_pull_request_templateні

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

87Відмінний · 23% загального індексу
Як обчислюється оцінка
51.3/54Бас-фактор — на 7 контриб’ютор(ів) припадає половина всіх комітів
20.4/22.5Розподіл комітів — головний контриб’ютор — автор 9% комітів
13.5/13.5Широта контриб’юторів — 60 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 12 contributing companies or organizations
Використані вхідні дані
bus_factor7
contributors_sampled60
top_contributor_share0,093
Як обчислюється оцінка
40.4/42Вирішення issue — закрито 96% issue
18.2/30Прийняття PR — злито 1 060/1 750 вирішених PR
0/13Newcomer PR acceptance — за 30 дн. не вирішено жодного PR від новачка
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Використані вхідні дані
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
Виключено з оцінювання (немає даних або не застосовно): newcomer_pr_acceptance. Залишкові ваги перенормовано.
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
23/25Охоплення власника — 1 583 підписників у alphagov
25/25Послужний список — 1 530 публічних репозиторіїв, вік облікового запису ~15 р.
Використані вхідні дані
followers1 583
owner_typeOrganization
is_verified
owner_loginalphagov
public_repos1 530
account_age_days5 658

Інженерна якість

Чи наявні базові інженерні практики та документація?

80Відмінний · 19% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 6 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — .rubocop.yml
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 7 out of 7 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configтак
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
10/10Теми — 1 тем
0/10Wiki
Використані вхідні дані
topicsdatagovuk
has_wikiні
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

68Добрий · 16% загального індексу
Як обчислюється оцінка
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.5Ліцензія — 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 — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6,8
Виключено з оцінювання (немає даних або не застосовно): signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
9.5/35Прямі залежності без відомих сповіщень — уражено 4: faraday 1.10.5 (high 7.5), puma 6.5.0 (high 7.5), nokogiri 1.19.3 (moderate 6.5), ще +1
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
40/40Немає задавнених сповіщень — жодне сповіщення не є публічним довше за 90 дн.
Використані вхідні дані
sourceosv
advisories24
affected_packages11
assessed_packages235
unassessed_packages0
affected_by_severitycritical 1, high 3, moderate 5, low 2
direct_affected_packages4
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень. Залишкові ваги перенормовано. Звірено 235 резолвлених залежностей із OSV. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Має свідомо малу вагу (4%): агентний інструментарій — реальний сигнал супроводу, але репозиторій без нього все одно може отримати 100/100.

48Слабкий · 4% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
17.6/40Читабельна історія комітів — намір зазначено у 32 з 97 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,33
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — .rubocop.yml
0/11Статична перевірка типів
10/10Відтворюване середовище — Dockerfile, lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
8/8Автоматизоване супроводження — 3 з останніх 100 комітів — автоматичні оновлення залежностей
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesGemfile.lock, yarn.lock
has_dockerfileтак
typed_languageні
bootstrap_filesMakefile
has_devcontainerні
has_linter_configтак
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,03
Як обчислюється оцінка
0/45Типізований код — JavaScript без конфігурації перевірки типів
54.5/55Керовані розміри файлів — 1/104 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageJavaScript
largest_source_bytes632 483
source_files_sampled104
oversized_source_files1

Ключові факти

18зірок GitHub
60контриб'юторів
865комітів за останні 12 місяців
0днів від останнього пушу
100релізів
7бас-фактор
6відкритих issue
npm, RubyGemsпакетних екосистем

Попередження щодо збору даних

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

Докладніше

Історія зірок і форків 0 ★ / 12 ⇿
0Зірки
12Форки
100Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0246810121222017-082022-022026-07
Мажорні 4Мінорні 53Патчі 43

Кожна точка охоплює 9 днів.

OpenSSF Scorecard 6.8 / 10
6.8сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).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
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities24 existing vulnerabilities detected
Прямі залежності 29
РеєстрПакетОбмеження версіїМаніфест
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
Усі залежності 235

Повний розв'язаний набір залежностей із графа залежностей GitHub: 29 прямих і 206 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

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

Цей репозиторій не публікує пакета, який розпізнає індекс, тож оцінено його власний граф залежностей — 235 пакетів, серед яких є й піниї розробки та тестування, що ніколи не постачаються: 11 мають відомі сповіщення, з них 4 прямі.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
activestorage7.2.3.1непрямакритична18.1.3.1
faraday1.10.5прямависока12.14.3
puma6.5.0прямависока28.0.2
websocket-driver0.8.0непрямависока40.8.2
nokogiri1.19.3прямапомірна81.19.4
secure_headers6.5.0прямапомірна17.3.0
loofah2.24.0непрямапомірна12.25.2
msgpack1.8.0непрямапомірна11.8.2
net-imap0.6.4непрямапомірна30.6.4.1
json2.10.2непряманизька12.19.9
rails-html-sanitizer1.6.2непряманизька11.7.1

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "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
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v2.3.1, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистика.