Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 0 forksdesde feb 2026forkVer en GitHub ↗

fcchbjm/AdGuardHome tiene un índice de salud de 55 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (90/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hace 8 días. 3 personas concentran la mayor parte del trabajo reciente.

55
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

55
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

fcchbjmCuenta personal
0 seguidores14 repositorios públicosdesde oct 2023

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/fcchbjm/AdGuardHomev0.0.8-8hace 8 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

90Excelente · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
33.2/36Cadencia de commits — 48/52 semanas con commits
18/18Volumen de commits — 252 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year252
human_commit_share1
days_since_last_push8
active_weeks_last_year48
Cómo se puntúa
27/27Publica versiones — 8 versiones publicadas
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~14,6 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count8
latest_release_tagv0.0.8
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases14,6

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

12Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
0/22.5README
22.5/22.5Licencia — licencia reconocida (GPL-3.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readmeno
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

51Moderado · 24% del índice global
Cómo se puntúa
36/54Factor bus — la mitad de los commits recae en 3 contribuyente(s)
17.9/22.5Distribución de commits — el principal contribuyente firma el 20% de los commits
13.5/13.5Amplitud de contribuyentes — 94 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Datos de entrada utilizados
bus_factor3
contributors_sampled94
top_contributor_share0,205
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de fcchbjm
14.1/25Trayectoria — 14 repos públicos, cuenta de ~2 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginfcchbjm
public_repos14
account_age_days1010
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 8 días
20/20Historial de versiones — 8 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/fcchbjm/AdGuardHome
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

71Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .eslintrc.cjs, .eslintrc.json
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

45En riesgo
Cómo se puntúa
0/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
10/10Topics — 8 topics
10/10Wiki
Datos de entrada utilizados
topicsadguardhome, dns, dns-over-https, dns-over-quic, dns-over-tls, ppv2, proxy-protocol, adguard-home
has_wiki
homepage
has_readmeno
has_docs_dir
has_descriptionno

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

41En riesgo · 16% del índice global
Cómo se puntúa
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 — sin datos
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.5Licencia — 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 — sin datos
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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,1
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, packaging. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

82Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — client_v2/AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 90 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,9
agent_instruction_filesclient_v2/AGENTS.md
agent_instruction_max_bytes24.966
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.cjs, .eslintrc.json
11/11Verificación estática de tipos — client/tsconfig.json, client_v2/tsconfig.json
10/10Entorno reproducible — lockfile
2/10Práctica demostrada con agentes — 1 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configsclient/tsconfig.json, client_v2/tsconfig.json
agent_commit_share0,01
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 1/1129 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes239.910
source_files_sampled1129
oversized_source_files1
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — openapi/openapi.yaml
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_filesopenapi/openapi.yaml

Datos clave

0estrellas de GitHub
94contribuidores
252commits en los últimos 12 meses
8días desde el último push
8versiones publicadas
3factor bus
0issues abiertas
Go, npmecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 4.1 / 10
4.1agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
n/dCI-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
n/dPackagingpackaging 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
Dependencias directas 81
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasGo.