Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 16:54 UTC

enrichlayer / el-linear

A pragmatic CLI for Linear.app — deterministic resolution, structured validation, GraphQL escape hatch.

TypeScriptMIT★ 0 estrellas⑂ 1 forkdesde abr 2026Ver en GitHub ↗

enrichlayer/el-linear 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 (82/100) y la más baja, Community & Adoption (50/100). Se actualizó por última vez hace 2 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

Enrich LayerOrganización
1 seguidor7 repositorios públicosdesde jun 2025

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@enrichlayer/el-linear1.43.111.67847hace 5 díaslinearlinear.appcliissue-trackergraphqlclaudeclaude-code

Métricas por categoría

Vitalidad

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

78Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 2 días
9/36Cadencia de commits — 13/52 semanas con commits
18/18Volumen de commits — 282 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year282
human_commit_share0,89
days_since_last_push2
active_weeks_last_year13
Cómo se puntúa
27/27Publica versiones — 40 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~1,1 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count40
latest_release_tagv1.43.1
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases1,1
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

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

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.8/22.5Distribución de commits — el principal contribuyente firma el 96% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,964
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
36.2/38.3Aceptación de PR — 259/274 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 1/22 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs259
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs15
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
2.2/25Alcance del propietario — 1 seguidores de enrichlayer
8.9/25Trayectoria — 7 repos públicos, cuenta de ~1 años
Datos de entrada utilizados
followers1
owner_typeOrganization
is_verified
owner_loginenrichlayer
public_repos7
account_age_days418
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 47 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@enrichlayer/el-linear
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

82Bueno · 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 — biome.json
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://enrichlayer.com/tools/el-linear
10/10Descripción del repositorio
0/10Topics
0/10Wiki
Datos de entrada utilizados
topics
has_wikino
homepagehttps://enrichlayer.com/tools/el-linear
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?

56Moderado · 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 — 25 out of 25 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 1/22 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 3 contributing companies or organizations -- score normalized to 10
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,5
Excluidos de la puntuación (sin datos o no aplicable): signed_releases. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
25/25Dependencias indirectas libres de avisos conocidos — ninguna dependencia indirecta tiene un aviso conocido
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages62
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejó el cierre de dependencias en tiempo de ejecución de npm:@enrichlayer/el-linear@1.43.1 —lo que arrastra la instalación del paquete publicado—: 62 paquetes. No se analiza la alcanzabilidad.

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.

81Bueno · 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 — 85 de 89 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,955
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7523
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — biome.json
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 21 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 11 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilespnpm-lock.yaml
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configstsconfig.json
agent_commit_share0,21
toolchain_manifests
dependency_bot_commit_share0,11
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.1/55Tamaños de archivo manejables — 4/258 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes102.546
source_files_sampled258
oversized_source_files4

Datos clave

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

Más detalle

OpenSSF Scorecard 4.5 / 10
4.5agregado

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-25 16:54 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests25 out of 25 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 1/22 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Dependencias directas 4
RegistroPaqueteRestricción de versiónManifiesto
npm@inquirer/prompts^8.4.2package.json
npm@linear/sdk^86.0.0package.json
npmcommander^15.0.0package.json
npmpicocolors^1.1.1package.json
Todas las dependencias 174

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 4 paquetes directos y 170 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
npm@inquirer/prompts8.5.2directa
npm@linear/sdk86.0.0directa
npmcommander15.0.0directa
npmpicocolors1.1.1directa
npm@apm-js-collab/code-transformer0.15.0indirecta
npm@apm-js-collab/code-transformer-bundler-plugins0.5.0indirecta
npm@apm-js-collab/tracing-hooks0.10.1indirecta
npm@biomejs/biome2.5.3indirecta
npm@biomejs/cli-darwin-arm642.5.3indirecta
npm@biomejs/cli-darwin-x642.5.3indirecta
npm@biomejs/cli-linux-arm642.5.3indirecta
npm@biomejs/cli-linux-arm64-musl2.5.3indirecta
npm@biomejs/cli-linux-x642.5.3indirecta
npm@biomejs/cli-linux-x64-musl2.5.3indirecta
npm@biomejs/cli-win32-arm642.5.3indirecta
npm@biomejs/cli-win32-x642.5.3indirecta
npm@emnapi/core1.10.0indirecta
npm@emnapi/runtime1.10.0indirecta
npm@emnapi/wasi-threads1.2.1indirecta
npm@esbuild/aix-ppc640.28.1indirecta
npm@esbuild/android-arm0.28.1indirecta
npm@esbuild/android-arm640.28.1indirecta
npm@esbuild/android-x640.28.1indirecta
npm@esbuild/darwin-arm640.28.1indirecta
npm@esbuild/darwin-x640.28.1indirecta
npm@esbuild/freebsd-arm640.28.1indirecta
npm@esbuild/freebsd-x640.28.1indirecta
npm@esbuild/linux-arm0.28.1indirecta
npm@esbuild/linux-arm640.28.1indirecta
npm@esbuild/linux-ia320.28.1indirecta
npm@esbuild/linux-loong640.28.1indirecta
npm@esbuild/linux-mips64el0.28.1indirecta
npm@esbuild/linux-ppc640.28.1indirecta
npm@esbuild/linux-riscv640.28.1indirecta
npm@esbuild/linux-s390x0.28.1indirecta
npm@esbuild/linux-x640.28.1indirecta
npm@esbuild/netbsd-arm640.28.1indirecta
npm@esbuild/netbsd-x640.28.1indirecta
npm@esbuild/openbsd-arm640.28.1indirecta
npm@esbuild/openbsd-x640.28.1indirecta
npm@esbuild/openharmony-arm640.28.1indirecta
npm@esbuild/sunos-x640.28.1indirecta
npm@esbuild/win32-arm640.28.1indirecta
npm@esbuild/win32-ia320.28.1indirecta
npm@esbuild/win32-x640.28.1indirecta
npm@graphql-typed-document-node/core3.2.0indirecta
npm@inquirer/ansi2.0.7indirecta
npm@inquirer/checkbox5.2.1indirecta
npm@inquirer/confirm6.1.1indirecta
npm@inquirer/core11.2.1indirecta
npm@inquirer/editor5.2.2indirecta
npm@inquirer/expand5.1.1indirecta
npm@inquirer/external-editor3.0.3indirecta
npm@inquirer/figures2.0.7indirecta
npm@inquirer/input5.1.2indirecta
npm@inquirer/number4.1.1indirecta
npm@inquirer/password5.1.1indirecta
npm@inquirer/rawlist5.3.1indirecta
npm@inquirer/search4.2.1indirecta
npm@inquirer/select5.2.1indirecta
npm@inquirer/type4.0.7indirecta
npm@jridgewell/sourcemap-codec1.5.5indirecta
npm@napi-rs/wasm-runtime1.1.6indirecta
npm@opentelemetry/api1.9.1indirecta
npm@opentelemetry/api-logs0.220.0indirecta
npm@opentelemetry/core2.9.0indirecta
npm@opentelemetry/instrumentation0.220.0indirecta
npm@opentelemetry/resources2.9.0indirecta
npm@opentelemetry/sdk-trace2.9.0indirecta
npm@opentelemetry/sdk-trace-base2.9.0indirecta
npm@opentelemetry/semantic-conventions1.43.0indirecta
npm@oxc-project/types0.127.0indirecta
npm@rolldown/binding-android-arm641.0.0-rc.17indirecta
npm@rolldown/binding-darwin-arm641.0.0-rc.17indirecta
npm@rolldown/binding-darwin-x641.0.0-rc.17indirecta
npm@rolldown/binding-freebsd-x641.0.0-rc.17indirecta
npm@rolldown/binding-linux-arm-gnueabihf1.0.0-rc.17indirecta
npm@rolldown/binding-linux-arm64-gnu1.0.0-rc.17indirecta
npm@rolldown/binding-linux-arm64-musl1.0.0-rc.17indirecta
npm@rolldown/binding-linux-ppc64-gnu1.0.0-rc.17indirecta
npm@rolldown/binding-linux-s390x-gnu1.0.0-rc.17indirecta
npm@rolldown/binding-linux-x64-gnu1.0.0-rc.17indirecta
npm@rolldown/binding-linux-x64-musl1.0.0-rc.17indirecta
npm@rolldown/binding-openharmony-arm641.0.0-rc.17indirecta
npm@rolldown/binding-wasm32-wasi1.0.0-rc.17indirecta
npm@rolldown/binding-win32-arm64-msvc1.0.0-rc.17indirecta
npm@rolldown/binding-win32-x64-msvc1.0.0-rc.17indirecta
npm@rolldown/pluginutils1.0.0-rc.17indirecta
npm@sentry/conventions0.15.1indirecta
npm@sentry/core10.65.0indirecta
npm@sentry/node10.65.0indirecta
npm@sentry/node-core10.65.0indirecta
npm@sentry/opentelemetry10.65.0indirecta
npm@sentry/server-utils10.65.0indirecta
npm@standard-schema/spec1.1.0indirecta
npm@tybys/wasm-util0.10.3indirecta
npm@types/chai5.2.3indirecta
npm@types/deep-eql4.0.2indirecta
npm@types/estree1.0.9indirecta
npm@types/node26.0.0indirecta
npm@vitest/expect4.1.10indirecta
npm@vitest/mocker4.1.10indirecta
npm@vitest/pretty-format4.1.10indirecta
npm@vitest/runner4.1.10indirecta
npm@vitest/snapshot4.1.10indirecta
npm@vitest/spy4.1.10indirecta
npm@vitest/utils4.1.10indirecta
npmassertion-error2.0.1indirecta
npmastring1.9.0indirecta
npmchai6.2.2indirecta
npmchardet2.1.1indirecta
npmcjs-module-lexer2.2.0indirecta
npmcli-width4.1.0indirecta
npmconvert-source-map2.0.0indirecta
npmdebug4.4.3indirecta
npmdetect-libc2.1.2indirecta
npmes-module-lexer2.3.0indirecta
npmes-module-lexer2.3.1indirecta
npmesbuild0.28.1indirecta
npmesquery1.7.0indirecta
npmestraverse5.3.0indirecta
npmestree-walker3.0.3indirecta
npmexpect-type1.4.0indirecta
npmfast-string-truncated-width3.0.3indirecta
npmfast-string-width3.0.2indirecta
npmfast-wrap-ansi0.2.2indirecta
npmfdir6.5.0indirecta
npmfsevents2.3.3indirecta
npmgraphql17.0.1indirecta
npmiconv-lite0.7.2indirecta
npmimport-in-the-middle3.3.1indirecta
npmlightningcss1.32.0indirecta
npmlightningcss-android-arm641.32.0indirecta
npmlightningcss-darwin-arm641.32.0indirecta
npmlightningcss-darwin-x641.32.0indirecta
npmlightningcss-freebsd-x641.32.0indirecta
npmlightningcss-linux-arm-gnueabihf1.32.0indirecta
npmlightningcss-linux-arm64-gnu1.32.0indirecta
npmlightningcss-linux-arm64-musl1.32.0indirecta
npmlightningcss-linux-x64-gnu1.32.0indirecta
npmlightningcss-linux-x64-musl1.32.0indirecta
npmlightningcss-win32-arm64-msvc1.32.0indirecta
npmlightningcss-win32-x64-msvc1.32.0indirecta
npmmagic-string0.30.21indirecta
npmmeriyah6.1.4indirecta
npmmodule-details-from-path1.0.4indirecta
npmms2.1.3indirecta
npmmute-stream3.0.0indirecta
npmnanoid3.3.16indirecta
npmobug2.1.3indirecta
npmpathe2.0.3indirecta
npmpicomatch4.0.5indirecta
npmpostcss8.5.18indirecta
npmrequire-in-the-middle8.0.1indirecta
npmrolldown1.0.0-rc.17indirecta
npmsafer-buffer2.1.2indirecta
npmsemifies1.0.0indirecta
npmsiginfo2.0.0indirecta
npmsignal-exit4.1.0indirecta
npmsource-map0.6.1indirecta
npmsource-map-js1.2.1indirecta
npmstackback0.0.2indirecta
npmstd-env4.1.0indirecta
npmtinybench2.9.0indirecta
npmtinyexec1.2.4indirecta
npmtinyglobby0.2.17indirecta
npmtinyrainbow3.1.0indirecta
npmtslib2.8.1indirecta
npmtsx4.23.1indirecta
npmtypescript6.0.3indirecta
npmundici-types8.3.0indirecta
npmvite8.0.10indirecta
npmvitest4.1.10indirecta
npmwhy-is-node-running2.3.0indirecta
Avisos de dependencias 0

