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

cowcow02 / fleetlens

Fleetlens — local-only dashboard for Claude Code sessions. Heatmaps, timelines, parallel agent detection, PR metrics, and Ask Claude analysis.

TypeScriptMIT★ 4 estrellas⑂ 0 forksdesde abr 2026Ver en GitHub ↗

cowcow02/fleetlens tiene un índice de salud de 64 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (90/100) y la más baja, Security (39/100). Se actualizó por última vez hace 6 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

64
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

cowcow02Cuenta personal
8 seguidores12 repositorios públicosdesde mar 2011

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npmfleetlens1.0.3427064hace 6 díasclaudeclaude-codecodexgemini-clidashboardagentmulti-agentobservabilityusageanalytics

Métricas por categoría

Vitalidad

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

81Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 6 días
11.1/36Cadencia de commits — 16/52 semanas con commits
18/18Volumen de commits — 709 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year709
human_commit_share1
days_since_last_push6
active_weeks_last_year16
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 6 días
27/27Cadencia de publicación — una versión cada ~0,6 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count100
latest_release_tagv1.0.3
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases0,6

Comunidad y Adopción

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

50Moderado · 18% del índice global
Cómo se puntúa
7.7/60Estrellas — 4 estrellas
0/25Forks — 0 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks0
stars4
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template
Cómo se puntúa
48.4/80Descargas mensuales — 4270 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesfleetlens
dependents
ecosystemsnpm
total_downloads
monthly_downloads4270
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?

56Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
37.1/38.3Aceptación de PR — 97/100 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/16 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs97
open_issues0
closed_issues5
issue_closed_ratio1
closed_unmerged_prs3
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.9/25Alcance del propietario — 8 seguidores de cowcow02
20.1/25Trayectoria — 12 repos públicos, cuenta de ~15 años
Datos de entrada utilizados
followers8
owner_typeUser
is_verified
owner_logincowcow02
public_repos12
account_age_days5610
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 6 días
20/20Historial de versiones — 64 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesfleetlens
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Calidad de Ingeniería

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

90Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 6 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — eslint.config.mjs
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_configno

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://cowcow02.github.io/fleetlens/
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttps://cowcow02.github.io/fleetlens/
has_readme
has_docs_dir
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?

39En 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
2.5/2.5CI-Tests — 5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/16 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 57 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,9

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 — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 80 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,8
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes23.856
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — eslint.config.mjs
11/11Verificación estática de tipos — apps/web/tsconfig.json, packages/cli/tsconfig.json, packages/entries/tsconfig.json, packages/parser/tsconfig.json, packages/team-server/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 22 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Datos de entrada utilizados
has_nixno
has_tests
lockfilespnpm-lock.yaml
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configsapps/web/tsconfig.json, packages/cli/tsconfig.json, packages/entries/tsconfig.json, packages/parser/tsconfig.json, packages/team-server/tsconfig.json
agent_commit_share0,22
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.5/55Tamaños de archivo manejables — 6/685 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes115.758
source_files_sampled685
oversized_source_files6
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package '@claude-lens/parser' from its registry
  • Could not fetch npm package '@claude-lens/entries' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.9 / 10
