Registro público
Informe de salud del softwareesquema 0.23.0 · métricas 1.13.0 · 2026-07-21 19:34 UTC

aemeath-projects / exostrider

隧者:TypeScript 事件驱动框架,内置装饰器路由、服务生命周期编排、会话状态机、客户端池管理与结构化日志

TypeScriptMIT★ 0 estrellas⑂ 0 forksdesde jun 2026Ver en GitHub ↗

aemeath-projects/exostrider tiene un índice de salud de 51 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (72/100) y la más baja, Community & Adoption (32/100). Se actualizó por última vez hace 1 día. Una sola persona concentra la mayor parte del trabajo reciente.

51
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

AemeathOrganización
0 seguidores10 repositorios públicosdesde may 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

Métricas por categoría

Vitalidad

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

69Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 1 días
3.5/36Cadencia de commits — 5/52 semanas con commits
16.3/18Volumen de commits — 65 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_year65
human_commit_share0,908
days_since_last_push1
active_weeks_last_year5
Cómo se puntúa
16.2/27Publica versiones — 13 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 4 días
27/27Cadencia de publicación — una versión cada ~2,6 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count13
latest_release_tagv1.1.10
releases_from_tags
days_since_latest_release4
mean_days_between_releases2,6
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

32En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
45.1/80Descargas mensuales — 2401 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@aemeath-projects/exostrider
dependents
ecosystemsnpm
total_downloads
monthly_downloads2401
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

48En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
28.7/38.3Aceptación de PR — 6/8 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/25 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs6
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs2
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de aemeath-projects
8/25Trayectoria — 10 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginaemeath-projects
public_repos10
account_age_days69
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 13 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@aemeath-projects/exostrider
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

58Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
6/20OpenSSF Scorecard: CI-Tests — 1 out of 3 merged PRs checked by a CI test -- score normalized to 3
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

65Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://aemeath.dev
10/10Descripción del repositorio
10/10Topics — 8 topics
0/10Wiki
Datos de entrada utilizados
topicsdecorator, dependency-injection, event-dispatcher, event-driven, message-routing, session-management, state-machine, typescript
has_wikino
homepagehttps://aemeath.dev
has_readme
has_docs_dirno
has_description

Seguridad

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

41En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0.8/2.5CI-Tests — 1 out of 3 merged PRs checked by a CI test -- score normalized to 3
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/25 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
0/10Dangerous-Workflow — dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — 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
1.5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
6.8/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_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,1
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.

Preparación para IA

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

72Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 58 de 59 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,983
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes7049
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — tests/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 65
8/8Mantenimiento automatizado — 6 de los últimos 65 commits son 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
lockfilespnpm-lock.yaml
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstests/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,092
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 0/106 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes33.604
source_files_sampled106
oversized_source_files0

Datos clave

