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

fcchbjm / AdGuardHome

AdGuard Home fork with Proxy Protocol v2 (PPv2) support for real client IP preservation behind load balancers (DoT / TCP)

TypeScript · Go · CSSGPL-3.0★ 0 зірок⑂ 0 форківз лют. 2026 р.форкПереглянути на GitHub ↗

fcchbjm/AdGuardHome має індекс здоров’я 55 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (90/100), найнижчий — Community & Adoption (12/100). Останнє оновлення було 8 днів тому. Більшість нещодавньої роботи виконують 3 учасники.

55
загалом / 100
Помірний

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

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

55
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

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

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

Власність

fcchbjmОсобистий обліковий запис
0 підписників14 публічних репозиторіївз жовт. 2023 р.

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Gogithub.com/fcchbjm/AdGuardHomev0.0.8-88 днів тому

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

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

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

90Відмінний · 22% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 8 дн. тому
33.2/36Ритм комітів — 48/52 тижнів із комітами
18/18Обсяг комітів — 252 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year252
human_commit_share1
days_since_last_push8
active_weeks_last_year48
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 8 релізів
36/36Свіжість релізів — останній реліз 8 дн. тому
27/27Ритм релізів — реліз кожні ~14,6 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count8
latest_release_tagv0.0.8
releases_from_tagsні
days_since_latest_release8
mean_days_between_releases14,6

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

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

12Критичний · 18% загального індексу
Як обчислюється оцінка
0/60Зірки — 0 зірок
0/25Форки — 0 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
0/22.5README
22.5/22.5Ліцензія — визнана ліцензія (GPL-3.0)
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeні
has_licenseні
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні

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

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

51Помірний · 24% загального індексу
Як обчислюється оцінка
36/54Бас-фактор — на 3 контриб’ютор(ів) припадає половина всіх комітів
17.9/22.5Розподіл комітів — головний контриб’ютор — автор 20% комітів
13.5/13.5Широта контриб’юторів — 94 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Використані вхідні дані
bus_factor3
contributors_sampled94
top_contributor_share0,205
Як обчислюється оцінка
0/46.8Вирішення issue — немає issue або даних
0/38.3Прийняття PR — немає вирішених pull request-ів або даних
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Виключено з оцінювання (немає даних або не застосовно): Вирішення issue, Прийняття PR. Залишкові ваги перенормовано.

Власність та опіка

30У зоні ризику
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
0/25Охоплення власника — 0 підписників у fcchbjm
14.1/25Послужний список — 14 публічних репозиторіїв, вік облікового запису ~2 р.
Використані вхідні дані
followers0
owner_typeUser
is_verified
owner_loginfcchbjm
public_repos14
account_age_days1 010
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у go
35/35Свіжість публікацій — остання публікація 8 дн. тому
20/20Історія версій — 8 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/fcchbjm/AdGuardHome
ecosystemsgo
any_deprecatedні
min_days_since_publish8

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

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

71Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — .eslintrc.cjs, .eslintrc.json
0/9.6Pre-commit-хуки
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — немає даних
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigтак
has_linter_configтак
has_precommit_configні
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: CI-Tests. Залишкові ваги перенормовано.

Документація

45У зоні ризику
Як обчислюється оцінка
0/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
0/10Опис репозиторію
10/10Теми — 8 тем
10/10Wiki
Використані вхідні дані
topicsadguardhome, dns, dns-over-https, dns-over-quic, dns-over-tls, ppv2, proxy-protocol, adguard-home
has_wikiтак
homepage
has_readmeні
has_docs_dirтак
has_descriptionні

Безпека

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

41У зоні ризику · 16% загального індексу

Стан безпеки

41У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — немає даних
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 7 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 34 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,1
Виключено з оцінювання (немає даних або не застосовно): ci_tests, packaging. Залишкові ваги перенормовано.

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

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

82Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — client_v2/AGENTS.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 90 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,9
agent_instruction_filesclient_v2/AGENTS.md
agent_instruction_max_bytes24 966
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — .eslintrc.cjs, .eslintrc.json
11/11Статична перевірка типів — client/tsconfig.json, client_v2/tsconfig.json
10/10Відтворюване середовище — lockfile
2/10Підтверджена практика роботи з агентами — 1 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum, package-lock.json
has_dockerfileні
typed_languageтак
bootstrap_filesMakefile
has_devcontainerні
has_linter_configтак
typecheck_configsclient/tsconfig.json, client_v2/tsconfig.json
agent_commit_share0,01
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
55/55Керовані розміри файлів — 1/1 129 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes239 910
source_files_sampled1 129
oversized_source_files1
Як обчислюється оцінка
40/40Схема API (OpenAPI/GraphQL/proto) — openapi/openapi.yaml
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_filesopenapi/openapi.yaml

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