3.9agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests5 out of 5 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/16 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities57 existing vulnerabilities detected
Dependencias directas 30
RegistroPaqueteRestricción de versiónManifiesto
npm@claude-lens/entriesworkspace:^apps/web/package.json
npm@claude-lens/parserworkspace:*apps/web/package.json
npm@tanstack/react-virtual^3.13.23apps/web/package.json
npmclsx^2.1.1apps/web/package.json
npmlucide-react^0.468.0apps/web/package.json
npmnext16.2.2apps/web/package.json
npmreact19.2.4apps/web/package.json
npmreact-dom19.2.4apps/web/package.json
npmreact-markdown^10.1.0apps/web/package.json
npmrecharts^2.15.0apps/web/package.json
npmremark-gfm^4.0.1apps/web/package.json
npmzod^4.3.6apps/web/package.json
npm@claude-lens/parserworkspace:*packages/entries/package.json
npmserver-only^0.0.1packages/entries/package.json
npmzod^3.23.8packages/entries/package.json
npm@claude-lens/parserworkspace:*packages/team-server/package.json
npm@dnd-kit/core^6.3.1packages/team-server/package.json
npm@dnd-kit/sortable^10.0.0packages/team-server/package.json
npm@dnd-kit/utilities^3.2.2packages/team-server/package.json
npm@google-cloud/run1.5.1packages/team-server/package.json
npm@types/react-grid-layout^1.3.5packages/team-server/package.json
npmdrizzle-orm0.40.0packages/team-server/package.json
npmnext^16.2.2packages/team-server/package.json
npmpg^8.13.0packages/team-server/package.json
npmplaywright1.60.0packages/team-server/package.json
npmreact^19.2.4packages/team-server/package.json
npmreact-dom^19.2.4packages/team-server/package.json
npmreact-grid-layout^1.5.0packages/team-server/package.json
npmsemver7.6.3packages/team-server/package.json
npmzod^3.24.0packages/team-server/package.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": [],
      "is_fork": false,
      "size_kb": 14080,
      "has_wiki": true,
      "homepage": "https://cowcow02.github.io/fleetlens/",
      "languages": {
        "CSS": 244945,
        "HCL": 13981,
        "HTML": 153292,
        "Shell": 38225,
        "Swift": 42437,
        "Python": 33846,
        "Dockerfile": 4442,
        "JavaScript": 140782,
        "TypeScript": 4628466
      },
      "pushed_at": "2026-07-20T07:52:46Z",
      "created_at": "2026-04-10T05:59:31Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T07:52:49Z",
      "description": "Fleetlens — local-only dashboard for Claude Code sessions. Heatmaps, timelines, parallel agent detection, PR metrics, and Ask Claude analysis.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "cowcow02",
      "company": null,
      "location": null,
      "followers": 8,
      "avatar_url": "https://avatars.githubusercontent.com/u/673550?v=4",
      "created_at": "2011-03-16T17:31:29Z",
      "is_verified": null,
      "public_repos": 12,
      "account_age_days": 5610
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.3",
          "kind": "patch",
          "published_at": "2026-07-20T07:56:53Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-07-18T09:47:49Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-07-16T06:00:20Z"
        },
        {
          "tag": "server-v1.0.0",
          "kind": "other",
          "published_at": "2026-07-16T05:39:34Z"
        },
        {
          "tag": "server-v0.15.8",
          "kind": "other",
          "published_at": "2026-07-16T05:32:23Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-07-16T05:34:18Z"
        },
        {
          "tag": "v0.16.9",
          "kind": "patch",
          "published_at": "2026-07-15T08:45:10Z"
        },
        {
          "tag": "v0.16.8",
          "kind": "patch",
          "published_at": "2026-07-15T07:12:13Z"
        },
        {
          "tag": "v0.16.7",
          "kind": "patch",
          "published_at": "2026-07-15T06:07:29Z"
        },
        {
          "tag": "v0.16.6",
          "kind": "patch",
          "published_at": "2026-07-15T03:24:45Z"
        },
        {
          "tag": "v0.16.4",
          "kind": "patch",
          "published_at": "2026-07-13T06:37:07Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2026-07-13T04:47:30Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2026-07-11T06:21:36Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2026-07-11T06:00:00Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-07-10T10:43:03Z"
        },
        {
          "tag": "server-v0.15.7",
          "kind": "other",
          "published_at": "2026-07-10T08:49:07Z"
        },
        {
          "tag": "server-v0.15.2",
          "kind": "other",
          "published_at": "2026-07-10T08:00:12Z"
        },
        {
          "tag": "v0.15.7",
          "kind": "patch",
          "published_at": "2026-07-10T04:58:58Z"
        },
        {
          "tag": "v0.15.6",
          "kind": "patch",
          "published_at": "2026-07-10T03:47:27Z"
        },
        {
          "tag": "v0.15.5",
          "kind": "patch",
          "published_at": "2026-07-10T03:19:28Z"
        },
        {
          "tag": "v0.15.4",
          "kind": "patch",
          "published_at": "2026-07-09T14:14:16Z"
        },
        {
          "tag": "v0.15.3",
          "kind": "patch",
          "published_at": "2026-07-09T06:57:03Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2026-07-08T10:21:04Z"
        },
        {
          "tag": "server-v0.15.1",
          "kind": "other",
          "published_at": "2026-07-08T09:58:56Z"
        },
        {
          "tag": "v0.15.1",
          "kind": "patch",
          "published_at": "2026-07-08T09:58:22Z"
        },
        {
          "tag": "server-v0.15.0",
          "kind": "other",
          "published_at": "2026-07-08T09:34:16Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-07-08T09:35:19Z"
        },
        {
          "tag": "server-v0.14.0",
          "kind": "other",
          "published_at": "2026-07-07T16:20:37Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2026-07-07T16:21:35Z"
        },
        {
          "tag": "v0.13.2",
          "kind": "patch",
          "published_at": "2026-06-29T04:37:25Z"
        },
        {
          "tag": "v0.13.1",
          "kind": "patch",
          "published_at": "2026-06-26T03:45:51Z"
        },
        {
          "tag": "server-v0.13.0",
          "kind": "other",
          "published_at": "2026-06-18T09:37:07Z"
        },
        {
          "tag": "v0.13.0",
          "kind": "minor",
          "published_at": "2026-06-18T09:37:47Z"
        },
        {
          "tag": "v0.12.3",
          "kind": "patch",
          "published_at": "2026-06-15T12:25:46Z"
        },
        {
          "tag": "v0.12.2",
          "kind": "patch",
          "published_at": "2026-06-15T11:14:53Z"
        },
        {
          "tag": "v0.12.1",
          "kind": "patch",
          "published_at": "2026-06-15T10:03:16Z"
        },
        {
          "tag": "server-v0.12.3",
          "kind": "other",
          "published_at": "2026-06-15T09:49:41Z"
        },
        {
          "tag": "v0.12.0",
          "kind": "minor",
          "published_at": "2026-06-15T07:37:51Z"
        },
        {
          "tag": "server-v0.12.2",
          "kind": "other",
          "published_at": "2026-06-10T04:11:13Z"
        },
        {
          "tag": "server-v0.12.1",
          "kind": "other",
          "published_at": "2026-06-10T03:39:34Z"
        },
        {
          "tag": "server-v0.12.0",
          "kind": "other",
          "published_at": "2026-06-03T09:40:54Z"
        },
        {
          "tag": "server-v0.11.0",
          "kind": "other",
          "published_at": "2026-05-29T04:34:43Z"
        },
        {
          "tag": "v0.11.2",
          "kind": "patch",
          "published_at": "2026-05-27T02:58:36Z"
        },
        {
          "tag": "v0.11.1",
          "kind": "patch",
          "published_at": "2026-05-22T03:05:15Z"
        },
        {
          "tag": "server-v0.10.0",
          "kind": "other",
          "published_at": "2026-05-21T10:23:18Z"
        },
        {
          "tag": "server-v0.9.0",
          "kind": "other",
          "published_at": "2026-05-21T09:55:20Z"
        },
        {
          "tag": "v0.11.0",
          "kind": "minor",
          "published_at": "2026-05-21T09:56:08Z"
        },
        {
          "tag": "server-v0.8.6",
          "kind": "other",
          "published_at": "2026-05-21T09:07:57Z"
        },
        {
          "tag": "server-v0.8.5",
          "kind": "other",
          "published_at": "2026-05-21T08:10:54Z"
        },
        {
          "tag": "v0.10.6",
          "kind": "patch",
          "published_at": "2026-05-21T06:08:08Z"
        },
        {
          "tag": "v0.10.5",
          "kind": "patch",
          "published_at": "2026-05-21T05:17:03Z"
        },
        {
          "tag": "server-v0.8.4",
          "kind": "other",
          "published_at": "2026-05-21T05:15:40Z"
        },
        {
          "tag": "server-v0.8.3",
          "kind": "other",
          "published_at": "2026-05-21T04:51:09Z"
        },
        {
          "tag": "v0.10.4",
          "kind": "patch",
          "published_at": "2026-05-21T04:39:38Z"
        },
        {
          "tag": "server-v0.8.2",
          "kind": "other",
          "published_at": "2026-05-21T03:18:55Z"
        },
        {
          "tag": "server-v0.8.1",
          "kind": "other",
          "published_at": "2026-05-16T08:47:53Z"
        },
        {
          "tag": "v0.10.3",
          "kind": "patch",
          "published_at": "2026-05-16T04:59:08Z"
        },
        {
          "tag": "v0.10.2",
          "kind": "patch",
          "published_at": "2026-05-15T08:23:17Z"
        },
        {
          "tag": "v0.10.1",
          "kind": "patch",
          "published_at": "2026-05-14T10:46:45Z"
        },
        {
          "tag": "server-v0.8.0",
          "kind": "other",
          "published_at": "2026-05-08T08:38:43Z"
        },
        {
          "tag": "v0.10.0",
          "kind": "minor",
          "published_at": "2026-05-08T08:35:45Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2026-05-07T07:47:00Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-05-07T07:30:48Z"
        },
        {
          "tag": "server-v0.7.4",
          "kind": "other",
          "published_at": "2026-05-07T06:42:56Z"
        },
        {
          "tag": "server-v0.7.3",
          "kind": "other",
          "published_at": "2026-05-07T03:56:28Z"
        },
        {
          "tag": "server-v0.7.2",
          "kind": "other",
          "published_at": "2026-05-07T03:30:06Z"
        },
        {
          "tag": "server-v0.7.1",
          "kind": "other",
          "published_at": "2026-05-06T10:23:41Z"
        },
        {
          "tag": "server-v0.7.0",
          "kind": "other",
          "published_at": "2026-05-06T09:44:56Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-05-06T08:20:36Z"
        },
        {
          "tag": "v0.6.4",
          "kind": "patch",
          "published_at": "2026-05-04T07:07:18Z"
        },
        {
          "tag": "server-v0.6.3",
          "kind": "other",
          "published_at": "2026-05-04T03:52:24Z"
        },
        {
          "tag": "v0.6.3",
          "kind": "patch",
          "published_at": "2026-05-04T03:52:52Z"
        },
        {
          "tag": "server-v0.6.2",
          "kind": "other",
          "published_at": "2026-05-04T03:04:26Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-05-04T03:04:24Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-05-04T02:18:41Z"
        },
        {
          "tag": "server-v0.6.1",
          "kind": "other",
          "published_at": "2026-05-04T02:18:14Z"
        },
        {
          "tag": "server-v0.6.0",
          "kind": "other",
          "published_at": "2026-04-30T10:47:54Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-04-30T10:48:05Z"
        },
        {
          "tag": "server-v0.5.6",
          "kind": "other",
          "published_at": "2026-04-24T10:25:41Z"
        },
        {
          "tag": "server-v0.5.5",
          "kind": "other",
          "published_at": "2026-04-24T08:57:43Z"
        },
        {
          "tag": "server-v0.5.4",
          "kind": "other",
          "published_at": "2026-04-24T08:51:51Z"
        },
        {
          "tag": "server-v0.5.3",
          "kind": "other",
          "published_at": "2026-04-24T08:44:21Z"
        },
        {
          "tag": "server-v0.5.2",
          "kind": "other",
          "published_at": "2026-04-24T08:39:06Z"
        },
        {
          "tag": "server-v0.5.1",
          "kind": "other",
          "published_at": "2026-04-24T08:33:07Z"
        },
        {
          "tag": "server-v0.5.0",
          "kind": "other",
          "published_at": "2026-04-24T08:24:47Z"
        },
        {
          "tag": "server-v0.4.2",
          "kind": "other",
          "published_at": "2026-04-24T06:18:29Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-04-22T06:22:14Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-04-22T02:11:55Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-04-16T11:33:58Z"
        },
        {
          "tag": "v0.2.9",
          "kind": "patch",
          "published_at": "2026-04-15T02:42:41Z"
        },
        {
          "tag": "v0.2.8",
          "kind": "patch",
          "published_at": "2026-04-14T01:01:47Z"
        },
        {
          "tag": "v0.2.7",
          "kind": "patch",
          "published_at": "2026-04-14T00:46:46Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2026-04-13T09:17:43Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2026-04-13T09:09:25Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2026-04-13T08:46:25Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2026-04-13T08:35:55Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2026-04-13T08:22:41Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2026-04-13T08:17:42Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-04-13T08:09:06Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2026-04-13T08:04:16Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "89831b4d03ed2cee3d09f9bccca29e1c27dabd9e",
          "body": null,
          "is_bot": false,
          "headline": "1.0.3",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-20T07:52:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac3090e58662ad0640f4b298db687da640778094",
          "body": "* fix: resolve the claude binary instead of trusting PATH\n\nThe autostart daemon runs under launchd with a bare\n/usr/bin:/bin:/usr/sbin:/sbin PATH and hands it to the web server it\nspawns. claude installs to ~/.local/bin, so every spawn(\"claude\") died\nwith ENOENT — exit -2, 0 chars, no prompt ever se\n[…]\nmes every\nlocation the resolver actually tries, so the two can't drift again.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: resolve the claude binary instead of trusting PATH (#105)",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-20T07:51:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "21404f73aa9d9480a7ec62927e62e466a9b040f8",
          "body": null,
          "is_bot": false,
          "headline": "1.0.2",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-18T09:43:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fbb167791445e840922f603d8a5217d19908111",
          "body": "* feat: daemon watchdog force-restarts a wedged web server\n\nA GC-livelocked next-server keeps its pid and port while serving nothing,\nso status and the menu bar looked healthy while the dashboard was dead.\nThe daemon now HTTP-probes the new /api/health route every 60s; three\nconsecutive failures tri\n[…]\ne context;\n  status wording points at daemon logs instead of a hardcoded ETA.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: daemon watchdog force-restarts a wedged web server (#104)",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-18T09:42:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d1dc0d4f23b5e2f5e25879538e4b0daa89b6a8c3",
          "body": null,
          "is_bot": false,
          "headline": "1.0.1",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-16T05:55:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f49d944020d45a14ea970fb8c8c56e4aa352bb45",
          "body": null,
          "is_bot": false,
          "headline": "fix: give the auto-updater's npm install 5 minutes instead of 60s",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-16T05:55:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a0bd03b90af7b7184dca46dcac1ea080e55c0d9",
          "body": null,
          "is_bot": false,
          "headline": "team-server 1.0.0",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-16T05:36:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54d9112a4a2645f32a014674a02e41348439624c",
          "body": null,
          "is_bot": false,
          "headline": "0.15.8",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-16T05:29:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "438ae2ee834ef83066d765d679923cb07cd39946",
          "body": null,
          "is_bot": false,
          "headline": "1.0.0",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-16T05:29:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "359f38d3f3566583ddbfad292daf7e76c2243779",
          "body": "chore: v1.0.0 readiness — OSS hygiene, privacy scrub, deploy fixes, governance",
          "is_bot": false,
          "headline": "Merge PR #100: v1.0.0 readiness",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-16T05:28:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d84463387533a49aec0a8d60906a1a93252f6f93",
          "body": "…atch\n\n- push.ts: match synthetic project identities by shape (conversation\n  UUIDs, bare hex hashes, cowork:unspaced, \"(unknown)\") instead of\n  \"not an absolute path\" — a Gemini session can legitimately report a\n  bare project slug like \"fleetlens\", which was losing its project row\n- provenance: po\n[…]\nblock copy no longer calls scope-filtered metrics \"team-wide\"\n- report banner acknowledges connected delivery sources alongside\n  member rollups\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: address codex cross-vendor review findings on the team-edition b…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T15:24:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "149410dc85e8c373a3953c1386147c4d4cc6f31f",
          "body": "…etion\n\nDeleting the ~3.4k-line fully-covered mock insight fixtures dropped the\naggregate below the old 80% line even though no real code lost tests.\nExclude three no-runtime-in-vitest files (boot wiring + static data\ntables for excluded components) and set lines/statements to 75 with a\nratchet note; branches/functions stay at 80.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(team-server): re-base coverage thresholds after mock-fixture del…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T14:16:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c6948459b5470c6aba9eb5a8e35e6b2d2c9d5ae",
          "body": "# Conflicts:\n#\tCHANGELOG.md\n#\tapps/web/lib/changelog-data.generated.ts\n#\tpackage.json",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/master' into chore/v1-readiness",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T10:18:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6c59c454cd24d4b059a37213a030fd434c5e73f",
          "body": "Audited every feature of the local and team editions against the docs\nsite (170+ features across 7 areas), then filled all gaps:\n\n- local-edition: deep per-surface tour — session detail tab by tab\n  (minimap, event inspector, sub-agents, workflows, live tail, Ask),\n  day narrative + timeline, weekly\n[…]\n(12 local via a\nnew deterministic demo-transcript generator, 7 team from the seeded\ndemo server), every frame vetted for fictional-only content.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: full product coverage for every surface + fresh v1.0.0 screenshots",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T10:17:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5791bc454e40eb48280d3355425c4da6e4825484",
          "body": "member-tier-editor, burndown-card, optimizer-card, spotlight-card,\nplan-tuning-form — defined but never imported anywhere.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(team-server): delete five unmounted plan-era components",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T09:43:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0c1ef2bb3543538cdb39e6204f365eccea66d0a1",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(team-server): drop demo-era wording from metric provenance labels",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T09:41:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ba9da4d5ca7b0d6805034ab518d4ce478dc93e42",
          "body": "…ct breadth\n\n- Insight report exposed via a visible button on the group page (was URL-only)\n- Options modal removed: per-member portraits and metric-provenance\n  explanations always render; ?mock=1 synthetic mode deleted end-to-end\n  (page, PDF render target, render token, e2e script)\n- Orphaned ins\n[…]\n) no longer mint project rows, fixing\n  a 2x-inflated distinct-projects breadth counter on member portraits;\n  worktree folding verified correct\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(team-server): production-ready group insight report + real proje…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T09:33:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "758619ca2c399953f6d69c8384734e52683fb7ce",
          "body": null,
          "is_bot": false,
          "headline": "0.16.9",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:41:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f69e8e670472753cbdcf469521b0493a488d01a",
          "body": null,
          "is_bot": false,
          "headline": "docs: prepare v0.16.9 release",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:41:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fef4911ff8b1db58ca963b634618f624f102be3b",
          "body": "Make local daemon recovery durable",
          "is_bot": false,
          "headline": "Merge pull request #103 from cowcow02/feat/daemon-self-recovery",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:37:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3349286f60fe6049be5744ada2b8a25bfd69489",
          "body": null,
          "is_bot": false,
          "headline": "feat: revive daemon when usage data is stale",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:27:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "520dad4b724f79d213d60c790e0a7c9da1dd6122",
          "body": "# Conflicts:\n#\tCHANGELOG.md\n#\tapps/web/lib/changelog-data.generated.ts\n#\tpackage.json",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/master' into chore/v1-readiness",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:22:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85ecf5eb5975f9aa9a120f94de8fe827f7930273",
          "body": "…ink)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: note dual skill discovery (.claude/skills + .agents/skills syml…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:15:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88ba6150997e9cea3bf437c259238ac0873b968b",
          "body": "Codex CLI discovers project skills at <repo-root>/.agents/skills/ (verified\nagainst codex-cli 0.144: the injected skills block lists file locators from\nthat path). Claude Code discovers .claude/skills/. One canonical copy in\n.claude/skills/ + this symlink serves both.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: expose project skills to Codex via .agents/skills symlink",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:13:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f33838946fff26e4fd5ecd007d84c0369a678489",
          "body": null,
          "is_bot": false,
          "headline": "fix: address daemon recovery review",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:08:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f71be00374ee4bb2fd8cee82d622fda580e45747",
          "body": null,
          "is_bot": false,
          "headline": "feat: add local daemon recovery paths",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T08:02:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ccf524294077866e03fe1898ddf6a650fa156499",
          "body": null,
          "is_bot": false,
          "headline": "0.16.8",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T07:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c8a33c010b95f563d8c40ce0df08cbec37c764b",
          "body": null,
          "is_bot": false,
          "headline": "docs: prepare v0.16.8 release",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T07:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78231820616d6033bfd7ea7f48cd01ae860336f7",
          "body": "Clarify pooled Copilot usage and hide phantom provider tabs",
          "is_bot": false,
          "headline": "Merge pull request #102 from cowcow02/fix/usage-provider-clarity",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T07:06:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87a679a61a7c2cc5add3aabd8b675a6d4167013b",
          "body": null,
          "is_bot": false,
          "headline": "test: cover hidden Copilot limits",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T06:57:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "517ea1669412c46de9f5f509f0ddeb98a96b2ab6",
          "body": null,
          "is_bot": false,
          "headline": "fix: clarify pooled Copilot usage",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T06:53:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c9ee30fae1dc855b7dc2104a36781ae5bf1298b",
          "body": null,
          "is_bot": false,
          "headline": "0.16.7",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T06:01:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51a9aa9faf4ff16ca79d0f8d9fab8a6d3c15c5d2",
          "body": null,
          "is_bot": false,
          "headline": "docs: prepare v0.16.7 release",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T06:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7dc9219698774f6af2d671974a2f5a9ac8a4cc8",
          "body": "feat: add GitHub Copilot CLI support",
          "is_bot": false,
          "headline": "Merge pull request #101 from cowcow02/feat/copilot-support",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T05:58:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50b381577a6a3a7afceb1449947034585af83ae7",
          "body": null,
          "is_bot": false,
          "headline": "fix: preserve Copilot usage history on auth expiry",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T05:40:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84b3ebca398b0e500a6908dec4fb2cee7970106f",
          "body": null,
          "is_bot": false,
          "headline": "feat: add GitHub Copilot CLI support",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T05:31:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d345dbdafb3cac74e1a6aad0452f3bbd740d4ef",
          "body": "…AI-contribution guide\n\nEncode the project's hard-won workflows so contributors using Claude Code /\nCodex land productively from the first session:\n\n- .claude/skills/ (committed via .gitignore carve-out): dev-loop (standalone\n  rebuild, smoke verification, port/cache/worktree-cwd traps),\n  add-agent\n[…]\non with the house\n  rules (evidence before done, fictional fixtures, changelog gate,\n  worktrees); README and site/team-edition.html point to it\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: agent-ready contributor tooling — committed skills, subagents, …",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T04:51:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "48809ff03219dec49e28fc1a2f79eac44840e8db",
          "body": "From the round-2 hand-over audit:\n\nDeveloper experience (customer engineers continuing the project):\n- packages/team-server/README.md: local development quickstart (Postgres,\n  env vars, first-signup bootstrap, seeding), test-suite setup, and an\n  architecture orientation (ingest, queries, insights,\n[…]\nwork behavior; version footers now say 1.0.0\n- deploy/terraform/aws: pass BASE_URL explicitly instead of relying on the\n  x-forwarded-* fallback\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: hand-over readiness round — dev docs, residue scrub, guardrails",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T04:41:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "62ff2bbc609169451f34cd86ef0dcf8a71ab2d7b",
          "body": "…overnance\n\nBlockers from the v1 readiness audit:\n- Scrub real-world context from the Team Edition demo dataset and all\n  fixtures/docs: generic orbit-shop/ORB-n/Erin placeholders replace the\n  leaked project names, ticket refs, and personal names repo-wide\n- Fix first-run empty state pointing at no\n[…]\nne, no breaking change) and\n  team-server 0.15.8 entry; release runbook now warns about the changelog\n  gate; README gets a dashboard screenshot\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: v1.0.0 readiness — OSS hygiene, privacy scrub, deploy fixes, g…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T03:53:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "db4d7c6627f25e8b7978a63ae7762791efbd38f6",
          "body": null,
          "is_bot": false,
          "headline": "0.16.6",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T03:19:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c0f836de9969ce06f1f04c75fa4149b731e0664",
          "body": null,
          "is_bot": false,
          "headline": "docs(changelog): add 0.16.6 entry for live Codex WHAM usage",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T03:19:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20ff42099177166f0d39f619d40f5fae91816bb6",
          "body": "fix(cli): poll Codex plan usage from ChatGPT WHAM API",
          "is_bot": false,
          "headline": "Merge pull request #99 from cowcow02/fix/codex-live-usage-wham",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T03:17:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7a5558080c70902c4d110b568241b7aeedfecae",
          "body": "Satisfies no-useless-assignment; the retry only needs the new access token.",
          "is_bot": false,
          "headline": "fix(cli): drop unused auth reassignment after 401 refresh",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T02:50:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26df59a3f65ef0747db9b23dc7b5eeb6da0f72e9",
          "body": null,
          "is_bot": false,
          "headline": "docs: polish public site and unify branding",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T02:48:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "937ddf14e82b9a5ba82d2ba3f02a5103ffddce26",
          "body": "Keep rotated refresh tokens in memory across the 401 retry, warn on\nnon-auth --save failures, and unit-test the 8-day needsRefresh fallback.",
          "is_bot": false,
          "headline": "fix(cli): address Codex WHAM usage review nits",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T02:48:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28c9c303f8de00f7c86e9d32786dd022b26af6fe",
          "body": "Fleetlens was reading Codex 5h/7d utilization from the latest session\nrollout's token_count.rate_limits. Those only update after a Codex turn,\nso a weekly reset (or claimed reset credit) left the dashboard stuck on\nthe pre-reset percent for days.\n\nMatch OpenUsage: read ~/.codex/auth.json, refresh via auth.openai.com,\nand GET chatgpt.com/backend-api/wham/usage. Classify windows by\nlimit_window_seconds rather than primary/secondary slot order. Keep the\ntranscript scraper for offline/debug only.",
          "is_bot": false,
          "headline": "fix(cli): poll Codex plan usage from ChatGPT WHAM API",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-15T02:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "510e99ce357ae081e3616b224b6f83a780a7faf7",
          "body": null,
          "is_bot": false,
          "headline": "docs: turn hero into product tour",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T12:32:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ca7c550d050d80c7e8bca35bea01db7cefa0bdb",
          "body": null,
          "is_bot": false,
          "headline": "docs: publish hyperframes hero render",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T11:57:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a7b5d09452558bd90763a5bbe93a184e5c2c8ad",
          "body": null,
          "is_bot": false,
          "headline": "docs: add animated session hero",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T11:08:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33a9b07bfeed73a9cd41f50a0bd000dbf47aa3c4",
          "body": null,
          "is_bot": false,
          "headline": "docs: crop hero session screenshot",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T10:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d385a2b510ef378a94b7ddefea64a9a4a84d37c1",
          "body": null,
          "is_bot": false,
          "headline": "docs: feature rich session hero screenshot",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T08:34:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5273baf1ce6b6f4845497f2d3d503ce59e18047",
          "body": null,
          "is_bot": false,
          "headline": "docs: align guides with 0.16.5",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T08:11:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d396990c7db4bb3346aab65493814e7b95a7e150",
          "body": null,
          "is_bot": false,
          "headline": "0.16.5",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T08:08:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df7e45d7bd85dc052a47677b24f3dd2407742907",
          "body": null,
          "is_bot": false,
          "headline": "docs: refresh onboarding and public documentation",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T08:08:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c95bc711bc548a4a127c888cff630beb7d5a9899",
          "body": null,
          "is_bot": false,
          "headline": "docs: add Fleetlens user guide and public site",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T06:55:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73e6ededc0d1249a53eb5dae2bf6f7f502228dd0",
          "body": null,
          "is_bot": false,
          "headline": "0.16.4",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T06:32:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2856d562e343712560ba0b3afcb86bd8194cfdc",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add changelog entry for 0.16.4",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T06:30:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "72f084d1fabc6db32e1d55856ce07b83f789a6b7",
          "body": ".af-panel's overflow: hidden was un-layered CSS; cascade-layer rules\ngive un-layered declarations priority over every Tailwind v4 utility\n(all layered), so overflow-y-auto on the /team Synced-projects picker\nnever applied — 61 rows, ~6 reachable, wheel scroll dead. Same conflict\nkilled the Sync-acti\n[…]\nes layer wins by order); audited\nevery af-panel usage — the two overflow utilities are the only\noverlapping properties, so nothing else changes.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Layer .af-panel so overflow utilities can win (#98)",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T06:29:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "86a33c3efef8b79e22fad313b7109365b250a528",
          "body": null,
          "is_bot": false,
          "headline": "docs: add 0.16.3 changelog entry",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T04:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ff5b97d2fc2265763232e199ebe1f71690d3640",
          "body": null,
          "is_bot": false,
          "headline": "0.16.3",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T04:40:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aa4074754f6460eb7eaad20b12ff888fd26f76c",
          "body": "* fix: handle Codex weekly-only usage windows\n\n* test: cover Codex window fallback shapes\n\n* chore: rerun automated PR review",
          "is_bot": false,
          "headline": "fix(parser): handle Codex weekly-only usage limits (#97)",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-13T04:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5eb7f004c2042ea741b71bd8c38a66a1341064e9",
          "body": null,
          "is_bot": false,
          "headline": "0.16.2",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-11T06:17:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eca5a449aee584178a2a43d18062a4ee80a98978",
          "body": "claude -p completes the HTTP MCP handshake in ~25ms (verified with a\nlogging proxy: initialize 200 → initialized 202 → tools/list 200) yet\nstill starts the first turn with the server \"pending\" and zero tools\nwhenever boot is fast — the model then narrates tool calls as text.\nDev-server timing masked\n[…]\nn path stays as backstop.\n\nVerified on the standalone server: the exact previously-failing question\nnow runs 11 tool calls and answers grounded.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Agent MCP tools never connecting on the standalone server",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-11T06:17:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cdc8b62d5f75c77e066509e9e1f83f19d29fbf51",
          "body": null,
          "is_bot": false,
          "headline": "0.16.1",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-11T05:55:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce316109fe89e314365d96446a4a885560d1649c",
          "body": null,
          "is_bot": false,
          "headline": "Add 0.16.1 changelog entry for Grok Build agent support",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-11T05:55:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aeeb829a5afe035c3b8f64ba8c6b1769e683e51f",
          "body": "feat: add Grok Build as a first-class agent source",
          "is_bot": false,
          "headline": "Merge pull request #96 from cowcow02/feat/grok-agent",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-11T05:53:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9aea117d05a9fe8cc1d1319abde6837da5271a4c",
          "body": "Unblocks CI eslint on fleetlens#lint.",
          "is_bot": false,
          "headline": "fix(cli): prefer-const for Grok auth entry in usage poller",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-11T05:51:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97ad4f47711eabdfea43e2484556deac350de788",
          "body": null,
          "is_bot": false,
          "headline": "0.16.0",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:38:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51f5316de9fde03c3fa2d6543950e327cc0c4c34",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add 0.16.0 changelog entry",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:38:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e22de9874e5c1c2c712cc3e3ed2cebcbc68a4d5c",
          "body": "Agent: persistent chat over local session history — search, synthesis, handoff",
          "is_bot": false,
          "headline": "Merge pull request #88 from cowcow02/feat/conversation-assistant",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:36:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b66ef0b8f72fb58af662adeeeb6ae9c70d866a7d",
          "body": "Full-branch review (8 finder angles, adversarial verify) surfaced 9 real\nissues; all fixed:\n\n- discardRun for chat deletion: the close handler of the SIGTERM'd\n  subprocess re-persisted the chat file after deleteChat, resurrecting\n  deleted chats; the concurrency slot also lingered until process exi\n[…]\n forces.\n- Rename residue: __fleetlensAgent* globalThis keys, AgentPage; unused\n  type exports dropped; two docstrings compressed per CLAUDE.md.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix self-review findings: delete race, SSE recovery, stale fetches",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:32:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d3cf5fa3a03f60fa6491c6d2b0087d6353dbbc11",
          "body": "Poll Grok's unified-billing weekly pool (same API as OpenUsage/Grok CLI)\ninto seven_day, leave five_hour null so the menubar strip shows \"—\" over\nthe weekly %, and relabel the usage page accordingly.",
          "is_bot": false,
          "headline": "fix: map Grok plan usage to the weekly 7-day window",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:23:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fa47cda6f8ef04e4e60248a1fba14efe0ade201",
          "body": "Replace the placeholder diamond with the Grok SVG from\nrobinebers/openusage ProviderIcons (MIT), and render it in AgentIcon /\nAgentBadge so session rows show the real mark.",
          "is_bot": false,
          "headline": "feat: use OpenUsage Grok provider mark for menubar and web badges",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:17:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e33e4dea25bafb40c01539d6adce8483ce59dc2f",
          "body": "Grok has no 5h/7d plan envelopes; show the fiveHour field as\n\"Context window\" and omit the empty 7-day row.",
          "is_bot": false,
          "headline": "feat(menubar): label Grok usage as context window fill",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f208841f919cc14b0a8c41435d12569ac00b258f",
          "body": "When snapshots exist, render a context-window card and a single fill\nchart instead of the empty \"no plan windows\" state.",
          "is_bot": false,
          "headline": "feat(web): show Grok context-window usage on the usage page",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8124eb958d4d857eb830cce24c9d860788ddfb4",
          "body": "…xt usage\n\nSubagents are full session dirs with session_kind=subagent; keep them off\nthe top-level list, attach them under the parent via subagents/*/meta.json,\nand poll signals.contextWindowUsage for the shared usage pipeline.",
          "is_bot": false,
          "headline": "fix(parser): hide Grok subagents from the session list and poll conte…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:09:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc275e4bffc3986a51fafce6ae406e9a23accd8d",
          "body": "- tools.test.ts: cover list_projects aggregation, get_session\n  summary/full_text branching, list_sessions filter+sort (the reviewed\n  gap); vitest config gains the @/ alias to make tools.ts importable\n- lines.pop()! → ?? \"\" (assertion suppressed the type error instead of\n  explaining the invariant)\n- mcp route: document the unauthenticated localhost-only threat model so\n  a team-server port doesn't inherit it silently\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Settle remaining PR #88 review findings",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:04:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1a3ad061de8468063419ae0272c27856b6777ec1",
          "body": "Use the raw URL-encoded sessions group name for projectDir, pick a\ndark-theme-visible slate accent, resolve GROK_HOME at call time, and\nrename the registry list test to match what it actually exercises.",
          "is_bot": false,
          "headline": "fix(parser): address Grok PR review (projectDir, accent, GROK_HOME)",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T10:00:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23c3ad248a806305bcf60333630e169c639af975",
          "body": "Decode agent=grok snapshots cleanly, ship a diamond SVG, and open the\noverview dashboard (where Grok sessions appear) from the widget footer.",
          "is_bot": false,
          "headline": "feat(menubar): recognize Grok Build agent kind and brand icon",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T09:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37e6256a2350871ce159f051c36ebaca51b4547c",
          "body": "Grok has no 5h/7d plan windows; add a tab + empty state that points users\nat /sessions?agent=grok so the agent is discoverable next to Claude/Codex.",
          "is_bot": false,
          "headline": "feat(web): surface Grok on the usage page as a sessions-only agent",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T09:54:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52d9c76ecd1588d156ff44d9c8f57e6054166737",
          "body": "Read official Grok sessions from ~/.grok/sessions (or GROK_HOME), map\nsummary/updates/signals into shared SessionMeta/SessionDetail, and\nregister the adapter so listAllSessions and the dashboard pick them up.",
          "is_bot": false,
          "headline": "feat(parser): add Grok Build as a first-class agent source",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T09:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18c687ea647ce2dbea10b0effb3c30529d2618a7",
          "body": "The feature is now \"Agent\" everywhere: /agent page, /api/agent/* routes,\nlib/agent/, ~/.cclens/agent-* state dirs, sidebar nav, system prompt.\nOne term per concept.\n\nTwo fixes surfaced by dogfooding a multi-turn chat:\n\n- Every agent run now writes the same llm-runs trace format as\n  llm-runner.ts (k\n[…]\nl list is fixed at init, so a\n  pending server means a degraded run: respawn (up to 3 attempts)\n  instead, and fail loudly if it never connects.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Rename Assistant → Agent; trace agent runs; retry MCP-pending spawns",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T09:51:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cbd48f12e49115f7bff7026a62bb5e6355e8b794",
          "body": "Conversations now live on disk (~/.cclens/assistant-chats, one JSON per\nchat) and each agentic run is a detached subprocess whose lifetime is\ndecoupled from the HTTP request: leave the page mid-run and the answer\nkeeps streaming into the chat file. A conversation list panel restores\nany previous cha\n[…]\nist w/ status badges, restore,\n  live subscribe, stop button, ?chat= deep links\n- drop the old single-shot /api/assistant/chat route (dead code)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Persist assistant chats; runs continue in the background",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T09:33:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74c4221b7ee0787c55c93801df115df863cde3ed",
          "body": "fix(team-server): stage complete Playwright, skip NFT copy (0.15.7)",
          "is_bot": false,
          "headline": "Merge pull request #95 from cowcow02/fix/team-server-playwright-skip-nft",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:45:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83308b7664e0cfa06c5bb8e21cb57ee277f93e27",
          "body": "find was matching the incomplete .next/standalone NFT copy first\n(missing browsers.json). Skip .next and require browsers.json.\nShip as 0.15.7.",
          "is_bot": false,
          "headline": "fix(team-server): prefer complete Playwright install when staging",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:42:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bab03e38f8b29081314a3590e79ea8ea871a2fb",
          "body": "…stage\n\nfix(team-server): stage Playwright via find (0.15.6)",
          "is_bot": false,
          "headline": "Merge pull request #94 from cowcow02/fix/team-server-playwright-find-…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:40:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81d847a7a1a36bc7ed6e14513041b5e3fe364bf9",
          "body": "require.resolve remains unreliable under pnpm in the CI image build.\nLocate playwright-core/playwright by walking node_modules and assert\nbrowsers.json is present. Ship as 0.15.6.",
          "is_bot": false,
          "headline": "fix(team-server): stage Playwright via find in Docker build",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:37:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66211a288361a7d2b068df84fe02da2d93bc6285",
          "body": "…exec\n\nfix(team-server): stage Playwright via pnpm exec (0.15.5)",
          "is_bot": false,
          "headline": "Merge pull request #93 from cowcow02/fix/team-server-playwright-pnpm-…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0460c273e5ebb6c4236ac8c6d09e68a46b627b27",
          "body": "require.resolve from /app still misses playwright under pnpm isolation.\nUse pnpm -F @claude-lens/team-server exec so resolution runs in the\npackage graph. Ship as 0.15.5.",
          "is_bot": false,
          "headline": "fix(team-server): stage Playwright via pnpm exec in Docker",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:32:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8031f9cc7fd85b46884cf8bb14ebc83139c5c584",
          "body": "…-resolve\n\nfix(team-server): fix Playwright staging in Docker build (0.15.4)",
          "is_bot": false,
          "headline": "Merge pull request #92 from cowcow02/fix/team-server-playwright-stage…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:30:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1adbf853f8f7287cd133122f78326dfa9db89c43",
          "body": "pnpm does not hoist playwright to the workspace root, so the 0.15.3\nimage build failed when require.resolve ran from /app. Search\npackages/team-server first. Ship as 0.15.4.",
          "is_bot": false,
          "headline": "fix(team-server): resolve playwright from package dir in Docker build",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:28:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aad64a28e3aeec55857d315454604d0e5bdff7f4",
          "body": "…alone-packaging\n\nfix(team-server): complete playwright packaging for PDF export (0.15.3)",
          "is_bot": false,
          "headline": "Merge pull request #91 from cowcow02/fix/team-server-playwright-stand…",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:26:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b3aa3c4f827977dc60c60aeb9ae6f2463c933ed",
          "body": "Next standalone NFT only copies a partial playwright-core (missing\nbrowsers.json), so import(\"playwright\") failed at route load and PDF\nexport returned a bare Internal Server Error. Overlay the full\nplaywright packages into the image (flat + pnpm nest paths) and load\nPlaywright dynamically so packaging failures return a readable 500.\n\nBump team-server to 0.15.3.",
          "is_bot": false,
          "headline": "fix(team-server): ship complete playwright-core in the Docker image",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:23:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff9004ce152d48de19366618c84fc473a60aa3fe",
          "body": "The assistant's claude subprocess inherited the web server's cwd inside\nthe repo, so Claude Code loaded that project's auto-memory into context\nand the model cited memory files as markdown links that resolved to dead\nlocalhost URLs. Three layers: spawn from a neutral ~/.cclens/assistant-\nruntime cwd\n[…]\nar already link to their pages, and Runs now hangs\noff the Assistant header (diagnostics behind the AI surface, active-state\nshared with /runs).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix memory-file citation links; tidy sidebar nav",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T08:01:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7c9effd3c25ca681f65978d7673c913337e02f1",
          "body": "fix(team-server): insight PDF export 500 in production (0.15.2)",
          "is_bot": false,
          "headline": "Merge pull request #90 from cowcow02/fix/team-server-insight-pdf-500",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T07:57:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ffda4c1f167faac631af4650331f9310c77506d7",
          "body": "Exact-pin the package so it cannot drift from the Chromium revision\ninstalled in the Dockerfile. Mirror container-safe launch flags in the\nlocal PDF e2e script.",
          "is_bot": false,
          "headline": "fix(team-server): pin playwright 1.60.0 to match Docker browsers",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T07:54:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1866470187300b6b99acbf7c92f13b6b76f9f72",
          "body": "Headless capture navigated to the public BASE_URL and set a Secure\ncookie for that host, so Playwright often failed inside the container\n(DNS hairpin / TLS / reachability). Always render via loopback\n(http://127.0.0.1:$PORT) with a cookie scoped to that origin.\n\nAlso install Playwright Chromium in the Docker image (Debian slim +\n--with-deps), use container-safe Chromium flags, and keep playwright\nexternal to the Next bundle. Bump team-server to 0.15.2.",
          "is_bot": false,
          "headline": "fix(team-server): stop insight PDF export 500s in production",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T07:46:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7f1281ed0ab22613b6b713db7dab1357cf0ce2d",
          "body": "fix(parser): skip empty Codex premium rate_limits shells",
          "is_bot": false,
          "headline": "Merge pull request #89 from cowcow02/fix/codex-empty-premium-rate-limits",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T06:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d70be2b3d986f6d55a64f1fa8d6fe22b8002fdf",
          "body": "Desktop/SDK sometimes emit token_count.rate_limits with limit_id\n\"premium\" (or an empty codex shell) where primary/secondary are null.\ngetLatestCodexUsage treated those as authoritative and blanked the\nmenubar/usage UI even when an older rollout still had real 5h/7d\nwindows.\n\nSkip unusable shells and keep scanning older events/rollouts until a\nusable used_percent is found.",
          "is_bot": false,
          "headline": "fix(parser): skip empty Codex premium rate_limits shells",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T06:37:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87a96a6391c14abb5b47fbf8108ef60e6ff2a472",
          "body": null,
          "is_bot": false,
          "headline": "Add changelog entry for 0.15.7",
          "author_name": "cowcow02",
          "author_login": "cowcow02",
          "committed_at": "2026-07-10T04:54:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 709,
      "latest_release_at": "2026-07-20T07:56:53Z",
      "latest_release_tag": "v1.0.3",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 16,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 0.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "fleetlens",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "claude",
            "claude-code",
            "codex",
            "gemini-cli",
            "dashboard",
            "agent",
            "multi-agent",
            "observability",
            "usage",
            "analytics"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/fleetlens",
          "is_deprecated": false,
          "latest_version": "1.0.3",
          "repository_url": "https://github.com/cowcow02/fleetlens",
          "versions_count": 64,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 4270,
          "first_published_at": "2026-04-13T07:48:45.807000Z",
          "latest_published_at": "2026-07-20T07:56:51.626000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 4,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "apps/web/tsconfig.json",
        "packages/cli/tsconfig.json",
        "packages/entries/tsconfig.json",
        "packages/parser/tsconfig.json",
        "packages/team-server/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 115758,
      "source_files_sampled": 685,
      "oversized_source_files": 6,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 23856
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@claude-lens/entries",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:^"
        },
        {
          "name": "@claude-lens/parser",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@tanstack/react-virtual",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.13.23"
        },
        {
          "name": "clsx",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.1"
        },
        {
          "name": "lucide-react",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.468.0"
        },
        {
          "name": "next",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "16.2.2"
        },
        {
          "name": "react",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.4"
        },
        {
          "name": "react-dom",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "19.2.4"
        },
        {
          "name": "react-markdown",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.1.0"
        },
        {
          "name": "recharts",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.15.0"
        },
        {
          "name": "remark-gfm",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.1"
        },
        {
          "name": "zod",
          "manifest": "apps/web/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.3.6"
        },
        {
          "name": "@claude-lens/parser",
          "manifest": "packages/entries/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "server-only",
          "manifest": "packages/entries/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.0.1"
        },
        {
          "name": "zod",
          "manifest": "packages/entries/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.23.8"
        },
        {
          "name": "@claude-lens/parser",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@dnd-kit/core",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^6.3.1"
        },
        {
          "name": "@dnd-kit/sortable",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^10.0.0"
        },
        {
          "name": "@dnd-kit/utilities",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.2.2"
        },
        {
          "name": "@google-cloud/run",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "1.5.1"
        },
        {
          "name": "@types/react-grid-layout",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.3.5"
        },
        {
          "name": "drizzle-orm",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.40.0"
        },
        {
          "name": "next",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^16.2.2"
        },
        {
          "name": "pg",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.13.0"
        },
        {
          "name": "playwright",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "1.60.0"
        },
        {
          "name": "react",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.4"
        },
        {
          "name": "react-dom",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.4"
        },
        {
          "name": "react-grid-layout",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.5.0"
        },
        {
          "name": "semver",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "7.6.3"
        },
        {
          "name": "zod",
          "manifest": "packages/team-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.24.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 97,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 5,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "cowcow02",
          "commits": 706,
          "avatar_url": "https://avatars.githubusercontent.com/u/673550?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "claude-code-review.yml",
        "claude.yml",
        "pages.yml",
        "publish-team-server-image.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "eslint.config.mjs"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "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": 10,
            "reason": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/16 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "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": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "57 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "89831b4d03ed2cee3d09f9bccca29e1c27dabd9e",
        "ran_at": "2026-07-26T09:23:22Z",
        "aggregate_score": 3.9,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T07:56:58Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-20T07:51:04Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/cowcow02/fleetlens",
    "host": "github.com",
    "name": "fleetlens",
    "owner": "cowcow02"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 64,
      "inputs": {
        "security": 39,
        "vitality": 81,
        "community": 50,
        "governance": 56,
        "engineering": 90
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 81,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "commits_last_year": 709,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 16
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "16/52 weeks with commits",
                "points": 11.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 16
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "709 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 709
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v1.0.3",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 0.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 8,
            "inputs": {
              "forks": 0,
              "stars": 4,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "4 stars",
                "points": 7.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 13.5,
                "status": "met",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "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": 60,
            "inputs": {
              "packages": [
                "fleetlens"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 4270
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "4,270 downloads/month across npm",
                "points": 48.4,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 4270,
                      "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "merged_prs": 97,
              "open_issues": 0,
              "closed_issues": 5,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 3
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "97/100 decided PRs merged",
                "points": 37.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 97,
                      "decided": 100
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/16 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 46,
            "inputs": {
              "followers": 8,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "cowcow02",
              "public_repos": 12,
              "account_age_days": 5610
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "8 followers of cowcow02",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 8,
                      "login": "cowcow02"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "12 public repos, account ~15 yr old",
                "points": 20.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 12
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "fleetlens"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "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 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "64 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 64
                    }
                  }
                ],
                "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": "excellent",
        "name": "Engineering Quality",
        "value": 90,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "6 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "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": "eslint.config.mjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://cowcow02.github.io/fleetlens/",
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://cowcow02.github.io/fleetlens/",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 39,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.9
            },
            "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": "5 out of 5 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/16 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 1",
                "points": 0.5,
                "status": "partial",
                "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": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "57 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 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.8,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 23856
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, 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": "80 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 80,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "apps/web/tsconfig.json",
                "packages/cli/tsconfig.json",
                "packages/entries/tsconfig.json",
                "packages/parser/tsconfig.json",
                "packages/team-server/tsconfig.json"
              ],
              "agent_commit_share": 0.22,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "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": "eslint.config.mjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "eslint.config.mjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "apps/web/tsconfig.json, packages/cli/tsconfig.json, packages/entries/tsconfig.json, packages/parser/tsconfig.json, packages/team-server/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "apps/web/tsconfig.json, packages/cli/tsconfig.json, packages/entries/tsconfig.json, packages/parser/tsconfig.json, packages/team-server/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "22 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 22,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "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": 115758,
              "source_files_sampled": 685,
              "oversized_source_files": 6
            },
            "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": "6/685 source files over 60KB",
                "points": 54.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 685,
                      "oversized": 6
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package '@claude-lens/parser' from its registry",
    "Could not fetch npm package '@claude-lens/entries' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T09:23:35.813992Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/cowcow02/fleetlens.svg",
  "full_name": "cowcow02/fleetlens",
  "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.27.0 — metodología completa · wiki de métricas.

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