0estrellas de GitHub
1contribuidores
65commits en los últimos 12 meses
1días desde el último push
13versiones publicadas
1factor bus
0issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:@aemeath-projects/exostrider@1.1.10; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 4.1 / 10
4.1agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
3CI-Tests1 out of 3 merged PRs checked by a CI test -- score normalized to 3
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/25 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
0Dangerous-Workflowdangerous workflow patterns detected
10Dependency-Update-Toolupdate 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
3Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Dependencias directas 3
RegistroPaqueteRestricción de versiónManifiesto
npmminimatch^10.2.5package.json
npmpino^10.3.1package.json
npmpino-pretty^13.1.3package.json
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "decorator",
        "dependency-injection",
        "event-dispatcher",
        "event-driven",
        "message-routing",
        "session-management",
        "state-machine",
        "typescript"
      ],
      "is_fork": false,
      "size_kb": 581,
      "has_wiki": false,
      "homepage": "https://aemeath.dev",
      "languages": {
        "JavaScript": 806,
        "TypeScript": 531713
      },
      "pushed_at": "2026-07-20T02:16:02Z",
      "created_at": "2026-06-18T04:58:43Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-19T04:13:12Z",
      "description": "隧者:TypeScript 事件驱动框架,内置装饰器路由、服务生命周期编排、会话状态机、客户端池管理与结构化日志",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "aemeath.dev",
      "name": "Aemeath",
      "type": "Organization",
      "login": "aemeath-projects",
      "company": null,
      "location": "China",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/284291319?v=4",
      "created_at": "2026-05-13T11:00:12Z",
      "is_verified": null,
      "public_repos": 10,
      "account_age_days": 69
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.1.10",
          "kind": "patch",
          "published_at": "2026-07-17T02:37:03Z"
        },
        {
          "tag": "v1.1.9",
          "kind": "patch",
          "published_at": "2026-07-11T19:22:00Z"
        },
        {
          "tag": "v1.1.8",
          "kind": "patch",
          "published_at": "2026-07-11T05:15:11Z"
        },
        {
          "tag": "v1.1.7",
          "kind": "patch",
          "published_at": "2026-07-08T20:38:15Z"
        },
        {
          "tag": "v1.1.6",
          "kind": "patch",
          "published_at": "2026-07-08T05:37:19Z"
        },
        {
          "tag": "v1.1.5",
          "kind": "patch",
          "published_at": "2026-07-04T18:01:36Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2026-06-24T12:03:51Z"
        },
        {
          "tag": "v1.1.3",
          "kind": "patch",
          "published_at": "2026-06-24T11:06:55Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2026-06-24T05:21:25Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-06-23T15:35:25Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-06-23T08:19:24Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-06-22T08:06:28Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-06-22T02:31:59Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "43a0f7d597c75528217276f9fe90ead6e992a159",
          "body": null,
          "is_bot": false,
          "headline": "test(logger): 补充 console 格式下 mixin 附加 traceId 的用例",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-18T06:59:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71f73096ba982ad1f01c4f240a060f4fd3a7266a",
          "body": null,
          "is_bot": false,
          "headline": "feat(logger): createLogger 接入 mixin 自动附加 traceId",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-18T06:53:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99a9f2ee70a6774527070d6f2d6e5aa99be3d957",
          "body": null,
          "is_bot": false,
          "headline": "feat(logger): 新增 AsyncLocalStorage trace context 基础设施",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-18T06:46:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64b8fc334ba9d3581fe94c907aec91fb658a7977",
          "body": "- pnpm 11.11.0 -> 11.13.1\n- eslint 10.6.0 -> 10.7.0\n- typescript-eslint 8.63.0 -> 8.64.0",
          "is_bot": false,
          "headline": "chore(deps): 升级依赖版本",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-17T13:57:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "048c9aae115ec9fb9f6e2e53a52ec5a433dbf5f7",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.10",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-17T02:37:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7430e9aaae06f56cf40771b81e3e1d4eeb8e86cf",
          "body": null,
          "is_bot": false,
          "headline": "test(session,lifecycle): 补充超时模式、自动转换与 applyInjects 的覆盖率及并发鲁棒性测试",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-16T20:16:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1016169d0b12fd36d4bec01179b91e42925d3c19",
          "body": "…ig/TransitionConfig",
          "is_bot": false,
          "headline": "refactor(lifecycle,session): 消除 DI 注入逻辑重复,session 模块拆分并接入 TimeoutConf…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-16T19:24:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "265d0795421e1d2bd8192180d701fd443d6962a6",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of https://github.com/aemeath-projects/exostrider",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-16T12:09:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fad93357257b300a7ac7de290478491888cb71b0",
          "body": "…slint-10.7.0\n\nbuild(deps-dev): bump eslint from 10.6.0 to 10.7.0",
          "is_bot": false,
          "headline": "Merge pull request #7 from aemeath-projects/dependabot/npm_and_yarn/e…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-16T12:07:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d3ba507d4e94905438bbd39cfe7be4e0eb8e23b",
          "body": "…注入失效\n\n- 新增 DispatchInterceptor 接口:每次 dispatch() 恰好执行一次,与 handler 匹配\n  数量无关,适用于无条件归档、埋点上报等场景。preHandle 返回 false 可阻断整次 dispatch。\n- 新增 contextFactory 选项:允许调用方传入自定义 Context 子类的构造逻辑,避免子类\n  新增/覆盖成员在拦截器与 handler 中静默失效。\n- 修复 HandlerRegistry 注入键读取:改用 lifecycle 模块的真实 SERVICE_INJECTS symbol\n  替代 Symbol.for('service:injects'),解决 @Inject 注入静默失效问题。\n- 新增 context-factory 与 dispatch-interceptors 专项测试覆盖。",
          "is_bot": false,
          "headline": "feat(dispatch): 新增 dispatch 级拦截器与自定义 Context 构造工厂,修复 SERVICE_INJECTS …",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-13T07:23:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71051a5258c4ea4832dadfbc35c9f6e4c4d85a2e",
          "body": "Bumps [eslint](https://github.com/eslint/eslint) from 10.6.0 to 10.7.0.\n- [Release notes](https://github.com/eslint/eslint/releases)\n- [Commits](https://github.com/eslint/eslint/compare/v10.6.0...v10.7.0)\n\n---\nupdated-dependencies:\n- dependency-name: eslint\n  dependency-version: 10.7.0\n  dependency-type: direct:development\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): bump eslint from 10.6.0 to 10.7.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T02:14:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b4427e1d4d2075dd832313c45f745ec5e037e14",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.9",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-11T19:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "437f0cac9ee744deffa766bc4fc34301881e9441",
          "body": null,
          "is_bot": false,
          "headline": "test(pool): 新增被动状态轮询观测机制的全面测试覆盖并同步更新文档",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-11T19:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90df244ce0dcdc82589568a82dd17d6019b4b911",
          "body": "- ClientState 新增 reconnecting\n- ClientAdapter 接口删除 healthCheck/forceReconnect,不再反向操作连接生命周期\n- startHealthCheck/_runHealthCheck 简化为 startStatePolling/_pollState(纯同步状态轮询)\n- notifyStateChange 成为 entry.prevState 唯一写入口,消除轮询与实时事件两份状态真相不一致的问题\n- Exostrider 门面类同步更新(ExostriderOptions.pool 新增 statePollingIntervalMs 字段替代旧的 healthCheck 配置)\n- 清理测试中依赖已删除 API 的用例(concurrent-pool-stress、facade)",
          "is_bot": false,
          "headline": "refactor(pool): 精简为纯观测聚合,删除 healthCheck/forceReconnect",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-11T15:02:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "461d611977a97cbae02dfd15f73286c4e0ae9976",
          "body": "- pnpm 11.10.0 → 11.11.0\n- 升级 @commitlint/cli、@types/node、prettier、typescript-eslint 等 devDependencies",
          "is_bot": false,
          "headline": "chore: 更新 pnpm 及 devDependencies 版本",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-11T06:46:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "658be8bf0a8d601747567a2df06d664fe17e6d61",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.8",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-11T05:15:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e0d1cb4ceabba49e297da23c56b4acf302d15d6",
          "body": "- 单元测试6个:非Error异常格式化、同id re-add竞态保护、存活性检查、混合池分支、计数器清零重计周期、maxConsecutiveFailures边界值\n\n- 鲁棒性测试6个:20客户端耗时各异重入保护、高频检查+慢重连不掉底、50客户端反复add/remove\n\n- healthCheck与connectAll/disconnectAll交叉、挂起remove无过期通知、10+10混合池全失败分支正确",
          "is_bot": false,
          "headline": "test(pool): 完善forceReconnect机制的测试覆盖与高并发鲁棒性验证",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-11T05:13:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5992e19988594418df072c4a313773b181463e25",
          "body": "- ClientAdapter 接口新增可选 forceReconnect(),健康检查异常时先尝试调用,\n  不再直接标记 error——真实结果由 transport 自身的 close/connect/giveUp\n  事件链路驱动,未实现该方法的适配器保持原有行为(向后兼容)\n- 新增重入保护(forceReconnectInFlight):forceReconnect 耗时超过健康检查\n  间隔时不会被下一次 tick 并发重复调用\n- 新增有界兜底(HealthCheckOptions.maxConsecutiveFailures,默认 5):即使\n  forceReconnect 从不抛出但连接持续假死,连续多次健康检查失败后仍会强制\n  标记 error 并通知,避免故障无限期不可见\n- _runHealthCheck 新增存活性检查,避免 healthCheck()/forceReconnect() 等待\n  期间该客户端已被 removeClient 移除后,对已失效的适配器发出过期通知或调用",
          "is_bot": false,
          "headline": "fix(pool): 健康检查失败时先尝试强制重连,不再单次失败即标记 error",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-10T06:06:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8986241341fc963daed44a0b6db7b611d8191e03",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.7",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-08T20:38:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d700dbebedec6bd7ab70f93a7443d3243affccc",
          "body": "- refactor(pool): 移除 ClientPoolOptions 的 TRole 泛型参数和 RoleCapability,\n  ClientPool 不再存储 roleMap,新增 getClientRole() 方法\n- feat(dispatch): ContextConfig 新增 scopeExtractor 回调,在 Context 构造时从\n  事件提取 scope,使 @Scope 声明式过滤在真实 dispatch 链路中生效\n- test: 大幅扩充测试覆盖率 —— 新增 lifecycle-stress 压力测试、scopeExtractor\n  端到端回归测试、pool 高负载与去重压力测试、session 并发与超时安全测试、\n  state-machine 边界用例、dispatcher postHandle 非 Error 处理、orchestrator\n  自循环依赖等边界场景\n- chore: 为无法覆盖的防御分支添加 c8 ignore 注释\n- docs: 更新 CLAUDE.md 补充 scopeExtractor 说明",
          "is_bot": false,
          "headline": "refactor: 精简 ClientPool API 并新增 scopeExtractor 上下文提取回调",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-08T20:36:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78dad7d1bc8d9cb47eccbeb4d52ca4767b4b5933",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.6",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-08T05:37:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a50b894f601fb8c6dd01ebf464b5f6c2f28c86c1",
          "body": "改动摘要:\n- ESLint 新增 no-restricted-imports 规则,强制 src/ 跨模块导入和 tests/ 源码导入必须经由 barrel 文件\n- package.json 移除 prepublishOnly 脚本(避免发布流程依赖本地运行测试及 lint)\n- src/dispatch/decorators 和 src/dispatch barrel 文件导出 getOrCreateMethodEntry\n- src/session barrel 文件导出 buildStatesFromDecorators\n- 测试文件将跨模块深层路径导入统一改为 barrel 文件导入\n- 装饰器测试中将 Permission 重命名为 PermissionDecorator 以匹配 barrel 导出",
          "is_bot": false,
          "headline": "refactor: 强制 barrel 文件导入并移除 prepublishOnly 脚本",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-08T05:34:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3023c6e7392b23223752571806874ad30d53ab6d",
          "body": "- 新增 concurrent-dispatcher-stress 和 concurrent-pool-stress 压力测试\n- 新增 session-stress 压力测试\n- 扩展 unit 测试覆盖 dispatcher、session、echo、lifecycle、pool 模块\n- 移除废弃文档 exostrider-topo-inDegree.md\n- 更新 vitest 配置与依赖锁定",
          "is_bot": false,
          "headline": "test: 新增并发压力测试并增强现有测试覆盖率",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-07T14:41:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b22cac58b534e62580b3bc0d2d3d096cb4a8a52",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.5",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-04T18:01:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aa8828146af4d8fa077d9003546047420fb335a",
          "body": null,
          "is_bot": false,
          "headline": "refactor(dispatch): 移除 SettingNode 装饰器机制,恢复框架抽象边界",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-04T17:58:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b96764a248a2ff81a6c6711dd4500d43f4380ada",
          "body": "- @commitlint/cli ^21.1.0 → ^21.2.0\n- @commitlint/config-conventional ^21.1.0 → ^21.2.0\n- eslint-plugin-import-x ^4.17.0 → ^4.17.1\n- prettier ^3.9.0 → ^3.9.4\n- typescript-eslint ^8.62.0 → ^8.62.1",
          "is_bot": false,
          "headline": "chore(deps): 更新项目依赖至最新版本",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-07-02T00:21:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd07fccce5a7c8c743d1c950319350fac6a141c8",
          "body": "Prettier 自动格式化将多处多行类型联合/可选类型标注折叠为单行,\n涉及 HandlerRegistry、MappingType、@Interceptor、@SettingNode\n及装饰器工具方法中的元数据访问模式。",
          "is_bot": false,
          "headline": "style(dispatch): 统一类型标注格式,折叠多行类型为单行",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-30T13:20:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68ac17dcba1c66991fac4ffc23d7fed95dae4222",
          "body": "…slint-plugin-import-x-4.17.1\n\nbuild(deps-dev): bump eslint-plugin-import-x from 4.17.0 to 4.17.1",
          "is_bot": false,
          "headline": "Merge pull request #4 from aemeath-projects/dependabot/npm_and_yarn/e…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-30T13:06:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "135091ab7b79e16fd138fe6d3e18b8f36d93dfb8",
          "body": "…rettier-3.9.1\n\nbuild(deps-dev): bump prettier from 3.9.0 to 3.9.1",
          "is_bot": false,
          "headline": "Merge pull request #5 from aemeath-projects/dependabot/npm_and_yarn/p…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-30T13:06:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa0fef6716d38356d1db34feae55eff5ae53e738",
          "body": "Bumps [prettier](https://github.com/prettier/prettier) from 3.9.0 to 3.9.1.\n- [Release notes](https://github.com/prettier/prettier/releases)\n- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/prettier/prettier/compare/3.9.0...3.9.1)\n\n---\nupdated\n[…]\nncies:\n- dependency-name: prettier\n  dependency-version: 3.9.1\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): bump prettier from 3.9.0 to 3.9.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T02:15:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a42b03ffa20385abbe7d2197b69aa4144a638e4f",
          "body": "Bumps [eslint-plugin-import-x](https://github.com/un-ts/eslint-plugin-import-x) from 4.17.0 to 4.17.1.\n- [Release notes](https://github.com/un-ts/eslint-plugin-import-x/releases)\n- [Changelog](https://github.com/un-ts/eslint-plugin-import-x/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/un\n[…]\nency-name: eslint-plugin-import-x\n  dependency-version: 4.17.1\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): bump eslint-plugin-import-x from 4.17.0 to 4.17.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T02:15:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "152e465bcd3eca9419461357225250eae9b7dfc9",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps): 升级 eslint 至 ^10.6.0,prettier 至 ^3.9.0",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-28T11:10:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30ffa24760671671e7529567ba0319bf171e6ab8",
          "body": "- @commitlint/cli ^21.0.2 → ^21.1.0\n- @commitlint/config-conventional ^21.0.2 → ^21.1.0\n- @types/node ^26.0.0 → ^26.0.1",
          "is_bot": false,
          "headline": "chore(deps): 更新开发依赖版本",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-26T15:33:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddd469ffc42a7574cb1971b5d7c43f739db1d41b",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.4",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T12:03:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2f9a403056a5f58e98b70960f2b3a9406526a44",
          "body": "- 移除 pino-pretty 依赖,使用自定义 Writable stream 实现 console 格式\n- 新增 formatSpringLine() 将日志条目格式化为 yyyy-MM-dd HH:mm:ss.SSS LEVEL [module] : msg key=val...\n- 支持键值对着色(cyan/yellow)和 ANSI 转义序列自动过滤\n- 完整覆盖 Spring Boot 格式的单行输出、键值对展开、标准字段过滤、对象序列化等场景",
          "is_bot": false,
          "headline": "feat(logger): 实现 Spring Boot 风格 console 日志输出",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T11:59:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d812364276cef7693abffac897b72a7f8fd0c59",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.3",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T11:06:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f79f99648ab873db44b67a44f06556814c19044",
          "body": "为 createLogger 新增 windowsCompat 选项,支持 auto / true / false 三种模式:\n- auto(默认):Windows 平台自动切换代码页为 UTF-8 并检测终端 ANSI 能力\n- true:强制启用兼容层\n- false:关闭兼容层,使用 pino-pretty 原始行为\n\ndetectAnsiSupport() 按 NO_COLOR → FORCE_COLOR → WT_SESSION →\nTERM_PROGRAM → hasColors() 优先级检测终端是否支持颜色输出。",
          "is_bot": false,
          "headline": "feat(logger): 添加 Windows 终端兼容层(chcp 65001 + ANSI 检测)",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T11:04:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18054f399e1c68a1d2dd3ce77bd05a86ad497fbf",
          "body": "当一个 @Service 注入同一 provider 提供的多个 serviceKey 时,Kahn 算法\n会为同一条边重复累加 inDegree,导致入度永远无法清零,触发循环依赖错误。\n\n修复方式:在添加边至邻接表前检查边是否已存在,仅对新边累加 inDegree。\n\n新增 3 个测试用例覆盖:\n- 单个 provider 提供 2 个 key 的场景\n- 单个 provider 提供 3 个 key 的场景\n- 多个不同 provider 各提供 1 个 key(正常对照)\n\n相关文档:exostrider-topo-inDegree.md 详述问题现象、根因分析和修复方案。",
          "is_bot": false,
          "headline": "fix(lifecycle): 修复拓扑排序中同一 provider 多 serviceKey 的 inDegree 重复计数",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T10:42:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21de33a6b775580171415e51b77f6bcf300952ee",
          "body": null,
          "is_bot": false,
          "headline": "docs: 更新changelog",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T05:22:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a3ed0614ff376f4f6b9818c9ca72f65f0ac41d8",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.2",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T05:21:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c47be5f44de86efa8c4ba20baf82704a5577a98",
          "body": "修复 EventDispatcher 中全局 preHandle 返回 false 或抛出异常时,\n声明式拦截器的 afterCompletion 被错误调用的问题。\n根据设计,声明式拦截器的 preHandle 未执行则 afterCompletion 也不应调用,\n与拦截器链的对称性原则一致。\n\n- dispatcher.ts: 阻断/异常分支传空列表代替 declInterceptors\n- 新增单元测试验证声明式拦截器 afterCompletion 不被调用\n- 新增集成测试验证缺失服务注入不引发崩溃\n- 更新 CLAUDE.md 文档与依赖版本",
          "is_bot": false,
          "headline": "fix(dispatch): 全局拦截器阻断时不再调用声明式拦截器的 afterCompletion",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T05:20:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d177051045f3ea3a078747d3ca4ce1ead7975c3c",
          "body": "在 Dispatch 模块中新增 Bot 能力系统,允许 handler 声明执行时 Bot 在群内\n需要具备的权限等级(group_admin / group_owner),为后续拦截器检查提供元数据。\n\n- 新增 RequiresBotCapability 装饰器及 BotCapability 类型\n- MethodMetaEntry / HandlerMethod / ResolvedHandler 增加 requiredBotCapability 字段\n- 装饰器工具函数中初始化默认值 null\n- 新增配套单元测试与集成测试",
          "is_bot": false,
          "headline": "feat(dispatch): 添加 @RequiresBotCapability 装饰器,支持 Bot 群内权限声明",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-24T04:56:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae25c88abdd17e123370134e6a7c6425f63a46ba",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.1",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T15:35:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e079c54da0d69be34b03c5a0357a47e2c710040",
          "body": "新增 wireToPool 可选方法支持客户端原生事件绑定\n补充 PoolEmitter 最小接口避免循环依赖\n改进日志消息国际化为中文\n优化 Echo discoverAll 使用并发扫描\n修复 Session timeout/cancel 中的清理逻辑\n补充 wireToPool 相关测试覆盖",
          "is_bot": false,
          "headline": "feat(pool): 完善 Pool 生命周期与客户端事件绑定",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T15:33:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "084aeb71e8895b77c48d7895a3b824c1c5024dfc",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.1.0",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T08:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c7c1c6f96ebe2972dd1cd882b9a1a481ffdb219",
          "body": null,
          "is_bot": false,
          "headline": "docs: 更新codecov badge",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T08:16:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bade7465c6150e1aa31722d46932270c6fea13be",
          "body": null,
          "is_bot": false,
          "headline": "docs: 更新框架文档与包元数据,反映 Pool 模块功能",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T08:13:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0db0ea86cd3cc68f936d33aa442b28563e5eeca9",
          "body": "- package.json: type-check 命令指定 tsconfig.test.json,支持测试文件类型检查\n- 测试文件: 补充 Context<any, any> 泛型参数,改进类型断言与 textExtractor 类型推导\n- 移除冗余 @ts-expect-error 注释,优化 ClassFieldDecoratorContext mock 实现\n- 确保全量测试通过严格类型检查,提升库类型安全性",
          "is_bot": false,
          "headline": "test: 完善类型注解与 TypeScript 配置,支持严格类型检查",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T08:09:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ab7b959806a19ad44893a95f0d9da777d1893d2",
          "body": "- 将 ClientPool 集成到 Exostrider 门面类,支持 bootstrap/shutdown 自动生命周期\n- 新增 pool 字段到 ExostriderOptions,支持自定义 TPoolClient/TPoolRole 泛型参数\n- 完善 ClientPool API 导出:RoleDefinition、RoleCapability、HealthCheckOptions、\n  DedupOptions、AggregatedEvent、PoolEventMap\n- 补全 pool 模块单元测试与集成测试,覆盖去重流水线、路由策略、健康检测\n- 优化 handlerRegistry.setLogger() 注入流程,确保 logger 在 bootstrap 前初始化\n- 更新 CLAUDE.md、编码风格规则、性能规则、安全规则等文档与配置",
          "is_bot": false,
          "headline": "feat(pool): 集成 pool 生命周期管理,完善 ClientPool API 与测试覆盖",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T07:51:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8da5183430a517d00dd47f17ad4ee23690e71cb7",
          "body": "- 实现 ClientPool 核心类,支持多客户端管理和健康检查\n- 新增三种路由策略:StickyStrategy、PriorityStrategy、PriorityStickyStrategy\n- 实现 DedupPipeline 去重管道,支持自定义去重键提取器\n- 添加 RoleDefinition 和 RoleCapability 接口,支持角色权限管理\n- 新增 TypedEventEmitter 类型安全的事件发射器基类\n- 完整的单元测试覆盖所有功能模块",
          "is_bot": false,
          "headline": "feat(pool): 新增 pool 模块,支持客户端池管理和负载均衡",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-23T05:48:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "385931dd306a37922655742cadf2e83976bec70f",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): 问题已解决,无需显式指定lcov.info",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T08:51:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff2a6f060d5766c521ef2dde5746e1a7a60d0991",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): 显式指定lcov.info",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T08:40:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d31a377b941299f81cf8e7642947a1e26c09c3fe",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): 修复codecov上传问题",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T08:22:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7921c5973cf8147a4f7343f8053e66f5b8599d46",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.0.1",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T08:06:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8fe592f21afd169b5608e1660eba99aca7e69c45",
          "body": "- 更新导入规范:禁止使用 .js 后缀(moduleResolution: bundler)\n- 完善命名规范:枚举成员 UPPER_CASE、Symbol UPPER_CASE、泛型参数 PascalCase\n- 简化 ESLint 配置:统一装饰器函数与普通函数的命名灵活性\n- 补充测试覆盖:新增超时测试,完善 dispatch 和 session 模块测试\n- 更新文档:README 格式调整,CLAUDE.md 与 coding-style.md 同步规范",
          "is_bot": false,
          "headline": "refactor(core): 统一导入规范与代码风格规则",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T08:05:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d4065a5a765b198954173d1999848e08b8d55b8",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): 统一工作流 Node.js 版本为 LTS",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:48:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b5fe9b8f096c73fdab111a5ae3b36fad6c42b1d",
          "body": null,
          "is_bot": false,
          "headline": "chore(release): v1.0.0",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:31:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e972b63e23b9c0f1a343371ee6726f1b2db1e6e8",
          "body": null,
          "is_bot": false,
          "headline": "chore: 更新node版本",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:31:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76827fe07bc43a2d148356367964e27e95a26d2a",
          "body": "…int-staged-17.0.8\n\nbuild(deps-dev): bump lint-staged from 17.0.7 to 17.0.8",
          "is_bot": false,
          "headline": "Merge pull request #3 from aemeath-projects/dependabot/npm_and_yarn/l…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c4a522625a26c648d0a253ff1657b90c0be3bdd",
          "body": "…ino-10.3.1\n\nbuild(deps): bump pino from 9.14.0 to 10.3.1",
          "is_bot": false,
          "headline": "Merge pull request #2 from aemeath-projects/dependabot/npm_and_yarn/p…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:26:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "354d12f57eb6d847ceb8763129d5fe1d6ecdd855",
          "body": "…/actions/checkout-7\n\nbuild(deps): bump actions/checkout from 6 to 7",
          "is_bot": false,
          "headline": "Merge pull request #1 from aemeath-projects/dependabot/github_actions…",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:25:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d1322d254a32fcaf2196d631bb96ddbeff72c7a",
          "body": "Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 17.0.7 to 17.0.8.\n- [Release notes](https://github.com/lint-staged/lint-staged/releases)\n- [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/lint-staged/lint-staged/compar\n[…]\ns:\n- dependency-name: lint-staged\n  dependency-version: 17.0.8\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): bump lint-staged from 17.0.7 to 17.0.8",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T02:24:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "416772610fb4fec35e7dbfc24cf4e8404d1413a4",
          "body": "Bumps [pino](https://github.com/pinojs/pino) from 9.14.0 to 10.3.1.\n- [Release notes](https://github.com/pinojs/pino/releases)\n- [Commits](https://github.com/pinojs/pino/compare/v9.14.0...v10.3.1)\n\n---\nupdated-dependencies:\n- dependency-name: pino\n  dependency-version: 10.3.1\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump pino from 9.14.0 to 10.3.1",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T02:24:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ef4851a7b7ba5651e818259c4d6e2364ad9b6aa",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-22T02:23:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7784cf78fe482cb22d85d09085b17a120611d518",
          "body": "包含五个独立模块的完整实现:\n- dispatch: 路由映射、处理器注册、拦截器链、事件分发\n- lifecycle: 服务注册、拓扑排序、依赖注入、启动编排\n- session: 会话管理、有限状态机、并发控制\n- echo: 动态导入扫描、装饰器副作用触发\n- logger: 结构化日志、全局注入、事件广播\n\n包含完整测试(单元、集成、压力)和规范文档(编码风格、Git工作流、安全规则等)",
          "is_bot": false,
          "headline": "feat(core): 初始化 Exostrider 事件驱动框架库",
          "author_name": "梦清",
          "author_login": "AkariRin",
          "committed_at": "2026-06-22T02:20:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 65,
      "latest_release_at": "2026-07-17T02:37:03Z",
      "latest_release_tag": "v1.1.10",
      "releases_from_tags": true,
      "days_since_last_push": 1,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 2.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@aemeath-projects/exostrider",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "typescript",
            "event-driven",
            "framework",
            "decorator",
            "event-dispatcher",
            "lifecycle",
            "dependency-injection",
            "state-machine",
            "session-management",
            "interceptor",
            "message-routing",
            "client-pool",
            "load-balancing"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@aemeath-projects/exostrider",
          "is_deprecated": false,
          "latest_version": "1.1.10",
          "repository_url": "https://github.com/aemeath-projects/exostrider",
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 2401,
          "first_published_at": "2026-06-22T02:37:04.220000Z",
          "latest_published_at": "2026-07-17T02:39:35.867000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "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
      },
      "open_issues_and_prs": 3
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tests/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 33604,
      "source_files_sampled": 106,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7049
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "minimatch",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.2.5"
        },
        {
          "name": "pino",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.3.1"
        },
        {
          "name": "pino-pretty",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^13.1.3"
        }
      ],
      "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": 3,
        "merged_prs": 6,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 2
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "AkariRin",
          "commits": 59,
          "avatar_url": "https://avatars.githubusercontent.com/u/45938285?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "publish.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 3,
            "reason": "1 out of 3 merged PRs checked by a CI test -- score normalized to 3",
            "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/25 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 0,
            "reason": "dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "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": 3,
            "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": 9,
            "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": "43a0f7d597c75528217276f9fe90ead6e992a159",
        "ran_at": "2026-07-21T19:34:50Z",
        "aggregate_score": 4.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/aemeath-projects/exostrider",
    "host": "github.com",
    "name": "exostrider",
    "owner": "aemeath-projects"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 51,
      "inputs": {
        "security": 41,
        "vitality": 69,
        "community": 32,
        "governance": 48,
        "engineering": 58
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 69,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 65,
              "human_commit_share": 0.908,
              "days_since_last_push": 1,
              "active_weeks_last_year": 5
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "65 commits in the last year",
                "points": 16.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "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": 13,
              "latest_release_tag": "v1.1.10",
              "releases_from_tags": true,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 2.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "packages": [
                "@aemeath-projects/exostrider"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 2401
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "2,401 downloads/month across npm",
                "points": 45.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 2401,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 48,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 16,
            "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 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 54,
            "inputs": {
              "merged_prs": 6,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 2
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "6/8 decided PRs merged",
                "points": 28.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 6,
                      "decided": 8
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "aemeath-projects",
              "public_repos": 10,
              "account_age_days": 69
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of aemeath-projects",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "aemeath-projects"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "10 public repos, account ~0 yr old",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 10
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@aemeath-projects/exostrider"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "13 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 58,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "1 out of 3 merged PRs checked by a CI test -- score normalized to 3",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "decorator",
                "dependency-injection",
                "event-dispatcher",
                "event-driven",
                "message-routing",
                "session-management",
                "state-machine",
                "typescript"
              ],
              "has_wiki": false,
              "homepage": "https://aemeath.dev",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://aemeath.dev",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 41,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "1 out of 3 merged PRs checked by a CI test -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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/25 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "dangerous workflow patterns detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "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": 1.5,
                "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": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 3
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 72,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.983,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7049
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "58 of 59 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 58,
                      "sampled": 59
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 51,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tests/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.092
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tests/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tests/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 65",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 65
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "6 of the last 65 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 6,
                      "sampled": 65
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 33604,
              "source_files_sampled": 106,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/106 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 106,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:@aemeath-projects/exostrider@1.1.10; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T19:34:57.520129Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/aemeath-projects/exostrider.svg",
  "full_name": "aemeath-projects/exostrider",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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