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