Registro público
Informe de salud del softwareesquema 0.31.0 · métricas 2.5.0 · 2026-08-08 08:29 UTC

yl0711-coder / newapi-monitor

Go · HTMLMIT★ 0 estrellas⑂ 0 forksdesde jun 2026Ver en GitHub ↗
TipoServicio de redBibliotecacómo se determina

yl0711-coder/newapi-monitor tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (76/100) y la más baja, Security (40/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

59
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala estandarizada de 1 a 100. El resultado global parte de su media ponderada, calibrada contra la distribución del registro público para que las bandas tengan significado percentil; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe un límite «En riesgo» de 34.

59
Excepcional93-100El nivel más alto del registro (≈ el 5% superior); cumple prácticamente todos los criterios evaluados
Excelente80-92Sólido en todos los frentes; carencias menores
Bueno65-79Saludable; carencias limitadas y manejables
Moderado50-64Aceptable con carencias notables; se recomienda revisión
Débil35-49Debilidades sustanciales en varias áreas
En riesgo20-34Debilidades significativas; su adopción exige cautela
Crítico1-19Problemas 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.

El resultado global ponderado 56 se calibra a 59 en la escala publicada del índice (calibración del registro 2026-08-02).

Titularidad

LeiCuenta personal
0 seguidores14 repositorios públicosdesde oct 2025

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/yl0711-coder/newapi-monitorv1.11.0-22hace 0 días

Métricas por categoría

Vitalidad

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

70Bueno · 21% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
4.8/36Cadencia de commits — 7/52 semanas con commits
17.5/18Volumen de commits — 87 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_year87
human_commit_share1
days_since_last_push0
active_weeks_last_year7
Cómo se puntúa
16.2/27Publica versiones — 22 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~3,3 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count22
latest_release_tagv1.11.0
releases_from_tags
days_since_latest_release0
mean_days_between_releases3,3
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?

43Débil · 17% 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 (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
readme_badges3
has_contributing
has_issue_templateno
has_code_of_conduct
readme_badge_servicesgithub.com, goreportcard.com, shields.io
has_pull_request_template

Sostenibilidad y Gobernanza

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

46Débil · 23% 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/42Resolución de issues — sin issues o sin datos
30/30Aceptación de PR — 24/24 PR decididos fusionados
0/13Newcomer PR acceptance — ningún PR de un contribuyente primerizo decidido en 30 d
0/15OpenSSF Scorecard: Code-Review — Found 0/17 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs24
open_issues0
closed_issues0
prs_merged_7d4
prs_decided_7d4
prs_merged_30d5
prs_decided_30d5
issue_closed_ratio
closed_unmerged_prs0
first_time_authors_30d0
first_time_prs_merged_30d0
first_time_prs_decided_30d0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, newcomer_pr_acceptance. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de yl0711-coder
10.1/25Trayectoria — 14 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginyl0711-coder
public_repos14
account_age_days285
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 0 días
20/20Historial de versiones — 22 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/yl0711-coder/newapi-monitor
ecosystemsgo
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

76Bueno · 19% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
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?

40Débil · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
2.5/2.5CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/17 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 — SAST tool is not run on all commits -- score normalized to 0
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, 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? Tiene un peso deliberadamente pequeño (4%): las herramientas para agentes son una señal real de mantenimiento, pero un repositorio sin ninguna puede alcanzar igualmente 100/100.

66Bueno · 4% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 82 de 87 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,943
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
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
6.9/10Práctica demostrada con agentes — 3 de los últimos 87 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,034
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
51.2/55Tamaños de archivo manejables — 5/72 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes2.454.934
source_files_sampled72
oversized_source_files5

Datos clave

0estrellas de GitHub
1contribuidores
87commits en los últimos 12 meses
0días desde el último push
22versiones 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 4.0 / 10
4.0agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-08-08 08:29 UTC

10Binary-Artifactsno binaries found in the repo
n/dBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/17 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
0SASTSAST tool is not run on all commits -- score normalized to 0
4Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 13
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/aws/aws-sdk-go-v2v1.42.0go.mod
Gogithub.com/aws/aws-sdk-go-v2/configv1.32.25go.mod
Gogithub.com/aws/aws-sdk-go-v2/service/lightsailv1.56.1go.mod
Gogithub.com/gin-gonic/ginv1.12.0go.mod
Gogithub.com/glebarez/go-sqlitev1.21.2go.mod
Gogithub.com/glebarez/sqlitev1.11.0go.mod
Gogithub.com/go-sql-driver/mysqlv1.10.0go.mod
Gogithub.com/joho/godotenvv1.5.1go.mod
Gogithub.com/redis/go-redis/v9v9.20.0go.mod
Gogithub.com/wneessen/go-mailv0.7.3go.mod
Gogolang.org/x/cryptov0.53.0go.mod
Gogolang.org/x/netv0.56.0go.mod
Gogorm.io/gormv1.31.1go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "icon": {
      "bytes": 1539,
      "width": 420,
      "height": 420,
      "rejected": [],
      "collected": true,
      "media_type": "image/png",
      "source_url": "https://avatars.githubusercontent.com/u/240414268?v=4&s=256",
      "source_type": "avatar",
      "content_hash": "623342a8ec525141c898eba2c1c60d22eae6c66212666841292662fc1a63a396",
      "candidates_considered": 1
    },
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 2832,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 903336,
        "HTML": 308559,
        "Dockerfile": 3112,
        "JavaScript": 40372
      },
      "pushed_at": "2026-08-07T12:49:57Z",
      "created_at": "2026-06-08T08:37:23Z",
      "owner_type": "User",
      "updated_at": "2026-08-07T12:50:08Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "HTML"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Lei",
      "type": "User",
      "login": "yl0711-coder",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/240414268?v=4",
      "created_at": "2025-10-27T04:36:34Z",
      "is_verified": null,
      "public_repos": 14,
      "account_age_days": 285
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-08-07T12:48:18Z"
        },
        {
          "tag": "v1.10.1",
          "kind": "patch",
          "published_at": "2026-08-06T23:27:07Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-08-06T15:07:40Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-08-04T12:55:51Z"
        },
        {
          "tag": "v1.8.1",
          "kind": "patch",
          "published_at": "2026-07-21T09:58:33Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-07-21T08:08:46Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-07-09T09:29:50Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-09T05:33:38Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-07-08T23:52:50Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-08T12:52:50Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-06-24T09:52:53Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2026-06-11T16:31:35Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2026-06-11T15:10:45Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-06-11T09:29:56Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-06-10T12:59:56Z"
        },
        {
          "tag": "v1.1.5",
          "kind": "patch",
          "published_at": "2026-06-10T09:24:48Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2026-06-10T08:38:08Z"
        },
        {
          "tag": "v1.1.3",
          "kind": "patch",
          "published_at": "2026-06-10T08:24:11Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2026-06-10T07:47:21Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-06-10T05:50:40Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-06-10T05:17:04Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-06-09T09:06:16Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "1cb4eb07f7bb7bc4d91c358045d2e07f995b909e",
          "body": "feat: harden operations reporting and ingestion",
          "is_bot": false,
          "headline": "Merge pull request #24 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-07T12:48:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "692f05a0b3e284dc1e1191a72bb4fcf27c3e4485",
          "body": null,
          "is_bot": false,
          "headline": "feat(monitor): harden operations reporting and ingestion",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-07T12:40:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c470d311a4fb32f7189402e1a31eda8d60d51e2",
          "body": "feat(monitor): add channel date shortcuts",
          "is_bot": false,
          "headline": "Merge pull request #23 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-06T23:27:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af108f262dfd606bcdb35dd8b81948b6919f14a7",
          "body": null,
          "is_bot": false,
          "headline": "feat(monitor): add channel date shortcuts",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-06T16:21:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65ff6a839d2cbad49732763aea3fcc164c69a437",
          "body": "feat(monitor): add stability reports and channel management",
          "is_bot": false,
          "headline": "Merge pull request #22 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-06T15:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dfdcabe2418f4b7e58f1e03b983a0eb93bac1403",
          "body": null,
          "is_bot": false,
          "headline": "feat(monitor): add stability reports and channel management",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-06T14:59:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5cdaa6ff8ac56a3b40c317531f4bb7fee30751",
          "body": "feat(monitor): improve usage reliability, performance, and release safety",
          "is_bot": false,
          "headline": "Merge pull request #21 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-04T12:55:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fad33b4d1b262e231ad33acbae737e71d3005392",
          "body": null,
          "is_bot": false,
          "headline": "fix(usage): close pre-release safety gaps",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-04T12:00:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da3ddbe07155936cd346faf16f2b99bf27d60cc9",
          "body": null,
          "is_bot": false,
          "headline": "perf(usage): consolidate live profile queries",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-03T13:02:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4f6df580bac0b40dd2817a758e0db138f6f3e56",
          "body": null,
          "is_bot": false,
          "headline": "perf(usage): balance aggregate cache freshness and load",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-03T09:41:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c70d14128a9b79aa4dd1d83b733a867801b821c9",
          "body": null,
          "is_bot": false,
          "headline": "perf(usage): cancel stale queued queries safely",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-03T06:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d24fde37c9d01e3216c742a36737c9fe2e4ee6cd",
          "body": null,
          "is_bot": false,
          "headline": "fix(usage): harden daily stats and portal isolation",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-03T05:45:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f56a17a498c456685906c9ba0a55fe859721c8a",
          "body": null,
          "is_bot": false,
          "headline": "feat: align usage date picker with NewAPI",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-08-02T12:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e3b9860327d1079f47298152313d7b00adc2df7",
          "body": "feat(monitor): 完成使用门户与监控安全加固",
          "is_bot": false,
          "headline": "Merge pull request #20 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-29T08:18:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94798fe042c734ba0ea7e216c5d822b47f0b03c9",
          "body": null,
          "is_bot": false,
          "headline": "feat(monitor): 支持下线基础设施资源",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-29T06:38:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ff658f0ce60c5530535c2a4de06f593943bf5fa",
          "body": null,
          "is_bot": false,
          "headline": "fix(monitor): preserve graceful shutdown on startup errors",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-29T04:38:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "257194efce9c6ad88d728daade0465fe7c002298",
          "body": null,
          "is_bot": false,
          "headline": "feat(monitor): complete usage portal and release hardening",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-29T04:31:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d8658b4e90b243a8c2e138b3e6632bbe0f9f621",
          "body": "- 后端新增 detail_kw 参数,模糊匹配日志 content;\"违规费\"额外匹配\n  other.violation_fee_code 标记(该文案是现算的,content 里没有)\n- 前端详情关键字搜索改成点查询按钮触发,不再输入即搜,避免用户\n  打字过程中的高频请求\n- 成员/模型/分组三个筛选下拉框改为可搜索:输入过滤选项、点击或\n  Enter 选中、点击外部关闭,真实值仍由隐藏 select 承载不影响\n  既有查询逻辑",
          "is_bot": false,
          "headline": "feat(monitor): 使用日志加详情关键字搜索+成员/模型/分组下拉可搜索",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-22T10:09:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4cd1c1ee9d6c367709ef1f0645d4cbe3887ed36",
          "body": "修复:\n- 模型/分组配色改为按范围内费用排名取色板固定位次,不再用名称哈希\n  取色(同一张图内两个模型名可能撞到同一色槽,导致堆叠图退化成单色)\n- 修复客户门户(portal.html)每日消费趋势图此前被 git 误操作静默回退\n  为单色柱状图的回归,恢复为按模型堆叠展示",
          "is_bot": false,
          "headline": "Merge dev: v1.8.1 修复模型堆叠图颜色碰撞 + 门户堆叠图回归恢复",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-21T09:58:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0769bd3585b6f790cae589fc428914c6ea2f4b52",
          "body": "模型/分组配色原为名称哈希取固定色板,同一张图内两个不同模型名可能\n撞到同一色槽(如 claude-sonnet-5 与 claude-sonnet-4-6),导致堆叠图\n视觉上退化成单色柱。改为按范围内费用降序排名取色板固定位次,同图\n内颜色必不相同。\n\n顺带修复 portal.html 此前 git 误操作导致的回归:客户门户每日消费\n趋势图曾被静默还原成旧的单色柱状图,现已恢复为按模型堆叠展示。",
          "is_bot": false,
          "headline": "fix(monitor): 模型堆叠图配色改按排名取色,修复同色碰撞与门户端堆叠图回归",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-21T09:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5a3539f96a32a27681928c9e68ba8e0f21b24e3",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: gofmt 格式化修复",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-21T08:48:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "62fc5592cecd80652eed18232d537a1b365e74a8",
          "body": "- barWidth 从 58% 降到 42%\n- 添加左→右渐变(#f59e0b → #fbbf24)\n- 圆角从 3px 增加到 4px\n- 右侧标签添加 fontWeight:500\n- 与客户门户样式保持一致\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(monitor): 管理后台成员排行横向条优化",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-21T08:08:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "edb73f6ab072ae55eb2a6eca823e7c1487e51e4a",
          "body": "- 后端新增 daily_by_model 聚合查询(按日×模型维度)\n- 前端(管理后台 + 客户门户)每日图改为按模型堆叠柱状\n- 图例显示各模型,悬停 tooltip 显示每模型明细 + 总计(加粗)\n- 视觉优化:柱子更细(38%)、间距更大、图例清晰、Y轴均匀刻度\n- 管理后台「请求数」折线改为虚线+小圆点,与成本柱状区分\n- 组织详情视图统一为堆叠柱状(不再是平滑面积线)\n- Top 6 模型独立系列,其余归并「其他」灰色系列\n- 客户门户首页「每日消费趋势」改为按模型堆叠柱状\n- 后端 /api/overview 新增 daily_by_model 和 by_model 字段\n- 客户门户成员排行横向条优化:42% barWidth + 左→右渐变 + 标签加粗\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(monitor): 每日消耗图按模型堆叠展示",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-21T08:02:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cbbf4c5023cc67cc7020c42e0579c7b3df6d3909",
          "body": "- portal 越权判定改 sentinel error + errors.Is,弃字符串比较错误文案\n- ingest 鉴权抽公共闸 checkIngest,消除两处逐字重复的安全代码\n- infra 色标与邮件告警的红线判定收敛为共用谓词(dbMemBad/dbStorageBad/instanceDown/lbUnhealthy),永远同口径\n- DB连接数/磁盘队列/LB响应毫秒三个硬编码阈值提为可配(MONITOR_INFRA_DB_CONN_WARN/DB_DISK_QUEUE_WARN/LB_RESP_WARN_MS)\n- computeFollowUps(CC=46)拆出纯函\n[…]\nadErr 留痕,库损坏不再静默成'无数据'\n- storeDim/storeDimSeries 维度列名加白名单守卫,封死唯一的字符串进SQL入口\n- updateGroup 入参补 json tag(全库唯一漏写处)\n- 客户/分组管理域从 usage.go(1360行)物理拆到 customers.go,usage.go 只留用量聚合与日志查询\n- CI 测试改跑 go test -race",
          "is_bot": false,
          "headline": "refactor: 代码质量收尾(1-8项体检整改,无行为变化)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-16T10:36:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f3481f0e4e8cf4ecf0a85c97def2c83ff08eea99",
          "body": "使用日志(portal.html/portal.go/usage.go):\n- 加类型列与筛选(充值/消费/管理/系统;错误/退款不对客户展示,显式请求 400)\n- 详情列对齐 new-api 线上多行计价摘要(倍率/输入价/缓存读等),自 other 白名单解析,渠道等内部字段不落客户端;阶梯计费(tiered_expr)不显错误单价;scrubContent 剔除含\"渠道\"的 content(纵深防御)\n- 表头「输入tokens」加 Anthropic 缓存口径提示;导出按钮加规则说明;两处 ? 提示自适应上下方向\n- 费用仅消费类型显示(充值/管理/系统 quota 恒0 不当费用,\n[…]\n认 Tab;当前 Tab 记入 URL hash,从报警设置返回/刷新均保留\n\n测试:queryGroupLogs(隔离/筛选/游标/类型排除)、buildLogDetail(计价/阶梯/剔除)、exportLimiter(并发预占)、csvSafe、参数契约 400、通配符转义;全绿\n文档:README 只读账号补 users/tokens 授权;CHANGELOG 记 [Unreleased]",
          "is_bot": false,
          "headline": "feat(portal): 客户使用日志类型/详情列 + 总览工具条对齐 + 管理端Tab修复",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-16T06:48:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "841024472cf7966024aeaeee2a0cf1dcc62d6da9",
          "body": null,
          "is_bot": false,
          "headline": "style: 日志相关标识符按 revive 命名规范(memberUID/beforeID/LogRow.ID)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-15T14:20:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f6ac8744f8b7c3b023e31030c047197cfe383d3",
          "body": "- 使用日志视图:时间/成员/令牌/模型/分组/输入/输出/耗时/费用,游标分页(每页50,时间倒序),首页返回总条数供算总页数\n- 筛选:成员、模型、分组下拉 + 令牌名搜索\n- CSV 导出:UTF-8 BOM,超5万条弹确认导最新5万,每组织5分钟限1次(仅计成功),25s超时;导出进度弹窗+分阶段文案+可取消\n- new-api 风格紧凑日期选择器(触发按钮+弹层内起止+预设+确定),最长90天,前后端一致\n- 组隔离沿用现有闸门(user_id IN 本组 + 成员越权校验);查询窗口化走索引、usageMu 串行、COUNT 仅首页\n- 表头与 CSV 列对齐(独立 .logtable 布局,不复用矩阵冻结列)\n\n测试:queryGroupLogs/countGroupLogs(隔离/筛选/游标/计数)+ exportLimiter,全绿",
          "is_bot": false,
          "headline": "feat(portal): 客户端使用日志查看与 CSV 导出",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-15T14:13:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e99053ea402887b07b4112db965d089ecb5a9122",
          "body": "客户端门户(portal.html):\n- 总览:每日消费趋势(费用面积+请求折线)、成员消耗排行(Top10横向条)、按分组/按模型环形图。\n- 成员明细:按模型环形图。客户名做成品牌胶囊;按分组由横向条改环形。\n\n管理端(page.html):\n- 「用户用量」Tab 移到首位并设为默认首屏。\n- 分组管理加「客户账号」列(已开通/未开通),编辑行/展开器补齐至 8 列对齐。\n- 组织详情整页对齐客户报表页(深色):小结卡/每日面积趋势/组内成员矩阵(点成员进明细)/\n  成员排行/按分组·按模型环形;去掉客户页没有的每日 token 明细表。用户详情补按模型环形。\n- 分组管理/用户管理\n[…]\nportalLimiter)增 prune,GC 协程定期清理,防被刷时 map 无界增长。\n- computeUserTokenUsage 纳入 usageMu 串行闸,与其它大聚合一致保护生产库负载。\n\n后端(usage.go):computeUserTokenUsage 按令牌聚合(所属用户/名称/脱敏key/分组);maskTokenKey\n脱敏(明文永不出库);fmtCompact 等。",
          "is_bot": false,
          "headline": "feat(usage): 用量图表 + 组织/用户详情对齐客户报表页 + 管理端体验优化",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-15T08:36:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2ddbdb0fff883bc61cabf4cf10fc187bd86cde4",
          "body": null,
          "is_bot": false,
          "headline": "style: gofmt 对齐 server.go 路由块注释(portal 路由行加长触发重排)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-14T23:22:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c7319bd3e3328baaf8503364bc1069c2b431410",
          "body": "新增对外门户(独立端口 MONITOR_PORTAL_ADDR,默认关):\n- 客户用我方配置账号登录,只见本组关联用户;浅色商务主题、顶部总账条、\n  成员搜索+分页(20/页,合计按全组)。\n- 双密码(我方配置密码永久有效 + 客户自改密码);登录限流;独立会话密钥域,\n  管理端会话在门户端口无效。\n- 组隔离:gid 只从会话取,WHERE group_id=gid → user_id IN(本组成员);\n  成员明细越权闸(uid 必属本组否则 404);写穿透预热按组切片并剥内部备注。\n- 组级 TTL 缓存 + singleflight,应对并发查看。\n\n令牌级用量(客户端 +\n[…]\n/ 费用。\n- 密钥服务端脱敏(sk-前4**后4),明文永不出库;前端不可选中/复制。\n- 已删令牌回退日志名、密钥空、分组「默认」。\n\n管理端:分组管理加「客户账号」配置(开通/改密/重置客户密码/关闭);\n报警栏目开关沿用;单用户详情新增「按令牌」卡(公司详情不显示)。\n\n测试:组隔离/写穿透隔离/双密码/限流/开通校验/令牌脱敏/maskKey 边界/缓存 singleflight 全绿。",
          "is_bot": false,
          "headline": "feat(portal): 客户端「用量报表」独立门户 + 令牌级用量",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-14T23:19:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "755a77608565da83867c06231d061c1e2841832d",
          "body": "布尔字段带 gorm default 时零值(false)不写列、被库默认 true 顶回,导致「勾掉服务端监控保存又自动勾上」。\n改为无 default 的普通 bool(保存永远显式写值);老库升级的\"默认开\"改由 openStore 迁移前探测列是否存在、\n新建列时对存量配置行一次性补 true。含两个回归测试。",
          "is_bot": false,
          "headline": "fix(alert): 栏目开关勾掉保存被顶回——去掉 gorm default:true 零值坑,老库升级用列探测补默认",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-14T09:12:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bbd87d9777d9beb31b06086f2801c5c3eed6a96",
          "body": "- 用户用量页顶新增全局汇总条:全部客户累计总消耗(主数)/范围消耗/总余额/在管客户,恒为全部客户不随筛选变化\n- 矩阵新增「累计总消耗」锁左列(users.used_quota,终身值);排序改按累计总消耗降序,切日期范围顺序稳定\n- 待跟进分级:30天内有消费出状况=紧急(计红徽章),30天无消费=长期沉默(灰色折叠区)\n- 报警栏目开关:模型监控/服务端监控独立启停,关闭栏目不发邮件仍记「最近告警」\n- SMTP 465 一律隐式TLS(发信与主站同步均是),根治 Resend 465 超时坑\n- 分组管理/用户管理:改名+搜索+严格20条分页+默认折叠;点公司卡自动滚至每日消费\n- 视觉修订:负余额标红、金色收敛至三处、热力感知刻度(sqrt)、汇总条层级、危险操作hover才红、行高收紧",
          "is_bot": false,
          "headline": "feat(usage): 页顶总账汇总条 + 待跟进分级 + 报警分栏目开关 + 465强制TLS + 稳定排序与管理表升级",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-14T08:54:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1728879e853192958c145f7ad6836a5646c6c5b",
          "body": null,
          "is_bot": false,
          "headline": "Merge dev: v1.7.0 客户跟进(按人识别·按公司归拢)+ 分组编辑对齐",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-09T09:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b1d7bcdd0ab77c513976de3f817d9e25831384a",
          "body": "- 新增「待跟进」:按每个用户近30天消费/余额/阶段(试用·正式)自动识别需联系客户\n  规则逐人判定,结果按公司分组展示;公司行显示\"N人需跟进\",展开看到具体是谁、\n  为什么、建议动作,右侧「看消费/记跟进」均针对该用户\n- 跟进记录改为按 user_id(FollowUpLog GroupID→UserID),抽屉标题带用户名\n- 修复分组管理「编辑」行列错位:编辑态补齐为6列(状态列保留原下拉),名称框自动聚焦\n- 用户备注保存后绿框闪烁反馈,明确\"已生效\"\n- computeFollowUps 返回 []FollowUpCompany{Members:[]FollowUpMember};测试同步更新",
          "is_bot": false,
          "headline": "feat(usage): 客户跟进(按人识别·按公司归拢)+ 分组编辑列对齐 + 备注保存反馈",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-09T09:24:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1da473e78c8fcb8510afbfe61a2513b59d505b15",
          "body": "- 用户备注:tracked_users 加 note(≤200,本地元数据,升级兼容);POST /usage/users/note;\n  「检测用户」表加备注列超管行内可编辑;标签刷新保留备注(测试覆盖)\n- 用户名悬浮卡:停在矩阵用户名上弹自定义卡(用户名/ID/完整邮箱/分组徽标/📝备注),\n  跟随鼠标、贴边翻转、不挡点击,替代原生 title\n- 客户分组管理表加「区间消耗」列:从矩阵缓存按 group_id 求和(与汇总卡/公司详情同源,\n  随查询时间范围重算),零新增生产库查询\n- 矩阵副标题精简:行=用户/列=日期/格=当日消耗(美元)· 点用户看详情,左右拖动看更多天\n\n本地栈 CDP 实测:悬浮卡内容、分组消耗列(.07//bin/zsh.00)、备注编辑与展示。",
          "is_bot": false,
          "headline": "feat(monitor): 用户备注 + 用户名悬浮卡 + 分组区间消耗列 + 副标题精简",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-09T06:25:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80034a4a96156dd29dea7792b9414149ccb0ea92",
          "body": "Release v1.6.0: 用量客户管理(客户分组+用户名+卡片UI)",
          "is_bot": false,
          "headline": "Merge dev: v1.6.0 用量客户管理(分组+用户名+卡片UI)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-09T05:33:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2faa3e6081e990847834ebb03e4d75dcb2653949",
          "body": "- 卡片布局 flex-wrap → CSS Grid 等宽自适应(auto-fill),统一列宽/对齐,详情贴右,\n  全部用户卡淡强调底;修长公司名截断\n- 分组卡条独立成卡(与消费矩阵之间留白分隔),不再糊在一起\n- 折叠改为默认只显一行(全部+Top(一行容量-2)+更多;按容器宽度动态测行容量),\n  点「更多」全展开、末尾「收起」;筛选中的组强制可见\n- 搜索拆两处:工具条搜索限用户名/邮箱;公司改为分组卡右上「跳到公司」带搜索下拉\n  (选中=筛选矩阵,与点卡片双向同步)\n\n纯前端;本地栈 CDP 实测折叠一行/展开/公司下拉命中。",
          "is_bot": false,
          "headline": "refactor(monitor): 用量分组卡条 UI — 网格等宽 + 默认一行折叠 + 公司下拉/用户搜索拆分",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-09T05:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "824eccacb528b51fe06f34a16d0bafa2a70c4ed2",
          "body": "需求1(用户名):添加检测用户支持 用户ID/用户名/邮箱 三选一(一条等值查询,\nusername 在 new-api 唯一;纯数字撞车时 ID 优先,仍撞报错让用 ID);矩阵用户格改\n两行=用户名(主)+邮箱(次),详情标题/标签用户名优先。\n\n需求2(客户分组):新表 customer_groups(name 唯一+note),tracked_users 加 group_id;\n- 接口:GET /usage/groups,POST /usage/groups|/update|/delete(解散=成员回未分组,\n  不删用户),POST /usage/users/group 改归属;\n[…]\n符串(原 'today'=浏览器时区,CST 跨天早于\n浏览器时预设结束日被拒、区间塌成单天);setUserGroup/deleteGroup 补 json tag。\n\n测试:解析矩阵(ID/用户名/邮箱/数字撞车消歧)、分组 CRUD/唯一/解散语义;全量绿;\n本地栈 e2e:建组/归组/矩阵字段/公司详情(成员数+余额合计)/改属/解散/搜索/筛选,\nCDP 截图列表+筛选态+公司详情全过。",
          "is_bot": false,
          "headline": "feat(monitor): 用量页客户管理 — 客户分组(公司) + 用户名添加/展示",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-09T04:25:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "40348e35c26de4aae874399568f958464b41b054",
          "body": "Release v1.5.1: 用量页增强(余额/近15天/日历范围选择器)",
          "is_bot": false,
          "headline": "Merge dev: v1.5.1 用量页增强(余额/近15天/日历选择器)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-08T23:52:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb51c4fe5fdf57c0b2fcdeaf3c6775c6b51fa5c6",
          "body": "- 矩阵「用户」后新增【余额】列(随用户列一起锁左),详情页「总费用」后新增【余额】卡:\n  值=主站 users.quota 折美元,每次查询实时取(标签刷新顺路带回,不落库存快照);\n  主站已删用户显示 —(balance_usd=null)\n- 时间预设新增「近15天」\n- 自定义日期改用双月历范围选择器(内嵌 flatpickr v4.6.13+zh,MIT,同 echarts 自服务\n  不走 CDN;暗色主题),与 new-api 日志查询同风格;数据按天聚合故为日期粒度\n- 查询区间上限 190→90 天:服务端 maxUsageDays=90(>=判定),前端选起点后动态把\n  可选窗口收紧到 ±89 天(含端点恰 90 天)\n\n测试:余额随标签刷新取回/已删用户无余额、90/91 天边界更新;全量 go test 绿;\n本地栈实测矩阵余额列/详情余额卡/双月历/动态窗口(min=起点-89d,max=今天)/91天服务端拒。",
          "is_bot": false,
          "headline": "feat(monitor): 用量页增强 — 余额列/余额卡 + 近15天 + 日历范围选择器(90天上限)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-08T15:42:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "844b1d4b860c7b4936122ffded327c336c7b9d5a",
          "body": "Release v1.5.0: 用户用量 Tab(检测用户消费矩阵+详情)",
          "is_bot": false,
          "headline": "Merge dev: v1.5.0 用户用量 Tab(消费矩阵+详情)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-08T12:52:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f870d5496ccbdc226866549a6b45bb3ac776e30a",
          "body": "审查(7角度扫描+逐条验证)后修复:\n- POST 增删检测用户补 Accept 头:此前会话过期时 requireRole 走 302 跳登录页,\n  fetch 跟随后误判成功(假\"已添加\");同时补齐 !res.ok/401/错误提示,移除不再静默失败\n- 预设日期改按 CST 计算(+8h 后取 UTC 历法字段):此前用浏览器本地时区,\n  非东八区浏览器点\"今天\"会整体偏一天\n- 删除 by_user 死查询:前端改矩阵+单用户详情后无人消费,每次详情页白耗一条\n  生产库 GROUP BY(锁内);UsageStats 移除 ByUser 字段\n- 检测用户标签每次矩阵查询按 i\n[…]\n矩阵格数护栏(>2万格提示缩范围)、响应乱序丢弃(seq)、enabled:false 明示、\n  quota=0 显示 $0.00 不再与当日合计 — 矛盾、IS_ROOT 竞态补渲染\n\n测试:新增 190/191 天边界、标签刷新(含回写与已删用户保留)用例;全量 go test 绿;\n本地容器 e2e 逐项复验(401 JSON/by_user 消失/标签自愈/边界拒绝/CST 预设边界)。",
          "is_bot": false,
          "headline": "fix(monitor): 用量功能代码审查修复(2 bug + 若干风险加固)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-08T11:49:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b200dcbba33f09fc5a98f84f68227c22582cfef3",
          "body": "按使用反馈重排信息架构:列表页=消费矩阵(行=用户邮箱锁左、列=日期横向滚动、\n最右每人合计锁右、底部当日合计钉底),点用户进详情(原图表视图,带返回);\n统一列宽+表头禁折行+金额两位小数(不足一分 <$0.01,精确值悬停)+热力着色。",
          "is_bot": false,
          "headline": "feat(monitor): 用量矩阵转置为 行=用户×列=日期 + 宽表显示优化",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-08T11:49:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a0d61eb6f5092b320f838ba289b8c29ac44d9df",
          "body": "新增第三个 Tab「用户用量」:超管按邮箱或用户ID添加检测用户(名单存监控本地\nsqlite tracked_users,不动主站),对生产库 logs 表做按需聚合——每日总量(东八区\n自然日)、按分组、按模型、按用户,费用=quota/500000 美元;时间范围可选\n(今天/近7天/近30天/自定义,上限190天)。\n\n生产库负担边界:按需查询(打开tab/点查询才发)+ 窗口化 + 全部命中现有索引\n(idx_logs_user_id/idx_created_at_type)+ usageMu 串行闸,叠加连接池上限(2);\n采样器仍是唯一常驻查询者。鉴权沿用全站约定:管理员可看,仅超管可增删名单。\n\n测试:名单CRUD/输入判别/时间范围/聚合链路(sqlite假生产库端到端,含CST切日\n边界与type=5排除),go test 全绿;本地 MySQL(rc.4 schema)+登录桩 e2e 实测\n接口与页面(CDP截图),数字与角色门禁(403)全部核对通过。",
          "is_bot": false,
          "headline": "feat(monitor): 用户用量 Tab — 盯指定用户按需聚合 logs(每日/分组/模型/费用)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-07-08T07:15:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc435b8085ebf6c0bd878c2897ae04e7ad4a5dd9",
          "body": null,
          "is_bot": false,
          "headline": "Merge dev: v1.4.0 服务端监控 + hostagent",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-24T09:52:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83e919fe165fef9d7196448a4bce82ed1f52562f",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.4.0 — 服务端监控(实例/DB/LB/探活/源站锁/分组图)+ hostagent",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-24T09:52:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ccd0a4365d079c2ac502db80876e77ac07c24c5",
          "body": "…g(灰度部署落地)",
          "is_bot": false,
          "headline": "chore(deploy): hostagent compose 接入 docker 网络 + extra_hosts + 可配镜像 ta…",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-24T09:37:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8d51f2f232f84a38d689df3402cc72a900b11ea",
          "body": "- 服务端监控图:内存/存储从「可用」改为「已用」(已用=总-可用,高用量上红),图同口径;下拉标签同步\n- hostagent + 接收端:指标改指针/omitempty,某项采集失败即不上报该项(避免「缺失=0」被算成已用100%误报)\n- CHANGELOG Unreleased 对齐实际(分组图/探活经CDN/源站锁/hostagent 同仓)",
          "is_bot": false,
          "headline": "feat(monitor): 容量指标按惯例显示「已用」+ agent 采集失败不上报该项",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-23T13:18:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6444b04ab3800138f3358a99eca55768e8f11d2",
          "body": "- 端到端探活:增加「是否经 CloudFront(Via 头)」校验,脱离 CDN 记黄(MONITOR_PROBE_EXPECT_CDN)\n- 源站锁看门狗(F-5):直连各源站不带密钥头应被拦 403,变 200 即红告警(MONITOR_ORIGIN_LOCK_*)\n- 分组指标图:DB/实例统一「指标组下拉 + 图」,关联指标同组(内存=可用内存+Swap 等),\n  图顶部带当前值+颜色;实例默认一行、点开看图;按需 /infra/series 拉近6h 序列\n- 实例按重要程度排序(Master>Slave>Redis>其余)\n- 新增 hostagent(cmd/hostagent):采本机内存/Swap/磁盘/load/容器存活推 /internal/host,\n  纯 stdlib、只读、fail-open;接收端扩展 load5/15+容器,Swap 统一 swap_mb\n- CI 增加 hostagent 镜像构建(matrix)",
          "is_bot": false,
          "headline": "feat(monitor): 服务端监控增强 — 经CDN校验/源站锁看门狗/分组指标图 + 节点 OS 采集器",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-23T12:13:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a1354b027d6e6006489e4df54049d962fd7238e",
          "body": "- page.html 加 Tab 栏,现有模型监控原样包进 tab-model(逻辑不变)\n- 新增 tab-server:数据库卡片(含可用内存/Swap 数值 + 近6h ECharts 趋势)、实例表、负载均衡卡片\n- 切到服务端 tab 才拉 /infra 并 60s 轮询,切走停;未启用时提示开 MONITOR_INFRA_ENABLED\n- CHANGELOG 记 Unreleased",
          "is_bot": false,
          "headline": "feat(monitor): 服务端监控前端 — 模型/服务端 两 Tab + 实例/DB/LB 面板",
          "author_name": "yl",
          "author_login": null,
          "committed_at": "2026-06-21T12:35:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4743cd38e4ea5482523909a8eb56b0df58afc58e",
          "body": "… 告警(默认关)\n\n- infra.go: Lightsail 指标拉取(自动发现+一次一statistic+单位归一)、快照、阈值色标、基础设施告警\n- store.go: InfraSample 长格式时序表 + upsert/latest/series/prune\n- server.go: GET /infra(role>=admin) + POST /internal/host(Bearer 接收节点agent)\n- settings.go: MONITOR_INFRA_ENABLED 默认关 + AWS_REGION + 采样/留存/资源配置\n- 关时不调 AWS、不影响 /data 与模型监控",
          "is_bot": false,
          "headline": "feat(monitor): 服务端健康监控后端 — AWS 拉取实例/DB/LB + /infra + /internal/host +…",
          "author_name": "yl",
          "author_login": null,
          "committed_at": "2026-06-21T12:26:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e4213616d9f0edf076b96314db63a2b7ad5d6de",
          "body": "docs: 同步 CHANGELOG v1.3.2 段到 main",
          "is_bot": false,
          "headline": "Merge pull request #16 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-12T06:34:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb43c3d7d4da3e0d1f180168613e9a42a305861f",
          "body": "Co-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: CHANGELOG 归位 v1.3.2 段(此前挂在 Unreleased) (#15)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T16:45:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "921fe4b76f423431cf94d5c3a9185f782e89e027",
          "body": "release: v1.3.2",
          "is_bot": false,
          "headline": "Merge pull request #14 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T16:31:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afbabc0b2582d27dbbaeda719a8dda0f7ba7ff18",
          "body": "- README(中英):状态合成改为'只展示可选模型'+档位阈值(99/50)+分组状态;\n  删过时的'无可用渠道→outage';补'只展示/统计可选模型'说明(看板/监控/报警一致)\n- public 包 splitList 补 doc 注释(与 monitor 包统一)\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: README 对齐新状态语义 + splitList 注释统一 (#13)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T16:28:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f60f0b745f58eb203496ec649d5349c8837de0a7",
          "body": "- 新增 selectable_pairs 表(分组,模型);采样器每分钟拉 /api/pricing 可见分组 ∩ 启用渠道配置 重算\n- 稳定性聚合(总览/分组/模型/趋势 + 报警 summary)加 selectableFilter,排除误路由/全禁用/不可选分组\n- 表为空 fail-open(不过滤),避免新部署空窗;按渠道明细不加,排障仍可见误路由\n- 加 splitList 辅助;测试 TestSelectableFilter*\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(monitor): 监控也只统计用户可选的模型(不可选不报警) (#12)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T16:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c7fdfc8b1f781cabb5247a5172e88ba068a5963",
          "body": "- channelMaps 只统计启用渠道(去掉 offered);compute 用 selectableModels(enabled[group])\n- 模型清单不再含'有流量但无启用渠道'的(误路由/历史),只显示该可见分组下有启用渠道配置的模型\n- 覆盖:全禁用、只在不可选分组、误路由(如 gpt-image-1 只配 internal_test 却因误路由出现在 codex-1.2x)\n- 删 mergedModels,加 selectableModels;无 * 通配渠道(已核实),安全\n- 更新 TestComputeTopologyAndTraffic;CHANGELOG 补 [1.3.1] 段\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(public): 看板只显示用户可选的模型(隐藏不可选) (#11)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T15:49:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "515004b4ac1f48a81b0dfc4d2f4bcc236a38d273",
          "body": "release: v1.3.1",
          "is_bot": false,
          "headline": "Merge pull request #10 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T15:10:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79fb2bd3b75375ec45392bfa8441b34381aad1a9",
          "body": "- band:不可用只留给 <50%/无上游;50–99% → 性能下降(原 <85% 过狠)\n- groupStatus:有正常模型最多性能下降,无正常才不可用(原取最差,夸大)\n- 前端分组卡/弹层改用后端 g.status(原 worst 重算盖掉后端);清 worst 死代码\n- 当前事件只列真·outage,不广播降级;rule 文案中英同步阈值\n- 测试:TestGroupStatus + 更新 band/overall 断言\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(public): 看板状态语义重新平衡(诚实但不夸大) (#9)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T10:54:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1db4d05bc169cba5f1c191a7552f874b1191600",
          "body": "- refreshChannels 移到每个采样周期(1分钟),禁用/重启用近乎实时反映到稳定性\n- 看板心跳条 tooltip 显示桶时间区间(末桶=现在),消除'数据只到13点'歧义\n- 单桶请求<5 不画红/黄,对外页避免偶发失败被呈现为'差'\n- CHANGELOG:补 [1.3.0] 段(此前已发但仍挂 Unreleased)\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(monitor): 渠道每分钟同步 + 心跳条 tooltip 区间 + 稀疏桶不画红 (#8)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T10:28:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b3784db146579246d6872b0f671a4c8a3ddeae4",
          "body": "release: v1.3.0",
          "is_bot": false,
          "headline": "Merge pull request #7 from yl0711-coder/dev",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T09:29:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23a2c9f1787fb48b1bd9ebb5896960eb6dd418cc",
          "body": "nextEnabledSince:上轮已启用则保持原 enabled_since(含0=自始启用算全量),\n只有新建/从禁用重启用才记为 now。避免升级首刷把所有启用渠道的 enabled_since\n设成部署时刻、导致看板可用率上线后突然变空。\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(monitor): 监控升级不重置既有渠道的稳定性历史 (#6)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T09:21:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39ca4aa51fa2f8c8b1916b8db6213e95f6361afe",
          "body": "中英对齐:README.en 此前缺整个被拒请求(前置拒绝)章节与该 token 配置项,补齐达开源双语对等。\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: 英文 README 补「被拒请求」章节 + MONITOR_INGEST_TOKEN 配置行 (#5)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T08:49:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b364dccdcd234d51b5e026fbc0edf987b6784ca",
          "body": "- channelEnabledState 返回值从 map[int][2]int64(位置编码)改为具名结构 chanPrev,去掉 p[0]/p[1] 与 int64 转换\n- README/README.en 补「禁用渠道不计入稳定性」口径(含 enabled_since、按渠道仍保留)\n- README 被拒段更正为「超管开关控制面板」(原述 token 控制已过时)\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore(monitor): 复查打磨——可读性 + 文档 (#4)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T08:17:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8218a7450ff611633d64f98fa9e769c7cbe91849",
          "body": "- channel_snaps 增 enabled_since,采样器检测启用跳变维护它(新建/重启用记当下)\n- 跨渠道聚合(总览/分组/模型/趋势 + 看板 totals/series)排除'已禁用或启用前'的渠道流量\n- 用 NOT EXISTS(反向),无渠道快照默认保留,避免新部署空窗;按渠道明细不过滤,排障仍可见禁用渠道\n- nextEnabledSince 纯函数 + 端到端测试(禁用排除/重启用从启用时刻/按渠道全显/看板bug场景)\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(monitor): 禁用渠道不再拖低稳定性(看板+监控) (#3)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T08:02:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e455966aeca669049b364ffc1c8b05d13e815aa4",
          "body": "- 报警设置页加「被拒请求」开关(reject_panel_enabled,默认关),旁附说明需装采集器\n- 快照下发 reject_enabled;前端按开关渲染:关→隐藏,开+无数据→空状态提示部署采集器,开+有数据→表格\n- computeSnapshot 仅在开启时查 rejection_samples\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(monitor): 被拒请求面板加超管开关 + 空状态提示 (#2)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T06:50:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e0a3f1ff539ced5929b9d94cc0cd21a9acd233e",
          "body": "按《开发手册/01-Git协作与发版规范》:dev 累积日常/上线后修复,CI 出 :dev 镜像灰度;PR 目标 dev 也跑测试。\n\nCo-authored-by: yl0711-coder <yl0711-coder@users.noreply.github.com>",
          "is_bot": false,
          "headline": "ci: dev 分支跑 CI 并构建 :dev 测试镜像 (#1)",
          "author_name": "Lei",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-11T06:20:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5613bd45c8c3c03be7bd99b40487f90631e9fa40",
          "body": "- POST /internal/rejections 接收接口(MONITOR_INGEST_TOKEN 鉴权,留空则关闭)\n- rejection_samples 表(节点×桶×原因×模型×分组 累加幂等)+ 随留存清理\n- Snapshot 增 rejections;内部监控加「被拒请求」面板(模型×分组,无数据隐藏)\n- 配套独立采集器 newapi-reject-collector;单测覆盖累加/聚合/接口鉴权",
          "is_bot": false,
          "headline": "feat(monitor): 被拒请求(前置拒绝)监控——接收采集器推送 + 面板",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T12:59:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "341e8bac32902035e43a8eeb34d04570205db8a6",
          "body": null,
          "is_bot": false,
          "headline": "chore(public): GLM→智谱徽章 + 清理去横幅后的死代码(ICON/banner_*)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T09:24:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "487b51851acb57db1c3013074dba324d18da9580",
          "body": null,
          "is_bot": false,
          "headline": "chore(public): 看板副标题改为「服务可用性看板」",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T08:38:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b942ea75cdf7521ab7c4731b339a03fa0d7f001f",
          "body": "- 移除顶部整体状态横幅:不向客户广播'部分服务降级'总览,明细仍在卡片\n- 头部 logo 改用主站同步的 logo 图,与 favicon 统一;无 logo 回退首字母",
          "is_bot": false,
          "headline": "feat(public): 看板去掉整体横幅 + 头部logo用主站图(与favicon一致)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T08:24:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c668a1d364b09e3ec0fa853a8d0a6a4e1bf87555",
          "body": "- 部署时从 new-api /api/status 取 system_name + logo,注入看板\n- 站点名空→前端显通用名;MONITOR_SITE_NAME 仅兜底(默认改空,不再默认 NexusAPI)\n- /public/status 增 site/logo 字段;标题/favicon/logo 全动态,保持开源通用\n- README/CHANGELOG 同步;TestEndpoints 断言改通用串",
          "is_bot": false,
          "headline": "feat(public): 看板站点名/favicon 改为从主站同步,去掉硬编码品牌",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T07:47:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54d35598a011f3d87fef2f753c8432ae727a2696",
          "body": "- 状态由近期窗口(24h)流量+渠道健康决定,不被一周前旧数据钉死\n- 有健康渠道但近期无流量→正常;数据陈旧(最新>48h)可用率/延迟显—\n- 档位 正常≥99/降级85–99/不可用<85(原<95一刀切过狠,把严重降级误判不可用)\n- 看板规则文案(中英)同步;加陈旧不判死单测",
          "is_bot": false,
          "headline": "fix(public): 状态反映当下(近期+拓扑)、陈旧不判死、档位<85才红",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T05:50:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78a296d38df44593f87c9f8f3e4a3ef255702a25",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): 发布 v1.1.0 段(对外看板)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T05:17:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "464833c3afb243f47cf4f24b07689f883fa6d3b3",
          "body": "- status.html 全界面国际化:中/EN 切换、按浏览器语言默认、localStorage 记忆;\n  分组名/模型名等标识符不翻译,仅翻 UI 文案\n- public 包三处本地查询补 slog.Warn(失败优雅降级为空且不再静默)\n- docker-compose 示例补 MONITOR_SITE_NAME 等看板配置项(日志轮转本已配)",
          "is_bot": false,
          "headline": "feat(public): 看板中英双语 i18n + 查询错误日志 + compose 看板配置",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T04:17:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ef3b90e27ee10ea51ff9b7d01bc574703aca610",
          "body": "看板:\n- 落地页改为分组卡片(展示该线路最稳定推荐模型),点击弹层看组内全部模型\n- 去掉分组选择条;搜索框重做为跨线路对比某模型稳定性\n- 分组显示名改用分组 key(= 用户建令牌所选,如 codex-1.2x),不再用含敏感字样的描述\n\n开源标准(达到 A):\n- CHANGELOG 补 [1.0.0] 发布段 + [Unreleased] 看板;新增 SECURITY.md、CODE_OF_CONDUCT.md\n- 英文 README 补对外看板节 + 补齐配置项(HOUR_RETENTION/HEARTBEAT/SITE_NAME)\n- golangci-lint 加严:misspell/errorlint/unconvert/bodyclose/revive/gocritic,全过 0 issue\n- 地道命名:ChannelId→ChannelID、ChannelSnap.Id→ID、public.Public{Model,Group,Snapshot}→{Model,Group,Snapshot}(去 stutter)\n- 导出类型补 godoc;阻塞导入加说明注释",
          "is_bot": false,
          "headline": "feat(public): 看板布局重构 + 开源标准达标",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T03:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3c67219cd7163a09883b704138c51a0a7571123",
          "body": "- 新增 monitor/public 独立包:GET /status 页面 + GET /public/status 脱敏 JSON,无鉴权\n- 维度=分组(线路)×模型,渠道对用户透明;可见分组取自 new-api /api/pricing 的 usable_group(与令牌创建页同名)\n- 状态合成:拓扑健康(channel_snaps 派生'无可用渠道')∧ 近7天流量;可用率排除用户4xx\n- Kuma 风格心跳条(50桶/7天)+ 整体横幅 + 当前事件 + 概览 + 线路筛选 + 模型搜索 + 自动刷新\n- 采样器顺带快照渠道状态/分组/模型到本地 channel_snaps(只读非密字段,生产库零额外负担)\n- 强隔离:public 包绝不引用内部结构,独立脱敏结构体;公开面不出渠道/成本/Key/请求量/错误详情\n- 配置 MONITOR_SITE_NAME;含单测(状态合成/无可用渠道/脱敏/端点)",
          "is_bot": false,
          "headline": "feat(public): 对外公开服务状态看板(分组×模型,脱敏,自研内嵌)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-10T01:21:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2828cd3b4ebe61bf8f3931b6e00a53579db2b66b",
          "body": "- 快照按窗口短 TTL(15s)缓存:去重并发请求、减少重复重算,给 slave 减负\n- 延迟分布:总延迟 + 首字 TTFT 直方图(ECharts 柱状,数据早已采、零额外查询)\n- 看板下钻:渠道/模型行可点击展开——逐分钟异常/错误时间 + 错误构成 + 延迟分位,展开态 30s 刷新不收起\n- 三项均 fit slave:缓存反而减负,图与下钻在浏览器侧",
          "is_bot": false,
          "headline": "feat(monitor): 快照缓存(减负) + 延迟分布直方图 + 看板下钻",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T09:06:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18d0624207c2dc5322c72756ca15c440116ad233",
          "body": "- HourSample 小时汇总表:分钟数据被清前滚动汇总,默认留 90 天(可配 MONITOR_HOUR_RETENTION_DAYS)\n- 存储按'每小时一行'增长、与请求量无关,90 天约几 MB,双层滚动清理封顶\n- 同比环比面板:近24h vs 前24h(环比)vs 上周同期(同比),含请求/成功率/错误/成本\n- 长期趋势图(ECharts):7/30/90 天可切,/trend/long 按需拉取不进 30s 轮询\n- 替代 Prometheus 长留存的一部分,纯本地、fit slave",
          "is_bot": false,
          "headline": "feat(monitor): 小时级 rollup 长留存 + 同比环比 + 长期趋势图",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T08:18:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "014762e043a6c8fc7b53b3db5c17b7e8ed1c4b2f",
          "body": "- ECharts(Apache-2.0,内嵌自服务/不走 CDN):趋势图改交互式折线、SLO 改仪表盘\n- go-mail(MIT):报警邮件改 HTML 美观排版,替掉手搓 SMTP\n- 标准库 slog:结构化日志 + 分级(替 log.Printf)\n- 三者均 fit slave:ECharts 在浏览器跑零服务端负担,go-mail/slog 开销极小\n- README 补第三方组件致谢",
          "is_bot": false,
          "headline": "feat(monitor): 接入成熟开源组件提升观感与可维护性",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T07:41:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "502f3cdf5fb01060010119ea857c55c320e4a1b0",
          "body": "…)+慢烧(记单)两档告警,全部可配",
          "is_bot": false,
          "headline": "feat(monitor): SLO / 错误预算 + 燃烧告警——SLI=非错误率,看板显示目标/达标率/剩余预算/燃烧速度,快烧(紧急…",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T06:33:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "095c7f78d0c5691053fe3c04c0ad14d62087f092",
          "body": "…按 Key/用户'表",
          "is_bot": false,
          "headline": "feat(monitor): per-Key/用户维度——按令牌聚合成功率/异常/错误/用量/成本(独立隔离采样,Top100),看板加'…",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T05:16:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f26a3b39a3bd2edf046eda0b7423dd2e1e8c66eb",
          "body": "…,监控/采样停了由外部告警",
          "is_bot": false,
          "headline": "feat(monitor): dead-man 心跳——每周期成功采样后 ping 外部服务(MONITOR_HEARTBEAT_URL)…",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T04:48:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "386aacaf3af096985a97caadce9b5c80211ec1fc",
          "body": null,
          "is_bot": false,
          "headline": "style(dashboard): 需要关注展开箭头改大改亮(实心三角▶+强调色),点开前更清晰",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T04:25:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3d0676bce8cbdb420823652a665f5920df36c22",
          "body": null,
          "is_bot": false,
          "headline": "feat(dashboard): 需要关注列表显示异常/错误时间——行内时间跨度 + 点击展开逐分钟明细",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T04:17:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34c989b5df333d7d6b5acaf6dd622ccde9c06632",
          "body": null,
          "is_bot": false,
          "headline": "fix(docker): 构建产物输出到 /app,避免与源码 monitor/ 目录冲突导致 /app/monitor 变成目录",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-09T03:27:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da59c8645b0d43457635fcb816c64d7de15074ff",
          "body": "- 只读账号每分钟对 new-api 日志库做一条聚合查询,本地 SQLite 留存\n- 分组/渠道/模型维度成功率、三态、响应耗时(TTFB/TTFT)、出字速度\n- 邮件报警:错误率/突发/异常成簇/采样掉线,阈值可配\n- 登录复用 new-api 身份按角色分权;动态站点名 + 📈 favicon\n- 单测覆盖核心逻辑与存储聚合;CI:vet+test+lint→GHCR",
          "is_bot": false,
          "headline": "feat: new-api 上游监控(零侵入只读采样 + 三态稳定性看板 + 邮件报警)",
          "author_name": "yl0711-coder",
          "author_login": "yl0711-coder",
          "committed_at": "2026-06-08T13:59:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 22,
      "commits_last_year": 87,
      "latest_release_at": "2026-08-07T12:48:18Z",
      "latest_release_tag": "v1.11.0",
      "releases_from_tags": true,
      "days_since_last_push": 0,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 3.3
    },
    "artifacts": {
      "collected": true,
      "structure": [
        "tree.compose",
        "tree.dockerfile",
        "tree.go_importable",
        "tree.go_main"
      ],
      "declarations": []
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "readme_badges": {
        "hosts": [
          "github.com",
          "goreportcard.com",
          "shields.io"
        ],
        "total": 3,
        "header": 3,
        "collected": true,
        "has_inspect_badge": false
      },
      "has_description": false,
      "has_contributing": true,
      "health_percentage": 85,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/yl0711-coder/newapi-monitor",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "categories": [],
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/yl0711-coder/newapi-monitor",
          "declared_type": null,
          "is_deprecated": false,
          "latest_version": "v1.11.0",
          "repository_url": "https://github.com/yl0711-coder/newapi-monitor",
          "versions_count": 22,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-08-07T12:48:18Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "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": 2454934,
      "source_files_sampled": 72,
      "oversized_source_files": 5,
      "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": "github.com/aws/aws-sdk-go-v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.42.0"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/config",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.32.25"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/service/lightsail",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.56.1"
        },
        {
          "name": "github.com/gin-gonic/gin",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.12.0"
        },
        {
          "name": "github.com/glebarez/go-sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.21.2"
        },
        {
          "name": "github.com/glebarez/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.0"
        },
        {
          "name": "github.com/go-sql-driver/mysql",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.0"
        },
        {
          "name": "github.com/joho/godotenv",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.1"
        },
        {
          "name": "github.com/redis/go-redis/v9",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v9.20.0"
        },
        {
          "name": "github.com/wneessen/go-mail",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.7.3"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.53.0"
        },
        {
          "name": "golang.org/x/net",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.56.0"
        },
        {
          "name": "gorm.io/gorm",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.31.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 24,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "yl0711-coder",
          "commits": 85,
          "avatar_url": "https://avatars.githubusercontent.com/u/240414268?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/17 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": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "1cb4eb07f7bb7bc4d91c358045d2e07f995b909e",
        "ran_at": "2026-08-08T08:29:17Z",
        "aggregate_score": 4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "recent_prs": {
        "merged_7d": 4,
        "decided_7d": 4,
        "merged_30d": 5,
        "authors_30d": 1,
        "decided_30d": 5,
        "sample_size": 24,
        "window_days": 30,
        "sample_exhausted": false,
        "authors_probed_30d": 1,
        "newcomer_merged_30d": 0,
        "bot_prs_excluded_30d": 0,
        "newcomer_authors_30d": 0,
        "newcomer_decided_30d": 0
      },
      "ci_last_run_at": "2026-08-07T12:53:49Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-08-07T12:48:18Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/yl0711-coder/newapi-monitor",
    "host": "github.com",
    "name": "newapi-monitor",
    "owner": "yl0711-coder"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": "The weighted overall 56 is calibrated to 59 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 56,
            "calibrated": 59,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 59,
      "inputs": {
        "security": 40,
        "vitality": 70,
        "community": 43,
        "governance": 46,
        "calibration": "2026-08-02",
        "engineering": 76,
        "ai_readiness": 66,
        "weighted_overall_raw": 56
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 70,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "commits_last_year": 87,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "87 commits in the last year",
                "points": 17.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 87
                    }
                  }
                ],
                "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": 22,
              "latest_release_tag": "v1.11.0",
              "releases_from_tags": true,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 3.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "22 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 22
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.3
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "exceptional",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": "weak",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.17,
        "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": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": 3,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [
                "github.com",
                "goreportcard.com",
                "shields.io"
              ],
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "weak",
        "name": "Sustainability & Governance",
        "value": 46,
        "weight": 0.23,
        "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": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 67,
            "inputs": {
              "merged_prs": 24,
              "open_issues": 0,
              "closed_issues": 0,
              "prs_merged_7d": 4,
              "prs_decided_7d": 4,
              "prs_merged_30d": 5,
              "prs_decided_30d": 5,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0,
              "first_time_authors_30d": 0,
              "first_time_prs_merged_30d": 0,
              "first_time_prs_decided_30d": 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": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "24/24 decided PRs merged",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 24,
                      "decided": 24
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 25,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "yl0711-coder",
              "public_repos": 14,
              "account_age_days": 285
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of yl0711-coder",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "yl0711-coder"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "14 public repos, account ~0 yr old",
                "points": 10.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 14
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/yl0711-coder/newapi-monitor"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "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 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "22 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 22
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 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": "weak",
        "name": "Security",
        "value": 40,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 40,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/17 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": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "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": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 66,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "weak",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.943,
              "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": "82 of 87 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 82,
                      "sampled": 87
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.034,
              "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "3 of the last 87 commits agent-authored or agent-credited",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 3,
                      "sampled": 87
                    }
                  }
                ],
                "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": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 2454934,
              "source_files_sampled": 72,
              "oversized_source_files": 5
            },
            "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": "5/72 source files over 60KB",
                "points": 51.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 72,
                      "oversized": 5
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [
        "library",
        "application"
      ],
      "labels": [
        "network-service",
        "library"
      ],
      "scores": {
        "library": 6,
        "application": 5,
        "network-service": 7
      },
      "primary": "network-service",
      "evidence": [
        {
          "tier": "structure",
          "label": "application",
          "source": "tree.go_main",
          "weight": 5
        },
        {
          "tier": "dependencies",
          "label": "network-service",
          "source": "dep:github.com/gin-gonic/gin",
          "weight": 4
        },
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:go",
          "weight": 3
        },
        {
          "tier": "structure",
          "label": "library",
          "source": "tree.go_importable",
          "weight": 3
        },
        {
          "tier": "structure",
          "label": "network-service",
          "source": "tree.compose",
          "weight": 3
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.5.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-08T08:29:29.220748Z",
  "schema_version": "0.31.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/y/yl0711-coder/newapi-monitor.svg",
  "full_name": "yl0711-coder/newapi-monitor",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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