Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 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 Sterne⑂ 1 Forkseit Apr. 2026Auf GitHub ansehen ↗

enrichlayer/el-linear erreicht einen Gesundheitsindex von 64 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Engineering Quality (82/100) ab, am schwächsten bei Community & Adoption (50/100). Zuletzt vor 2 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

64
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

64
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Enrich LayerOrganisation
1 Follower7 öffentliche Reposseit Juni 2025

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npm@enrichlayer/el-linear1.43.111.67847vor 5 Tagenlinearlinear.appcliissue-trackergraphqlclaudeclaude-code

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

78Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 2 Tagen
9/36Commit-Rhythmus — 13/52 Wochen mit Commits
18/18Commit-Volumen — 282 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year282
human_commit_share0,89
days_since_last_push2
active_weeks_last_year13

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 40 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 5 Tagen
27/27Release-Rhythmus — ein Release etwa alle 1,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count40
latest_release_tagv1.43.1
releases_from_tagsnein
days_since_latest_release5
mean_days_between_releases1,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

50Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
18/18CONTRIBUTING-Leitfaden
13.5/13.5Verhaltenskodex
0/7.2Issue-Vorlage
6.3/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductja
has_pull_request_templateja
Wie die Bewertung erfolgt
54.2/80Downloads pro Monat — 11.678 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packages@enrichlayer/el-linear
dependents
ecosystemsnpm
total_downloads
monthly_downloads11.678
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

54Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.8/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 96 % der Commits
2.7/13.5Breite der Beitragenden — 2 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Verwendete Eingangsdaten
bus_factor1
contributors_sampled2
top_contributor_share0,964
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
36.2/38.3PR-Annahme — 259/274 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 1/22 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs259
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs15
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
2.2/25Reichweite des Inhabers — 1 Follower von enrichlayer
8.9/25Kontohistorie — 7 öffentliche Repos, Kontoalter ca. 1 Jahre
Verwendete Eingangsdaten
followers1
owner_typeOrganization
is_verified
owner_loginenrichlayer
public_repos7
account_age_days418

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
20/20Versionshistorie — 47 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packages@enrichlayer/el-linear
ecosystemsnpm
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

82Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 6 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://enrichlayer.com/tools/el-linear
10/10Repository-Beschreibung
0/10Topics
0/10Wiki
Verwendete Eingangsdaten
topics
has_wikinein
homepagehttps://enrichlayer.com/tools/el-linear
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

56Mittel · 16 % des Gesamtindex

Sicherheitslage

45Gefährdet
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages62
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:@enrichlayer/el-linear@1.43.1 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 62 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

81Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md, CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 85 von 89 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,955
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7.523
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 21 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 11 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespnpm-lock.yaml
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configstsconfig.json
agent_commit_share0,21
toolchain_manifests
dependency_bot_commit_share0,11
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.1/55Handhabbare Dateigrößen — 4/258 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes102.546
source_files_sampled258
oversized_source_files4

Eckdaten

0GitHub-Sterne
2Mitwirkende
282Commits, letzte 12 Monate
2Tage seit letztem Push
40Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Weitere Details

OpenSSF Scorecard 4.5 / 10
4.5Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Direkte Abhängigkeiten 4
RegistryPaketVersionsvorgabeManifest
npm@inquirer/prompts^8.4.2package.json
npm@linear/sdk^86.0.0package.json
npmcommander^15.0.0package.json
npmpicocolors^1.1.1package.json
Alle Abhängigkeiten 174

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 4 direkte und 170 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

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

Die Installation von npm:@enrichlayer/el-linear@1.43.1 zieht 62 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.