0зірок GitHub
94контриб'юторів
252комітів за останні 12 місяців
8днів від останнього пушу
8релізів
3бас-фактор
0відкритих issue
Go, npmпакетних екосистем

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

  • Community profile unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

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

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-27 16:12 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
н/дCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
10Contributorsproject has 7 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities34 existing vulnerabilities detected
Прямі залежності 81
РеєстрПакетОбмеження версіїМаніфест
npmclassnames^2.5.1client/package.json
npmclsx^2.1.1client/package.json
npmcountries-and-timezones^3.6.0client/package.json
npmdate-fns^1.29.0client/package.json
npmi18next^19.6.2client/package.json
npmi18next-browser-languagedetector^4.2.0client/package.json
npmipaddr.js^1.9.1client/package.json
npmjs-yaml^3.14.0client/package.json
npmlodash^4.17.19client/package.json
npmnanoid^3.1.9client/package.json
npmpopper.js^1.16.1client/package.json
npmprop-types^15.8.1client/package.json
npmquery-string^6.13.1client/package.json
npmreact^16.13.1client/package.json
npmreact-click-outside^3.0.1client/package.json
npmreact-dom^16.13.1client/package.json
npmreact-hook-form^7.54.0client/package.json
npmreact-i18next^11.7.2client/package.json
npmreact-modal^3.11.2client/package.json
npmreact-popper-tooltip^2.11.1client/package.json
npmreact-redux^7.2.0client/package.json
npmreact-redux-loading-bar^4.6.0client/package.json
npmreact-router-dom^5.2.0client/package.json
npmreact-router-hash-link^1.2.2client/package.json
npmreact-select^3.1.0client/package.json
npmreact-table^6.11.4client/package.json
npmreact-transition-group^4.4.5client/package.json
npmrecharts2.15.4client/package.json
npmredux^4.0.5client/package.json
npmredux-actions^2.6.5client/package.json
npmredux-thunk^2.3.0client/package.json
npmurl-polyfill^1.1.12client/package.json
npmyaml2.8.3client/package.json
npm@adguard/translate^1.0.2client_v2/package.json
npm@ark-ui/solid^5.37.1client_v2/package.json
npm@modular-forms/solid^0.25.0client_v2/package.json
npm@solidjs/router^0.15.0client_v2/package.json
npmchart.js^4.4.0client_v2/package.json
npmclsx^2.1.1client_v2/package.json
npmcopy-to-clipboard^3.3.3client_v2/package.json
npmcountries-and-timezones^3.6.0client_v2/package.json
npmdate-fns^4.1.0client_v2/package.json
npmipaddr.js^2.2.0client_v2/package.json
npmjs-yaml^4.1.0client_v2/package.json
npmlodash^4.17.19client_v2/package.json
npmnanoid^5.1.0client_v2/package.json
npmqs^6.14.0client_v2/package.json
npmsolid-js^1.9.0client_v2/package.json
npmsolid-transition-group^0.3.0client_v2/package.json
Gogithub.com/AdguardTeam/dnscryptv0.0.2go.mod
Gogithub.com/AdguardTeam/golibsv0.35.14go.mod
Gogithub.com/AdguardTeam/urlfilterv0.23.4go.mod
Gogithub.com/NYTimes/gziphandlerv1.1.1go.mod
Gogithub.com/bluele/gcachev0.0.2go.mod
Gogithub.com/c2h5oh/datasizev0.0.0-20231215233829-aa82cc1e6500go.mod
Gogithub.com/digineo/go-ipset/v2v2.2.1go.mod
Gogithub.com/fcchbjm/dnsproxyv0.82.0go.mod
Gogithub.com/fsnotify/fsnotifyv1.10.1go.mod
Gogithub.com/go-ping/pingv1.2.0go.mod
Gogithub.com/google/go-cmpv0.7.0go.mod
Gogithub.com/google/gopacketv1.1.19go.mod
Gogithub.com/google/renameio/v2v2.0.2go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/gopacket/gopacketv1.7.0go.mod
Gogithub.com/insomniacslk/dhcpv0.0.0-20260603135910-a415979eb11ego.mod
Gogithub.com/kardianos/servicev1.2.4go.mod
Gogithub.com/mdlayher/ethernetv0.0.0-20220221185849-529eae5b6118go.mod
Gogithub.com/mdlayher/netlinkv1.11.2go.mod
Gogithub.com/mdlayher/packetv1.1.2go.mod
Gogithub.com/mdlayher/rawv0.1.0go.mod
Gogithub.com/miekg/dnsv1.1.72go.mod
Gogithub.com/quic-go/quic-gov0.60.0go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/ti-mo/netfilterv0.5.3go.mod
Gogo.etcd.io/bboltv1.5.0go.mod
Gogo.yaml.in/yaml/v4v4.0.0-rc.6go.mod
Gogolang.org/x/cryptov0.54.0go.mod
Gogolang.org/x/netv0.57.0go.mod
Gogolang.org/x/sysv0.47.0go.mod
Gogopkg.in/natefinch/lumberjack.v2v2.2.1go.mod
Gohowett.net/plistv1.0.1go.mod
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "adguardhome",
        "dns",
        "dns-over-https",
        "dns-over-quic",
        "dns-over-tls",
        "ppv2",
        "proxy-protocol",
        "adguard-home"
      ],
      "is_fork": true,
      "size_kb": 25402,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 2394597,
        "CSS": 573519,
        "HTML": 10165,
        "Shell": 67153,
        "Makefile": 5413,
        "Dockerfile": 13661,
        "JavaScript": 20114,
        "TypeScript": 2509235
      },
      "pushed_at": "2026-07-18T18:12:22Z",
      "created_at": "2026-02-21T04:55:57Z",
      "owner_type": "User",
      "updated_at": "2026-07-18T17:49:52Z",
      "description": "AdGuard Home fork with Proxy Protocol v2 (PPv2) support for real client IP preservation behind load balancers (DoT / TCP)",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "GPL-3.0",
      "default_branch": "master",
      "license_spdx_raw": "GPL-3.0",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "Go",
        "CSS"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "fcchbjm",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/148618370?v=4",
      "created_at": "2023-10-21T08:44:57Z",
      "is_verified": null,
      "public_repos": 14,
      "account_age_days": 1010
    },
    "license": {
      "state": "standard",
      "spdx_id": "GPL-3.0",
      "raw_spdx": "GPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.0.8",
          "kind": "patch",
          "published_at": "2026-07-18T18:31:07Z"
        },
        {
          "tag": "v0.0.7",
          "kind": "patch",
          "published_at": "2026-05-26T14:17:49Z"
        },
        {
          "tag": "v0.0.6",
          "kind": "patch",
          "published_at": "2026-05-06T04:10:13Z"
        },
        {
          "tag": "v0.0.5",
          "kind": "patch",
          "published_at": "2026-05-02T12:07:22Z"
        },
        {
          "tag": "v0.0.4",
          "kind": "patch",
          "published_at": "2026-04-23T11:13:37Z"
        },
        {
          "tag": "v0.0.3",
          "kind": "patch",
          "published_at": "2026-04-13T03:22:08Z"
        },
        {
          "tag": "v0.0.2",
          "kind": "patch",
          "published_at": "2026-04-12T14:19:02Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2026-04-07T12:39:55Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7982e9ae8c2f3f3a1a411d644da20d46f4bb4bf8",
          "body": "… client_v2",
          "is_bot": false,
          "headline": "ci(release): use CLIENT_DIR=client for fork releases until PPv2 is in…",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-07-18T17:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c97deaaae85a40d6a098c30d1dd29f7bdab6c3b4",
          "body": null,
          "is_bot": false,
          "headline": "Merge upstream/master (2961664c); bamboo CI explicit revision checkout",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-07-18T17:33:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2961664cbec08529d6e37e7ac4548eca8340e56c",
          "body": "Squashed commit of the following:\n\ncommit c4383a8d156bfa49c229473d42b3a6e3eb6c4e3c\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Jul 17 15:45:25 2026 +0300\n\n    bamboo-specs: explicitly checkout the revision;",
          "is_bot": false,
          "headline": "Pull request 2722: AGDNS-4274-explicitly-checkout-the-revision-in-ci",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-17T14:30:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dce5d10dcfd557a189b38dc59665002a01977002",
          "body": null,
          "is_bot": false,
          "headline": "chore: apply gofumpt formatting after upstream merge",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-07-16T15:21:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e9de05e6c0ff9397017b78f73cd6e857c76cde27",
          "body": null,
          "is_bot": false,
          "headline": "Merge upstream/master (ef585d45); bump fcchbjm/dnsproxy to v0.82.0",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-07-16T15:01:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef585d45cd1d133758bf89754729da8ce46e0383",
          "body": "Added comments highlight for all upstream fields and custom rules\n\nSquashed commit of the following:\n\ncommit 2feb4d4dc199474199a234e39157b85c37fa6fd6\nMerge: b5bfdc81c 7729d8c57\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Thu Jul 16 15:27:54 2026 +0300\n\n    Merge branch 'master' into AGDNS-4229\n\nc\n[…]\nxtarea comments highlight\n\ncommit 4923b3645bb9ea1410cbf09ec59efecf358b1baa\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Tue Jul 14 17:13:31 2026 +0300\n\n    AGDNS-4229 add textarea comments highlight",
          "is_bot": false,
          "headline": "Pull request 2712: AGDNS-4229 add textarea comments highlight",
          "author_name": "Ildar Kamalov",
          "author_login": "IldarKamalov",
          "committed_at": "2026-07-16T13:02:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7729d8c57dcde705d3e8b7194fd4b00e4461c829",
          "body": "Squashed commit of the following:\n\ncommit f31de6ff45bdb744f616be9c3ae2648b79494d7e\nMerge: bebd1a053 d9a7219d4\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Wed Jul 15 16:09:13 2026 +0300\n\n    Merge branch 'master' into ADG-12585-fix-kardianos-dep\n\ncommit bebd1a05393f6391cd51ee4af66a879e41f46a1f\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Wed Jul 15 14:16:48 2026 +0300\n\n    all: revert service dep",
          "is_bot": false,
          "headline": "Pull request 2717: ADG-12585-fix-kardianos-dep",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-07-15T14:42:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9a7219d4d0da23c1f1ed0cec785a87c23556380",
          "body": "Squashed commit of the following:\n\ncommit 91560d825973aa384806c8bf28487213e1a9feb7\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Wed Jul 15 13:47:44 2026 +0300\n\n    .github: fix windows build",
          "is_bot": false,
          "headline": "Pull request 2716: AGDNS-3549-fix-github",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-15T11:14:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09ae3ccddbba57d11c351cbae4946274c7389d87",
          "body": "Squashed commit of the following:\n\ncommit fab8b1067d134146b9980741ba2b181174dd353c\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Wed Jul 15 13:37:23 2026 +0300\n\n    all: upd chlog\n\ncommit 3f9d510699d5434dd3466d1df76066784922bb90\nMerge: 4079ad35b 5b864cefc\nAuthor: Ainar Garipov <a.garipov@adg\n[…]\nmboo-specs: return to dev\n\ncommit 49f74ae115c12c80d8b5a368e35b315328d6b8bf\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Wed Jul 15 12:54:59 2026 +0300\n\n    all: use new ui on the edge channel",
          "is_bot": false,
          "headline": "Pull request 2715: AGDNS-3549-new-ui-edge",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-15T10:43:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5b864cefc21f36083c752f2a73e16d813f315052",
          "body": "Squashed commit of the following:\n\ncommit 1baf3ec81abb8f90cc2e9789945d1c10fcc23225\nMerge: f8eaf24cb 4d0ae0d87\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Wed Jul 15 13:18:02 2026 +0300\n\n    Merge branch 'master' into AGDNS-4240-install-lang\n\ncommit f8eaf24cbe91bdf825b58be6b0b565310767c001\n\n[…]\n: rm unnecessary validation\n\ncommit 407ef86aa9dc4520ad9791ca72302639ccf68dea\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Jul 14 17:53:23 2026 +0300\n\n    home: add language to install api",
          "is_bot": false,
          "headline": "Pull request 2713: AGDNS-4240-install-lang",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-15T10:34:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4d0ae0d87bbbdb260671c59348113bfaf6242599",
          "body": "…ases\n\nSquashed commit of the following:\n\ncommit a5f75312023ce3f90f17a6833add37902e7d670a\nMerge: 05724001c 4da215221\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Jul 15 12:21:15 2026 +0300\n\n    Merge branch 'master' into AGDNS-4231-dont-allow-empty-hostnames-in-static-leases\n\ncommi\n[…]\nts;\n\ncommit 554615617fe24940ca589a8e8082da9b03b65642\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jul 13 17:42:37 2026 +0300\n\n    dhcpd: don't allow empty hostnames in static leases;",
          "is_bot": false,
          "headline": "Pull request 2707: AGDNS-4231-dont-allow-empty-hostnames-in-static-le…",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-15T09:32:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4da215221ae8a27341681d2bb4fa4b91c0b6a8d6",
          "body": "Updates #8183.\n\nSquashed commit of the following:\n\ncommit b6ada16f9121fd2ed3fae5de2446c8c2c42ef183\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Wed Jul 15 12:03:19 2026 +0300\n\n    all: fix changelog\n\ncommit c920b48346174d56a83ef69dc02c96ea05a60df3\nMerge: 70a703c31 c1f208ef6\nAuthor: f.setrakov\n[…]\n +0300\n\n    all: imp docs\n\ncommit 941bdabebe8a7368abfeac96a6cf33d39b8d20b4\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Thu Jul 9 14:36:41 2026 +0300\n\n    all: include edns opt for filtered req",
          "is_bot": false,
          "headline": "Pull request 2700: 8183-include-edns",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-07-15T09:15:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1f208ef659d8ded195fcaf9bd1facfab7fd29be",
          "body": "Squashed commit of the following:\n\ncommit 40dcae233137095452b49a283e81cfa4ac26c442\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Jul 14 21:17:00 2026 +0300\n\n    bamboo-specs: fix e2e\n\ncommit 6fa4a7f5fec1f141ddb7826692e3d6da0e7a4388\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Jul 14 21:03:25 2026 +0300\n\n    all: support new client in ci",
          "is_bot": false,
          "headline": "Pull request 2714: AGDNS-3548-new-client-ci",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-15T08:44:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dd7b48e6876dcb7a6eee832b4dabfc1b3ae1e77",
          "body": "Squashed commit of the following:\n\ncommit 2ff31c69199b06a39bb5c1facd6471da824e752c\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue Jul 14 15:32:35 2026 +0300\n\n    filtering: use constant;",
          "is_bot": false,
          "headline": "Pull request 2711: ADG-12585-use-constant",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-14T12:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8a958a77b5175f72a61d1bb65dca967e475f005",
          "body": "Squashed commit of the following:\n\ncommit 35e16b8de54046a0ca5cfcc4157afbb9f09f62c6\nMerge: 710580701 ae4bfe947\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue Jul 14 15:04:07 2026 +0300\n\n    Merge branch 'master' into AGDNS-4222-imp-domain-name-validation\n\ncommit 7105807012b55e8b7ed86f\n[…]\nm outdated docs;\n\ncommit c6c19ae3d43e356374869f2839afb1ddfbb0d53d\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jul 13 11:58:14 2026 +0300\n\n    filtering: imp answer field validation;",
          "is_bot": false,
          "headline": "Pull request 2703: AGDNS-4222-imp-domain-name-validation",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-14T12:19:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ae4bfe947c9a72ceac1d01b3d9aa27d933085155",
          "body": "Squashed commit of the following:\n\ncommit f35dfe5487a97338ab62c0c41ce00196987e1c69\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Tue Jul 14 14:35:04 2026 +0300\n\n    client: udp i18n",
          "is_bot": false,
          "headline": "Pull request 2709: upd-i18n",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-07-14T11:55:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6da9aec3b54d59fa7f2dad2027e26fae820c9700",
          "body": "Replace the legacy React-based client with a new SolidJS + TypeScript frontend (client_v2). Includes full UI rewrite - new component system, stores, controls, pages.\n\nCo-authored-by: Igor Lobanov <i.lobanov@adguard.com>\nCo-authored-by: Eugene Miroshkin <e.miroshkin@adguard.com>\nCo-authored-by: Eliza\n[…]\n738295be9339f52b1f\n    Author: Ildar Kamalov <ik@adguard.com>\n    Date:   Tue Jun 9 18:29:18 2026 +0300\n    \n        reset filter update modal\n    \n    ... and 53 more commits\n\n... and 69 more commits",
          "is_bot": false,
          "headline": "Pull request 2439: ADG-10291 Migrate frontend to SolidJS (client_v2)",
          "author_name": "Ildar Kamalov",
          "author_login": "IldarKamalov",
          "committed_at": "2026-07-14T10:42:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b05944feaaaa947e94447760dd3201f9b825970",
          "body": "Squashed commit of the following:\n\ncommit 802dbbf45b85703ab13b4f6546fa9f48beea14be\nMerge: 1c56701c0 aad4d49ac\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue Jul 14 13:09:37 2026 +0300\n\n    Merge branch 'master' into ADG-12585-upd-deps\n\ncommit 1c56701c0778329b047fa323f631df229c7192bc\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jul 13 15:34:20 2026 +0300\n\n    all: upd deps;",
          "is_bot": false,
          "headline": "Pull request 2705: ADG-12585-upd-deps",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-14T10:21:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aad4d49ac0928450836c5524336cd46c9cc18040",
          "body": "Squashed commit of the following:\n\ncommit 957a19c84a5afc4643552d7c4ef9f26e6ffe77d1\nMerge: 269d3e5c3 01315e674\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Tue Jul 14 10:51:09 2026 +0700\n\n    Merge remote-tracking branch 'origin/master' into AGDNS-4189-imp-code\n\ncommit 269d3e5c3b60c06af3c\n[…]\n 12:22:32 2026 +0700\n\n    home: imp code\n\ncommit 4efe2671f839c72e18b6ca77943d9cc6e97530f1\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Thu Jul 2 13:17:56 2026 +0700\n\n    home: rm sync.Cond",
          "is_bot": false,
          "headline": "Pull request: AGDNS-4189-imp-code",
          "author_name": "Dimitry Kolyshev",
          "author_login": "Mizzick",
          "committed_at": "2026-07-14T03:58:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "01315e6742080d4228f54450933518648b4d8a6b",
          "body": "Squashed commit of the following:\n\ncommit 13528004e011251a2f6e83562d784a81bdcee40d\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Mon Jul 13 19:32:42 2026 +0300\n\n    all: upd chlog",
          "is_bot": false,
          "headline": "Pull request 2708: ADG-12585-upd-chlog",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-13T16:38:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3adfbb9f3dc10aea909c2d963a9250fbefc96ee1",
          "body": "Squashed commit of the following:\n\ncommit b4b41149e56fc657b7452ddc05feeeb9bc3fe913\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Jul 10 19:08:47 2026 +0300\n\n    scripts: imp note;\n\ncommit 1e3b636fd288832f67fea509ebea46269d6e07c2\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDat\n[…]\nscripts: move note to readme;\n\ncommit 23ba9336933ebb43e698e1f9da047ab5a87b7cd5\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Jul 10 17:55:10 2026 +0300\n\n    translations: fix scripts;",
          "is_bot": false,
          "headline": "Pull request 2702: AGDNS-4218-fix-translation-scripts",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-10T16:21:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "206e77edb5c8c5b32e95cfbc8821206e693dc10c",
          "body": "Updates #4923.\n\nSquashed commit of the following:\n\ncommit b24577d9d9e59c77af9487eaa9f5b054835970cf\nMerge: 42d9d203a c4ba8b28e\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Thu Jul 9 20:15:28 2026 +0300\n\n    Merge branch 'master' into AGDNS-3863-gopacket-dhcp-vol.28\n\ncommit 42d9d203a0112dbe9b7\n[…]\ndhcpsvc: imp code, add cases\n\ncommit b13f13f5f7b60b8bab28891f34f671c6ff295280\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Thu Jun 25 16:29:05 2026 +0300\n\n    dhcpsvc: implement dhcpv6 request",
          "is_bot": false,
          "headline": "Pull request 2685: AGDNS-3863-gopacket-dhcp-vol.28",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-07-09T17:25:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c4ba8b28efacb4f274b0a24bec70ebf7e2a1eefb",
          "body": "Squashed commit of the following:\n\ncommit f91172481efec79baee24adcb84a0c6201b5a14f\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Thu Jul 9 17:37:02 2026 +0300\n\n    all: upd go",
          "is_bot": false,
          "headline": "Pull request 2701: ADG-12585-upd-go",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-09T15:02:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6910d6e14021f071947bbacaa18cf02fa01414cd",
          "body": "Squashed commit of the following:\n\ncommit 8fa40394a07405e1f3870e51b413c8118b3756ea\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Jul 8 12:56:38 2026 +0300\n\n    internal: imp code;",
          "is_bot": false,
          "headline": "Pull request 2698: imp-all",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-08T11:38:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "315648f9421f95810aa4207624b1e611ebdf1feb",
          "body": "Squashed commit of the following:\n\ncommit 513b2c70fc2a1240090e35f7463cbad374c7394d\nMerge: 65c86fddb cf15e1759\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jul 6 18:24:13 2026 +0300\n\n    Merge branch 'master' into AGDNS-4202-use-golibs-mw\n\ncommit 65c86fddba91ac7687bf1d94372f109c0e0c008a\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jul 6 12:58:04 2026 +0300\n\n    home: use middleware helpers from golibs;",
          "is_bot": false,
          "headline": "Pull request 2693: AGDNS-4202-use-golibs-mw",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-06T15:31:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf15e1759a00d27fad5cb812281e11537a7bc6b4",
          "body": "Squashed commit of the following:\n\ncommit c74688547c75b7dddf61f9eb3187cf09fb43f30f\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Mon Jul 6 16:47:09 2026 +0300\n\n    all: upd deps, i18n",
          "is_bot": false,
          "headline": "Pull request 2695: upd-deps",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-07-06T14:37:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d28907c7e8d2de171769c602f75034adee63a6ea",
          "body": "Squashed commit of the following:\n\ncommit fa04f13272da5a292fce33b8a3970f9efef05aaa\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jul 6 13:33:48 2026 +0300\n\n    readme: fix docs;",
          "is_bot": false,
          "headline": "Pull request 2694: 8137-fix-docs",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-07-06T13:15:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1feb484ab47f85ecafd4721f9ac29c83d84c8b48",
          "body": "Updates #7955.\n\nSquashed commit of the following:\n\ncommit 05c64ca900b161fb1ec64a006b8d0be1d234a76f\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Thu Jul 2 16:07:05 2026 +0300\n\n    all: upd dnsproxy\n\ncommit 7e7d6058712ec7370487348da92d5009c031c48f\nMerge: 77c954779 97789906a\nAuthor: f.setrakov <\n[…]\n Wed Jul 1 18:03:28 2026 +0300\n\n    all: chlog\n\ncommit adf3f963f943ac34ac201f557b0855da3b6d08ed\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Wed Jul 1 11:25:57 2026 +0300\n\n    all: upd dnsproxy",
          "is_bot": false,
          "headline": "Pull request 2689: 7955-fix-resp-flags",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-07-02T14:39:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "97789906acd9f3315a9da38af5d994f580063a27",
          "body": "Squashed commit of the following:\n\ncommit 820913315395112b47627e64afa760ce661e12a1\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Thu Jul 2 14:47:33 2026 +0300\n\n    all: upg chlog\n\ncommit e176169442149529a91def20e06770bf596cacef\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Thu Jul 2 13:4\n[…]\nimp docs, dry handler construction\n\ncommit 52823b892ec5950a50cc35c7d9216c069019c365\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Mon Jun 29 12:40:53 2026 +0300\n\n    home: fix h2c unlimited read",
          "is_bot": false,
          "headline": "Pull request 2686: AGDNS-4111-fix-dos-vol.2",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-07-02T12:39:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b135ca1b55cc1d044f89d4fd728f8638db66e34",
          "body": "Squashed commit of the following:\n\ncommit 8a79a364cf0614a3c7ccef6efcfaae546a6087c2\nMerge: 70bb94848 5c4af121d\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Mon Jun 29 09:17:02 2026 +0700\n\n    Merge remote-tracking branch 'origin/master' into AGDNS-4161-imp-translation-scripts\n\ncommit 70bb\n[…]\n:16:08 2026 +0700\n\n    scripts: imp code\n\ncommit ad2cbc31285dba5a870098945cded8a22ee1418c\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Wed Jun 24 10:46:53 2026 +0700\n\n    scripts: imp code",
          "is_bot": false,
          "headline": "Pull request: AGDNS-4161-imp-translation-scripts",
          "author_name": "Dimitry Kolyshev",
          "author_login": "Mizzick",
          "committed_at": "2026-06-29T03:15:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c4af121d144333cc05762af359e385d92bf0c2d",
          "body": "Squashed commit of the following:\n\ncommit 45d3fdba32b4c39c7588221267d99100322b8f97\nMerge: 83e7c754f 07d8d77a5\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Fri Jun 26 10:24:01 2026 +0300\n\n    Merge branch 'master' into AGDNS-4111-fix-dos\n\ncommit 83e7c754ffec01c118f369913f5245026ab552d1\nAuthor:\n[…]\n Mon Jun 15 15:29:52 2026 +0300\n\n    home: fix doc\n\ncommit 8c6d997d624190a7f37ff4c02535e805f2cf8747\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Thu Jun 11 13:21:10 2026 +0300\n\n    all: fix dos",
          "is_bot": false,
          "headline": "Pull request 2678: AGDNS-4111-fix-dos",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-06-26T09:07:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07d8d77a53ec4c556f6c669fe52012e354d5cd1c",
          "body": "Squashed commit of the following:\n\ncommit 0e52f80ffc635991b019f402e5cb9ba866dcf128\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Thu Jun 25 10:43:39 2026 +0700\n\n    all: upd dnsproxy\n\ncommit 61c04a949d908b26c8dff98f3b803d97970c6966\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   \n[…]\n'origin/master' into AGDNS-4107-upd-dnsproxy\n\ncommit bd4b6aa139e78244480ccca04639d828f8d8855c\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Thu Jun 11 15:19:00 2026 +0700\n\n    all: upd deps",
          "is_bot": false,
          "headline": "Pull request: AGDNS-4107-upd-dnsproxy",
          "author_name": "Dimitry Kolyshev",
          "author_login": "Mizzick",
          "committed_at": "2026-06-26T01:44:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a182fec42bcf9923971c69bcd82d547b62c5691",
          "body": "Updates #4923.\n\nSquashed commit of the following:\n\ncommit dac51753718c1076986a2257e3b4f8099057a4ce\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Fri Jun 19 15:37:05 2026 +0300\n\n    dhcpsvc: imp test code\n\ncommit cf89ea542d3a1f6e50039120fbd691949ccb839a\nAuthor: Eugene Burkov <e.burkov@adguard.\n[…]\n0\n\n    dhcpsvc: use gopacket fork\n\ncommit 99df3f3973a3d3bd47ed4986a398263ce8201ee5\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Fri Jun 19 00:38:24 2026 +0300\n\n    dhcpsvc: imp test assertions",
          "is_bot": false,
          "headline": "Pull request 2683: AGDNS-3863-gopacket-dhcp-vol.27",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-06-22T09:29:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "922a7aaf02e15099c347aca4e0f18ea5d6a7f690",
          "body": "Squashed commit of the following:\n\ncommit 9dfeb2cbb6a107a66518a432b33edb1343fd70b7\nMerge: cc748c030 5d3859bd3\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Jun 17 17:52:41 2026 +0300\n\n    Merge branch 'master' into AGDNS-4104-fix-tls-endpoints-do-not-register\n\ncommit cc748c03049be48\n[…]\n home: add todo;\n\ncommit d7d94b48200993ffd1d5ded7a8f7c954b1be6ee2\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Jun 17 16:07:16 2026 +0300\n\n    home: fix tls endpoints do not register",
          "is_bot": false,
          "headline": "Pull request 2682: AGDNS-4104-fix-tls-endpoints-do-not-register",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-06-17T14:57:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d3859bd36e3eef84abfcf4ebc1185379c7bfd4e",
          "body": "Updates #8276.\n\nSquashed commit of the following:\n\ncommit d92a630ba1c01a1a516f723c95421a9f4a9c53d3\nMerge: b6fcfbb40 af9142e98\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Wed Jun 17 16:07:38 2026 +0300\n\n    Merge branch 'master' into 8276-fix-ech-base64\n\ncommit b6fcfbb40683105807fd1a37cc023\n[…]\nfix chlog\n\ncommit 1f3ded96fd375ff5210d105d88383fac514faa45\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Jun 16 21:17:52 2026 +0300\n\n    dnsforward: do not require padding when parsing ech",
          "is_bot": false,
          "headline": "Pull request 2681: 8276-fix-ech-base64",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-06-17T13:18:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af9142e98e1c49783c610f3c5383843cc5b58e53",
          "body": "Squashed commit of the following:\n\ncommit 926a3fd13bdbb74ef9a253e61f403a9a63ebd9b2\nMerge: 13e3b38d8 798cd4d2f\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Jun 17 14:59:10 2026 +0300\n\n    Merge branch 'master' into AGDNS-4104-move-tls-http-api-from-tls-manager\n\ncommit 13e3b38d823277\n[…]\nt set in tls settings;\n\ncommit 4109d46b789c45bb99fb415636af8690d31e5a36\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue Jun 9 19:19:09 2026 +0300\n\n    home: mv tls endpoints to web api;",
          "is_bot": false,
          "headline": "Pull request 2675: AGDNS-4104-move-tls-http-api-from-tls-manager",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-06-17T12:08:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "798cd4d2fd759a22329f0473f06ea21269692625",
          "body": "Updates #4923.\n\nSquashed commit of the following:\n\ncommit 072006739bf2efaef83689f1a2b2c706a31d29e1\nMerge: 763b23a37 54e6e3002\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Wed Jun 17 14:40:42 2026 +0300\n\n    Merge branch 'master' into AGDNS-3863-gopacket-dhcp-vol.26\n\ncommit 763b23a37bc3c5c379\n[…]\n:13:42 2026 +0300\n\n    dhcpsvc: imp tests\n\ncommit cbe23b49f21218d02c56cb7f8b965663834e9457\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Tue Jun 9 20:45:59 2026 +0300\n\n    dhcpsvc: add v6 tests",
          "is_bot": false,
          "headline": "Pull request 2676: AGDNS-3863-gopacket-dhcp-vol.26",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-06-17T11:50:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "54e6e300228b731efb9fa4a7428300bc33816fec",
          "body": "Squashed commit of the following:\n\ncommit 37db2dd9d38299c70b114197b6da6968e49c7702\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Jun 9 20:37:36 2026 +0300\n\n    filtering: imp docs\n\ncommit 1ebd8f30c6810bb5e8b14246816c46c193a1e3de\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Jun 9 17:55:40 2026 +0300\n\n    all: allow custom filter update intervals",
          "is_bot": false,
          "headline": "Pull request 2674: custom-flt-upd-ivl",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-06-10T10:32:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36600da54921e2e9441e0304e6eaa8850764754c",
          "body": "Squashed commit of the following:\n\ncommit 1ec1589130190478d867ae4d683fa8cae139bb07\nMerge: 997f81cf8 abc48584d\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Tue Jun 9 14:11:45 2026 +0300\n\n    Merge branch 'master' into AGDNS-4038-rm-h2c-pkg\n\ncommit 997f81cf833f612a8319cab0c44c6bf5799248ce\nMerge\n[…]\nMerge branch 'master' into AGDNS-4038-rm-h2c-pkg\n\ncommit 4948ea0047463d1cc3cdebde2c95f38bbe32c1b0\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Mon Jun 1 23:21:54 2026 +0300\n\n    all: rm h2c pkg",
          "is_bot": false,
          "headline": "Pull request 2668: AGDNS-4038-rm-h2c-pkg",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-06-09T11:16:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abc48584d7ca95b2fc8aa5c4dc981e0b051d8501",
          "body": "Squashed commit of the following:\n\ncommit 2730536faa012017e3d27f838824f9266dd170f7\nMerge: ff3253bd4 8d4fd14b2\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon Jun 8 18:10:03 2026 +0300\n\n    Merge branch 'master' into AGDNS-4085-imp-updater-logs-and-errors\n\ncommit ff3253bd4c4197737f4b0d\n[…]\npd docs; imp code; upd chlog;\n\ncommit 8a88930c5c3eaef43eb9e6a4ef253f68cea65402\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Jun 3 17:45:08 2026 +0300\n\n    updater: imp logs and errs;",
          "is_bot": false,
          "headline": "Pull request 2672: AGDNS-4085-imp-updater-logs-and-errors",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-06-09T10:44:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d4fd14b2204ce0fc2369fabbcb2772f9a87fb94",
          "body": "Squashed commit of the following:\n\ncommit ef1249082eb3f75fdf96bde1c29ca16301b9b4e6\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Jun 5 13:12:25 2026 +0300\n\n    upd chlog;\n\ncommit 137921f6e3c5e64928ef337a241aacd7fb29b497\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Thu \n[…]\nll: imp code; imp docs;\n\ncommit 180ebe2dfc3b26d8e598bfbc99fa02cd1a87b76f\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue Jun 2 19:55:47 2026 +0300\n\n    filtering: add limit filter size;",
          "is_bot": false,
          "headline": "Pull request 2671: AGDNS-4081-limit-filter-size",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-06-08T10:34:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c7b89c77d47371bf4f43623e043cab2d1eb980d6",
          "body": "Squashed commit of the following:\n\ncommit 2e803728cb9a5e830bf7fda461592f2df0a88369\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Tue Jun 2 19:35:52 2026 +0300\n\n    client: upd i18n",
          "is_bot": false,
          "headline": "Pull request 2670: upd-all",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-06-02T16:46:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3250bf155cffb9909eaa09d0e7a37095c2deb2cd",
          "body": "Squashed commit of the following:\n\ncommit 8d4779adcef5463c823fd04e9cbd04bd75d10707\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Tue Jun 2 19:17:34 2026 +0300\n\n    all: upd chlog",
          "is_bot": false,
          "headline": "Pull request 2669: upd-chlog",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-06-02T16:26:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cada9c7543961bd3c08dcc25ecd0bc3608525ad4",
          "body": "Squashed commit of the following:\n\ncommit 9f008f0c181b9e76c8a50a0995f4b770b3110fdf\nMerge: a7d2558e7 d4dbf9ce9\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue Jun 2 15:07:04 2026 +0300\n\n    Merge branch 'master' into AG-54599-fix-blocked-domains-check\n\ncommit a7d2558e7ce35080ec7fec5bfa\n[…]\n   all: upd chlog;\n\ncommit ee75d9378f0705e28d4eb9fc1e073f77f2bc2e1e\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Mon May 25 15:50:48 2026 +0300\n\n    filtering: fix blocked domains check;",
          "is_bot": false,
          "headline": "Pull request 2663: AG-54599-fix-blocked-domains-check",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-06-02T12:11:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4dbf9ce9df2d8ec197bcbfbfaf8ee31c0bdc916",
          "body": "Updates #4923.\n\nSquashed commit of the following:\n\ncommit b1647cbe59860c18518f78da0dbc6154a4aef4d1\nMerge: be73f9ae1 e3adf9d46\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Thu May 28 15:42:24 2026 +0300\n\n    Merge branch 'master' into AGDNS-3863-gopacket-dhcp-vol.25\n\ncommit be73f9ae15ebed8d59\n[…]\n    dhcpsvc: fix logic, imp code, docs\n\ncommit 32fc9f4db0ca36bd9ce2f5886cf846b191fbe565\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Wed May 20 14:27:09 2026 +0300\n\n    dhcpsvc: handle solicit",
          "is_bot": false,
          "headline": "Pull request 2659: AGDNS-3863-gopacket-dhcp-vol.25",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-28T13:00:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3adf9d468ce0e9d7a4c1364b05182e48132800f",
          "body": "Squashed commit of the following:\n\ncommit 49df1909321bca1315d94b3530279e106ab269a4\nMerge: 2a16ea73f 328551582\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Thu May 28 13:50:54 2026 +0300\n\n    Merge branch 'master' into upd-fsnotify\n\ncommit 2a16ea73fe77b2a57affff3a78012dde01e865bb\nAuthor: Euge\n[…]\nWed May 27 14:39:50 2026 +0300\n\n    all: rm todo\n\ncommit c4599d67f458061647466778c5082c4f6d7e7466\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Tue May 26 18:39:47 2026 +0300\n\n    all: upd deps",
          "is_bot": false,
          "headline": "Pull request 2664: upd-fsnotify",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-28T10:56:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3285515828d7903aa22769e78a9a9aa7bc2412d6",
          "body": "Squashed commit of the following:\n\ncommit e42fdc074796197bd740dee8a1626dff9e18ed6a\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Wed May 27 18:11:16 2026 +0300\n\n    client: upd i18n",
          "is_bot": false,
          "headline": "Pull request 2665: upd-all",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-27T15:35:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bed991cbd63576d0bfaf3a6469e69bd6a08b01ce",
          "body": "Use evalErr to avoid go-lint shadow on err from os.Symlink. Aligns workDir/otherDir with filepath.EvalSymlinks paths (/var vs /private/var).",
          "is_bot": false,
          "headline": "fix(home): canonicalize temp dirs in TestConfigFilePath for macOS CI",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-26T13:53:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc7791039a44f5f2e715f385d215c03fc3ee3bae",
          "body": "Upstream: GLiNET path traversal fix (AG-54304), DNSSEC DO caching (#8384), changelog v0.107.76. Keep fcchbjm module path and dnsproxy fork; golibs v0.35.13.",
          "is_bot": false,
          "headline": "Merge upstream/master (249a3a16); bump fcchbjm/dnsproxy to v0.81.10",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-26T13:40:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "249a3a16150891989685f8ca4b23e83a0bfe41f2",
          "body": "Squashed commit of the following:\n\ncommit 33991debf6893bbfef320be5363bc83e11859039\nMerge: 3f88261a5 83d8d6595\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Fri May 22 16:10:53 2026 +0300\n\n    Merge branch 'master' into AG-54304-path-traversal-vuln\n\ncommit 3f88261a5bba60243c8fd25fcf898789765e80\n[…]\n+0300\n\n    all: fix race, imp code\n\ncommit 762f073facc451e6bc160a21e068352b14806620\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Tue May 19 18:13:24 2026 +0300\n\n    all: fix path-traversal vuln",
          "is_bot": false,
          "headline": "Pull request 2656: AG-54304-path-traversal-vuln",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-05-22T13:22:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "83d8d65950d78ecb83639c6468aeececc9417316",
          "body": "Squashed commit of the following:\n\ncommit fd4c31b21bcee0db6d1211ebcddb11ed522f09b1\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Fri May 22 11:06:00 2026 +0300\n\n    all: upd chlog",
          "is_bot": false,
          "headline": "Pull request 2662: upd-chlog",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-22T10:53:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe22dc0207d80aa8b07c57c365f56e27ca996830",
          "body": "Updates #8384.\nUpdates #7046.\n\nSquashed commit of the following:\n\ncommit 62b9aece3464a3b38e3b54fb12438dfd34330418\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Thu May 21 19:51:09 2026 +0300\n\n    all: log duration changes\n\ncommit 6dc85b11a6d72e4da288b7b6dcd20de8620274e1\nAuthor: Eugene Burkov \n[…]\nay 21 12:10:39 2026 +0300\n\n    all: log changes\n\ncommit 1de93b2800e34bcc0472dcb65ea0b6ace85937d8\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Wed May 20 21:12:12 2026 +0300\n\n    all: upd proxy",
          "is_bot": false,
          "headline": "Pull request 2660: 8384-fix-do-caching",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-21T17:02:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "569ebd9af7ffe31a4b3ce5d61fd35761671fc35e",
          "body": "…I docs\n\nIntegrate AdguardTeam commits 3144e185 and 006d83d1 while keeping fcchbjm module paths and fork-specific settings.",
          "is_bot": false,
          "headline": "Merge upstream/master (006d83d1): TLS config provider and querylog AP…",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-21T07:13:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "006d83d179e37d4c98e8d9ffc95ff899576e1fd6",
          "body": "Squashed commit of the following:\n\ncommit 485a706e5473e86e4e999f5b3dc64e3e8b2b6fce\nMerge: 0648cd6a0 3144e1856\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Wed May 20 15:09:50 2026 +0300\n\n    Merge branch 'master' into AGDNS-3951-imp-querylog-docs\n\ncommit 0648cd6a0d6db860f153d3b70515b25d351ab1\n[…]\n20 14:53:32 2026 +0300\n\n    openapi: changelog\n\ncommit 740d4eb46e738c5bf0c9cffd8f21dff37260f279\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Wed May 20 14:29:05 2026 +0300\n\n    openapi: imp doc",
          "is_bot": false,
          "headline": "Pull request 2658: AGDNS-3951-imp-querylog-docs",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-05-20T12:15:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3144e1856a627bf0658bf9f3acfbb003aade3746",
          "body": "Squashed commit of the following:\n\ncommit 1748706d70718ae68d64cb0b26d30be5c3635a8d\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed May 20 12:21:56 2026 +0300\n\n    all: imp docs;\n\ncommit 90f314adeadd167765a0a86493877f042f4b9805\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:  \n[…]\nhome: imp code;\n\ncommit 76265a91fd138ee344acc644bc3a8cfbb0c458f9\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Tue May 19 19:39:35 2026 +0300\n\n    all: add tls config provider; imp tests;",
          "is_bot": false,
          "headline": "Pull request 2657: AGDNS-3720-add-tls-config-provider",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-05-20T11:34:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a632d8153a82f74d45020a20acddd120aecb3d75",
          "body": null,
          "is_bot": false,
          "headline": "style(querylog): gofumpt test imports after upstream merge",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-20T09:05:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1867acbb4686eba87443a06a8d06f9b50583677f",
          "body": "…-all)",
          "is_bot": false,
          "headline": "Merge upstream/master (4 commits: querylog, go 1.26.3, changelog, upd…",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-20T07:20:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bad93f61abe9a520ca4e05f749b9e20931ce8a5",
          "body": null,
          "is_bot": false,
          "headline": "Update codecov to v5",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-20T07:17:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c5e88e29e900040a69dee75ea3bc74b78da48d3",
          "body": "Squashed commit of the following:\n\ncommit ff87d71ff211f5847c661ff47e9a8602538cb184\nAuthor: Eugene Burkov <e.burkov@adguard.com>\nDate:   Tue May 19 17:42:41 2026 +0300\n\n    client: upd i18n",
          "is_bot": false,
          "headline": "Pull request 2655: upd-all",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-19T14:47:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d32b7e63c183fcb47b4657f47a9adbc54e914f5",
          "body": "Squashed commit of the following:\n\ncommit e2f29bb0259f86924769cc22ae90b08d8e185c66\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue May 19 16:10:19 2026 +0300\n\n    all: revert new changes\n\ncommit e7ceeba073b2a318108c5ec4890589ed18c56488\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue May 19 16:00:09 2026 +0300\n\n    all: upd chlog",
          "is_bot": false,
          "headline": "Pull request 2654: upd-chlog",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-19T14:38:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36f77b499d8e48da52ba882318a52dfc63f6ae95",
          "body": "Squashed commit of the following:\n\ncommit 91bca21184b5bcc06f91c1b30c3eb684cad6e742\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed May 13 21:07:00 2026 +0300\n\n    fix spacing;\n\ncommit a8871572757b8ede5bd6d4c7548bcb64cc3792d7\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   W\n[…]\n    rollback redundant changes;\n\ncommit 71db72bac6bcccfbce57d18096ee50d6bedc665a\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed May 13 21:01:14 2026 +0300\n\n    upd go version to 1.26.3",
          "is_bot": false,
          "headline": "Pull request 2651: upd-go",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-05-14T14:13:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d1110d289e8bab2e982aeb6756278ac24e4a508",
          "body": "Squashed commit of the following:\n\ncommit 8606668738add53456063aa8f68ded3812170df3\nMerge: 9aff68363 b60af4bf3\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Wed May 13 11:45:39 2026 +0300\n\n    Merge branch 'master' into AGDNS-3951-querylog-search-criterion\n\ncommit 9aff6836320a8313900101311adaa2\n[…]\n:51:45 2026 +0300\n\n    all: add tests\n\ncommit 2a33db2182811dbeb24311a72734d9be46d155c6\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Wed Apr 29 19:10:02 2026 +0300\n\n    all: add reason criterion",
          "is_bot": false,
          "headline": "Pull request 2645: AGDNS-3951-querylog-search-criterion",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-05-13T09:49:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57950cdee636901ebe1cddebf27d18ab4265d956",
          "body": null,
          "is_bot": false,
          "headline": "chore: rename Go module to github.com/fcchbjm/AdGuardHome",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-08T11:54:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17f55c5ace242fa19828eb055d56025801f6116b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'AdguardTeam:master' into master",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-07T03:07:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b60af4bf312873c31146abb00535eb841050e0c1",
          "body": "Updates #4923.\n\nSquashed commit of the following:\n\ncommit 32b3580ed051c4d0b021fd0b141b2e25cd36b584\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue May 5 18:37:03 2026 +0300\n\n    dhcpsvc: fix docs\n\ncommit cce786e4591d94373b6e2bcbeb51ee5ca1fa1764\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue May 5 15:44:53 2026 +0300\n\n    dhcpsvc: validate v6 messages",
          "is_bot": false,
          "headline": "Pull request 2650: AGDNS-3863-gopacket-dhcp-vol.24",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-06T15:42:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aad0d315e6d659e58c4de7d64417cc6e2f1732c",
          "body": "Restructure README.md and README_zh.md for first-time readers: short upstream\ncontext, bullet list of fork changes, three-step quick start, and a change-notes\nsection covering PPv2 (strict semantics, trust boundary, topology diagrams),\nthe fcchbjm/dnsproxy stack pointer, and release/version.json plus CI env vars.\nRemove the stray heading before the embedded upstream README and keep both\nlanguage files structurally parallel.",
          "is_bot": false,
          "headline": "docs(readme): align fork README with dnsproxy-style layout (EN/ZH)",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-06T03:21:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcb7d7ae941a2ac6f7d6cf1d8b21e390d8b497bb",
          "body": "# Conflicts:\n#\tgo.mod\n#\tgo.sum",
          "is_bot": false,
          "headline": "Merge upstream/master (3 commits): retain fork release/update URLs",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-06T02:34:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "713178e02e8e08e0e1ef522dc08c8ef180de107c",
          "body": "发布产物与 release 二进制默认从本 fork 的 GitHub Release 拉索引与包,\n不设环境变量时与上游 static.adtidy.org 行为一致。\n\n- build-release.sh: VERSION_DOWNLOAD_URL / ANNOUNCEMENT_URL 可选覆盖\n- go-build.sh: UPDATE_INDEX_URL 通过 -ldflags 写入 defaultVersionURLOverride\n- updater: DefaultVersionURL 支持编译期覆盖,校验失败回退官方 CDN\n- release-fcchbjm.yml: Build release archives 注入三变量\n- updater_internal_test: TestDefaultVersionURL_override(无 Parallel + Cleanup)\n- AGENTS.md: §2.1 与 §4 说明(若该文件纳入提交)",
          "is_bot": false,
          "headline": "use GitHub Release URLs for version.json and update index",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-06T02:30:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3eb42df776eebab44fc3af6166daabe9dd0422ba",
          "body": "Squashed commit of the following:\n\ncommit a2d683320542638ea767918eb546fa0706e22bbd\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Mon May 4 20:22:04 2026 +0300\n\n    client: upd i18n",
          "is_bot": false,
          "headline": "Pull request 2648: upd-all",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-05T11:01:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5c79502f183d631dcd6d4a519b46de2a1e0d119",
          "body": "Squashed commit of the following:\n\ncommit c5c13036947bdc16a75906d8618b7b641e595f58\nMerge: 2e445364b 95b242131\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Mon May 4 18:00:18 2026 +0300\n\n    Merge branch 'master' into AGDNS-3952-udp-id\n\ncommit 2e445364b5044c98eafe1171793e772f09b2dd1b\nAuthor:\n[…]\n 30 14:31:39 2026 +0300\n\n    all: upd chlog\n\ncommit 1fe4ac4353ee0f72c1e207d3b129d94a42e01e76\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Tue Apr 28 21:36:12 2026 +0300\n\n    all: upd dnsproxy",
          "is_bot": false,
          "headline": "Pull request 2643: AGDNS-3952-udp-id",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-05-04T15:12:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95b24213147f442b63ed2adf76c1b705c001101d",
          "body": "Updates #8359.\n\nSquashed commit of the following:\n\ncommit 3242b00261ddcf37632999a992e2b81eae5a7f95\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Thu Apr 30 14:10:13 2026 +0300\n\n    stats: imp code\n\ncommit b7bf300f8744b53f6cd49ce37ebd36c970da5630\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Wed Apr 29 22:28:59 2026 +0300\n\n    all: fix deadlock",
          "is_bot": false,
          "headline": "Pull request 2646: 8359-fix-deadlock",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-05-04T13:00:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f4fd4df9b39667edccc85b01d176ade3278e138",
          "body": "…rdHome\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\n\n# Conflicts:\n#\tclient/src/components/Settings/Dns/Config/Form.tsx\n#\tgo.sum",
          "is_bot": false,
          "headline": "Merge branch 'master' of https://github.com/fcchbjm/AdguardTeam-AdGua…",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:24:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "344f6c4437ec0da92d896c0a33217c054257de66",
          "body": null,
          "is_bot": false,
          "headline": "更新dnsproxy版本",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:22:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1e810c01e5dc076bb7a690fba95d169d6be550b",
          "body": "Use a lowercase GHCR repository name for DOCKER_IMAGE_NAME so docker buildx push passes tag validation in release workflow.\n\nMade-with: Cursor",
          "is_bot": false,
          "headline": "fix ghcr image name casing in release workflow",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:21:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "814674e9377b04f81d1f11860c54f4d35ceab251",
          "body": "Apply gofumpt formatting to all files reported by CI go-lint so formatting checks pass without changing runtime behavior.\n\nMade-with: Cursor",
          "is_bot": false,
          "headline": "fix gofumpt violations after dnsproxy path switch",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:21:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d9709db56c59d2133b28f8fedc5ca69f7089c60",
          "body": "Switch dnsproxy references from AdguardTeam to fcchbjm across runtime and tests, and update go.mod/go.sum to depend directly on github.com/fcchbjm/dnsproxy v0.81.7 so the branch builds cleanly against the fork.\n\nMade-with: Cursor",
          "is_bot": false,
          "headline": "align dnsproxy imports with forked module path",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:21:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4c215643406918b45ad6744aad55aeca3ac8fd3",
          "body": null,
          "is_bot": false,
          "headline": "适配dnsproxy对Proxy Protocol v2的支持",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:21:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "815e2d0b1b8f3c662da119ee8f9be5fa4f956a2b",
          "body": null,
          "is_bot": false,
          "headline": "更新dnsproxy版本",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-05-02T11:02:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e3d913e72aa167ca8494b61ef841042bb709171",
          "body": "…ith recharts\n\nUpdates #6823\n\nSquashed commit of the following:\n\ncommit c4309d3015ede9a7631e91afe96f9a2091c6c429\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Mon Apr 27 14:32:09 2026 +0300\n\n    fix lint\n\ncommit d290420191d83c4d2dcbabd04eea2fb921d94f4b\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:  \n[…]\n0300\n\n    changelog\n\ncommit 5e43688eed2e97501610fd4c000df2c85beed169\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Thu Apr 23 17:49:32 2026 +0300\n\n    ADG-8560 remove axios and replace charts library",
          "is_bot": false,
          "headline": "Pull request 2641: ADG-8560 remove axios and replace charts library w…",
          "author_name": "Ildar Kamalov",
          "author_login": "IldarKamalov",
          "committed_at": "2026-04-27T13:15:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c22183c6f082897be053d06f913326f5cc830e74",
          "body": "Squashed commit of the following:\n\ncommit 9ca94b03ee255cf8810c72ffcf967ae348d796fd\nMerge: 5516a95d0 44dfffc83\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Fri Apr 24 15:44:56 2026 +0300\n\n    Merge branch 'master' into AGDNS-3945-imp-querylog\n\ncommit 5516a95d082dbe8acc85efb0833c63f7a7bde220\n\n[…]\n: imp go.mod, names, errors\n\ncommit 20f5e335c1f3c21d7cc6ec6dd57389507627ba3d\nAuthor: Ainar Garipov <a.garipov@adguard.com>\nDate:   Wed Apr 22 21:02:13 2026 +0300\n\n    all: modernize code; imp querylog",
          "is_bot": false,
          "headline": "Pull request 2638: AGDNS-3945-imp-querylog",
          "author_name": "Ainar Garipov",
          "author_login": "ainar-g",
          "committed_at": "2026-04-24T13:04:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "44dfffc832e071bdd88c2544f87c852b493ed9a9",
          "body": "Updates #8348.\n\nSquashed commit of the following:\n\ncommit efc0f41d1948f899396f97daf0567d6e55a4c62c\nMerge: 86fa74426 313135d74\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Thu Apr 23 18:21:20 2026 +0300\n\n    Merge branch 'master' into 8348-improve-dhcpd-error-handling\n\ncommit 86fa744261347345e494df5aaa2267f403c3f052\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Thu Apr 23 15:09:40 2026 +0300\n\n    dhcpd: change log level",
          "is_bot": false,
          "headline": "Pull request 2640: 8348-improve-dhcpd-error-handling",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-04-24T10:53:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "313135d74f40004b966b887babd4b83bca152e85",
          "body": "Squashed commit of the following:\n\ncommit 43c0748600f8d69ffd126991c17c9cb972a7961c\nMerge: 1a9c78d8b 35f910186\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Thu Apr 23 17:21:12 2026 +0300\n\n    Merge branch 'master' into AGDNS-3799-h2c-vuln-test\n\ncommit 1a9c78d8bfc219b54305d13e9d5abe6e8f5a6517\nA\n[…]\n0300\n\n    home: impl upgrade requests\n\ncommit 483ed1ff149e489f9b0a8ac3f1a438e04c1087fb\nAuthor: f.setrakov <f.setrakov@adguard.com>\nDate:   Fri Mar 27 13:07:07 2026 +0300\n\n    home: h2c vuln test draft",
          "is_bot": false,
          "headline": "Pull request 2614: AGDNS-3799-h2c-vuln-test",
          "author_name": "Fedor Setrakov",
          "author_login": "masterkusok",
          "committed_at": "2026-04-23T14:28:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "35f91018633f6e979db05e5a326b452bb83c3cda",
          "body": "Squashed commit of the following:\n\ncommit 0a639315fab426a0bcc3e8164009abd661194cff\nMerge: 33fbca6b6 f7c907878\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Thu Apr 23 15:32:37 2026 +0300\n\n    Merge branch 'master' into ADG-12124-use-globs-properly-in-scripts\n\ncommit 33fbca6b665251e8ba9e0ac8eeac366dcd03ae0f\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Thu Apr 23 14:48:54 2026 +0300\n\n    make: use globs properly;",
          "is_bot": false,
          "headline": "Pull request 2639: ADG-12124-use-globs-properly-in-scripts",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-04-23T12:40:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7c9078781ed3a25181b804e0e9397148ebdbf1c",
          "body": "Squashed commit of the following:\n\ncommit 0daffc441eec484e534bf7067185418ef0da57d4\nMerge: b75c3829c b08e58766\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Thu Apr 23 17:04:08 2026 +0700\n\n    Merge remote-tracking branch 'origin/master' into AGDNS-3870-imp-dnssec\n\ncommit b75c3829cd8d2a17c\n[…]\nrigin/master' into AGDNS-3870-imp-dnssec\n\ncommit c8eb8145b4fbb340f0d84b8981445b24665b5a99\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Wed Apr 15 11:41:11 2026 +0700\n\n    all: upd dnsproxy",
          "is_bot": false,
          "headline": "Pull request: AGDNS-3870-imp-dnssec",
          "author_name": "Dimitry Kolyshev",
          "author_login": "Mizzick",
          "committed_at": "2026-04-23T12:30:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2d11de5ba696b460e4ffcb75d557a304b2dce11a",
          "body": "Use a lowercase GHCR repository name for DOCKER_IMAGE_NAME so docker buildx push passes tag validation in release workflow.\n\nMade-with: Cursor",
          "is_bot": false,
          "headline": "fix ghcr image name casing in release workflow",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-04-23T10:52:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ced0b5fbde5655477194256d1cba746ea5e21bfe",
          "body": "Apply gofumpt formatting to all files reported by CI go-lint so formatting checks pass without changing runtime behavior.\n\nMade-with: Cursor",
          "is_bot": false,
          "headline": "fix gofumpt violations after dnsproxy path switch",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-04-23T05:47:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "239d812d533d2d3cbf1b3526ae4b808d4ee90be0",
          "body": "Switch dnsproxy references from AdguardTeam to fcchbjm across runtime and tests, and update go.mod/go.sum to depend directly on github.com/fcchbjm/dnsproxy v0.81.7 so the branch builds cleanly against the fork.\n\nMade-with: Cursor",
          "is_bot": false,
          "headline": "align dnsproxy imports with forked module path",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-04-23T04:41:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f88da83305a619a244ca941087c8dd21352b3bc",
          "body": null,
          "is_bot": false,
          "headline": "适配dnsproxy对Proxy Protocol v2的支持",
          "author_name": "fcchbjm",
          "author_login": "fcchbjm",
          "committed_at": "2026-04-23T04:27:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b08e587660891bef937c626d76a23ed957707c0d",
          "body": "Updates #4923.\n\nSquashed commit of the following:\n\ncommit 305d3ba116a6abcdb23805af8a5a7dfb82bdc580\nMerge: c7512c829 9e153fbd9\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue Apr 21 19:30:31 2026 +0300\n\n    Merge branch 'master' into AGDNS-3863-gopacket-dhcp-vol.23\n\ncommit c7512c82921b2dbf05\n[…]\n dhcpsvc: add dhcpv6 handle, imp code\n\ncommit e94cb9e1da8c117bc4c16634270230125f97677c\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Wed Apr 15 15:56:38 2026 +0300\n\n    dhcpsvc: add ipv6 consts",
          "is_bot": false,
          "headline": "Pull request 2634: AGDNS-3863-gopacket-dhcp-vol.23",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-04-21T16:53:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e153fbd990db8ab2afd8f6eec694b0ebea30fe4",
          "body": "Squashed commit of the following:\n\ncommit 8cb31a510bc3983032337c513df8859bd6e89333\nMerge: 3a3ff8e40 3f153ea7c\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Mon Apr 20 10:41:36 2026 +0700\n\n    Merge remote-tracking branch 'origin/master' into ADG-12053-imp-gh-workflow-permissions\n\ncommit 3\n[…]\n+0700\n\n    gh workflows: fmt\n\ncommit 1cd766f351d98af2d183d1795ecb30891a1c997c\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Tue Apr 14 11:43:03 2026 +0700\n\n    gh workflows: imp permissions",
          "is_bot": false,
          "headline": "Pull request: ADG-12053-imp-gh-workflow-permissions",
          "author_name": "Dimitry Kolyshev",
          "author_login": "Mizzick",
          "committed_at": "2026-04-20T03:50:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3f153ea7cbcbad9c5eaf96fb274eedf88481b842",
          "body": "Squashed commit of the following:\n\ncommit 689c4bdc8bb1639572e25e630d1cbfbd6f807f7f\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Apr 17 15:33:43 2026 +0300\n\n    snap: imp download.sh\n\ncommit 0dec7e32d3888a04042e1e7390921a1b64048ac5\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\n\n[…]\n\n    snap: fix script;\n\ncommit ff439b787122e9082472e56b1ca32b0ba632e5b9\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Thu Apr 16 19:46:49 2026 +0300\n\n    snap: add cache buster url param;",
          "is_bot": false,
          "headline": "Pull request 2636: AGDNS-3914-increase-snapcraft-build-stability",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-04-17T14:33:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30e770f64b75a9fb98a45920db77db1d27d11f11",
          "body": "Squashed commit of the following:\n\ncommit 6f535673668f7d191e38d810171c85a030ceb2c6\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Thu Apr 16 15:12:11 2026 +0300\n\n    all: upd chlog",
          "is_bot": false,
          "headline": "Pull request 2635: upd-chlog",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-04-16T13:42:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3b73ef42f2be8379ca7a15c47d15c8b9c537583",
          "body": "…rol settings translations\n\nSquashed commit of the following:\n\ncommit 8a12d4f528698b28df3ca3b5a1c0cc1e3d5b5c15\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Tue Apr 14 17:15:22 2026 +0300\n\n    changelog\n\ncommit 6443155739f19a268ec92e84614e9a2883bd3f41\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Tue Apr 14 17:13:38 2026 +0300\n\n    AGDNS-3866 fix browsing security and parental control translations",
          "is_bot": false,
          "headline": "Pull request 2632: AGDNS-3866 fix browsing security and parental cont…",
          "author_name": "Ildar Kamalov",
          "author_login": "IldarKamalov",
          "committed_at": "2026-04-14T16:02:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1241dea97c62b2d5d72189e6454e66891a838fca",
          "body": "Squashed commit of the following:\n\ncommit 2e560760b1f541bdc8a487fb985363e7dc00bf89\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue Apr 14 14:43:41 2026 +0300\n\n    all: upd yaml\n\ncommit 36cc48366da22347bbb7e132f810042cebbb6b47\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue Apr 14 1\n[…]\n:55 2026 +0300\n\n    client: upd i18n\n\ncommit 918a67a95097088d1d154769bbd037242bc6bf75\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Mon Apr 13 19:16:29 2026 +0300\n\n    all: upd blocked services",
          "is_bot": false,
          "headline": "Pull request 2629: upd-all",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-04-14T12:20:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "be704e7fef324af6aa83d0dfe74727efad254b1b",
          "body": "Squashed commit of the following:\n\ncommit 85f02d0d9b5fcca959ad7366c1f6749ffad0f7c3\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Tue Apr 14 13:55:06 2026 +0300\n\n    all: log changes\n\ncommit 184ca18731c3d9c6822188ba55eb9a29df872b9c\nAuthor: Ildar Kamalov <ik@adguard.com>\nDate:   Tue Apr 14 12:24:08 2026 +0300\n\n    ADG-12066 update axios",
          "is_bot": false,
          "headline": "Pull request 2631: ADG-12066 update axios",
          "author_name": "Ildar Kamalov",
          "author_login": "IldarKamalov",
          "committed_at": "2026-04-14T11:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b4ce596d3fe7408f233d68059486d6538cd0686",
          "body": "Squashed commit of the following:\n\ncommit eb9af7926792d5d051721c08255a57f31cff7348\nMerge: ce7208031 53f269be4\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Tue Apr 14 10:36:00 2026 +0700\n\n    Merge remote-tracking branch 'origin/master' into AGDNS-3826-add-platform-tests\n\ncommit ce7208031\n[…]\n026 +0700\n\n    ossvc: add tests sysmd\n\ncommit 4cad7837723528376b3d8b3f5cf5d2d60c44b3d1\nAuthor: Dimitry Kolyshev <dkolyshev@adguard.com>\nDate:   Wed Apr 8 13:46:03 2026 +0700\n\n    ossvc: add tests sysv",
          "is_bot": false,
          "headline": "Pull request: AGDNS-3826-add-platform-tests",
          "author_name": "Dimitry Kolyshev",
          "author_login": "Mizzick",
          "committed_at": "2026-04-14T03:45:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "53f269be40ccfe01d71ce7eab02a0a570b2bfe2b",
          "body": "Updates #7058.\n\nSquashed commit of the following:\n\ncommit 99f0dbd38c22b6e0fffb3eae144f280a42d0334e\nMerge: 9cd78d2b1 d28f33afc\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Mon Apr 13 17:39:32 2026 +0300\n\n    Merge branch 'master' into 7058-refactor-upstream-routing\n\ncommit 9cd78d2b10f37984a80\n[…]\n Apr 13 17:30:16 2026 +0300\n\n    all: upd to tag\n\ncommit 7f53e9f4b79756066580965020cf848dd1e380cf\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Wed Apr 8 21:32:43 2026 +0300\n\n    all: upd proxy",
          "is_bot": false,
          "headline": "Pull request 2626: 7058-refactor-upstream-routing",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-04-13T15:50:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d28f33afca6b196f97eab54095e41a3ecd452494",
          "body": "Squashed commit of the following:\n\ncommit dc9d1f9448e0213e2484e9ad767c3015619a382a\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Apr 10 12:39:28 2026 +0300\n\n    home: upd var name;\n\ncommit ef34751d24f94e63376da13c0e0214011c29e213\nMerge: 1a2cfce7e 397ed060d\nAuthor: Ainar Garipov <a.g\n[…]\nhome: imp code; add docs, contracts;\n\ncommit 334a75e58e514e0554a8a18963537ef03ce6b9de\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Apr 8 13:36:04 2026 +0300\n\n    home: rm old logger;",
          "is_bot": false,
          "headline": "Pull request 2624: AGDNS-3869-rm-the-old-logger-from-some-entities",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-04-10T09:48:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "397ed060d992759dd5e918e7a2e66df38120e924",
          "body": "Squashed commit of the following:\n\ncommit 4135405a402ab40f4ab133543312e99851b35454\nMerge: 2b5761949 f8a72754e\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Fri Apr 10 12:01:09 2026 +0300\n\n    Merge branch 'master' into AGDNS-3868-imp-openbsd-in-ossvc\n\ncommit 2b57619493ebc83e2833e9c651bb\n[…]\n  ossvc: imp code;\n\ncommit 3096404aef6b3bd19f702d4f1dbe6f7b7d3265c6\nAuthor: Maksim Kazantsev <m.kazantsev@adguard.com>\nDate:   Wed Apr 8 12:19:00 2026 +0300\n\n    ossvc: imp code in service_openbsd.go;",
          "is_bot": false,
          "headline": "Pull request 2623: AGDNS-3868-imp-openbsd-in-ossvc",
          "author_name": "Maksim Kazantsev",
          "author_login": "makazantsev",
          "committed_at": "2026-04-10T09:11:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8a72754ecc63904cabb22ca2679cd4a5ac0dc4d",
          "body": "Squashed commit of the following:\n\ncommit 43b5e287afd79edcd30d577c47c9b759696813d7\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Thu Apr 9 21:34:32 2026 +0300\n\n    dhcpsvc: fix test\n\ncommit 4e1e04130a0460cee82db916d5eac55a78b4f061\nAuthor: Eugene Burkov <E.Burkov@AdGuard.COM>\nDate:   Thu Apr 9 21:02:45 2026 +0300\n\n    all: upd go & tools",
          "is_bot": false,
          "headline": "Pull request 2627: upd-go",
          "author_name": "Eugene Burkov",
          "author_login": "EugeneOne1",
          "committed_at": "2026-04-09T18:44:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 8,
      "commits_last_year": 252,
      "latest_release_at": "2026-07-18T18:31:07Z",
      "latest_release_tag": "v0.0.8",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 48,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 14.6
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/fcchbjm/AdGuardHome",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/fcchbjm/AdGuardHome",
          "is_deprecated": false,
          "latest_version": "v0.0.8",
          "repository_url": "https://github.com/fcchbjm/AdGuardHome",
          "versions_count": 8,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T17:49:04Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [
        "openapi/openapi.yaml"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [
        "client/tsconfig.json",
        "client_v2/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 239910,
      "source_files_sampled": 1129,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "client_v2/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 24966
    },
    "dependencies": {
      "manifests": [
        "client/package.json",
        "client_v2/package.json",
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "npm"
      ],
      "dependencies": [
        {
          "name": "classnames",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.5.1"
        },
        {
          "name": "clsx",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "countries-and-timezones",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.0"
        },
        {
          "name": "date-fns",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "i18next",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.6.2"
        },
        {
          "name": "i18next-browser-languagedetector",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.2.0"
        },
        {
          "name": "ipaddr.js",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.9.1"
        },
        {
          "name": "js-yaml",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.14.0"
        },
        {
          "name": "lodash",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.17.19"
        },
        {
          "name": "nanoid",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.9"
        },
        {
          "name": "popper.js",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.16.1"
        },
        {
          "name": "prop-types",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.8.1"
        },
        {
          "name": "query-string",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.13.1"
        },
        {
          "name": "react",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.13.1"
        },
        {
          "name": "react-click-outside",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.1"
        },
        {
          "name": "react-dom",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.13.1"
        },
        {
          "name": "react-hook-form",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.54.0"
        },
        {
          "name": "react-i18next",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.7.2"
        },
        {
          "name": "react-modal",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.11.2"
        },
        {
          "name": "react-popper-tooltip",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.11.1"
        },
        {
          "name": "react-redux",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.2.0"
        },
        {
          "name": "react-redux-loading-bar",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.6.0"
        },
        {
          "name": "react-router-dom",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.0"
        },
        {
          "name": "react-router-hash-link",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.2"
        },
        {
          "name": "react-select",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.0"
        },
        {
          "name": "react-table",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.11.4"
        },
        {
          "name": "react-transition-group",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.5"
        },
        {
          "name": "recharts",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.15.4"
        },
        {
          "name": "redux",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.5"
        },
        {
          "name": "redux-actions",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.6.5"
        },
        {
          "name": "redux-thunk",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.3.0"
        },
        {
          "name": "url-polyfill",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.12"
        },
        {
          "name": "yaml",
          "manifest": "client/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.8.3"
        },
        {
          "name": "@adguard/translate",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.2"
        },
        {
          "name": "@ark-ui/solid",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.37.1"
        },
        {
          "name": "@modular-forms/solid",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.25.0"
        },
        {
          "name": "@solidjs/router",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.15.0"
        },
        {
          "name": "chart.js",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.4.0"
        },
        {
          "name": "clsx",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "copy-to-clipboard",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.3.3"
        },
        {
          "name": "countries-and-timezones",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.6.0"
        },
        {
          "name": "date-fns",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.0"
        },
        {
          "name": "ipaddr.js",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.2.0"
        },
        {
          "name": "js-yaml",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.0"
        },
        {
          "name": "lodash",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.17.19"
        },
        {
          "name": "nanoid",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.1.0"
        },
        {
          "name": "qs",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.14.0"
        },
        {
          "name": "solid-js",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.9.0"
        },
        {
          "name": "solid-transition-group",
          "manifest": "client_v2/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.3.0"
        },
        {
          "name": "github.com/AdguardTeam/dnscrypt",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.2"
        },
        {
          "name": "github.com/AdguardTeam/golibs",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.35.14"
        },
        {
          "name": "github.com/AdguardTeam/urlfilter",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.23.4"
        },
        {
          "name": "github.com/NYTimes/gziphandler",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.1"
        },
        {
          "name": "github.com/bluele/gcache",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.2"
        },
        {
          "name": "github.com/c2h5oh/datasize",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20231215233829-aa82cc1e6500"
        },
        {
          "name": "github.com/digineo/go-ipset/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.2.1"
        },
        {
          "name": "github.com/fcchbjm/dnsproxy",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.82.0"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/go-ping/ping",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.0"
        },
        {
          "name": "github.com/google/go-cmp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.7.0"
        },
        {
          "name": "github.com/google/gopacket",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.19"
        },
        {
          "name": "github.com/google/renameio/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.2"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/gopacket/gopacket",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.7.0"
        },
        {
          "name": "github.com/insomniacslk/dhcp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20260603135910-a415979eb11e"
        },
        {
          "name": "github.com/kardianos/service",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.4"
        },
        {
          "name": "github.com/mdlayher/ethernet",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20220221185849-529eae5b6118"
        },
        {
          "name": "github.com/mdlayher/netlink",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.2"
        },
        {
          "name": "github.com/mdlayher/packet",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.2"
        },
        {
          "name": "github.com/mdlayher/raw",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.0"
        },
        {
          "name": "github.com/miekg/dns",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.72"
        },
        {
          "name": "github.com/quic-go/quic-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.60.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/ti-mo/netfilter",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.3"
        },
        {
          "name": "go.etcd.io/bbolt",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "go.yaml.in/yaml/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.0.0-rc.6"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.57.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.47.0"
        },
        {
          "name": "gopkg.in/natefinch/lumberjack.v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.2.1"
        },
        {
          "name": "howett.net/plist",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 3,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "ainar-g",
          "commits": 923,
          "avatar_url": "https://avatars.githubusercontent.com/u/4964986?v=4"
        },
        {
          "type": "User",
          "login": "szolin",
          "commits": 847,
          "avatar_url": "https://avatars.githubusercontent.com/u/38690158?v=4"
        },
        {
          "type": "User",
          "login": "IldarKamalov",
          "commits": 527,
          "avatar_url": "https://avatars.githubusercontent.com/u/2804667?v=4"
        },
        {
          "type": "User",
          "login": "ameshkov",
          "commits": 508,
          "avatar_url": "https://avatars.githubusercontent.com/u/5947035?v=4"
        },
        {
          "type": "User",
          "login": "EugeneOne1",
          "commits": 452,
          "avatar_url": "https://avatars.githubusercontent.com/u/38542664?v=4"
        },
        {
          "type": "User",
          "login": "hmage",
          "commits": 409,
          "avatar_url": "https://avatars.githubusercontent.com/u/739119?v=4"
        },
        {
          "type": "User",
          "login": "ArtemBaskal",
          "commits": 206,
          "avatar_url": "https://avatars.githubusercontent.com/u/45331104?v=4"
        },
        {
          "type": "User",
          "login": "schzhn",
          "commits": 188,
          "avatar_url": "https://avatars.githubusercontent.com/u/121440673?v=4"
        },
        {
          "type": "User",
          "login": "Mizzick",
          "commits": 94,
          "avatar_url": "https://avatars.githubusercontent.com/u/13855288?v=4"
        },
        {
          "type": "User",
          "login": "aadmitrevskiy",
          "commits": 69,
          "avatar_url": "https://avatars.githubusercontent.com/u/204723740?v=4"
        }
      ],
      "contributors_sampled": 94,
      "top_contributor_share": 0.205
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "build.yml",
        "lint.yml",
        "release-fcchbjm.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".eslintrc.cjs",
        ".eslintrc.json"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "package-lock.json"
      ],
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "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": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 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": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not 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": 0,
            "reason": "no SAST tool detected",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": "34 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7982e9ae8c2f3f3a1a411d644da20d46f4bb4bf8",
        "ran_at": "2026-07-27T16:12:56Z",
        "aggregate_score": 4.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-18T18:17:30Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/fcchbjm/AdGuardHome",
    "host": "github.com",
    "name": "AdGuardHome",
    "owner": "fcchbjm"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 41,
        "vitality": 90,
        "community": 12,
        "governance": 51,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 90,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "commits_last_year": 252,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 48
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "48/52 weeks with commits",
                "points": 33.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 48
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "252 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 252
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 8,
              "latest_release_tag": "v0.0.8",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 14.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "8 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~14.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 14.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (GPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "GPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 51,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "good",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "bus_factor": 3,
              "contributors_sampled": 94,
              "top_contributor_share": 0.205
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "3 contributor(s) cover half of all commits",
                "points": 36,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 20% of commits",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 20
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "94 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 94
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "fcchbjm",
              "public_repos": 14,
              "account_age_days": 1010
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of fcchbjm",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "fcchbjm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "14 public repos, account ~2 yr old",
                "points": 14.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 14
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/fcchbjm/AdGuardHome"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "8 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": ".eslintrc.cjs, .eslintrc.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs, .eslintrc.json"
                    }
                  }
                ],
                "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": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 45,
            "inputs": {
              "topics": [
                "adguardhome",
                "dns",
                "dns-over-https",
                "dns-over-quic",
                "dns-over-tls",
                "ppv2",
                "proxy-protocol",
                "adguard-home"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 41,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.1
            },
            "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 not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "34 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 5
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.9,
              "agent_instruction_files": [
                "client_v2/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 24966
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "client_v2/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "client_v2/AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "90 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 90,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "client/tsconfig.json",
                "client_v2/tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "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": ".eslintrc.cjs, .eslintrc.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs, .eslintrc.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "client/tsconfig.json, client_v2/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "client/tsconfig.json, client_v2/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 239910,
              "source_files_sampled": 1129,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/1129 source files over 60KB",
                "points": 55,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1129,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "good",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": [
                "openapi/openapi.yaml"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "openapi/openapi.yaml",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "openapi/openapi.yaml"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Community profile unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T16:13:13.036798Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/fcchbjm/AdGuardHome.svg",
  "full_name": "fcchbjm/AdGuardHome",
  "license_state": "standard",
  "license_spdx": "GPL-3.0"
}

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

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

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