Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-26 05:27 UTC

behringer24 / freizone-server

GoAGPL-3.0★ 0 estrellas⑂ 0 forksdesde jul 2026Ver en GitHub ↗

behringer24/freizone-server tiene un índice de salud de 45 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (66/100) y la más baja, Community & Adoption (24/100). Se actualizó por última vez hace 2 días. Una sola persona concentra la mayor parte del trabajo reciente.

45
global / 100
En riesgo

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

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

Perfil de puntuación

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

Titularidad

Andreas BehringerCuenta personal
9 seguidores28 repositorios públicosdesde may 2011

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/behringer24/freizone-serverv0.7.0-9hace 2 días

Métricas por categoría

Vitalidad

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

66Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 2 días
1.4/36Cadencia de commits — 2/52 semanas con commits
14.8/18Volumen de commits — 44 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year44
human_commit_share1
days_since_last_push2
active_weeks_last_year2
Cómo se puntúa
16.2/27Publica versiones — 9 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 2 días
27/27Cadencia de publicación — una versión cada ~0,6 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count9
latest_release_tagv0.7.0
releases_from_tags
days_since_latest_release2
mean_days_between_releases0,6
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?

24Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (AGPL-3.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
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?

36En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
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
7.2/25Alcance del propietario — 9 seguidores de behringer24
22.6/25Trayectoria — 28 repos públicos, cuenta de ~15 años
Datos de entrada utilizados
followers9
owner_typeUser
is_verified
owner_loginbehringer24
public_repos28
account_age_days5546
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 2 días
20/20Historial de versiones — 9 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/behringer24/freizone-server
ecosystemsgo
any_deprecatedno
min_days_since_publish2

Calidad de Ingeniería

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

62Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
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_ci
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

65Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
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?

33En 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
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
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 — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,3
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, signed_releases. 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.

54Moderado · 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)
27.9/40Historial de commits legible — 23 de 44 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,523
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 44
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/97 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes18.115
source_files_sampled97
oversized_source_files0

