Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 1 forksince Apr 2026View on GitHub ↗

enrichlayer/el-linear holds a health index of 64 out of 100, placing it in the Moderate band. It scores highest on Engineering Quality (82/100) and lowest on Community & Adoption (50/100). It was last updated 2 days ago. A single contributor accounts for most of its recent work.

64
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

64
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

Enrich LayerOrganization
1 follower7 public repossince Jun 2025

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npm@enrichlayer/el-linear1.43.111,678475 days agolinearlinear.appcliissue-trackergraphqlclaudeclaude-code

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

78Good · 22% of overall
How it's scored
36/36Push recency — last push 2 days ago
9/36Commit cadence — 13/52 weeks with commits
18/18Commit volume — 282 commits in the last year
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Inputs used
commits_last_year282
human_commit_share0.89
days_since_last_push2
active_weeks_last_year13

Release discipline

100Excellent
How it's scored
27/27Ships releases — 40 releases published
36/36Release recency — latest release 5 days ago
27/27Release cadence — a release every ~1.1 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count40
latest_release_tagv1.43.1
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases1.1
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

50Moderate · 18% of overall
How it's scored
0/60Stars — 0 stars
0/25Forks — 1 forks
0/15Watchers — 0 watchers
Inputs used
forks1
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

Community health

92Excellent
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductyes
has_pull_request_templateyes
How it's scored
54.2/80Monthly downloads — 11,678 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packages@enrichlayer/el-linear
dependents
ecosystemsnpm
total_downloads
monthly_downloads11,678
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

54Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.8/22.5Commit distribution — top contributor authored 96% of commits
2.7/13.5Contributor breadth — 2 contributors
10/10OpenSSF Scorecard: Contributors — project has 3 contributing companies or organizations -- score normalized to 10
Inputs used
bus_factor1
contributors_sampled2
top_contributor_share0.964
How it's scored
0/46.8Issue resolution — no issues or no data
36.2/38.3PR acceptance — 259/274 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 1/22 approved changesets -- score normalized to 0
Inputs used
merged_prs259
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs15
Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
2.2/25Owner reach — 1 followers of enrichlayer
8.9/25Track record — 7 public repos, account ~1 yr old
Inputs used
followers1
owner_typeOrganization
is_verified
owner_loginenrichlayer
public_repos7
account_age_days418
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 5 days ago
20/20Version history — 47 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packages@enrichlayer/el-linear
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Engineering Quality

Are baseline engineering and documentation practices in place?

82Good · 20% of overall
How it's scored
24/24CI workflows — 6 workflow(s)
24/24Tests present
16/16Linter config — biome.json
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 25 out of 25 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
15/15Documentation / homepage site — https://enrichlayer.com/tools/el-linear
10/10Repository description
0/10Topics
0/10Wiki
Inputs used
topics
has_wikino
homepagehttps://enrichlayer.com/tools/el-linear
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

56Moderate · 16% of overall
How it's scored
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.5License — 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 — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.5
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages62
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
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.

AI Readiness

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.

81Good · 0% of overall
How it's scored
45/45Agent instructions — AGENTS.md, CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 85 of 89 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.955
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7,523
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — biome.json
11/11Static type checking — tsconfig.json
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 21 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 11 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilespnpm-lock.yaml
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configstsconfig.json
agent_commit_share0.21
toolchain_manifests
dependency_bot_commit_share0.11
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
54.1/55Manageable file sizes — 4/258 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes102,546
source_files_sampled258
oversized_source_files4

Key facts

0GitHub stars
2contributors
282commits, last 12 months
2days since last push
40releases
1bus factor
0open issues
npmpackage ecosystems

More detail

OpenSSF Scorecard 4.5 / 10
4.5aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-07-25 16:54 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests25 out of 25 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/22 approved changesets -- score normalized to 0
10Contributorsproject has 3 contributing companies or organizations -- score normalized to 10
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Direct dependencies 4
RegistryPackageVersion constraintManifest
npm@inquirer/prompts^8.4.2package.json
npm@linear/sdk^86.0.0package.json
npmcommander^15.0.0package.json
npmpicocolors^1.1.1package.json
All dependencies 174

Full resolved dependency set from the GitHub dependency graph: 4 direct and 170 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

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

Installing npm:@enrichlayer/el-linear@1.43.1 pulls in 62 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.