Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 19:23 UTC

prusnak / nix-bitcoin

A collection of Nix packages and NixOS modules for easily installing full-featured Bitcoin nodes with an emphasis on security.

NixMIT★ 1 estrella⑂ 0 forksdesde jul 2021forkVer en GitHub ↗

prusnak/nix-bitcoin tiene un índice de salud de 26 sobre 100, lo que lo sitúa en la banda Crítico. Su puntuación más alta es AI Readiness (49/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hace 1304 días. 2 personas concentran la mayor parte del trabajo reciente.

26
global / 100
Crítico

Í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.

26
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.

Abandonment Policy applies a 85% multiplier to weighted overall health.

Titularidad

Pavol RusnakCuenta personal
1179 seguidores132 repositorios públicosdesde dic 2008Co-Founder @SatoshiLabs

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.

Métricas por categoría

Vitalidad

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

20Crítico · 22% del índice global
Cómo se puntúa
0/36Recencia de push — último push hace 1304 días
0/36Cadencia de commits — 0/52 semanas con commits
0/18Volumen de commits — 0 commits en el último año
0/10OpenSSF Scorecard: Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Datos de entrada utilizados
commits_last_year0
human_commit_share1
days_since_last_push1304
active_weeks_last_year0
Cómo se puntúa
16.2/27Publica versiones — 47 etiquetas de versión (sin releases de GitHub)
0/36Recencia de las versiones — última versión hace 1838 días
27/27Cadencia de publicación — una versión cada ~15 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count47
latest_release_tagv0.0.47
releases_from_tags
days_since_latest_release1838
mean_days_between_releases15
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

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 — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
0/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
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?

46En riesgo · 24% del índice global
Cómo se puntúa
25.2/54Factor bus — la mitad de los commits recae en 2 contribuyente(s)
13.1/22.5Distribución de commits — el principal contribuyente firma el 42% de los commits
13.5/13.5Amplitud de contribuyentes — 17 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 9 contributing companies or organizations
Datos de entrada utilizados
bus_factor2
contributors_sampled17
top_contributor_share0,419
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
22.1/25Alcance del propietario — 1179 seguidores de prusnak
25/25Trayectoria — 132 repos públicos, cuenta de ~17 años
Datos de entrada utilizados
followers1179
owner_typeUser
is_verified
owner_loginprusnak
public_repos132
account_age_days6420
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

38En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_configno
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

50Moderado
Cómo se puntúa
0/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://nixbitcoin.org
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttps://nixbitcoin.org
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?

30En 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 9 contributing companies or organizations
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — 0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate3
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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.

49En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 81 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,81
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — pkgs/netns-exec/src/Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
0/11Verificación estática de tipos
10/10Entorno reproducible — Nix
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nix
has_tests
lockfiles
has_dockerfileno
typed_languageno
bootstrap_filespkgs/netns-exec/src/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
0/45Código verificable por tipos — Nix sin configuración de verificación de tipos
55/55Tamaños de archivo manejables — 0/2 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageNix
largest_source_bytes13.913
source_files_sampled2
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

1estrellas de GitHub
17contribuidores
0commits en los últimos 12 meses
1304días desde el último push
47versiones publicadas
2factor bus
0issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Community profile unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.0 / 10
3.0agregado

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-22 19:23 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 9 contributing companies or organizations
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintained0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
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": [],
      "is_fork": true,
      "size_kb": 3299,
      "has_wiki": true,
      "homepage": "https://nixbitcoin.org",
      "languages": {
        "C": 1776,
        "Nix": 264578,
        "Shell": 25133,
        "Python": 13913,
        "Makefile": 39
      },
      "pushed_at": "2022-12-26T19:06:02Z",
      "created_at": "2021-07-16T12:59:45Z",
      "owner_type": "User",
      "updated_at": "2022-10-09T09:23:33Z",
      "description": "A collection of Nix packages and NixOS modules for easily installing full-featured Bitcoin nodes with an emphasis on security.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "Nix",
      "significant_languages": [
        "Nix"
      ]
    },
    "owner": {
      "blog": "https://rusnak.io",
      "name": "Pavol Rusnak",
      "type": "User",
      "login": "prusnak",
      "company": "Co-Founder @SatoshiLabs",
      "location": "₿ pavol@rusnak.io",
      "followers": 1179,
      "avatar_url": "https://avatars.githubusercontent.com/u/42201?v=4",
      "created_at": "2008-12-23T00:19:12Z",
      "is_verified": null,
      "public_repos": 132,
      "account_age_days": 6420
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.0.47",
          "kind": "patch",
          "published_at": "2021-07-09T21:44:47Z"
        },
        {
          "tag": "v0.0.46",
          "kind": "patch",
          "published_at": "2021-05-05T21:53:48Z"
        },
        {
          "tag": "v0.0.45",
          "kind": "patch",
          "published_at": "2021-05-04T12:14:18Z"
        },
        {
          "tag": "v0.0.44",
          "kind": "patch",
          "published_at": "2021-04-20T12:17:30Z"
        },
        {
          "tag": "v0.0.43",
          "kind": "patch",
          "published_at": "2021-04-10T13:21:14Z"
        },
        {
          "tag": "v0.0.42",
          "kind": "patch",
          "published_at": "2021-04-02T13:00:31Z"
        },
        {
          "tag": "v0.0.41",
          "kind": "patch",
          "published_at": "2021-03-15T19:03:47Z"
        },
        {
          "tag": "v0.0.40",
          "kind": "patch",
          "published_at": "2021-03-10T21:24:12Z"
        },
        {
          "tag": "v0.0.39",
          "kind": "patch",
          "published_at": "2021-03-01T21:52:20Z"
        },
        {
          "tag": "v0.0.38",
          "kind": "patch",
          "published_at": "2021-02-25T08:03:24Z"
        },
        {
          "tag": "v0.0.37",
          "kind": "patch",
          "published_at": "2021-02-17T19:08:06Z"
        },
        {
          "tag": "v0.0.36",
          "kind": "patch",
          "published_at": "2021-02-14T19:48:09Z"
        },
        {
          "tag": "v0.0.35",
          "kind": "patch",
          "published_at": "2021-02-11T21:28:59Z"
        },
        {
          "tag": "v0.0.34",
          "kind": "patch",
          "published_at": "2021-02-03T09:12:47Z"
        },
        {
          "tag": "v0.0.33",
          "kind": "patch",
          "published_at": "2021-02-01T12:19:37Z"
        },
        {
          "tag": "v0.0.32",
          "kind": "patch",
          "published_at": "2021-01-27T16:17:11Z"
        },
        {
          "tag": "v0.0.31",
          "kind": "patch",
          "published_at": "2021-01-17T20:00:13Z"
        },
        {
          "tag": "v0.0.30",
          "kind": "patch",
          "published_at": "2021-01-14T20:42:23Z"
        },
        {
          "tag": "v0.0.29",
          "kind": "patch",
          "published_at": "2021-01-10T23:11:08Z"
        },
        {
          "tag": "v0.0.28",
          "kind": "patch",
          "published_at": "2020-12-30T19:18:56Z"
        },
        {
          "tag": "v0.0.27",
          "kind": "patch",
          "published_at": "2020-12-22T21:32:09Z"
        },
        {
          "tag": "v0.0.26",
          "kind": "patch",
          "published_at": "2020-12-21T12:24:14Z"
        },
        {
          "tag": "v0.0.25",
          "kind": "patch",
          "published_at": "2020-12-07T16:35:48Z"
        },
        {
          "tag": "v0.0.24",
          "kind": "patch",
          "published_at": "2020-12-01T20:43:27Z"
        },
        {
          "tag": "v0.0.23",
          "kind": "patch",
          "published_at": "2020-11-22T20:06:22Z"
        },
        {
          "tag": "v0.0.22",
          "kind": "patch",
          "published_at": "2020-11-09T07:12:43Z"
        },
        {
          "tag": "v0.0.21",
          "kind": "patch",
          "published_at": "2020-11-06T12:17:18Z"
        },
        {
          "tag": "v0.0.20",
          "kind": "patch",
          "published_at": "2020-10-24T15:03:07Z"
        },
        {
          "tag": "v0.0.19",
          "kind": "patch",
          "published_at": "2020-10-20T11:18:43Z"
        },
        {
          "tag": "v0.0.18",
          "kind": "patch",
          "published_at": "2020-09-29T17:53:09Z"
        },
        {
          "tag": "v0.0.17",
          "kind": "patch",
          "published_at": "2020-09-22T17:37:56Z"
        },
        {
          "tag": "v0.0.16",
          "kind": "patch",
          "published_at": "2020-09-22T17:16:08Z"
        },
        {
          "tag": "v0.0.15",
          "kind": "patch",
          "published_at": "2020-09-15T14:00:38Z"
        },
        {
          "tag": "v0.0.14",
          "kind": "patch",
          "published_at": "2020-09-08T15:44:25Z"
        },
        {
          "tag": "v0.0.13",
          "kind": "patch",
          "published_at": "2020-08-26T09:52:47Z"
        },
        {
          "tag": "v0.0.12",
          "kind": "patch",
          "published_at": "2020-08-04T15:38:44Z"
        },
        {
          "tag": "v0.0.11",
          "kind": "patch",
          "published_at": "2020-07-28T20:02:12Z"
        },
        {
          "tag": "v0.0.10",
          "kind": "patch",
          "published_at": "2020-07-21T15:04:22Z"
        },
        {
          "tag": "v0.0.9",
          "kind": "patch",
          "published_at": "2020-07-19T19:27:11Z"
        },
        {
          "tag": "v0.0.8",
          "kind": "patch",
          "published_at": "2020-07-08T12:16:55Z"
        },
        {
          "tag": "v0.0.7",
          "kind": "patch",
          "published_at": "2020-05-26T11:17:50Z"
        },
        {
          "tag": "v0.0.6",
          "kind": "patch",
          "published_at": "2020-05-15T16:20:25Z"
        },
        {
          "tag": "v0.0.5",
          "kind": "patch",
          "published_at": "2020-05-06T14:01:21Z"
        },
        {
          "tag": "v0.0.4",
          "kind": "patch",
          "published_at": "2020-05-04T14:59:32Z"
        },
        {
          "tag": "v0.0.3",
          "kind": "patch",
          "published_at": "2020-04-12T14:49:04Z"
        },
        {
          "tag": "v0.0.2",
          "kind": "patch",
          "published_at": "2020-04-08T18:48:06Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2020-04-08T15:03:08Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "676a4beb812324610f33c884853b4057fba2cbf8",
          "body": "b666bb290307f7a594b3c04a7e3c9afa2ed19939 charge-lnd: add module (Martin Milata)\n\nPull request description:\n\nACKs for top commit:\n  nixbitcoin:\n    ACK b666bb290307f7a594b3c04a7e3c9afa2ed19939\n\nTree-SHA512: c5e1edeefbd68ec4ba0e12c57922fb21ae3d1b3d54e403087e5bb7f6285db0a011404125c516bd7739741609d21fef6e7d86ad613c364aca6010652118faffff",
          "is_bot": false,
          "headline": "Merge fort-nix/nix-bitcoin#359: charge-lnd: add module",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-15T22:15:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b666bb290307f7a594b3c04a7e3c9afa2ed19939",
          "body": null,
          "is_bot": false,
          "headline": "charge-lnd: add module",
          "author_name": "Martin Milata",
          "author_login": "mmilata",
          "committed_at": "2021-07-12T15:36:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "833eb4d1321673715054b23f1e01039b7c3b38e1",
          "body": "…ace local versions with nixpkgs\n\nffbbdab999ac207ee6f6a24496c44224904f14ed lightning-loop & lightning-pool: replace local versions with nixpkgs (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  jonasnick:\n    ACK ffbbdab999ac207ee6f6a24496c44224904f14ed\n\nTree-SHA512: 9bb2d3c45c6982e0b4dbf73daac400b98642b6c240508d53876078677ab6e7ce497e67829db035975fcc0243fd2285b4e3324637bf0d4dbf05dedda9f9dfe24e",
          "is_bot": false,
          "headline": "Merge fort-nix/nix-bitcoin#367: lightning-loop & lightning-pool: repl…",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-12T13:01:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffbbdab999ac207ee6f6a24496c44224904f14ed",
          "body": null,
          "is_bot": false,
          "headline": "lightning-loop & lightning-pool: replace local versions with nixpkgs",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-07-12T11:20:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "842ed442928fc8e7fde85656789e20ef4ef7e5db",
          "body": "ce10003747c77e8f075359fe82ca6d0a435ff90c lnd: allow curl to retry in the create-wallet script (Jonas Nick)\na23b9d1c2d6db6179ccf35abbcdde7603e776f14 lnd: check that state is RPC_ACTIVE after unlocking (Jonas Nick)\nc75347027b1c814deb82c110758cf95df664b8a5 lnd: don't wait until the RPC port is open aft\n[…]\nbitcoin:\n    ACK ce10003747c77e8f075359fe82ca6d0a435ff90c\n\nTree-SHA512: 658d74caec7849ff173ce58c7807d5342f39ff159bc40e617e9f28de7696b91e2801f920b183deefea141f9de2db9a9423ce13d31e6b96ff991ab07032522b55",
          "is_bot": false,
          "headline": "Merge fort-nix/nix-bitcoin#366: Update nixpkgs",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-09T21:44:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce10003747c77e8f075359fe82ca6d0a435ff90c",
          "body": null,
          "is_bot": false,
          "headline": "lnd: allow curl to retry in the create-wallet script",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-08T13:10:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c9b1a65c2a7e87a181e407c480f57086aaa5ffc",
          "body": "c0a0d03006aa5ca0069e965924b7e4e5c2d9b869 elementsd: 0.18.1.11 -> 0.18.1.12 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK c0a0d03006aa5ca0069e965924b7e4e5c2d9b869\n\nTree-SHA512: a87f39f26ce0c15379248fdba99d287545f1db3cbaa76a75e3c4943b7b3a975a6f0d5e8f60bb0e8c197054b815160207f3d55441de83dd6ec5daa0b5a66701ba",
          "is_bot": false,
          "headline": "Merge fort-nix/nix-bitcoin#365: elementsd: 0.18.1.11 -> 0.18.1.12",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-07T13:43:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a23b9d1c2d6db6179ccf35abbcdde7603e776f14",
          "body": "The state service is newly introduced in lnd 0.13.0.",
          "is_bot": false,
          "headline": "lnd: check that state is RPC_ACTIVE after unlocking",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-07T13:15:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c75347027b1c814deb82c110758cf95df664b8a5",
          "body": "According to the release notes of lnd 0.13.0 [0] the RPC service is available at\nall times.\n\n[0] https://github.com/lightningnetwork/lnd/releases/tag/v0.13.0-beta",
          "is_bot": false,
          "headline": "lnd: don't wait until the RPC port is open after unlocking",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-07T13:12:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc9199a3864eb963a795b9b4b05ece870e044734",
          "body": null,
          "is_bot": false,
          "headline": "Update nixpkgs",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-07-07T13:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0a0d03006aa5ca0069e965924b7e4e5c2d9b869",
          "body": null,
          "is_bot": false,
          "headline": "elementsd: 0.18.1.11 -> 0.18.1.12",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-07-07T10:40:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fbba87c0fb3f2126e39bac6d2e569f5876d0136",
          "body": "nixos-unstable:\na76f6b02852a724059a7b7cfe73ac5b7a2a81831 lnd: 0.12.1-beta -> 0.13.0-beta\ne2dc2b859674411f5ed5b81781926afc7fde5260 btcpayserver: 1.0.7.2 -> 1.1.1\n074b608d01e60fbef9bffe0ac7e25e72d20f4866 nbxplorer: 2.1.49 -> 2.1.51\n60c6153ab12229fa3d067460614131da5e67f6da btcpayserver/update.sh: auto-\n[…]\nrces\nc0693eae1e9cb28ad148ebb49f8200d340432079 hwi: 2.0.1 -> 2.0.2\n43031a05d2e2b08ed5f98b3f5255e7d76ef4e403 charge-lnd: init at 0.1.2\n5fd4f796b4210d691b1f89e1f29043d635cd20e0 charge-lnd: 0.1.2 -> 0.1.3",
          "is_bot": false,
          "headline": "Update nixpkgs",
          "author_name": "Martin Milata",
          "author_login": "mmilata",
          "committed_at": "2021-06-20T21:28:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf039511d872c24c83610386fe77b17813c89104",
          "body": "…ode to libera\n\n4565258f96acef96f932924410913028f393c284 README: switch IRC network from freenode to libera (Jonas Nick)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK 4565258f96acef96f932924410913028f393c284\n\nTree-SHA512: 06c81813a565f797715d244c48c003abd9e0dd519305cbaae613fb0a38735df80591c122e6d22aa8d6be199a641bbe442462a16724d1f1ba2609c7da1783607b",
          "is_bot": false,
          "headline": "Merge fort-nix/nix-bitcoin#361: README: switch IRC network from freen…",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-06-14T11:53:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4565258f96acef96f932924410913028f393c284",
          "body": null,
          "is_bot": false,
          "headline": "README: switch IRC network from freenode to libera",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-06-13T20:47:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdd00bff6cf45dbcb995cf8aa1224da76ba45e21",
          "body": "e6f2646ea7ec0bbfdbb7501f7fc93579495b0a58 lightning-loop: 0.12.1 -> 0.12.2 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  jonasnick:\n    ACK e6f2646ea7ec0bbfdbb7501f7fc93579495b0a58\n\nTree-SHA512: 64c7a826abd8c3fa4f3bbae338e2971f2155860cd9ebfb1fda43dd59cfb543acb0f726ba84631142fec6d70a26d59fc8e3519c8a863b7a7fc74c3d75dcddb552",
          "is_bot": false,
          "headline": "Merge #358: lightning-loop: 0.12.1 -> 0.12.2",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-05-05T21:53:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c4169404aba6a8f5c628270d2b219856a4833c4",
          "body": "3963d04209fff881a175384761bdf2d12e18d64a clboss: 0.11A -> 0.11B (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  jonasnick:\n    ACK 3963d04209fff881a175384761bdf2d12e18d64a\n\nTree-SHA512: 7d8097c9622de922a2641268f47c106466df3b93464761957714220e59a68195e7b33803fccd2a21ace2c1488150569fd73fb05be40487d7be441d2c22c8db34",
          "is_bot": false,
          "headline": "Merge #357: clboss: 0.11A -> 0.11B",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-05-05T21:53:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6f2646ea7ec0bbfdbb7501f7fc93579495b0a58",
          "body": null,
          "is_bot": false,
          "headline": "lightning-loop: 0.12.1 -> 0.12.2",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-05-05T09:12:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3963d04209fff881a175384761bdf2d12e18d64a",
          "body": null,
          "is_bot": false,
          "headline": "clboss: 0.11A -> 0.11B",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-05-05T09:04:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5adaad39b4f42b20532d1f6519b809a17f03df7",
          "body": "7ae0a387018f3fdd9fc5dc9c13aa2186b46f592e electrs: replace local version with nixpkgs (Erik Arvstedt)\n9588b0af0878d16cc60d58fb1f6359c432ea14c2 update nixpkgs (Jonas Nick)\n\nPull request description:\n\nACKs for top commit:\n  nixbitcoin:\n    ACK 7ae0a387018f3fdd9fc5dc9c13aa2186b46f592e\n  erikarvstedt:\n    ACK 7ae0a387018f3fdd9fc5dc9c13aa2186b46f592e\n\nTree-SHA512: 2e2c944d70c5cd7f8479fc516c6d6b545dac8f7dc6c39b355e13075a9728083456e4300e9c60a9334dc3dc11b9dd305fd102c7475a414b499e468ad378fe217c",
          "is_bot": false,
          "headline": "Merge #356: update nixpkgs",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-05-04T12:14:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ae0a387018f3fdd9fc5dc9c13aa2186b46f592e",
          "body": null,
          "is_bot": false,
          "headline": "electrs: replace local version with nixpkgs",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-05-04T11:31:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9588b0af0878d16cc60d58fb1f6359c432ea14c2",
          "body": "Includes\nbitcoin: 0.21.0 -> 0.21.1",
          "is_bot": false,
          "headline": "update nixpkgs",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-05-03T18:15:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72244921a821a0fa43a2b143504e6e6ac15b885f",
          "body": "a71f69cb3aa6bdd2418b5bd7dbfecaebeca5104f hwi: replace local version with upstream (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  jonasnick:\n    reACK a71f69cb3aa6bdd2418b5bd7dbfecaebeca5104f\n\nTree-SHA512: 4a6b76855ded40af1fb00b51651f89f5356517d2baa3cbbcefae7a65d620c569bc8a82762599b2cc64b176896e010f8530c31e6d61315bc602fec97eeaa3b3bd",
          "is_bot": false,
          "headline": "Merge #355: hwi: replace local version with upstream",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-05-01T20:27:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a71f69cb3aa6bdd2418b5bd7dbfecaebeca5104f",
          "body": null,
          "is_bot": false,
          "headline": "hwi: replace local version with upstream",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-23T11:17:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "757e0cfe22cafd6a8b3e79bf994a7bc270007e7f",
          "body": "e93a861b92e993d6659b872bc239ebb8eb4c3c32 Update nixpkgs (stable only) (Jonas Nick)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK e93a861b92e993d6659b872bc239ebb8eb4c3c32\n\nTree-SHA512: 36220da768cfdad6bb87963184e8521b52fc85a33a1703a1a1b460cd135f16b6f2c37d30929d4b548f19b49724861a6ee2d545f7f6f2877cc8edc6fc99ba8920",
          "is_bot": false,
          "headline": "Merge #354: Update nixpkgs (stable only)",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-20T12:17:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e93a861b92e993d6659b872bc239ebb8eb4c3c32",
          "body": null,
          "is_bot": false,
          "headline": "Update nixpkgs (stable only)",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-19T19:49:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c964559a41740ad49aac9501051da31b666027d3",
          "body": "7914405cede7acd6dab53f3e7965557b6d6c8636 clboss: add option for using custom package (Jonas Nick)\n447606efaf6aeb0525fed0e2d16bf3f9a8897f7a tests: add clboss (Jonas Nick)\n4875314b6fbf731174e079d0c3d69d62584052df clboss: 0.10 -> 0.11A (Jonas Nick)\n\nPull request description:\n\nACKs for top commit:\n  eri\n[…]\nrvstedt:\n    ACK 7914405cede7acd6dab53f3e7965557b6d6c8636\n\nTree-SHA512: ef0918771703eb24c3cae39efcd130d5a55e35d6cefd66fe0506ca6b4c53aef4ebac1dd547f83d0487999d369ded8629505fd0d235ffb393ed52e98c2d5059d0",
          "is_bot": false,
          "headline": "Merge #351: Update CLBOSS, add test, add option for custom pkg",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-13T16:25:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7914405cede7acd6dab53f3e7965557b6d6c8636",
          "body": null,
          "is_bot": false,
          "headline": "clboss: add option for using custom package",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-13T14:12:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "447606efaf6aeb0525fed0e2d16bf3f9a8897f7a",
          "body": null,
          "is_bot": false,
          "headline": "tests: add clboss",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-13T14:12:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4875314b6fbf731174e079d0c3d69d62584052df",
          "body": null,
          "is_bot": false,
          "headline": "clboss: 0.10 -> 0.11A",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-11T12:39:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8594ddfb875cb1aef9ffba14ce91d41aaa8bcea6",
          "body": "daeedda8251d8ad8c0bd75c594460b51df21a15c clightning-plugins: update rev and dependencies (nixbitcoin)\nc5f67629e6b725ac143e752a53a90d21310578d2 joinmarket: add copy of cryptography 3.3.2 (Erik Arvstedt)\nca0c6289d7a394d97a801f111aff75907afedd81 update nixpkgs-unstable (nixbitcoin)\n\nPull request descri\n[…]\nrvstedt:\n    ACK daeedda8251d8ad8c0bd75c594460b51df21a15c\n\nTree-SHA512: 5fc79e50b68fa4c584a2e861a5bf07298595ac6f2eb0e6e9d9351440e51dca4d33a6c09e417e624791153f160cdbeba014ef0ee6b9d6ea28f0b46f64a9c46396",
          "is_bot": false,
          "headline": "Merge #350: Update nixos unstable",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-10T13:21:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "daeedda8251d8ad8c0bd75c594460b51df21a15c",
          "body": null,
          "is_bot": false,
          "headline": "clightning-plugins: update rev and dependencies",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-09T14:10:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5f67629e6b725ac143e752a53a90d21310578d2",
          "body": null,
          "is_bot": false,
          "headline": "joinmarket: add copy of cryptography 3.3.2",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-04-07T17:05:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca0c6289d7a394d97a801f111aff75907afedd81",
          "body": "btcpayserver: 1.0.7.0 -> 1.0.7.2\nclightning: 0.9.3 -> 0.10.0",
          "is_bot": false,
          "headline": "update nixpkgs-unstable",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-07T10:02:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca71eb01d2cf8e9a135567e68abff7065919d667",
          "body": "9bb2c02978a8a738acd8ffbd3f9037ec659fbc76 elementsd: 0.18.1.9 -> 0.18.1.11 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  jonasnick:\n    ACK 9bb2c02978a8a738acd8ffbd3f9037ec659fbc76\n\nTree-SHA512: c9ab3588eee0fd19ca23ebcf50b70547614ad6a67958e23cf5b1779c795505166b168a45cc8d6a8e2863aa4ded1cc81d795d495cd551e557592d052ecccf16d6",
          "is_bot": false,
          "headline": "Merge #349: elementsd: 0.18.1.9 -> 0.18.1.11",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-02T13:00:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e7d9ee4751aa77bea71be3a4186672d2c67fccf",
          "body": "3cce822c6470f7488a607290ef5d82d47115fe61 run-tests: add 'vm' command (Erik Arvstedt)\n\nPull request description:\n\nACKs for top commit:\n  nixbitcoin:\n    ACK 3cce822c6470f7488a607290ef5d82d47115fe61\n\nTree-SHA512: 1b7cdc0bc3b73634fdc6abd6817417fd49853be076cf71cc54487e5db9e97e67832eef5ecbb8e899e30a91a60ff333e022e51cc664df7364417240f05096eb16",
          "is_bot": false,
          "headline": "Merge #348: run-tests: add 'vm' command",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-02T12:57:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a531f5cf7ab8c959fc7aa8c827e1530516ac547",
          "body": "1ff5f8f01b52ead9b86e794e7a1c9e8de3f3e40f hardening: use generic hostname by default (nixbitcoin)\nd56a363d3da2deacf4d264af83ced4050b8643a5 services: improve default hardening (nixbitcoin)\n3b938a909f2e493f2920f1720d35f812bba0bd56 add hardened-extended preset (nixbitcoin)\n\nPull request description:\n\nAC\n[…]\nrvstedt:\n    ACK 1ff5f8f01b52ead9b86e794e7a1c9e8de3f3e40f\n\nTree-SHA512: 4355dc4b1dab33c363e8133fe7dd909db74e4ab5c58a3d0f2d9628f2877acdaf1ac63164bcc5d68cf682ba81e5cf36c3fdbaffa74310a9454637647c5531ce3e",
          "is_bot": false,
          "headline": "Merge #307: Madaidan hardening",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-04-02T12:55:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9bb2c02978a8a738acd8ffbd3f9037ec659fbc76",
          "body": null,
          "is_bot": false,
          "headline": "elementsd: 0.18.1.9 -> 0.18.1.11",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-02T11:03:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ff5f8f01b52ead9b86e794e7a1c9e8de3f3e40f",
          "body": "Minimize identifying information",
          "is_bot": false,
          "headline": "hardening: use generic hostname by default",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-02T10:59:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d56a363d3da2deacf4d264af83ced4050b8643a5",
          "body": null,
          "is_bot": false,
          "headline": "services: improve default hardening",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-02T10:59:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b938a909f2e493f2920f1720d35f812bba0bd56",
          "body": null,
          "is_bot": false,
          "headline": "add hardened-extended preset",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-04-02T10:59:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a2bc280e08f9293736980b8752fdcda6a0866cc",
          "body": "cde9597fc44a89f1c58134dbeb9b7783d625d52c lightning-loop: 0.12.0 -> 0.12.1 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK cde9597fc44a89f1c58134dbeb9b7783d625d52c\n\nTree-SHA512: 30c0eb34c5b7a8a9f592bc4d5b52cbc983efa9c9be08cc3cf0c117a7d67ce251ba0a1e87495eeea010642dae2259821ebbd42fde9880a0212ef1e7dac04e2d25",
          "is_bot": false,
          "headline": "Merge #347: lightning-loop: 0.12.0 -> 0.12.1",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-28T18:07:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cce822c6470f7488a607290ef5d82d47115fe61",
          "body": null,
          "is_bot": false,
          "headline": "run-tests: add 'vm' command",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-26T22:23:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cde9597fc44a89f1c58134dbeb9b7783d625d52c",
          "body": null,
          "is_bot": false,
          "headline": "lightning-loop: 0.12.0 -> 0.12.1",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-03-26T09:31:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea1706e49f745698890c0b489c926f0c4bd2fe9",
          "body": "d5c53e1510e6c4e8ba6cc136fc99d976d6e2b4ac electrs: 0.8.8 -> 0.8.9 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK d5c53e1510e6c4e8ba6cc136fc99d976d6e2b4ac\n\nTree-SHA512: f57bd85e2c9ca592774d1e5aaa13042cdf6f3887715e99ed6a0aa9a4d5f5e3c9b32200c616ba2a51b7d50ab414297ea79cca0a0be5002c3cf1b1c92023a6e9c5",
          "is_bot": false,
          "headline": "Merge #345: electrs: 0.8.8 -> 0.8.9",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-22T19:58:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ae2c8a6d2d00cd994467d52d8d4b6f0b51eb53d",
          "body": "4cddf284e96adf8e2e70e228df55ff1efd9d9649 treewide: remove use of deprecated `stdenv.lib` (Erik Arvstedt)\n6ba5880b2c5d34d050a64793965dba14b5db004f test.py: improve composability of test 'banlist-and-restart' (Erik Arvstedt)\n44439e2a81d9366708bee92f1cf15ad22a5da0b6 tests: optimize building multiple te\n[…]\nbitcoin:\n    ACK 4cddf284e96adf8e2e70e228df55ff1efd9d9649\n\nTree-SHA512: 5f863a406a56b4b916ea662c411dce6884a7633a49e862015ddf68c20e772a14108095782753c2e33061d8d19cbf9053239f98644cb12fd883ef79e68d8a977b",
          "is_bot": false,
          "headline": "Merge #339: Misc improvements",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-22T15:52:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4cddf284e96adf8e2e70e228df55ff1efd9d9649",
          "body": null,
          "is_bot": false,
          "headline": "treewide: remove use of deprecated `stdenv.lib`",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-22T13:39:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ba5880b2c5d34d050a64793965dba14b5db004f",
          "body": "The test now works if not all services previously used in the\n`systemctl restart` command are available.",
          "is_bot": false,
          "headline": "test.py: improve composability of test 'banlist-and-restart'",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-22T13:39:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44439e2a81d9366708bee92f1cf15ad22a5da0b6",
          "body": "The result of `import tests.nix {}` is now an attrset of tests.\nThis makes it easier and more efficient to evaluate or build multiple\ntests in one call to `nix build`.\n\nSimplify tests.nix by removing the large module args scope in favor of\nself-contained scenario module definitions.\n\nAdd CPU core an\n[…]\nt `run-tests.sh`.\n\nAdd the following top-level args to tests.nix:\n- `extraScenarios` to provide a nix-level way to define extra scenarios.\n- `pkgs` to allow building tests with custom pkgs or systems.",
          "is_bot": false,
          "headline": "tests: optimize building multiple tests at once",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-22T13:35:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ca52af523eba8e58f38bf5ae02b515fe17fae82",
          "body": "1. fixedTest: Remove some unneeded layers of function calls.\n\n2. Don't add a modified version of `black` to the global pkgs set.\n   Tests should not affect the pkgs of the tested system modules.\n   Fix the driver build script instead by adding an extra arg to the\n   call to `black`.",
          "is_bot": false,
          "headline": "tests: improve make-test-vm.nix",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-22T13:35:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08fe9ba84ae6b1394679194aa0a98996823cf32a",
          "body": "Due to a possible NixOS bug, this commit has no effect on NixOS 20.09\nwhere `RestrictAddressFamilies` is a no-op.\nIt's only relevant for NixOS unstable with cgroups v2.\n\nbitcoind+zmq: instead of allowing all address families, only add the required\nAF_NETLINK family.\n\nlnd: lnd only runs a zmq client, not a server, therefore it requires\nno additional address families.\n\nlightning-pool, clightning-plugin-zmq: add AF_NETLINK.",
          "is_bot": false,
          "headline": "services: add finer-grained address family restrictions",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-22T13:35:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "020433cec6c333830439a533c2ed09ea7f01df93",
          "body": "Also use 'allowLocalIPAddresses' instead of 'allowTor' in bitcoind-import-banlist\nwhich doesn't use Tor.",
          "is_bot": false,
          "headline": "services: add helper fn setAllowedIPAddresses",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-22T12:20:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5c53e1510e6c4e8ba6cc136fc99d976d6e2b4ac",
          "body": null,
          "is_bot": false,
          "headline": "electrs: 0.8.8 -> 0.8.9",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-03-22T11:54:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdf27d9d0cf624832a904e312b533164969bd73d",
          "body": "- Improve readability by using minutes\n- set `TimeoutStopSec` like in bitcoin/contrib/init/bitcoind.service.\n  Stopping bitcoind can exceed the default timeout during IBD.",
          "is_bot": false,
          "headline": "bitcoind: improve service timeouts",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09cd3ce5e41648e526b442bf6fb84e0b46b9cf19",
          "body": null,
          "is_bot": false,
          "headline": "lnd: show curl error messages",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d214605b3239f81a7585fc4979f134530d0ad050",
          "body": "Pure flakes can't use NIX_PATH.",
          "is_bot": false,
          "headline": "spark-wallet: add flakes compatibility",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81db927f6638eb0b77e8272764dc822bba7bfb0d",
          "body": "This file is empty and has no effect.",
          "is_bot": false,
          "headline": "spark-wallet/generate: remove supplement.json",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84b3217c3d8dfbba8264d164733371674d2895d7",
          "body": "This script is potentially fetched from an untrusted source and should\nbe in good shape to be easily auditable.\n\n- Create just one TMPDIR\n- Improve comments\n- Use `cut` to extract sha256\n- Use camelCase var names like in other scripts",
          "is_bot": false,
          "headline": "fetch-release: minor improvements",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45d0964e27c754f6007347e5ff46c00d15bf9e4a",
          "body": "- Use idiomatic var name `pkgs` for the imported nixpkgs.\n- Don't add `figlet` to PATH because it's only used internally.\n- Only print figlet in interactive shells to avoid interfering with\n  stdout when running `nix-shell --run <cmd>`.\n- Define `fetch-release` as a function to enable running it via\n  `nix-shell --run fetch-release`",
          "is_bot": false,
          "headline": "examples/shell.nix: minor improvements",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc7149eb785b98014032a816de25da4fc072a7dd",
          "body": "- The scripts now work within arbitrary nix-shells.\n  Previously, they failed when run from nix shells other than\n  `examples/shell.nix`.\n\n- The scripts now work from arbitrary working dirs.",
          "is_bot": false,
          "headline": "examples: improve robustness of deploy scripts",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-16T11:46:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4022f86b92da53dd929134b016ccf196f137dd3b",
          "body": "…od; replace with krops\n\n520a983862728320ca6fec3677e5fcbf57d05217 docs: nixops-krops migration guide (nixbitcoin)\n7c0b521785377e2e68fca3dc9ab1f7c84af93ded docs: describe deploying with krops in installation tutorial (Jonas Nick)\neb6dff54788b7fc77998f124c2ba3e8cc4012c9f docs: various improvements to \n[…]\nrvstedt:\n    ACK 520a983862728320ca6fec3677e5fcbf57d05217\n\nTree-SHA512: 380fcda3528e703e8a218f92a216befbee6cc279952388b2df48c1bcb803b72336bbe6e4deed87f3f26caba7a5cb5ab60c2bcabf2b13eba56f34c47eb02e128a",
          "is_bot": false,
          "headline": "Merge #296: Remove nixops examples and as recommended deployment meth…",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-15T19:03:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "520a983862728320ca6fec3677e5fcbf57d05217",
          "body": null,
          "is_bot": false,
          "headline": "docs: nixops-krops migration guide",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-03-15T18:02:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c0b521785377e2e68fca3dc9ab1f7c84af93ded",
          "body": null,
          "is_bot": false,
          "headline": "docs: describe deploying with krops in installation tutorial",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-15T18:02:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb6dff54788b7fc77998f124c2ba3e8cc4012c9f",
          "body": "- Update nixos iso\n- Make sure to be root before parting and give instructions for checking\n  UEFI vs. legacy\n- Instead of making user replace automatically generated nixos config,\n  explain how to add options.\n- Add boot.loader options directly to hardware-configuration.nix\n- Copy .gitignore when setting up a deployment dir\n- Stress that the first config that is deployed remotely must include ssh key.\n- Debian: 9 Strech -> Debian 10 Buster\n- nix: 2.3.3 -> 2.3.10",
          "is_bot": false,
          "headline": "docs: various improvements to installation tutorial",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-15T18:02:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8b47f099c9a149b85300f30d41455c41fc1b4e8",
          "body": null,
          "is_bot": false,
          "headline": "examples: add deploy-krops.sh",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T18:02:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe118b28ffa3c65b45a8cbbe6f637b8f465fe65d",
          "body": null,
          "is_bot": false,
          "headline": "examples: add krops deployment method",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-15T17:53:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e017675d5e961d622314663e711ae752bac222a2",
          "body": null,
          "is_bot": false,
          "headline": "krops: add package",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-15T17:53:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03db1a61b1121954460300aeb3651c09b052169b",
          "body": "Keeping the secrets dir read-only is more simple and robust.\n\n- lnd seed mnemonic creation and joinmarket wallet creation can be\n  run as the regular service user instead of root.\n\n- It is easier to switch to a third-party secrets deployment\n  method in the future.\n\nDon't create a seed mnemonic for lnd when a wallet exists.\nThis avoids creating unused mnemonics and helps simplifying\nthe migration command in `versioning.nix`.",
          "is_bot": false,
          "headline": "lnd, joinmarket: don't write to secrets dir",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T17:50:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55d87490ec330b2fe78b4cc9275db287990f59fc",
          "body": "- Fail at evaluation when secrets setup is not configured.\n  Previously, bitcoind failed at runtime due to the missing secrets target.\n\n- Fail at evaluation when conflicting secrets setup methods are used.\n  This happens when `secretsSetupMethod` has more than one definition.",
          "is_bot": false,
          "headline": "secrets: make configuration more robust",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0c223e71676c26a76aaf6704f347e8089a8d68d",
          "body": "With krops or nixops the secrets target is always restarted during\nthe deployment process.\nThis previously caused unnecessary restarts of all nix-bitcoin services.",
          "is_bot": false,
          "headline": "secrets: don't stop services when the secrets target stops",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b701cb5603c5f996c8c202c679820180ad7f28e9",
          "body": "Move this feature from a module preset to a regular option, so that it's\neasily discoverable and accessible.\n\nSimplify the implementation of `generateSecrets` by adding it to the\nexisting `setup-secrets` service script.\n\nAlso rename option setup-secrets -> setupSecrets.",
          "is_bot": false,
          "headline": "secrets: add option 'generateSecrets'",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03515a8da600cbe56ba9d4c3c9b33a2cca45ef08",
          "body": "- Hardening is irrelevant in examples\n- The decreased performance is especially noticeable in VMs",
          "is_bot": false,
          "headline": "examples/qemu: disable hardened preset",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "908af3bfb8f4dc90bc2168345c60d8a0e15bfbf3",
          "body": "This improves the user experience on VM startup, which can take a few\nseconds.",
          "is_bot": false,
          "headline": "examples/deploy-qemu-vm: show progress when waiting",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccba86a0f0d07f0c82fba363c5314304ad076a5c",
          "body": "Needed by commit: \"examples: add deploy-krops.sh\"",
          "is_bot": false,
          "headline": "examples: extract common features for running QEMU VMs",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb3d5446c8f16e5008e18adc5ab7e5fbb4de0d3b",
          "body": "This ensures that the examples files from the current example dir are used.\nPreviously, the default examples from the nix-bitcoin source were used.",
          "is_bot": false,
          "headline": "examples: use relative paths to example files",
          "author_name": "Erik Arvstedt",
          "author_login": "erikarvstedt",
          "committed_at": "2021-03-15T12:42:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4dabc73900cef226bac8a33d567a0dc6f415b85",
          "body": null,
          "is_bot": false,
          "headline": "Remove nixops examples and documentation",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-15T12:42:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b07185915a73e53ebaaf242b4a2d94ed9ba8cd0e",
          "body": "f1064761d75fa34a6b04de40a0bf7aa6a7d3f78f nixops: remove libvirtd plugin (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  jonasnick:\n    ACK f1064761d75fa34a6b04de40a0bf7aa6a7d3f78f\n  erikarvstedt:\n    ACK f1064761d75fa34a6b04de40a0bf7aa6a7d3f78f\n\nTree-SHA512: 66c8fc20c2f210d5d37025cc1772330354a6a8ecbdb1fb9e8fcd1391030485c936ab28647f739bd90b083d627602ade39a5575114d69db8e8d1375989d5cdd0e",
          "is_bot": false,
          "headline": "Merge #331: nixops: remove libvirtd plugin",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-14T14:42:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1377cf5147a21e57ff57fc79daa0cc565a73b449",
          "body": "5ead2a707555d922e0251b2f102dd6df0dab6095 joinmarket: 0.8.1 -> 0.8.2 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK 5ead2a707555d922e0251b2f102dd6df0dab6095\n\nTree-SHA512: 2ac87f74a1008c058adef81d11049d985a64f435d75ef61584e8debdcc985f78c1d43430c09ee71c247a93908a5ba3a1efdcf91b0666a84b3269509a99685343",
          "is_bot": false,
          "headline": "Merge #337: joinmarket: 0.8.1 -> 0.8.2",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-10T21:24:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ead2a707555d922e0251b2f102dd6df0dab6095",
          "body": "- add SNICKER to default config\n- update package\n- ob-watcher: copy vendorized js and css dependencies\n- add missing dependency to jmbase\n- use cryptography from pinned.nixpkgs-unstable",
          "is_bot": false,
          "headline": "joinmarket: 0.8.1 -> 0.8.2",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-03-10T13:33:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24b0824f4e427f130efa600a76a405e2b49374ce",
          "body": "6c9c820862516a69ec387a52443f60a279d929f6 lightning-loop: 0.11.3-beta -> 0.12.0-beta (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK 6c9c820862516a69ec387a52443f60a279d929f6\n\nTree-SHA512: bd425e415c8a4aba370ad5bec48572d27f2d5c063b3eb88f60027acb9294fb1ddda9f5276e4930cf01342089e4fa2b7692f1b1cd6e25581879e8226fa1d74c48",
          "is_bot": false,
          "headline": "Merge #335: lightning-loop: 0.11.3-beta -> 0.12.0-beta",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-08T07:30:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c9c820862516a69ec387a52443f60a279d929f6",
          "body": null,
          "is_bot": false,
          "headline": "lightning-loop: 0.11.3-beta -> 0.12.0-beta",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-03-07T18:28:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "820de2e4c97964e5ee9f8e4db02231e9aa4b9956",
          "body": "eb210127455ae7de45169237ee8b8eb53585c20b pool: add pkg, module & tests (kon)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK eb210127455ae7de45169237ee8b8eb53585c20b\n  nixbitcoin:\n    ACK eb210127455ae7de45169237ee8b8eb53585c20b\n\nTree-SHA512: 0083b5f7bcc803c475cce3414923f43df0b80d6b85aaa54d6b5da637f2aaa7ea6e7525a5eff41be49921bed0214972e356c79b6e4086468c13716c925ec6f8b0",
          "is_bot": false,
          "headline": "Merge #313: Lightning pool",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-03-01T21:52:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb210127455ae7de45169237ee8b8eb53585c20b",
          "body": null,
          "is_bot": false,
          "headline": "pool: add pkg, module & tests",
          "author_name": "kon",
          "author_login": "sputn1ck",
          "committed_at": "2021-03-01T09:59:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f214a703a5498050c73910f81a994c816aefcfd9",
          "body": "32acaa5f48c3bbef013aa905d2d66a682c5325e7 update nixpkgs-unstable (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK 32acaa5f48c3bbef013aa905d2d66a682c5325e7\n  jonasnick:\n    ACK 32acaa5f48c3bbef013aa905d2d66a682c5325e7\n\nTree-SHA512: b688c81da82ef5166fc8074471187f72188b3fb5dc455a9b24c5e3497e3406898185acd2e551356af3300578b2b98eeabf22edcbb7614f02f6ca34afa05b05b0",
          "is_bot": false,
          "headline": "Merge #332: update nixpkgs-unstable",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-25T08:03:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f66b2d569b67683081401fe95b091495911fd750",
          "body": "eaa58505a745228868e8521304cacec1ae4b9654 electrs: v0.8.7 -> v0.8.8 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK eaa58505a745228868e8521304cacec1ae4b9654\n\nTree-SHA512: 2de1bc08b4dd4ede38d8b98d58c85eb220003e491a7a16529b5a443576022b7ac067698ef8fa9336ee1af09e3e8db349291403e89ef40167b1ad46b2b0aefd01",
          "is_bot": false,
          "headline": "Merge #333: electrs: v0.8.7 -> v0.8.8",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-24T09:01:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4fda43682c6eff6741a9df00de1b2313037b342",
          "body": "b1c9e13033e72897bd172befeee0ea5db787ca4c bitcoind: secure-node remove assumevalid (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  nixbitcoin:\n    > ACK [b1c9e13](https://github.com/fort-nix/nix-bitcoin/commit/b1c9e13033e72897bd172befeee0ea5db787ca4c)\n  erikarvstedt:\n    ACK b1c9e13033e72897bd172befeee0ea5db787ca4c\n\nTree-SHA512: 85ad81a8f68f9d9a40f5331604c1fdecdfde595cd13d577ede210de178a7892d8c2f47ed9755a029cbcf3f50d2afdf03661bf69e865f19e08b8150d3e4c23468",
          "is_bot": false,
          "headline": "Merge #334: bitcoind: secure-node remove assumevalid",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-24T09:00:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1c9e13033e72897bd172befeee0ea5db787ca4c",
          "body": null,
          "is_bot": false,
          "headline": "bitcoind: secure-node remove assumevalid",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-23T11:04:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32acaa5f48c3bbef013aa905d2d66a682c5325e7",
          "body": "btcpayserver: 1.0.5.9 -> 1.0.6.8\nnbxplorer: 2.1.46 -> 2.1.49",
          "is_bot": false,
          "headline": "update nixpkgs-unstable",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-23T10:57:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaa58505a745228868e8521304cacec1ae4b9654",
          "body": null,
          "is_bot": false,
          "headline": "electrs: v0.8.7 -> v0.8.8",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-23T10:51:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1064761d75fa34a6b04de40a0bf7aa6a7d3f78f",
          "body": "Fix \"Package 'libvirt-5.9.0' is marked as insecure, refusing to\nevaluate.\"",
          "is_bot": false,
          "headline": "nixops: remove libvirtd plugin",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-23T10:36:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e160e17dca31078a99a9e3a89bad65a7c645b045",
          "body": "4e9059dc072f09e3d44c0f2a7a841981062c1f72 bitcoind: rename group bitcoinrpc -> bitcoinrpc-public (nixbitcoin)\n19e401b0283e749e53261eedd5ce8ed604ad9ad5 bitcoind: enable cookie-based authentication (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK 4e9059dc072f09e3d44c0f2a7a841981062c1f72\n\nTree-SHA512: 9795a0fe7fdd84bc3ae94b882b106f7169205e3196ecdfc6dad01c4f2d62380711b6504f221a90f21e8cc34cda2e12df05a245d5c54f9ed7846d74835cac5e19",
          "is_bot": false,
          "headline": "Merge #325: bitcoind: enable cookie-based authentication",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-18T12:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e9059dc072f09e3d44c0f2a7a841981062c1f72",
          "body": "This makes it clear that services with this group can only use\npublic RPC calls.",
          "is_bot": false,
          "headline": "bitcoind: rename group bitcoinrpc -> bitcoinrpc-public",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-18T10:42:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19e401b0283e749e53261eedd5ce8ed604ad9ad5",
          "body": null,
          "is_bot": false,
          "headline": "bitcoind: enable cookie-based authentication",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-18T10:40:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcad04775785d663e2b0a2fb7cbe0a259abbfcc6",
          "body": "ecc601a6d6654f782a9d6b5229ab712e9600b4fe onion-addresses: mirror nix-bitcoin.onionAddresses.access behavior (nixbitcoin)\ne873326bfea093f8dcc54849ea691ecf4e21ce99 modules: use user & group options (nixbitcoin)\nccef870b74cc17c0986c5a09f66ae51ce97f1c34 spark-wallet: add user & group options (nixbitcoin\n[…]\nrvstedt:\n    ACK ecc601a6d6654f782a9d6b5229ab712e9600b4fe\n\nTree-SHA512: 39da5f8e01b98a676af8a073c11df64df487b5c3ab01327a227d16f215826f5bf15ca9ac21b59934edc5e2bbb87e397c53fcbf7130bd10b00f1df359ab3328ba",
          "is_bot": false,
          "headline": "Merge #324: Fix lnd onion",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-17T19:08:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ecc601a6d6654f782a9d6b5229ab712e9600b4fe",
          "body": "This commit fixes an issue with LND, in which if both\nnix-bitcoin.onionServices.lnd.public &\nservices.lnd.restOnionService.enable were enabled, one would try to\ncreate a file named `lnd` and the other would try to create a directory\nnamed `lnd` with a file named `lnd-rest` inside it. This would obiously\ncause an error and fail the LND service.",
          "is_bot": false,
          "headline": "onion-addresses: mirror nix-bitcoin.onionAddresses.access behavior",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-17T11:50:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e873326bfea093f8dcc54849ea691ecf4e21ce99",
          "body": "I've tried my best to locate all uses of hardcoded usernames, but its\nnot guaranteed that all have been found/fixed.",
          "is_bot": false,
          "headline": "modules: use user & group options",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-17T11:50:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccef870b74cc17c0986c5a09f66ae51ce97f1c34",
          "body": null,
          "is_bot": false,
          "headline": "spark-wallet: add user & group options",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-17T11:50:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85a1722545e039547d3f8235919b88b886225963",
          "body": null,
          "is_bot": false,
          "headline": "lnd: add user & group options",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-17T11:49:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eddc48ee62e5b84400f43941dd72de06c874f0f6",
          "body": "8e3feece676226164087666be000314e51ec5f86 run-tests: fix interrupt handling for --copy-src (Erik Arvstedt)\n\nPull request description:\n\nACKs for top commit:\n  nixbitcoin:\n    ACK 8e3feece676226164087666be000314e51ec5f86\n\nTree-SHA512: ec4916facedb1f5988dccd0e80e08fcf1788a8425320676e6c48350aa69f29d302bb102408c52c748ac5a794735c0c00d7a95dbea91d735add40b5690817d272",
          "is_bot": false,
          "headline": "Merge #322: run-tests: Fix interrupt handling for --copy-src",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-14T19:48:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14f81b403aadd0f4d33bb402ec7e9277aaad1030",
          "body": "42f7e9f874efea1f75503ca740efb2311582d457 joinmarket: 0.8.0-a5e8879 -> 0.8.1 (nixbitcoin)\n\nPull request description:\n\nACKs for top commit:\n  erikarvstedt:\n    ACK 42f7e9f874efea1f75503ca740efb2311582d457\n\nTree-SHA512: 92dc19d0147a2a9fdcdaa20a78b7168e503149c1ca4bde084240628f6e09bf59f728232072eabdc8cd14146724e4b5bbf3ee2a668f27154a7169e7a9e53b94c4",
          "is_bot": false,
          "headline": "Merge #319: joinmarket: 0.8.0-a5e8879 -> 0.8.1",
          "author_name": "Jonas Nick",
          "author_login": "jonasnick",
          "committed_at": "2021-02-14T19:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42f7e9f874efea1f75503ca740efb2311582d457",
          "body": "- Update joinmarket package\n- Revert unofficial release settings\n- Move Yield Generator config to configFile\n- Add new config option max_sweep_fee_change",
          "is_bot": false,
          "headline": "joinmarket: 0.8.0-a5e8879 -> 0.8.1",
          "author_name": "nixbitcoin",
          "author_login": "nixbitcoin",
          "committed_at": "2021-02-14T16:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 47,
      "commits_last_year": 0,
      "latest_release_at": "2021-07-09T21:44:47Z",
      "latest_release_tag": "v0.0.47",
      "releases_from_tags": true,
      "days_since_last_push": 1304,
      "active_weeks_last_year": 0,
      "days_since_latest_release": 1838,
      "mean_days_between_releases": 15
    },
    "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": []
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "pkgs/netns-exec/src/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 13913,
      "source_files_sampled": 2,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [],
      "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": [],
      "dependencies": [],
      "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": 2,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "jonasnick",
          "commits": 468,
          "avatar_url": "https://avatars.githubusercontent.com/u/2582071?v=4"
        },
        {
          "type": "User",
          "login": "erikarvstedt",
          "commits": 388,
          "avatar_url": "https://avatars.githubusercontent.com/u/36110478?v=4"
        },
        {
          "type": "User",
          "login": "nixbitcoin",
          "commits": 206,
          "avatar_url": "https://avatars.githubusercontent.com/u/45737139?v=4"
        },
        {
          "type": "User",
          "login": "stefan-mihaila",
          "commits": 15,
          "avatar_url": "https://avatars.githubusercontent.com/u/2217136?v=4"
        },
        {
          "type": "User",
          "login": "clefru",
          "commits": 11,
          "avatar_url": "https://avatars.githubusercontent.com/u/443728?v=4"
        },
        {
          "type": "User",
          "login": "jb55",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/45598?v=4"
        },
        {
          "type": "User",
          "login": "ldub",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/3114081?v=4"
        },
        {
          "type": "User",
          "login": "mmilata",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/85857?v=4"
        },
        {
          "type": "User",
          "login": "sputn1ck",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/8904314?v=4"
        },
        {
          "type": "User",
          "login": "0xB10C",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/19157360?v=4"
        }
      ],
      "contributors_sampled": 17,
      "top_contributor_share": 0.419
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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 9 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "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": null,
            "reason": "no dependencies found",
            "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": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "676a4beb812324610f33c884853b4057fba2cbf8",
        "ran_at": "2026-07-22T19:23:34Z",
        "aggregate_score": 3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/prusnak/nix-bitcoin",
    "host": "github.com",
    "name": "nix-bitcoin",
    "owner": "prusnak"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "critical",
      "name": "Overall health",
      "note": "Abandonment Policy applies a 85% multiplier to weighted overall health.",
      "notes": [
        {
          "code": "abandonment_overall_adjustment",
          "params": {
            "cap": 0,
            "pct": 85
          }
        }
      ],
      "value": 26,
      "inputs": {
        "security": 30,
        "vitality": 20,
        "community": 12,
        "governance": 46,
        "engineering": 38,
        "abandonment_cap": null,
        "abandonment_state": "at_risk",
        "abandonment_multiplier": 85,
        "weighted_overall_before_abandonment": 30,
        "overall_after_abandonment_multiplier": 26
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "critical",
        "name": "Vitality",
        "value": 20,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "critical",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "commits_last_year": 0,
              "human_commit_share": 1,
              "days_since_last_push": 1304,
              "active_weeks_last_year": 0
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1304 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1304
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "0/52 weeks with commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "0 commits in the last year",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "at_risk",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 48,
            "inputs": {
              "releases_count": 47,
              "latest_release_tag": "v0.0.47",
              "releases_from_tags": true,
              "days_since_latest_release": 1838,
              "mean_days_between_releases": 15
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "47 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 47
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1838 days ago",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1838
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~15 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 15
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "cap": null,
              "state": "at_risk",
              "guards": [
                "no_open_demand"
              ],
              "signals": [
                "release_stall",
                "scorecard_unmaintained"
              ],
              "red_flag": true,
              "multiplier_pct": 85,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": 0,
              "unanswered_open_issues": 0,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 1832,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "no human commit for 1832 days; 2 unmet obligation(s): releases stalled, Scorecard reports it unmaintained",
                "points": 85,
                "status": "partial",
                "details": [
                  {
                    "code": "abandonment_flagged",
                    "params": {
                      "days": 1832,
                      "count": 2,
                      "signals": "releases stalled, Scorecard reports it unmaintained"
                    }
                  }
                ],
                "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": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 46,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 17,
              "top_contributor_share": 0.419
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 42% of commits",
                "points": 13.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 42
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "17 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 9 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": "good",
            "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": 71,
            "inputs": {
              "followers": 1179,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "prusnak",
              "public_repos": 132,
              "account_age_days": 6420
            },
            "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": "1,179 followers of prusnak",
                "points": 22.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1179,
                      "login": "prusnak"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "132 public repos, account ~17 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 132
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 17
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 38,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "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": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://nixbitcoin.org",
              "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": "https://nixbitcoin.org",
                "points": 15,
                "status": "met",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 30,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 3
            },
            "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 9 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": 13
            },
            "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": "at_risk",
        "name": "AI Readiness",
        "value": 49,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.81,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "81 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 81,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [
                "pkgs/netns-exec/src/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "pkgs/netns-exec/src/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "pkgs/netns-exec/src/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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Nix",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Nix"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Nix",
              "largest_source_bytes": 13913,
              "source_files_sampled": 2,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Nix without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Nix"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/2 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 2,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "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-22T19:23:46.033997Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/prusnak/nix-bitcoin.svg",
  "full_name": "prusnak/nix-bitcoin",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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.26.0 — metodología completa · wiki de métricas.

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