Datos clave

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

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 3.3 / 10
3.3agregado

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-26 05:27 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
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Dependencias directas 2
RegistroPaqueteRestricción de versiónManifiesto
Gogolang.org/x/cryptov0.54.0go.mod
Gomodernc.org/sqlitev1.54.0go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 600,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 502890,
        "HTML": 14210,
        "Dockerfile": 625
      },
      "pushed_at": "2026-07-23T15:36:50Z",
      "created_at": "2026-07-17T10:25:20Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T15:36:55Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "AGPL-3.0",
      "default_branch": "master",
      "license_spdx_raw": "AGPL-3.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Andreas Behringer",
      "type": "User",
      "login": "behringer24",
      "company": null,
      "location": "Germany",
      "followers": 9,
      "avatar_url": "https://avatars.githubusercontent.com/u/797817?v=4",
      "created_at": "2011-05-19T09:56:27Z",
      "is_verified": null,
      "public_repos": 28,
      "account_age_days": 5546
    },
    "license": {
      "state": "standard",
      "spdx_id": "AGPL-3.0",
      "raw_spdx": "AGPL-3.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-07-23T14:26:34Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-07-23T07:10:00Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-07-22T21:09:30Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-07-21T18:23:34Z"
        },
        {
          "tag": "v0.3.2",
          "kind": "patch",
          "published_at": "2026-07-20T15:09:07Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-07-19T20:38:46Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-07-19T17:05:30Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-19T09:54:21Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-18T20:35:32Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a1495959461891059653357846be2744d5c077b9",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/federation-runtime-toggle into master",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T14:26:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5723094d8fc7e17cccbb5024f68a7e2b9709ff80",
          "body": "Federation used to be an env-only, restart-required flag. It now lives\nin server_settings (mirroring registration_policy), changeable at\nruntime via GET/PUT /v1/admin/federation (same admin-only write /\nadmin-or-moderator read authorization as the registration policy), and\nsurfaced publicly on GET /\n[…]\nd\n(federation is client-direct, never relayed through this server). The\nstatic env var now only seeds the setting on first boot. The landing\npage's status card also shows the current federation state.",
          "is_bot": false,
          "headline": "Add runtime admin-toggleable federation setting",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T14:26:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "732eaa44534830dde113813a771c5f3395e6a228",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/agpl-license into master",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T14:25:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05f1c087a80cf65e4c727407cc9ac583d32c57b3",
          "body": "Freizone Server is a networked service; the AGPL closes the SaaS loophole\nGPL leaves open -- anyone who runs a modified server as a service must\nshare their modifications with that service's users.",
          "is_bot": false,
          "headline": "Add AGPL-3.0 license",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T14:25:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d111a8d38614f99148a051741d02b9001d8747f9",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/server-throughput-nonce-cache into master",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T07:10:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0c055b2c541730678805690172658506d0673e9",
          "body": "…in-memory nonce cache\n\nUnder load the server collapsed (~43-64 msgs/s, tail latency into seconds,\n429s) -- not a SQLite limit but two config artifacts plus a per-request DB\nwrite. Open the database with synchronous=NORMAL (WAL-safe) and a single\npooled connection so writes serialize cleanly instead\n[…]\ne\nmigration) but unused. Test signing helpers now derive a guaranteed-unique\nnonce instead of one from time.Now().String(), which the faster DB path\ncould otherwise collide within a single clock tick.",
          "is_bot": false,
          "headline": "Raise message throughput: WAL synchronous=NORMAL, single write conn, …",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T07:10:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70f5a9f357f8d7afe87eb1b83468d03b91177955",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/devclient-receipts-loadtest into master",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T07:09:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c614291fc6b78877215a92a5224b5e99f22dc6fb",
          "body": "…se, load test\n\nThe reference client now speaks the app's exact plaintext envelope\n(MessageContent v1 / ReceiptSignal v2), so it replies to received texts\nwith delivered/read receipts the app understands and displays. It shows\nthe generated cleartext and the actually-sent wire package for every\noutb\n[…]\n answered, so auto-reply\ncannot loop. A new loadtest subcommand floods between two existing\naccounts (creating none) with a parallel drainer and reports\nthroughput/latency percentiles/error breakdown.",
          "is_bot": false,
          "headline": "devclient: interoperable receipts, cleartext/package view, RTT, verbo…",
          "author_name": "Andreas Behringer",
          "author_login": "behringer24",
          "committed_at": "2026-07-23T07:09:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e89144504c5770598e83c5f55b8f0df62dd7b94",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/server-landing-page into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-22T21:09:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06d2cb0e6506b52fa44c0214335ad686de48b9bd",
          "body": "A browser hitting the bare domain got net/http's plain \"404 page not\nfound\" -- confusing for anyone who followed a link or typed the address\ndirectly. The page explains the host is a Freizone server and that\nFreizone is used through the app, not a browser, and shows live\nregistration status via the \n[…]\n no\npath-traversal surface) and registered only at the exact root path\n(\"GET /{$}\"), so it never shadows the /v1/ API or its JSON error\ncontract -- unknown paths still fall through to the default 404.",
          "is_bot": false,
          "headline": "Serve a small branded landing page at the site root",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-22T21:09:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f7605cdc38d23e61b7618aeeb49f5a2a4f72166",
          "body": null,
          "is_bot": false,
          "headline": "Merge fix/devclient-peer-account-id-resolution into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T20:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0975a0608763b97bda83d91f0051a8ac0a81955",
          "body": "resolvePeerDevice looked up the account by whatever -to string was\ngiven (a short prefix works, since the account directory supports\nprefix matching) but only ever returned the device id/pubkey, never\nthe account's own fully-resolved id -- so every caller kept using the\noriginal, possibly-abbreviate\n[…]\ne testing a live account by its short address instead of\ntyping out the full id.\n\nresolvePeerDevice now also returns the resolved full id, and callers\nuse that everywhere instead of the raw -to input.",
          "is_bot": false,
          "headline": "Fix devclient resolving a peer by a short id prefix",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T20:07:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e9d33b5b38bc685a3c973d506fce13b4c219321f",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/docker-publish-workflow into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T19:02:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de229abc1edfb470748d24b808dce69a2f0e8e17",
          "body": "…GHCR\n\nFires on a version tag push or a published GitHub Release, builds via\nthe existing multi-stage Dockerfile, and pushes ghcr.io/<owner>/freizone-server\ntagged with both the version and latest. Uses the built-in GITHUB_TOKEN\n(scoped to packages:write) rather than a separate registry secret.\n\nAls\n[…]\n, all *.exe --\nnot just server.exe) found while auditing the manual build/publish this\nautomates, so a local secret/dev-artifact dropped in the repo root can't\nend up in the build context by accident.",
          "is_bot": false,
          "headline": "Add GitHub Actions workflow to build and publish the Docker image to …",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T19:02:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78358224610e53fd3889a686fb694ca4a1a71024",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/prekey-pool-status-and-low-pool-wake into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T18:23:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6bc7aee1e4a8ef70f877e2acfb5febdaaeb9c66",
          "body": "A device's one-time-prekey pool was only ever filled once, at\nregistration, and never replenished -- every new incoming X3DH session\nsilently drains it, degrading forward secrecy for future sessions once\nit runs dry, with no way for the client to even notice. Adds\nGET /v1/devices/{id}/prekey-status \n[…]\ns\nhandleClaimPrekeyBundle proactively wake a device (reusing the existing\npush pipeline, unchanged) once a claim drops it below a low-water mark\nand it has no live SSE connection to notice on its own.",
          "is_bot": false,
          "headline": "Add one-time-prekey pool status endpoint and low-pool wake trigger",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T18:23:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "288a3c8c4d40f971d6a7594c451b156c08cd8571",
          "body": null,
          "is_bot": false,
          "headline": "Merge feat/self-service-account-deletion into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T13:28:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fd9309013c93de391d05c0647110901f7026816",
          "body": "Until now, deleting an account server-side was admin-only -- a user had\nno way to actually delete their own account, only \"remove it from this\ndevice\" locally, which leaves it fully alive and receiving messages on\nthe server forever. Adds a self-only counterpart: the target account is\nnever taken fr\n[…]\nre's signature verification\n-- deleting a different account is structurally impossible, not just\npolicy-forbidden. Reuses the existing admin delete's cascade (accounts.go)\nand last-active-admin guard.",
          "is_bot": false,
          "headline": "Add self-service account deletion (DELETE /v1/accounts/{id})",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-21T13:28:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "592c541020f309715229839cf32274d791096c9d",
          "body": null,
          "is_bot": false,
          "headline": "Merge docs/protocol-readme-audit into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-20T15:09:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a64a5d51a3b6ec51fd701551f0babc9ac4882aea",
          "body": "README.md claimed federation was server-to-server relay, directly\ncontradicting both its own status paragraph and docs/PROTOCOL.md §9,\nwhich correctly describe direct client-to-recipient-server delivery\nwith no relay between servers. Also corrected README's stale \"future\nwork\" claim about push (the \n[…]\n \"409 admin already exists\"\nclaim on bootstrap/claim, and added the previously undocumented server\nadmin endpoint group (accounts list, role/block/unblock/delete,\nruntime registration-policy get/set).",
          "is_bot": false,
          "headline": "Fix stale federation, registration-policy, and admin-endpoint docs",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-20T15:08:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fbf8fd3e54d5720aa93f7cab8bb1b2baa4f3c0db",
          "body": null,
          "is_bot": false,
          "headline": "Merge chore/gitignore-claude-md into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-20T15:08:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df8bdb7cc4f8244f699a0c62946218384266e379",
          "body": "Not part of the public project -- keeps per-repo Claude Code\ncollaboration rules out of the tracked tree.",
          "is_bot": false,
          "headline": "Ignore personal CLAUDE.md workflow notes",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-20T15:08:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c2fe95fd29dd8f7ed399176d74245d6364b3a37",
          "body": "Documents the client-side freizone://chat invite URI scheme\nintroduced this session (no server code changes).",
          "is_bot": false,
          "headline": "Merge docs/chat-invite-qr into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-19T20:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a10cafde3b3b904c6a7d915871f52ddd0865fbe",
          "body": "Client-side convention (no server code changes): the counterpart to\nthe existing freizone://join server invite, but for contact\ninitiation -- lets an already-registered account share its own\nid*server address as a QR/link so a scanning device can start a\nconversation directly instead of typing it by hand.",
          "is_bot": false,
          "headline": "Document the freizone://chat invite QR URI scheme",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-19T20:38:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f2f03bb0296f4d74f70d121cae7ad9b90c7ef78",
          "body": "Direct cross-server message delivery, plus message-queue hardening\n(per-recipient cap, request body size limit) prompted by federation's\nlower barrier to entry.",
          "is_bot": false,
          "headline": "Merge feature/federation into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-19T17:05:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d3cf16a91b793fc50973c74f4445388f12e9a82",
          "body": "A message to id*server, where server isn't the sender's own, is now\ndelivered by the sending client directly to the recipient's home\nserver (POST /v1/federation/messages) -- no server-to-server relay, no\nregistration or trust handshake between the two servers beforehand.\nThis follows directly from t\n[…]\nt gains -to-server for manually testing federation; the\nprotocol was verified end-to-end against two real Docker instances\n(distinct accounts, distinct servers) before this commit, in both\ndirections.",
          "is_bot": false,
          "headline": "Add federation: direct cross-server message delivery",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-19T17:05:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5516e49f26d0126f6dec20a472801a53227651b3",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/push-gateway-relay into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-19T09:54:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49a546ec1b39b20b12680f924b384200ed0b92ab",
          "body": "A device can now register either a UnifiedPush/Web Push subscription\n(existing path, unchanged) or an FCM/APNs push target (new), via the new\nPUT /v1/devices/{device_id}/push-target endpoint -- setting one clears\nthe other, since a device only ever uses one wake mechanism at a time.\n\nFor devices wit\n[…]\net disables it, same as having no\nUnifiedPush distributor already does today.\n\nAlso adds a .dockerignore (kept out of the previous commit) to keep the\nDocker build context free of local dev artifacts.",
          "is_bot": false,
          "headline": "Add freizone-gateway relay path for FCM/APNs push, alongside UnifiedPush",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-19T09:54:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1c07bf2bde74888b53203a38592f794f8292353",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/account-id-prefix into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T20:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4047dba116eec591122afc1cba5a14444c6cf068",
          "body": "…ss, and let GET /v1/accounts/{id} resolve it\n\nAccount ids get shown/entered in dash-grouped blocks (FormatForDisplay/\nNormalize). Grouping by 4 wasted the first character of every group:\nthe leading character is always the version marker (currently always\n0, i.e. always 'q'), so a 4-char first grou\n[…]\n.\n\nVerified live against a running local server (not just the test\nsuite): full id, prefix without a dash, and prefix with a trailing\ndash all resolve to the identical account; an unknown prefix 404s.",
          "is_bot": false,
          "headline": "Group account ids by 5 characters, enforce per-server prefix uniquene…",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T20:35:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1352f8c6f6425dd47195bad4aeac9160c04be864",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/invite-qr-docs into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T16:03:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94ccd1bb91ac95b9ab708b0afdcb0ff546da6ade",
          "body": "- docs/PROTOCOL.md: new §8 documenting the freizone://join?server=...\n  &code=... convention the app now uses for invite QR codes (see the\n  freizone-app commit adding lib/util/invite_uri.dart and the\n  Invite/scan screens)\n- Fix a pre-existing doc/comment bug found while writing that section:\n  POS\n[…]\ns own device generating its own keys)\n\nAlso corrects the admin_screen.dart/setup_screen.dart \"closed\" policy\ndescriptions in the app repo, and the English-only UI audit, both\nrequested alongside this.",
          "is_bot": false,
          "headline": "Document invite QR codes and fix invite-permission doc bug",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T16:02:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5bef221404c9c12c76dd2a8656049c0a24ba55ea",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/server-status-endpoint into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T14:34:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b48abc9e94df2ef20321636e98e1894c5efc8412",
          "body": "Lets a client decide which setup path applies (bootstrap / open /\ninvite-code / closed) before it has any identity at all -- reuses the\nexisting store.SetupTokenClaimed and store.GetRegistrationPolicy, no new\nstore logic needed. Neither field is sensitive: \"claimed\" just means an\nadmin exists, and the registration policy has to be knowable before\nanyone can register regardless.\n\nThis is what the app's new setup wizard (freizone-app) is built on.",
          "is_bot": false,
          "headline": "Add public GET /v1/server-status endpoint",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T14:34:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35bcf94c8ff86ac4ab97b79ec241718d3398ed0a",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/push-notifications into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T13:22:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "651b4a5a04323652c9ba8751d769fafa416bfee3",
          "body": "Devices can register a push subscription (endpoint + p256dh + auth) so\nthe server can wake them when a message arrives and no SSE stream is\ncurrently connected. The wake payload carries no content or metadata --\nonly that something changed -- but RFC 8291 still requires the transport\nitself to the d\n[…]\n\ndeferred. Verified end-to-end on a real device: server -> ntfy.sh ->\nAndroid wake -> notification -> app opens and syncs correctly, including\nconfirming no duplicate push while an SSE stream is live.",
          "is_bot": false,
          "headline": "Add Android push notifications via UnifiedPush (RFC 8291)",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-18T13:22:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52429f906ecabba3d69f56b78699289d7355470a",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/devclient-auto-reply into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T23:14:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0356af8a67746b20c71aadda2929efaf2901c564",
          "body": "Adds an opt-in flag to devclient chat that answers every incoming\nmessage from the chat peer with a random short lorem-ipsum sentence\n(original message appended in parentheses), so two devclient instances\ncan hold a test conversation without a human typing into either side.\nManual stdin input keeps \n[…]\nefore -- auto-reply just\nruns alongside it.\n\nVerified end-to-end against a local test server: a live message sent\nfrom one instance was answered automatically by the other and received\nback correctly.",
          "is_bot": false,
          "headline": "devclient: add -auto-reply option for unattended chat testing",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T23:13:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "780490e5ffa5b0e4efdd8421b2e38622b5db8fe7",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/server-admin-roles into master",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T22:51:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7818f94557fe434bcb1210798c8e575a5b09177",
          "body": "Replaces the accounts.is_admin boolean with a real role model\n(user/moderator/admin) so multiple admins and moderators are possible.\nAdmins get full control (registration policy, user list, granting/\nrevoking roles, block/unblock, delete); moderators get a restricted\nsubset (view the user list, crea\n[…]\nery scenario) and\nremoves the one-time \"an admin already exists\" bootstrap-claim guard,\nsince it's superseded by the setup token's own reuse protection and\nnow actively blocks that same recovery path.",
          "is_bot": false,
          "headline": "Add server admin area: roles, block/unblock, delete, registration policy",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T22:51:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f17dbbd0d6334baafb9bd8a5f2d1a156bb9550a",
          "body": "…lures\n\nReplaces the 64-char hex setup token with an 8-symbol Crockford Base32\ncode (dash-grouped for display, separator/case-insensitive on input) --\nshort enough to type into a phone without a QR code. Since\nPOST /v1/bootstrap/claim has no other rate limiting, safety against\nonline guessing now co\n[…]\ne write-lock held by the\nnot-yet-rolled-back transaction until the busy timeout. Fixed by\nrolling back explicitly before recording the failed attempt on a\nseparate, independently-committing DB handle.",
          "is_bot": false,
          "headline": "Shorten bootstrap setup token to 8 chars, add lockout on repeated fai…",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T21:38:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4ebc4b91a12b624e08104da46155de4bc5c0d837",
          "body": null,
          "is_bot": false,
          "headline": "Reworking and restructuring for reuse of krypto in App",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T20:16:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e162eff5acf1745a554886f991c9a141d268777",
          "body": null,
          "is_bot": false,
          "headline": "Add: chat capabilities",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T14:10:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4359f526992277c9e181937f209f4d5bdf1fc9e0",
          "body": null,
          "is_bot": false,
          "headline": "Initial setup",
          "author_name": "Andreas Behringer",
          "author_login": null,
          "committed_at": "2026-07-17T11:49:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 9,
      "commits_last_year": 44,
      "latest_release_at": "2026-07-23T14:26:34Z",
      "latest_release_tag": "v0.7.0",
      "releases_from_tags": true,
      "days_since_last_push": 2,
      "active_weeks_last_year": 2,
      "days_since_latest_release": 2,
      "mean_days_between_releases": 0.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/behringer24/freizone-server",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/behringer24/freizone-server",
          "is_deprecated": false,
          "latest_version": "v0.7.0",
          "repository_url": "https://github.com/behringer24/freizone-server",
          "versions_count": 9,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-23T14:26:34Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 2
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 18115,
      "source_files_sampled": 97,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.54.0"
        }
      ],
      "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": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "behringer24",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/797817?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "docker-publish.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 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": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a1495959461891059653357846be2744d5c077b9",
        "ran_at": "2026-07-26T05:27:39Z",
        "aggregate_score": 3.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": "2026-07-23T15:38:43Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/behringer24/freizone-server",
    "host": "github.com",
    "name": "freizone-server",
    "owner": "behringer24"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 45,
      "inputs": {
        "security": 33,
        "vitality": 66,
        "community": 24,
        "governance": 36,
        "engineering": 62
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 66,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "commits_last_year": 44,
              "human_commit_share": 1,
              "days_since_last_push": 2,
              "active_weeks_last_year": 2
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "2/52 weeks with commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "44 commits in the last year",
                "points": 14.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "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": 88,
            "inputs": {
              "releases_count": 9,
              "latest_release_tag": "v0.7.0",
              "releases_from_tags": true,
              "days_since_latest_release": 2,
              "mean_days_between_releases": 0.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "9 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.6
                    }
                  }
                ],
                "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": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "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": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (AGPL-3.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "AGPL-3.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 36,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "moderate",
            "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": 50,
            "inputs": {
              "followers": 9,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "behringer24",
              "public_repos": 28,
              "account_age_days": 5546
            },
            "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": "9 followers of behringer24",
                "points": 7.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 9,
                      "login": "behringer24"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "28 public repos, account ~15 yr old",
                "points": 22.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 28
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/behringer24/freizone-server"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 2
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 2 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "9 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 62,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "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": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 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": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is 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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "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": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "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": 2
            },
            "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": "moderate",
        "name": "AI Readiness",
        "value": 54,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 28,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.523,
              "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": "23 of 44 human commits state their intent (structured subject or explanatory body)",
                "points": 27.9,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 23,
                      "sampled": 44
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "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": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 44",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 44
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 18115,
              "source_files_sampled": 97,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/97 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 97,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T05:27:43.531711Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/behringer24/freizone-server.svg",
  "full_name": "behringer24/freizone-server",
  "license_state": "standard",
  "license_spdx": "AGPL-3.0"
}

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

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

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