Instalar npm:@enrichlayer/el-linear@1.43.1 arrastra 62 paquetes, directos y transitivos: 0 tienen avisos conocidos, de los cuales 0 son dependencias directas.

Ningún aviso conocido afecta a las dependencias evaluadas.

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 3697,
      "has_wiki": false,
      "homepage": "https://enrichlayer.com/tools/el-linear",
      "languages": {
        "Shell": 94,
        "JavaScript": 36083,
        "TypeScript": 2076435
      },
      "pushed_at": "2026-07-23T16:05:01Z",
      "created_at": "2026-04-30T12:04:15Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T16:08:40Z",
      "description": "A pragmatic CLI for Linear.app — deterministic resolution, structured validation, GraphQL escape hatch.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://enrichlayer.com",
      "name": "Enrich Layer",
      "type": "Organization",
      "login": "enrichlayer",
      "company": null,
      "location": null,
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/214456306?v=4",
      "created_at": "2025-06-02T08:07:22Z",
      "is_verified": null,
      "public_repos": 7,
      "account_age_days": 418
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.43.1",
          "kind": "patch",
          "published_at": "2026-07-19T17:59:33Z"
        },
        {
          "tag": "v1.43.0",
          "kind": "minor",
          "published_at": "2026-07-16T14:46:24Z"
        },
        {
          "tag": "v1.42.0",
          "kind": "minor",
          "published_at": "2026-07-15T17:25:45Z"
        },
        {
          "tag": "v1.41.1",
          "kind": "patch",
          "published_at": "2026-07-15T15:17:52Z"
        },
        {
          "tag": "v1.41.0",
          "kind": "minor",
          "published_at": "2026-07-15T10:48:33Z"
        },
        {
          "tag": "v1.40.0",
          "kind": "minor",
          "published_at": "2026-07-14T10:22:56Z"
        },
        {
          "tag": "v1.39.0",
          "kind": "minor",
          "published_at": "2026-07-13T12:06:52Z"
        },
        {
          "tag": "v1.38.2",
          "kind": "patch",
          "published_at": "2026-07-12T06:13:18Z"
        },
        {
          "tag": "v1.38.1",
          "kind": "patch",
          "published_at": "2026-07-12T06:09:21Z"
        },
        {
          "tag": "v1.38.0",
          "kind": "minor",
          "published_at": "2026-07-09T17:44:31Z"
        },
        {
          "tag": "v1.37.2",
          "kind": "patch",
          "published_at": "2026-07-06T15:23:16Z"
        },
        {
          "tag": "v1.37.1",
          "kind": "patch",
          "published_at": "2026-07-06T14:35:27Z"
        },
        {
          "tag": "v1.37.0",
          "kind": "minor",
          "published_at": "2026-07-03T12:48:16Z"
        },
        {
          "tag": "v1.36.0",
          "kind": "minor",
          "published_at": "2026-07-03T07:51:21Z"
        },
        {
          "tag": "v1.35.0",
          "kind": "minor",
          "published_at": "2026-07-02T15:31:41Z"
        },
        {
          "tag": "v1.34.1",
          "kind": "patch",
          "published_at": "2026-07-02T11:00:53Z"
        },
        {
          "tag": "v1.34.0",
          "kind": "minor",
          "published_at": "2026-07-01T16:54:04Z"
        },
        {
          "tag": "v1.33.0",
          "kind": "minor",
          "published_at": "2026-07-01T09:25:53Z"
        },
        {
          "tag": "v1.32.0",
          "kind": "minor",
          "published_at": "2026-06-30T09:39:01Z"
        },
        {
          "tag": "v1.31.0",
          "kind": "minor",
          "published_at": "2026-06-29T16:06:42Z"
        },
        {
          "tag": "v1.30.0",
          "kind": "minor",
          "published_at": "2026-06-25T09:11:12Z"
        },
        {
          "tag": "v1.29.1",
          "kind": "patch",
          "published_at": "2026-06-21T16:52:26Z"
        },
        {
          "tag": "v1.29.0",
          "kind": "minor",
          "published_at": "2026-06-21T16:50:10Z"
        },
        {
          "tag": "v1.28.0",
          "kind": "minor",
          "published_at": "2026-06-20T09:08:05Z"
        },
        {
          "tag": "v1.27.0",
          "kind": "minor",
          "published_at": "2026-06-19T20:33:20Z"
        },
        {
          "tag": "v1.26.0",
          "kind": "minor",
          "published_at": "2026-06-18T22:11:31Z"
        },
        {
          "tag": "v1.25.0",
          "kind": "minor",
          "published_at": "2026-06-18T10:11:02Z"
        },
        {
          "tag": "v1.24.0",
          "kind": "minor",
          "published_at": "2026-06-17T22:30:22Z"
        },
        {
          "tag": "v1.23.0",
          "kind": "minor",
          "published_at": "2026-06-14T22:26:18Z"
        },
        {
          "tag": "v1.22.0",
          "kind": "minor",
          "published_at": "2026-06-14T20:59:26Z"
        },
        {
          "tag": "v1.21.0",
          "kind": "minor",
          "published_at": "2026-06-08T14:39:19Z"
        },
        {
          "tag": "v1.20.0",
          "kind": "minor",
          "published_at": "2026-06-06T17:23:43Z"
        },
        {
          "tag": "v1.19.0",
          "kind": "minor",
          "published_at": "2026-06-03T18:42:17Z"
        },
        {
          "tag": "v1.18.1",
          "kind": "patch",
          "published_at": "2026-05-29T17:37:07Z"
        },
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2026-05-24T16:07:21Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2026-05-21T14:22:31Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2026-05-21T13:07:51Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2026-05-09T17:52:11Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-05-07T18:28:27Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-05-07T17:38:14Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "1ea14f688d910348b331d968dd8959909c0e1ce3",
          "body": "Bumps the dev-dependencies group with 4 updates:\n[@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome),\n[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node),\n[graphql](https://github.com/graphql/graphql-js) and\n[tsx](https://github.com\n[…]\n of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): Bump the dev-dependencies group with 4 updates (#273)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-23T16:04:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6f73c51ad0a4bf2d5f8dc5b793311de9d2f2e6e8",
          "body": "Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript)\nfrom 10.63.0 to 10.65.0.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a\nhref=\"https://github.com/getsentry/sentry-javascript/releases\">@​sentry/node's\nreleases</a>.</em></p>\n<blockquote>\n<h2>10.65.0</h2>\n<ul>\n<li\n[…]\nnless you reopen the\nPR or upgrade to it yourself)\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump @sentry/node from 10.63.0 to 10.65.0 (#274)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-23T16:02:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b15ed343a2b567e29ec557eecab3a58d5e0ace37",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[1.43.1](https://github.com/enrichlayer/el-linear/compare/v1.43.0...v1.43.1)\n(2026-07-19)\n\n\n### Bug Fixes\n\n* **refs:** preserve HTML comment markers (DEV-6481)\n([#271](https://github.com/enrichlayer/el-linear/issues/271))\n([7987f89](https://git\n[…]\nc1db110da25e01906863))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 1.43.1 (#270)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-19T17:59:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff626127f21496a0fd10c1db110da25e01906863",
          "body": "…0) (#272)\n\n## What\n\nRetries explicitly safe issue-update mutations after transient Linear\ntransport\nor 5xx failures. It also prevents `issues mark-branch` from attaching an\nexplicit, conflicting issue ID to the current branch unless recovery is\nrequested deliberately.\n\n## Why\n\n[DEV-6570](https://li\n[…]\nonal recovery.\n\n## Test\n\n- [x] `pnpm lint`\n- [x] `pnpm build`\n- [x] `pnpm test`\n- [x] Focused GraphQL retry and marker mismatch tests\n\nCloses [DEV-6570](https://linear.app/verticalint/issue/DEV-6570/)",
          "is_bot": false,
          "headline": "fix(workflow): retry safe mutations and guard branch markers (DEV-657…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-19T06:19:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7987f898b894ee91f5654d72ed90670d80baa6f0",
          "body": "## Simple Description\n\nPreserves HTML comments as machine-readable Markdown ranges in\n`el-linear refs wrap`, so identifiers inside markers such as `nit-waive`\nare not turned into links.\n\n## What Changed\n\n- Added HTML comments, including unterminated comments through EOF, to\nthe shared protected-rang\n[…]\nn typecheck`\n- `pnpm run lint`\n- Targeted Vitest suite: 49 tests passed\n\ncodex-parity: n/a — claude-only\npi-parity: n/a — claude-only\n\nCloses [DEV-6481](https://linear.app/verticalint/issue/DEV-6481/)",
          "is_bot": false,
          "headline": "fix(refs): preserve HTML comment markers (DEV-6481) (#271)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-18T18:24:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e266085b83ae422c12399e022787b7c5a77df713",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[1.43.0](https://github.com/enrichlayer/el-linear/compare/v1.42.0...v1.43.0)\n(2026-07-16)\n\n\n### Features\n\n* **issues:** auto-chunk issues list so large teams don't hit the\nGraphQL complexity cap (DEV-6312)\n([#268](https://github.com/enrichlayer\n[…]\nb98c64ff651b234f3845))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 1.43.0 (#269)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-16T14:46:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a5602ddbca9aa6b19a082617e10dba380bf3847",
          "body": "…EV-6315) (#267)\n\n## Simple Description\n\nPrevent accidental issue-body data loss by rejecting issue JSON\nenvelopes passed as descriptions unless the caller explicitly uses the\naudited override.\n\n## What\n\nBlocks `issues create`/`update` from writing a description that is\nactually an issue's own JSON \n[…]\n-6315](https://linear.app/verticalint/issue/DEV-6315/)\n(internal). Recovered victims: the two corrupted issues restored\nout-of-band.\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(issues): block overwriting a body with an issue JSON envelope (D…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-16T14:45:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fe9046fb5c3708bafd5fb98c64ff651b234f3845",
          "body": "…phQL complexity cap (DEV-6312) (#268)\n\n## Simple Description\n\nFetch large issue lists in safe cursor-paginated chunks, add --all for\nexhaustive structured enumeration, and keep relevance-ranked full-text\nsearch bounded below Linear GraphQL complexity ceiling.\n\n## What\n\n`el-linear issues list` now p\n[…]\n/relevance sweep, where the\nbucketing workaround kept recurring).\n\nCloses [DEV-6312](https://linear.app/verticalint/issue/DEV-6312/)\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(issues): auto-chunk issues list so large teams don't hit the Gra…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-16T14:45:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8d24eca60aaaf479a883592c5609d03f6db85ddf",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[1.42.0](https://github.com/enrichlayer/el-linear/compare/v1.41.1...v1.42.0)\n(2026-07-15)\n\n\n### Features\n\n* add automated advisory PR review GitHub Action\n([#259](https://github.com/enrichlayer/el-linear/issues/259))\n([711d4a1](https://github.c\n[…]\n81c257f21eea09cce039))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 1.42.0 (#265)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T17:25:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f91e8c26cf744bfcab88a388b02e70df501a855",
          "body": "## What\n\nAn optional **identity-resolver hook**: el-linear can consult an\norganization's people registry to resolve a person — via a **command**,\nnot an HTTP client.\n\n```jsonc\n{ \"identity\": { \"resolver\": [\"my-resolver\"] } }\n```\n\nel-linear appends the identifier as the final argv element and reads a\n\n[…]\n assignee and\ndelegate aliases from an organization-owned identity registry without\nembedding credentials in el-linear.\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(config): optional identity-resolver hook (DEV-5628) (#256)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T16:29:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "68c005085d0e61f9aae181c257f21eea09cce039",
          "body": "Reviewed workflow permission fix.",
          "is_bot": false,
          "headline": "fix(ci): grant Claude review action OIDC permission",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T16:04:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "711d4a175bc823833b78972394c03fb7bb5ce699",
          "body": "## What\n\nAdds `.github/workflows/pr-review.yml` — an automated **advisory** AI\ncode review that runs on every pull request and posts inline + summary\ncomments covering correctness, security, and el-linear's conventions.\nDocuments the one-time `ANTHROPIC_API_KEY` secret in CONTRIBUTING.md.\n\n## Why\n\ne\n[…]\nsrc/` change)\n- [ ] `pnpm build` — n/a\n- [ ] `pnpm test` — n/a\n\nCloses [DEV-6160](https://linear.app/verticalint/issue/DEV-6160/).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add automated advisory PR review GitHub Action (#259)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T15:18:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3679d07fccdf00c3392ad6e860c729c5b1f05ea2",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[1.41.1](https://github.com/enrichlayer/el-linear/compare/v1.41.0...v1.41.1)\n(2026-07-15)\n\n\n### Bug Fixes\n\n* **issues:** honor nested read options (DEV-6141)\n([#257](https://github.com/enrichlayer/el-linear/issues/257))\n([b58997c](https://githu\n[…]\nf8286b2ea98dbe4fa58e))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 1.41.1 (#262)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T15:17:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25ca91b817bd66339385f8286b2ea98dbe4fa58e",
          "body": "…DEV-6206) (#264)\n\n## What\n\nExclude `.agents/` from the biome and vitest scans (and gitignore it),\nso `biome check .` stops following symlinks out of the repo. Extends\n`scan-excludes.test.ts` to cover it, including a behavioral test that\nthe exclusion actually works.\n\n## Why\n\n[DEV-6206](https://line\n[…]\ne\ntests *do* guarantee is that the exclusion can't silently stop *working*\n(behavioral test) or drift out of sync with `.gitignore`.\n\nCloses [DEV-6206](https://linear.app/verticalint/issue/DEV-6206/).",
          "is_bot": false,
          "headline": "fix(lint): stop the biome scan from following links out of the repo (…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T15:13:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8b05fae7430d50e4cf836cf6447f827c6eb4b28b",
          "body": "…#263)\n\n## What\n\nWhen the duplicate gate flags a candidate, it now offers a third remedy:\nfile the new work as a **sub-issue** of the match (`--parent <id>`).\nPreviously it presented only \"comment on it instead\" or\n\"`--allow-duplicate`\".\n\n```\n  If one of these is the same work, comment on it instead\n[…]\nue/DEV-6206/).\n- [x] `pnpm build`\n- [x] `pnpm test` — 2053 passed (114 files); `duplicate-detection` 30\npassed (26 existing + 4 new).\n\nCloses [DEV-6205](https://linear.app/verticalint/issue/DEV-6205/)",
          "is_bot": false,
          "headline": "fix(issues): offer the sub-issue path when the duplicate gate fires (…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T12:46:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b58997ca33b4097c0658753cae0a363ab8697275",
          "body": "## Simple Description\n\nFix nested issue-read flags being accepted but ignored.\n\n## What Changed\n\n- merge inherited Commander options with local action options in the\nshared issue read handler\n- restore raw `--body` output for both `issues read` and `issue read`\n- lock nested-route raw output and mut\n[…]\nLI live smoke: `node dist/main.js issues read DEV-6141 --body`\n- built CLI live smoke: `node dist/main.js issue read DEV-6141 --body`\n\nCloses [DEV-6141](https://linear.app/verticalint/issue/DEV-6141/)",
          "is_bot": false,
          "headline": "fix(issues): honor nested read options (DEV-6141) (#257)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T10:58:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3198d998364c4461da15b1c8182068ebcc30caa",
          "body": ":robot: I have created a release *beep* *boop*\n---\n\n\n##\n[1.41.0](https://github.com/enrichlayer/el-linear/compare/v1.40.0...v1.41.0)\n(2026-07-15)\n\n\n### Features\n\n* **issues:** require explicit intake decisions\n([#260](https://github.com/enrichlayer/el-linear/issues/260))\n([9359415](https://github.co\n[…]\n3e071080ba75933f53f9))\n\n---\nThis PR was generated with [Release\nPlease](https://github.com/googleapis/release-please). See\n[documentation](https://github.com/googleapis/release-please#release-please).",
          "is_bot": false,
          "headline": "chore(main): release 1.41.0 (#261)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T10:48:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f6542b928969a81c22373e071080ba75933f53f9",
          "body": "## Simple Description\n\nRestore a clean full-repository lint baseline in el-linear.\n\n## What Changed\n\n- applied the pinned Biome formatter to `scan-excludes.test.ts`\n- replaced dynamic namespace indexing in the public-output contract test\nwith explicit named function references\n- recorded the quality\n[…]\npm typecheck`\n- `pnpm build`\n- `pnpm exec vitest run src/output.test.ts scan-excludes.test.ts`\n- `pnpm test` (113 files, 2,023 tests)\n\nCloses [DEV-6142](https://linear.app/verticalint/issue/DEV-6142/)",
          "is_bot": false,
          "headline": "fix(quality): restore clean lint baseline (DEV-6142) (#258)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T10:45:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "93594153a9851c7dded6d2724a4c055f5f6ee22c",
          "body": "## Simple Description\n\nThis adds an opt-in Linear issue intake gate before any create mutation.\nIt requires a single operative record of need, value, existing-work\nsearch evidence, canonical ownership, concrete placement, and a\n`PROCEED` decision.\n\n## What Changed\n\n- Added the configurable intake-de\n[…]\nations\n\nCycle 1 identified the missing existing-work step and parser ambiguity.\nThe corrective commit adds the step, closes\nplaceholder/duplicate/fenced-example bypasses, and adds regression\ncoverage.",
          "is_bot": false,
          "headline": "feat(issues): require explicit intake decisions (#260)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-15T10:44:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58941bb8ff117dc2121242887b35c5cd634e8974",
          "body": "…k (DEV-6064) (#255)\n\n* docs: correct the merge-strategy advice that shipped a no-op release (DEV-6064)\n\nThe PR-title-guard section told contributors that pushing \"a second, correctly-typed\ncommit\" is a valid alternative to amending the subject. That is true under SQUASH and\nfalse under the other tw\n[…]\nder all three: amend the\ncommit subject. Retitling the PR is necessary but not sufficient.\n\nAlso records that `el-git pr merge` defaults to merge-commit and takes `--squash`.\n\nRefs: DEV-6064, DEV-5944",
          "is_bot": false,
          "headline": "docs: amend the commit subject — the second-commit trick works by luc…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T10:22:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "004561c653f1ad4ab72aa56a8f741b1c8a2192d0",
          "body": "…in--components--el-linear\n\nchore(main): release 1.40.0",
          "is_bot": false,
          "headline": "Merge pull request #254 from enrichlayer/release-please--branches--ma…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T10:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb84f585c743cb7ec56bf544f7ca6943784a2d24",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.40.0",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:58:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9232e97c7513a28bf67f863bbdb9416a5cae8043",
          "body": "…nt-file\n\nfeat(projects): add --content-file to projects create/update (DEV-6033)",
          "is_bot": false,
          "headline": "Merge pull request #252 from enrichlayer/feat/DEV-6033-projects-conte…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:58:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1e1e7ab03fcf3b0bbe86ab34a10f013ba89c95e",
          "body": "…ktrees\n\nchore(tooling): exclude .tmp/ and .claude/ worktrees from vitest + biome (DEV-5944)",
          "is_bot": false,
          "headline": "Merge pull request #250 from enrichlayer/fix/DEV-5944-exclude-tmp-wor…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:56:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "401df22387be5fd1de108bb9f0ab69f65023d932",
          "body": "…-operations skill (DEV-6033)\n\nCycle-1 blocker: the flag shipped, but the doc that CAUSED this issue still said it\ndid not exist.\n\n`claude-skills/` is in package.json `files`, so SKILL.md is a PUBLISHED artifact — it\nis what an agent consuming @enrichlayer/el-linear actually reads. Its file-flag\ncon\n[…]\naim outlives\nthe person who wrote it. Now states the real landscape: matches comments /\nproject-updates, deliberately diverges from issues.\n\n989 tests green; typecheck and biome clean.\n\nRefs: DEV-6033",
          "is_bot": false,
          "headline": "feat(skill): document projects --content-file in the published linear…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:54:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cde84a0f3263ec88b769d1f871b1d9d34dc4ade4",
          "body": "…ored (DEV-5944)\n\nTwo things, and the second is why this commit's TYPE matters.\n\n1. The guard was missing its own premise.\n\n   The excludes are only safe BECAUSE `.tmp/` and `.claude/` are gitignored — they\n   hold no tracked source, just worktree scratch. The guard asserted that vitest and\n   biome\n[…]\nmit the PR\n   has two, the squash takes the (now `chore:`) PR title, and no release is cut. Same\n   trap that nearly shipped #248 as a no-op; docs/versioning.md documents it.\n\nRefs: DEV-5944, DEV-6064",
          "is_bot": false,
          "headline": "chore(tooling): assert the excluded worktree dirs are actually gitign…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:52:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "61c4d5b72025b1f7e44413c12abd2b70a4efb42c",
          "body": "…ublished-surface\n\nci: check package.json per-key so dev-dependency majors stop going red (DEV-6066)",
          "is_bot": false,
          "headline": "Merge pull request #253 from enrichlayer/fix/DEV-6066-section-aware-p…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:49:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df34b2c479f3a37b2e4242859426d3068f6a7d27",
          "body": "…s (DEV-6066)\n\nCycle-2 self-review of this PR. `build` is in RELEASE_AFFECTING_SCRIPTS only because\n.github/workflows/release.yml happens to run `pnpm run build`. That is a REPO CHOICE,\nnot an npm law — and hardcoding it means the gate is one workflow edit away from going\nhalf-blind.\n\nIf someone add\n[…]\nurns the drift guard red with\n`release.yml runs \\`pnpm run build\\`, which produces the published tarball, but \"build\"\nis not in RELEASE_AFFECTING_SCRIPTS`. 61 tests green; biome clean.\n\nRefs: DEV-6066",
          "is_bot": false,
          "headline": "ci: make release.yml the source of truth for release-affecting script…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:47:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "195355f869946e5ff3c80c9600857dc774d4e97c",
          "body": "…dependencies-ca2c45c3af\n\nbuild(deps-dev): Bump the dev-dependencies group across 1 directory with 3 updates",
          "is_bot": false,
          "headline": "Merge pull request #246 from enrichlayer/dependabot/npm_and_yarn/dev-…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:40:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fea32c2f154c823305f4e97f46b953ff824b1b8",
          "body": "…tarball (DEV-6066)\n\nSelf-caught hole in this PR's own key classification, found while reviewing it.\n\nThe section-aware check listed `scripts` as dev-only, carving back out only the\nINSTALL-time lifecycle scripts (preinstall/install/postinstall/prepare) that run on a\nconsumer's machine. The comment \n[…]\nscripts.build`\nnow FAILS and names `package.json (scripts)`. Falsified — dropping the build/publish\nscripts from the set turns exactly those two tests red. 60 tests green; biome clean.\n\nRefs: DEV-6066",
          "is_bot": false,
          "headline": "ci: gate build/publish-time scripts too — scripts.build produces the …",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-14T09:35:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d51ce7341b119ffa1d61b8263e17b76b5c2428fd",
          "body": "…ith 3 updates\n\nBumps the dev-dependencies group with 3 updates in the / directory: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome), [tsx](https://github.com/privatenumber/tsx) and [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest).\n\n\nUpdate\n[…]\nependency-version: 4.1.10\n  dependency-type: direct:development\n  update-type: version-update:semver-patch\n  dependency-group: dev-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): Bump the dev-dependencies group across 1 directory w…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T16:56:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "998160ff56943254b1c5a2fce4c3b0eb6e576a51",
          "body": "…d (DEV-6066)\n\nDEV-6064 stopped ROUTINE dependabot PRs from being permanently red by removing\npnpm-lock.yaml from PUBLISHED_PATHS. It did not cover the other dependabot shape:\non a MAJOR bump, dependabot rewrites the RANGE in package.json — and package.json\nis (correctly) still a published surface. \n[…]\nee section-aware\ntests red (devDeps-only passes, runtime bump still fails, other consumer-visible\nkeys still gate). 41 tests in the file; full suite 26441 green; biome clean.\n\nRefs: DEV-6066, DEV-6064",
          "is_bot": false,
          "headline": "ci: check package.json per-key so dev-dependency majors stop going re…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T14:55:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b06fe27a39dbae978d79ecf467e7f5c25821144e",
          "body": "…ry/node-10.63.0\n\nbuild(deps): Bump @sentry/node from 10.62.0 to 10.63.0",
          "is_bot": false,
          "headline": "Merge pull request #247 from enrichlayer/dependabot/npm_and_yarn/sent…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T12:23:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b87b02e77278101d99799ca6f411dd756ff503a3",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' into dependabot/npm_and_yarn/sentry/node-10.63.0",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T12:18:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16846c097bf7a58c5864516294fcc8153163708d",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.39.0 (#251)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T12:06:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6517b04ea4e29c57bb790660fa2765b9e98dba4",
          "body": "`projects create` accepted a body only via `--content <markdown>`, unlike\n`issues create` / `issues update` / `comments create`, which all take a\n`--description-file` / `--body-file` for exactly this purpose. The one\nasymmetric surface forced the unsafe pattern precisely on the largest bodies\n(proje\n[…]\nd only when neither flag is passed, so `--content \"\"`\nstill reaches the mutation as \"\" — the distinction hasOption() used to draw.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(projects): add --content-file to projects create/update (DEV-6033)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T12:04:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e68dc9d0d7497ad3d0f1980620dc8bda811e688a",
          "body": "…(DEV-6051) (#248)\n\n* docs(skill): require plain-language, jargon-free issue and MR titles (DEV-6051)\n\nAdd a \"Title Readability\" rule to the linear-operations skill. Titles must\nstate the problem in words a non-author can read; code identifiers, env-var\nconstants, and symbol-heavy shorthand move int\n[…]\n:`) is used\n     - rebase merge  -> both commits land; release-please sees this `feat:`\n     - merge commit  -> same\n\nRefs: DEV-6051\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(skill): require plain-language, jargon-free issue and MR titles …",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T11:56:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3aec1e6f4e6d77727bd608d9b2823fb96193938e",
          "body": "…249)\n\n* ci: stop treating pnpm-lock.yaml as a published surface (DEV-6064)\n\nEvery dependabot PR in this repo was red on arrival and could never merge.\nbin/validate-pr-title.mjs listed pnpm-lock.yaml as a published surface, so any\nlockfile-touching PR had to be titled fix:/feat: to trigger release-p\n[…]\ne shipping unit as the lockfile fix: both are corrections to the PR-title-guard\nsection of this document, and both are cases of the prose asserting something the\nmachinery does not do.\n\nRefs: DEV-6064",
          "is_bot": false,
          "headline": "ci: stop treating pnpm-lock.yaml as a published surface (DEV-6064) (#…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T11:56:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6080e0b6ef026a9db6e3a2f41f4b7b8725e22b4f",
          "body": "…e (DEV-5944)\n\n`vitest.config.ts` excluded only `dist/**` and `node_modules/**`, and\n`biome.json` excluded only `dist`, `node_modules` and `.claude`. Neither skipped\n`.tmp/`, which is where this repo's wt-new places its worktrees (and which\n`.gitignore` already lists).\n\nSo in any checkout that has w\n[…]\n` exits 1 with `Cannot find module\n'./deleted-by-that-branch.js'`; after, biome is clean across 257 files and all\n1992 tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tooling): exclude .tmp/ and .claude/ worktrees from vitest + biom…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-13T11:54:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a5a5e83b1c68e98a86c180fb6dbfe17026a69589",
          "body": "Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 10.62.0 to 10.63.0.\n- [Release notes](https://github.com/getsentry/sentry-javascript/releases)\n- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)\n- [Commits](https://github.com/getsentry/se\n[…]\n- dependency-name: \"@sentry/node\"\n  dependency-version: 10.63.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump @sentry/node from 10.62.0 to 10.63.0",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T08:12:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e44e34b8ee439eba54acec6a0b8ddb4a8d39f927",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.38.2 (#245)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-12T06:13:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d255a7aacf0f478b320c966cb77d7b9a2cbb0d9",
          "body": "* DEV-5971: Fix linked document issue filtering\n\n* DEV-5971: Refine document filter typing",
          "is_bot": false,
          "headline": "fix(documents): list directly linked issue documents (DEV-5971) (#243)",
          "author_name": "Nico Appel",
          "author_login": "nicoappel",
          "committed_at": "2026-07-12T06:09:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb78acb6d7d72f6f5bcf6fdf02051a9358e5b7e5",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.38.1 (#241)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-12T06:09:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a6632f62b48ab1d0a5a1ce9f2cb0a6f19c201bf",
          "body": "… (#242)\n\n* feat(issues): opt-in goal-completion gate on issues create (DEV-5920)\n\nAdd a create-time \"goal-completion\" validation to `el-linear issues create`\nthat checks the description for a \"Done when\" (or \"Acceptance criteria\" /\n\"Success criteria\" / \"Done-when\") section containing at least one f\n[…]\ncument order, and that this is intentional (JSDoc on evaluateGoalCompletion).\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(issues): opt-in goal-completion gate on issues create (DEV-5920)…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-12T06:09:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64e7bdd647d4b7f4832e6d197a3b67bd57585203",
          "body": "…244)\n\n* DEV-5981: Add authenticated attachment reads and downloads\n\n* DEV-5981: Preserve attachment titles on download",
          "is_bot": false,
          "headline": "fix(attachments): add authenticated reads and downloads (DEV-5981) (#…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-12T06:06:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fa04af8c41317b1e915a284d3e1bb5ea4bbee15",
          "body": "…actionable hint (FE-926) (#240)\n\nLinear's description-content store can end up corrupted for a specific\nissue (observed on FE-921: a description saved cleanly at creation was\nempty ~1 minute later with no issue-history trace, and every subsequent\ndescription write since raised \"Conflict on insert o\n[…]\nicting id each time — retrying never\nself-heals). Wrap updateIssue/createIssue so this specific error surfaces\nwith the known workaround (recreate + --duplicate-of) instead of the raw\nbackend message.",
          "is_bot": false,
          "headline": "fix(issues): enrich the DocumentContent write-conflict error with an …",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-10T19:10:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3637fe1e905c652f679936bbe8ad09473891723",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.38.0 (#238)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-09T17:44:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4792c05a0b92dd3a614f7648829853fe2c89a2ba",
          "body": "…r-operations skill (DEV-5853) (#239)\n\n* docs(linear-operations): proactive generous cross-linking by default (DEV-5853)\n\nFlip the skill's cross-linking guidance from surface-candidates-and-wait-\nfor-human-confirmation to proactive linking. When a related / blocker /\nfollow-up / origin issue is iden\n[…]\n about an external classifier).\n\nFull suite green (1931), lint + build clean.\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(relations): proactive-first relation_candidates guidance + linea…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-09T17:38:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8903fa987b48a2dcbb173a8f7cbe8b1706f96166",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5749: Add el-linear label and project update parity (#237)",
          "author_name": "Nico Appel",
          "author_login": "nicoappel",
          "committed_at": "2026-07-08T17:00:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c5cf73a5ba398c10af5320c3d24d2ea8b232735",
          "body": "DEV-5739",
          "is_bot": false,
          "headline": "fix(release): guard el-linear PR titles (#236)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-08T16:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a53236fd514b280b1b1c1721e44eff6ebab21207",
          "body": null,
          "is_bot": false,
          "headline": "fix: include test files in typecheck (#235)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-08T16:59:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cdba6a15d86b28cf6dd824b15366ec8cd07d8bf",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5699: Rotate gate telemetry ledger (#231)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-08T08:08:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ede936a1e9f59667e2c636effae4fb20ef01eac8",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5709: normalize inline newline escapes (#232)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-08T08:07:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a681191eaf14fe33695743752fcda642635bf23",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5714 add issues list search flag (#234)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-08T08:07:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa0cdd1debf28a5aaba6096d08a6bd1acf390aa9",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.37.2 (#230)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-06T15:22:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff984920b77e8305475a0c16050b1db70860c9a9",
          "body": "…ect member edit/clear and users read (DEV-5612) (#228)\n\nThe `init aliases` wizard walked every workspace member and offered to alias\nthe synthetic Linear system actor (`<uuid>@linear.linear.app`) as if it were\nan ordinary person. A user mistook it for themselves and typed their own\nnicknames as its\n[…]\nty handling every other lookup uses),\n  the natural complement to `users list` for identifying an unrecognized\n  workspace member.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(init): skip the Linear system actor in the alias wizard + add dir…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-06T15:16:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0c506a41e2bb55868d2f4b83741228229b5f48bf",
          "body": "…erride rate (DEV-5590) (#227)\n\nThe issues-create-dup gate hard-blocked on any score >= 0.35, measuring a\n52.2% override rate over 144 real fires. Analyzing the real ledger (top_score\n+ outcome per fire; no title text is ever recorded) falsifies the obvious\n\"just raise the threshold\" fix: mean/media\n[…]\nprovement needs the\ntitle corpus, which is intentionally not collected (el-linear is\nopen-source and collects nothing by default).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(issues): make the duplicate-detection gate two-tier to cut the ov…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-06T15:15:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5a24cb4653b9850fac3163aa07069b5f461e88ef",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.37.1 (#223)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-06T14:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e77c29b6d4713fb06340a6e9d071836f209e880a",
          "body": "…225)\n\nBumps the dev-dependencies group with 1 update: [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome).\n\n\nUpdates `@biomejs/biome` from 2.5.0 to 2.5.1\n- [Release notes](https://github.com/biomejs/biome/releases)\n- [Changelog](https://github.com/biomejs/biome/blob\n[…]\non-update:semver-patch\n  dependency-group: dev-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): Bump @biomejs/biome in the dev-dependencies group (#…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T14:35:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa56f2a676f82070a119e498741017e15cd137ea",
          "body": "Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 10.59.0 to 10.62.0.\n- [Release notes](https://github.com/getsentry/sentry-javascript/releases)\n- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)\n- [Commits](https://github.com/getsentry/se\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump @sentry/node from 10.59.0 to 10.62.0 (#226)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T14:34:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fffac65d5b7481d7d6278143f82bacc3617d78a8",
          "body": "…h (#229)\n\n* DEV-5610: surface active-profile context, warn loudly on global switch\n\n~/.config/el-linear/active-profile is a single, machine-global marker file.\nOnly `profile use` (and `profile add`, which calls it internally) writes it,\nbut the write was completely silent — no indication anywhere t\n[…]\n warning even though `add` mutates the exact same global\nmarker `use` does.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DEV-5610: Surface active-profile context, warn loudly on global switc…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-06T14:33:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a479985ab35f93abbeb3df56a99a2c517a59e69f",
          "body": "…d aliases on list paths (DEV-5376) (#224)\n\n* fix: honor --format table/csv with --fields and resolve status/updated aliases on list paths (DEV-5376)\n\nCommander 15 hands a same-named option token to the outermost\nregistration even when it appears after the subcommand, so `issues list\n--format table \n[…]\n is only kept\nwhen its target resolves. Documented on the root --fields help.\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: honor --format table/csv with --fields and resolve status/update…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-06T10:32:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eeffa3f67c26255962445cc8602e09099c69fde2",
          "body": "…survives pagination (DEV-5578) (#222)\n\n`el-linear issues list --team <KEY> --limit <N>` only applied the team\nfilter correctly on the first page of results. Once the result set grew\npast ~20 rows the output was silently contaminated with issues from other\nteams (e.g. `--limit 100` returned 70 DEV +\n[…]\nng the team-scoped routing, the team-absent filter,\n100%-matching-team rows across a multi-page set, and the full-text\nclient-side team filter.\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: scope issues list --team through Team.issues so the team filter …",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-05T18:08:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "92ceac9db810509fa92ee301afb2498c6a27dae9",
          "body": "…rep false-negatives (#221)\n\nName `el-catalog commands --search` as the authoritative command-existence check\n(it deterministically indexes every `<cli> <subcommand>`), and warn that empty\ngrep output is inconclusive: a mis-quoted glob like `grep --include=*.ts` errors\nsilently under zsh and returns\n[…]\nctive learning after a near-duplicate el-git subcommand\nwas nearly built when such a silent grep miss was read as \"doesn't exist\".\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(linear-operations): sharpen the existence check against silent g…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-04T19:08:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d081e05a59a932988371dcc3a082bb7fdbc0fca",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.37.0 (#219)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-03T12:48:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e75c0436ff83fe0e8e95cde78ba2c00a19dd76b",
          "body": "… (teamConfigPath: \"\") (#220)\n\nThe marker-discovered shared team config (~/.config/el-tools-root →\n<root>/config/el-linear.shared.json) carries workspace-specific member\nUUIDs, but it was merged into EVERY profile. A profile pointed at a\ndifferent Linear workspace then resolved --assignee <name> thr\n[…]\ng actually does\n- sourceLabel renders the new state\n- tests lock both behaviors (loadConfig skips the layer + marker;\n  info reports \"disabled\")\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(config): document + attribute the per-profile team-config opt-out…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-03T12:47:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d06f1379798562f976593eb89965b124cdbbd1ef",
          "body": "…ons skill (#216)\n\n* docs: document project-updates in bundled linear-operations skill\n\nThe linear-operations skill ships inside the el-linear package (and is mirrored\ninto consumers), so the command and its docs must land together to avoid the\nbundled-skill-vs-binary skew warning. Adds project-upda\n[…]\nw Project Updates section.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Yury Tsukerman <ytspar@yandex.com>\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: re-land stranded project-updates docs in bundled linear-operati…",
          "author_name": "Nico Appel",
          "author_login": "nicoappel",
          "committed_at": "2026-07-03T10:06:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a49acbcdc1f13e9ed7e91c395a6e5dba271fc1cc",
          "body": "…s (#218)\n\nSelect and surface the issue `completedAt` timestamp (the moment an issue\nreached a terminal state; null while open) across every issue-fetch\nsurface: the shared `COMPLETE_ISSUE_FRAGMENT` (read / list / search) and\nthe `issues tree` per-node field set. It maps through `transformIssueData`\n[…]\n reads each child's completion timestamp off\n`issues tree` to measure how long a fully-completed subtree has sat under an\nopen parent. No other selected field carries that timestamp.\n\nCloses DEV-5454.",
          "is_bot": false,
          "headline": "feat: expose completedAt on issue reads, lists, search, and tree node…",
          "author_name": "Nico Appel",
          "author_login": "nicoappel",
          "committed_at": "2026-07-03T09:01:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55d9b46725973c3c938effe29c49721d1204030e",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.36.0 (#217)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-03T07:51:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5442d998facf7e8a28c6cefe782420e581a79949",
          "body": "…5378) (#215)\n\n* feat(issues): add opt-in SOP-label parent gate to issues create (DEV-5378)\n\nWhen an issue being created carries an SOP-type label (any name in\n`validation.sopLabels`, default `[\"SOP\"]`, case-insensitive), require\n`--parent` or `--related-to` to resolve to another SOP-labeled issue a\n[…]\n  typo'd --related-to blocks before createIssue, transport error fails\n  open + records fail-open + createIssue proceeds. Docs (configuration.md,\n  bundled SKILL.md) updated for the two failure modes.",
          "is_bot": false,
          "headline": "feat(issues): add opt-in SOP-label parent gate to issues create (DEV-…",
          "author_name": "Nico Appel",
          "author_login": "nicoappel",
          "committed_at": "2026-07-02T23:15:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "222708a94b01fa1a36e9bf48b6689265c1288e2c",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.35.0 (#212)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T15:31:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8f4cf911ae80f71ed092d9dfab9ebc4636c4ffe",
          "body": "* test: add mock reset hygiene to linear-service tests\n\nAdd a top-level beforeEach(() => vi.clearAllMocks()) so linear-service\ntests are order-independent, and drop the two\n`const before = mockProjects.mock.calls.length` delta-count workarounds\nin normalizeProjectInput (replaced with plain not.toHav\n[…]\ns clears queues and base implementations too,\ndelivering the guarantee the comment promised. 32/32 in order and\nshuffled (seed 1337).\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: add mock reset hygiene to linear-service tests (#213)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T15:22:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07ada3c394773dca1a24abefa6c596d73622aa61",
          "body": "outputSuccess drained the warning buffer unconditionally but only\nre-embedded _warnings for object output, so warnings were silently\ndiscarded on bare-array output: a top-level array payload, or --raw\napplied to an array-data envelope (--raw unwraps { data: [...] } to a\nbare array BEFORE the fields \n[…]\narning\ntest, and the former \"skips _warnings for array output\" test updated to\nassert the new stderr behavior.\n\nReferences verticalint DEV-5339.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(output): surface warnings on bare-array and --raw output (#214)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T15:22:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82e3bef25a1d3ea09bf80d05d6d1207ff945723a",
          "body": "feat: add project-updates command group (create/list/read) (#210)",
          "is_bot": false,
          "headline": "feat: add project-updates command group (create/list/read) (#210)",
          "author_name": "Nico Appel",
          "author_login": "nicoappel",
          "committed_at": "2026-07-02T13:04:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec5a6986929b0d4ce7852a2ceae3422bc2f0fe8d",
          "body": "* fix(issue-id): accept the feat/ branch prefix (DEV-5342)\n\nBRANCH_RE allowed feature|fix|chore|refactor|bug|spike|dev|codex but\nnot the short-form `feat`, so `el-linear issue-id feat/DEV-1234-slug`\nreturned null even though the branch carries a valid Linear ID. Several\nbranches already use `feat/`,\n[…]\n\n\nCycle-1 review nit: the prefix-history comment above BRANCH_RE listed\nDEV-4777 (bug/spike) and DEV-4660 (codex) but not the feat addition\nfrom the prior commit. Add it so the sync trail is complete.",
          "is_bot": false,
          "headline": "fix(issue-id): accept the feat/ branch prefix (DEV-5342) (#211)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T12:43:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c7afc13875a9b11b53b61ef355699bf7742ef4b1",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.34.1 (#208)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T11:00:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65dea9919ba45c8f503e470c73998152ee7d137d",
          "body": "…ter has no teams filter) (#209)\n\n'el-linear projects list --team DEV' failed with a GraphQL error —\n'Field \"teams\" is not defined by type \"ProjectFilter\"' — because both\ngetProjects and the DEV-4103 team-scoped project-name resolver sent a\nteams: { some: ... } relation filter the live schema reject\n[…]\nkeeping the filtering\nserver-side. Regression tests assert the team connection is used and the\ninvalid filter shape is never sent; verified live against the API\n(hit 2026-07-02, verticalint DEV-5325).",
          "is_bot": false,
          "headline": "fix(projects): route --team scoping through Team.projects (ProjectFil…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T10:51:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "522d76124e63de915d17319c995b0ad110e40f6b",
          "body": "…d fails visible on unresolved fields (#207)\n\nThree silent-failure modes in the shared --fields projection, hit live\nfrom el-git on 2026-07-02 (verticalint DEV-5323):\n\n- An envelope with an OBJECT data payload (el-git context) fell through\n  to root filtering, so --fields branch,issueId returned {}.\n[…]\nem (heterogeneous lists have\n  legitimate per-item gaps).\n\nBehavior note: consumers that relied on unresolved fields being absent\nnow see explicit nulls — falsy either way, and the warning names them.",
          "is_bot": false,
          "headline": "fix(output): --fields resolves dotted paths, envelope object data, an…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-02T10:29:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43f4ccd75cb3569ba195232e6b069fcfd4a89926",
          "body": "…in--components--el-linear\n\nchore(main): release 1.34.0",
          "is_bot": false,
          "headline": "Merge pull request #206 from enrichlayer/release-please--branches--ma…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T16:53:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a1ddd4120069110ef84b533034692cc70535283",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.34.0",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T16:42:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3ff3695feda0d80b71fff0fe54f2ad250438a90",
          "body": "…e (DEV-5174) (#205)\n\n`el-linear issue DEV-123` / `el-linear issues DEV-123` now behave like\n`issues read DEV-123` (including --body/--field/--sections/--with) instead of\nfailing with a Commander arity error, and `issues related <id> --format\nsummary` renders a RELATION/DIRECTION/ID/STATE/ASSIGNEE/T\n[…]\nenvelope dump.\n\nWas previously carried as a local dist/ patch in vertical-int/tools\n(fix/DEV-5174-el-linear-ergonomics) rather than fixed here; this replaces\nthat patch with the real source-level fix.",
          "is_bot": false,
          "headline": "feat(issues): add no-subcommand read shorthand + related summary tabl…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T16:42:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ab39edd28836cd672f40341bd4c7fbe2955763c",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.33.0 (#200)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T09:25:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff533d910933a48758a6d790aa75af016b5be726",
          "body": "Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 6.0.8 to 6.0.9.\n- [Release notes](https://github.com/pnpm/action-setup/releases)\n- [Commits](https://github.com/pnpm/action-setup/compare/v6.0.8...v6.0.9)\n\n---\nupdated-dependencies:\n- dependency-name: pnpm/action-setup\n  dependency\n[…]\nirect:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump pnpm/action-setup from 6.0.8 to 6.0.9 (#202)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T09:25:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c8ee23f7d3dad08d5c039a4a61b10be52112b4e7",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump actions/checkout from 4 to 7 (#203)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T09:25:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9f994f80fedc46f4bd9e6e9cf43af01608528df",
          "body": "DEV-5212: Add comment read output",
          "is_bot": false,
          "headline": "Merge pull request #204 from enrichlayer/codex/DEV-5212-comments-read",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T08:38:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1063b78f60355045a9985d675184a3a7a92de73",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5212: Add comment read output",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T08:33:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16d62b30bd23343c09ae8fbf74d6efcf4550c518",
          "body": "…ns-1322\n\nDEV-5202: Release el-linear 1.32.2 eval assertions",
          "is_bot": false,
          "headline": "Merge pull request #201 from enrichlayer/codex/DEV-5202-eval-assertio…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T07:52:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af5e82b7c6a3faf6e3b00eb5d0e626ce1b5b72ec",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5202: Add linear skill eval assertions",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T07:49:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "916f12959cf1780471bfd5f44d349bf21eb01ae8",
          "body": "chore: release el-linear 1.32.1",
          "is_bot": false,
          "headline": "Merge pull request #199 from enrichlayer/codex/DEV-5202-release-1321",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T07:20:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81e756b8104ba069c9ba4946332e5300ebf310a4",
          "body": null,
          "is_bot": false,
          "headline": "chore: release el-linear 1.32.1",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T07:18:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83573259d3557f804c1b0e707bbb2e3375322444",
          "body": "…mentions\n\nDEV-5202 Fix hyphenated package mention parsing",
          "is_bot": false,
          "headline": "Merge pull request #198 from enrichlayer/codex/DEV-5202-hyphen-scope-…",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T07:15:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "324945e89cf3475489b6978b4d6c0728228553b4",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5202 Fix hyphenated package mention parsing",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-07-01T05:54:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17544340c2646e095a26bf9d6e40911f396d0a4d",
          "body": null,
          "is_bot": false,
          "headline": "DEV-5135: Recover batch issue reads from missing rows (#197)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-06-30T13:11:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6abf6686119926a29b8ba3458a627666d966920",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.32.0 (#196)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-06-30T09:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "477c7322c19c474b21e07722609fcc9dae5d18f9",
          "body": "* feat(branch): add `branch validate` subcommand (team-validity gate)\n\n`el-linear branch validate [branch]` parses a branch name and checks its\nteam prefix against the real workspace teams (cached `teams list`), so the\ntools-repo pre-commit gate can delegate team-validity instead of hardcoding\na bas\n[…]\nale @types/node peer snapshot so pnpm install --frozen-lockfile passes.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(branch): add branch validate subcommand (team-validity gate) (#194)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-06-30T09:35:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "df7708868fe5ffcee0578afb30a36c0b8224788f",
          "body": "* DEV-5120: Ignore package scopes in mention resolver\n\n* test(mention-resolver): add versioned scoped-package regression test (DEV-5120)\n\nCover @scope/pkg@version coordinates — the @ before the version number\nsits after a letter, so the lookbehind blocks it; the / after the scope\nname blocks the sco\n[…]\ne itself via the lookahead.\n\nAddresses cycle-1 review nit from PR #195.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "DEV-5120: Ignore package scopes in mention resolver (#195)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-06-30T09:10:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1c11828a030205e5769cc30c85c2e495aa9193bc",
          "body": null,
          "is_bot": false,
          "headline": "chore(main): release 1.31.0 (#193)",
          "author_name": "Yury Tsukerman",
          "author_login": "ytspar",
          "committed_at": "2026-06-29T16:06:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38fdea752f8aa11e125f35aeb49bcb4aae145433",
          "body": "Bumps the dev-dependencies group with 1 update: [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).\n\n\nUpdates `@types/node` from 25.9.3 to 25.9.4\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/Definite\n[…]\non-update:semver-patch\n  dependency-group: dev-dependencies\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps-dev): Bump @types/node in the dev-dependencies group (#188)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T16:06:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5218a89064db5a290609bf43d75559d557e89fa9",
          "body": "Bumps [commander](https://github.com/tj/commander.js) from 14.0.3 to 15.0.0.\n- [Release notes](https://github.com/tj/commander.js/releases)\n- [Changelog](https://github.com/tj/commander.js/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/tj/commander.js/compare/v14.0.3...v15.0.0)\n\n---\nupdate\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump commander from 14.0.3 to 15.0.0 (#189)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T16:05:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07b2660c3cd38fc8d23aa498cedafc04bc4f0687",
          "body": "Bumps [@sentry/node](https://github.com/getsentry/sentry-javascript) from 10.57.0 to 10.59.0.\n- [Release notes](https://github.com/getsentry/sentry-javascript/releases)\n- [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md)\n- [Commits](https://github.com/getsentry/se\n[…]\nirect:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): Bump @sentry/node from 10.57.0 to 10.59.0 (#190)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T16:05:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 40,
      "commits_last_year": 282,
      "latest_release_at": "2026-07-19T17:59:33Z",
      "latest_release_tag": "v1.43.1",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 13,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 1.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@enrichlayer/el-linear",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "linear",
            "linear.app",
            "cli",
            "issue-tracker",
            "graphql",
            "claude",
            "claude-code"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@enrichlayer/el-linear",
          "is_deprecated": false,
          "latest_version": "1.43.1",
          "repository_url": "https://github.com/enrichlayer/el-linear",
          "versions_count": 47,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 4,
          "monthly_downloads": 11678,
          "first_published_at": "2026-05-06T18:52:29.233000Z",
          "latest_published_at": "2026-07-19T17:59:58.036000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-05-12",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 102546,
      "source_files_sampled": 258,
      "oversized_source_files": 4,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7523
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 62,
        "malicious_count": 0,
        "assessed_package": "npm:@enrichlayer/el-linear@1.43.1",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@inquirer/prompts",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.4.2"
        },
        {
          "name": "@linear/sdk",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^86.0.0"
        },
        {
          "name": "commander",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^15.0.0"
        },
        {
          "name": "picocolors",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.1.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@inquirer/prompts",
            "direct": true,
            "version": "8.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "@linear/sdk",
            "direct": true,
            "version": "86.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": true,
            "version": "15.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": true,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@apm-js-collab/code-transformer",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "npm"
          },
          {
            "name": "@apm-js-collab/code-transformer-bundler-plugins",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "@apm-js-collab/tracing-hooks",
            "direct": false,
            "version": "0.10.1",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/biome",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-darwin-arm64",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-darwin-x64",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-linux-arm64",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-linux-arm64-musl",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-linux-x64",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-linux-x64-musl",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-win32-arm64",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/cli-win32-x64",
            "direct": false,
            "version": "2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/core",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/runtime",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/wasi-threads",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/aix-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openharmony-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "@graphql-typed-document-node/core",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/ansi",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/checkbox",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/confirm",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/core",
            "direct": false,
            "version": "11.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/editor",
            "direct": false,
            "version": "5.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/expand",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/external-editor",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/figures",
            "direct": false,
            "version": "2.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/input",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/number",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/password",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/rawlist",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/search",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/select",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "@inquirer/type",
            "direct": false,
            "version": "4.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@napi-rs/wasm-runtime",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/api",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/api-logs",
            "direct": false,
            "version": "0.220.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/core",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/instrumentation",
            "direct": false,
            "version": "0.220.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/resources",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/sdk-trace",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/sdk-trace-base",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "@opentelemetry/semantic-conventions",
            "direct": false,
            "version": "1.43.0",
            "ecosystem": "npm"
          },
          {
            "name": "@oxc-project/types",
            "direct": false,
            "version": "0.127.0",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-android-arm64",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-arm64",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-darwin-x64",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-freebsd-x64",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-gnu",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-arm64-musl",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-ppc64-gnu",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-s390x-gnu",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-gnu",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-linux-x64-musl",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-openharmony-arm64",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-wasm32-wasi",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-arm64-msvc",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/binding-win32-x64-msvc",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@rolldown/pluginutils",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "@sentry/conventions",
            "direct": false,
            "version": "0.15.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sentry/core",
            "direct": false,
            "version": "10.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sentry/node",
            "direct": false,
            "version": "10.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sentry/node-core",
            "direct": false,
            "version": "10.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sentry/opentelemetry",
            "direct": false,
            "version": "10.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sentry/server-utils",
            "direct": false,
            "version": "10.65.0",
            "ecosystem": "npm"
          },
          {
            "name": "@standard-schema/spec",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@tybys/wasm-util",
            "direct": false,
            "version": "0.10.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/chai",
            "direct": false,
            "version": "5.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/deep-eql",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "@types/estree",
            "direct": false,
            "version": "1.0.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "26.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/expect",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/mocker",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/pretty-format",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/runner",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/snapshot",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/spy",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "@vitest/utils",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "assertion-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "astring",
            "direct": false,
            "version": "1.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "chai",
            "direct": false,
            "version": "6.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "chardet",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "cjs-module-lexer",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "cli-width",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "es-module-lexer",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.28.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "direct": false,
            "version": "5.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estree-walker",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "expect-type",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "fast-string-truncated-width",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-string-width",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-wrap-ansi",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "fdir",
            "direct": false,
            "version": "6.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "graphql",
            "direct": false,
            "version": "17.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "iconv-lite",
            "direct": false,
            "version": "0.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "import-in-the-middle",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-android-arm64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-arm64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-darwin-x64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-freebsd-x64",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm-gnueabihf",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-gnu",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-arm64-musl",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-gnu",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-linux-x64-musl",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-arm64-msvc",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "lightningcss-win32-x64-msvc",
            "direct": false,
            "version": "1.32.0",
            "ecosystem": "npm"
          },
          {
            "name": "magic-string",
            "direct": false,
            "version": "0.30.21",
            "ecosystem": "npm"
          },
          {
            "name": "meriyah",
            "direct": false,
            "version": "6.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "module-details-from-path",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "mute-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "nanoid",
            "direct": false,
            "version": "3.3.16",
            "ecosystem": "npm"
          },
          {
            "name": "obug",
            "direct": false,
            "version": "2.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "pathe",
            "direct": false,
            "version": "2.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "8.5.18",
            "ecosystem": "npm"
          },
          {
            "name": "require-in-the-middle",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "rolldown",
            "direct": false,
            "version": "1.0.0-rc.17",
            "ecosystem": "npm"
          },
          {
            "name": "safer-buffer",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "semifies",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "siginfo",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "signal-exit",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-js",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "stackback",
            "direct": false,
            "version": "0.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "std-env",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinybench",
            "direct": false,
            "version": "2.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "tinyexec",
            "direct": false,
            "version": "1.2.4",
            "ecosystem": "npm"
          },
          {
            "name": "tinyglobby",
            "direct": false,
            "version": "0.2.17",
            "ecosystem": "npm"
          },
          {
            "name": "tinyrainbow",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.8.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsx",
            "direct": false,
            "version": "4.23.1",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "6.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "undici-types",
            "direct": false,
            "version": "8.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "8.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "vitest",
            "direct": false,
            "version": "4.1.10",
            "ecosystem": "npm"
          },
          {
            "name": "why-is-node-running",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 174,
        "direct_count": 4,
        "indirect_count": 170
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 259,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 15
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "ytspar",
          "commits": 243,
          "avatar_url": "https://avatars.githubusercontent.com/u/365593?v=4"
        },
        {
          "type": "User",
          "login": "nicoappel",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/2683140?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.964
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "pr-review.yml",
        "pr-title.yml",
        "release-please.yml",
        "release.yml",
        "secret-scan.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "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": "25 out of 25 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 1/22 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 3 contributing companies or organizations -- score normalized to 10",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "1ea14f688d910348b331d968dd8959909c0e1ce3",
        "ran_at": "2026-07-25T16:54:29Z",
        "aggregate_score": 4.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T16:05:22Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-23T16:04:58Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/enrichlayer/el-linear",
    "host": "github.com",
    "name": "el-linear",
    "owner": "enrichlayer"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 64,
      "inputs": {
        "security": 56,
        "vitality": 78,
        "community": 50,
        "governance": 54,
        "engineering": 82
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 78,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 63,
            "inputs": {
              "commits_last_year": 282,
              "human_commit_share": 0.89,
              "days_since_last_push": 2,
              "active_weeks_last_year": 13
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "13/52 weeks with commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 13
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "282 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 282
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 40,
              "latest_release_tag": "v1.43.1",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 1.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "40 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 40
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~1.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 1.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 50,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 1,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "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": 68,
            "inputs": {
              "packages": [
                "@enrichlayer/el-linear"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 11678
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "11,678 downloads/month across npm",
                "points": 54.2,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 11678,
                      "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": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 22,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.964
            },
            "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 96% of commits",
                "points": 0.8,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "merged_prs": 259,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 15
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "259/274 decided PRs merged",
                "points": 36.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 259,
                      "decided": 274
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 41,
            "inputs": {
              "followers": 1,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "enrichlayer",
              "public_repos": 7,
              "account_age_days": 418
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1 followers of enrichlayer",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "enrichlayer"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "7 public repos, account ~1 yr old",
                "points": 8.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 7
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@enrichlayer/el-linear"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "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 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "47 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 47
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 82,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "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": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "25 out of 25 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "topics": [],
              "has_wiki": false,
              "homepage": "https://enrichlayer.com/tools/el-linear",
              "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://enrichlayer.com/tools/el-linear",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 56,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 45,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.5
            },
            "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": "25 out of 25 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 1/22 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 3 contributing companies or organizations -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@enrichlayer/el-linear@1.43.1 runtime dependency closure — what installing the published package pulls in — 62 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:@enrichlayer/el-linear@1.43.1",
                  "assessed": 62
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 62,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 62,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 81,
        "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.955,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7523
            },
            "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": "85 of 89 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 85,
                      "sampled": 89
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.21,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.11
            },
            "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": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "21 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 21,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "11 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 11,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 102546,
              "source_files_sampled": 258,
              "oversized_source_files": 4
            },
            "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": "4/258 source files over 60KB",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 258,
                      "oversized": 4
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [],
  "report_type": "repository",
  "generated_at": "2026-07-25T16:54:46.280459Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/e/enrichlayer/el-linear.svg",
  "full_name": "enrichlayer/el-linear",
  "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.