Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 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 зірок⑂ 1 форкз квіт. 2026 р.Переглянути на GitHub ↗

enrichlayer/el-linear має індекс здоров’я 64 зі 100, що відповідає смузі «Помірний». Найвищий показник — Engineering Quality (82/100), найнижчий — Community & Adoption (50/100). Останнє оновлення було 2 дні тому. Більшість нещодавньої роботи виконує один учасник.

64
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

64
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Enrich LayerОрганізація
1 підписник7 публічних репозиторіївз черв. 2025 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npm@enrichlayer/el-linear1.43.111 678475 днів томуlinearlinear.appcliissue-trackergraphqlclaudeclaude-code

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

78Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 2 дн. тому
9/36Ритм комітів — 13/52 тижнів із комітами
18/18Обсяг комітів — 282 комітів за останній рік
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Використані вхідні дані
commits_last_year282
human_commit_share0,89
days_since_last_push2
active_weeks_last_year13
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 40 релізів
36/36Свіжість релізів — останній реліз 5 дн. тому
27/27Ритм релізів — реліз кожні ~1,1 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count40
latest_release_tagv1.43.1
releases_from_tagsні
days_since_latest_release5
mean_days_between_releases1,1
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

50Помірний · 18% загального індексу
Як обчислюється оцінка
0/60Зірки — 0 зірок
0/25Форки — 1 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks1
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductтак
has_pull_request_templateтак
Як обчислюється оцінка
54.2/80Щомісячні завантаження — 11 678 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packages@enrichlayer/el-linear
dependents
ecosystemsnpm
total_downloads
monthly_downloads11 678
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

54Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.8/22.5Розподіл комітів — головний контриб’ютор — автор 96% комітів
2.7/13.5Широта контриб’юторів — 2 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Використані вхідні дані
bus_factor1
contributors_sampled2
top_contributor_share0,964
Як обчислюється оцінка
0/46.8Вирішення issue — немає issue або даних
36.2/38.3Прийняття PR — злито 259/274 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 1/22 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs259
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs15
Виключено з оцінювання (немає даних або не застосовно): Вирішення issue. Залишкові ваги перенормовано.

Власність та опіка

41У зоні ризику
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
2.2/25Охоплення власника — 1 підписників у enrichlayer
8.9/25Послужний список — 7 публічних репозиторіїв, вік облікового запису ~1 р.
Використані вхідні дані
followers1
owner_typeOrganization
is_verified
owner_loginenrichlayer
public_repos7
account_age_days418

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 5 дн. тому
20/20Історія версій — 47 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packages@enrichlayer/el-linear
ecosystemsnpm
any_deprecatedні
min_days_since_publish5

Інженерна якість

Чи наявні базові інженерні практики та документація?

82Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 6 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — biome.json
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configтак
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://enrichlayer.com/tools/el-linear
10/10Опис репозиторію
0/10Теми
0/10Wiki
Використані вхідні дані
topics
has_wikiні
homepagehttps://enrichlayer.com/tools/el-linear
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

56Помірний · 16% загального індексу

Стан безпеки

45У зоні ризику
Як обчислюється оцінка
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.5Ліцензія — 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 — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4,5
Виключено з оцінювання (немає даних або не застосовно): signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
35/35Прямі залежності без відомих сповіщень — жодна пряма залежність не має відомих сповіщень
25/25Непрямі залежності без відомих сповіщень — жодна непряма залежність не має відомих сповіщень
0/40Немає задавнених сповіщень — жодне сповіщення не має дати публікації
Використані вхідні дані
sourceosv
advisories0
affected_packages0
assessed_packages62
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Виключено з оцінювання (немає даних або не застосовно): Немає задавнених сповіщень. Залишкові ваги перенормовано. Звірено з runtime-замиканням залежностей npm:@enrichlayer/el-linear@1.43.1 — тим, що тягне за собою встановлення опублікованого пакета, — 62 пакетів. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

81Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — AGENTS.md, CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 85 з 89 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,955
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7 523
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — biome.json
11/11Статична перевірка типів — tsconfig.json
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 21 з останніх 100 комітів створено агентом або з його зазначенням
8/8Автоматизоване супроводження — 11 з останніх 100 комітів — автоматичні оновлення залежностей
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilespnpm-lock.yaml
has_dockerfileні
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configтак
typecheck_configstsconfig.json
agent_commit_share0,21
toolchain_manifests
dependency_bot_commit_share0,11
Як обчислюється оцінка
45/45Типізований код — TypeScript (статично типізована)
54.1/55Керовані розміри файлів — 4/258 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageTypeScript
largest_source_bytes102 546
source_files_sampled258
oversized_source_files4

Ключові факти

0зірок GitHub
2контриб'юторів
282комітів за останні 12 місяців
2днів від останнього пушу
40релізів
1бас-фактор
0відкритих issue
npmпакетних екосистем

Докладніше

OpenSSF Scorecard 4.5 / 10
4.5сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).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
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Прямі залежності 4
РеєстрПакетОбмеження версіїМаніфест
npm@inquirer/prompts^8.4.2package.json
npm@linear/sdk^86.0.0package.json
npmcommander^15.0.0package.json
npmpicocolors^1.1.1package.json
Усі залежності 174

Повний розв'язаний набір залежностей із графа залежностей GitHub: 4 прямих і 170 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

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

Встановлення npm:@enrichlayer/el-linear@1.43.1 тягне 62 пакетів, прямих і транзитивних: 0 мають відомі сповіщення, з них 0 — прямі залежності.

Жодне відоме сповіщення не стосується оцінених залежностей.

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "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"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаnpm.