Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-24 07:25 UTC

jra3 / linear-fuse

Interact with linear as a series of text files in your filesystem

GoMIT★ 0 зірок⑂ 0 форківз груд. 2025 р.Переглянути на GitHub ↗

jra3/linear-fuse має індекс здоров’я 62 зі 100, що відповідає смузі «Помірний». Найвищий показник — AI Readiness (88/100), найнижчий — Community & Adoption (43/100). Останнє оновлення було 3 дні тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

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

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

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

Власність

John AllenОсобистий обліковий запис
19 підписників62 публічні репозиторіїз вер. 2010 р.Antimetal

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Gogithub.com/jra3/linear-fusev0.1.0-15 днів тому

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

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

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

76Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 3 дн. тому
11.8/36Ритм комітів — 17/52 тижнів із комітами
18/18Обсяг комітів — 437 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year437
human_commit_share1
days_since_last_push3
active_weeks_last_year17
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 1 релізів
36/36Свіжість релізів — останній реліз 5 дн. тому
12.6/27Ритм релізів — ритм невідомий (єдиний реліз)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count1
latest_release_tagv0.1.0
releases_from_tagsні
days_since_latest_release5
mean_days_between_releases

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

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

43У зоні ризику · 18% загального індексу
Як обчислюється оцінка
0/60Зірки — 0 зірок
0/25Форки — 0 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
18/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductтак
has_pull_request_templateтак

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

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

55Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
1.4/13.5Широта контриб’юторів — 1 контриб’юторів
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Використані вхідні дані
bus_factor1
contributors_sampled1
top_contributor_share1
Як обчислюється оцінка
44.1/46.8Вирішення issue — закрито 94% issue
36.6/38.3Прийняття PR — злито 113/118 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs113
open_issues14
closed_issues231
issue_closed_ratio0,943
closed_unmerged_prs5
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
9.4/25Охоплення власника — 19 підписників у jra3
25/25Послужний список — 62 публічних репозиторіїв, вік облікового запису ~15 р.
Використані вхідні дані
followers19
owner_typeUser
is_verified
owner_loginjra3
public_repos62
account_age_days5 777
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у go
35/35Свіжість публікацій — остання публікація 5 дн. тому
4/20Історія версій — 1 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/jra3/linear-fuse
ecosystemsgo
any_deprecatedні
min_days_since_publish5

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

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

70Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 3 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 27 out of 28 merged PRs checked by a CI test -- score normalized to 9
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
10/10Теми — 8 тем
0/10Wiki
Використані вхідні дані
topicscli, filesystem, fuse, golang, issue-tracking, linear, linear-app, project-management
has_wikiні
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

62Помірний
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.2/2.5CI-Tests — 27 out of 28 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
5/5Pinned-Dependencies — all dependencies are pinned
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate6,2

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

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

88Відмінний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 100 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes18 479
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Go (статично типізована)
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 77 з останніх 100 комітів створено агентом або з його зазначенням
5/8Автоматизоване супроводження — автоматизацію залежностей налаштовано, але у вибірці комітів її не видно
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum
has_dockerfileні
typed_languageтак
bootstrap_filesMakefile
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0,77
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
54.1/55Керовані розміри файлів — 4/258 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes110 276
source_files_sampled258
oversized_source_files4

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

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

Попередження щодо збору даних

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

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

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-24 07:24 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
9CI-Tests27 out of 28 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
10Pinned-Dependenciesall dependencies are pinned
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Прямі залежності 10
РеєстрПакетОбмеження версіїМаніфест
Gogithub.com/hanwen/go-fuse/v2v2.9.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogo.opentelemetry.io/otelv1.44.0go.mod
Gogo.opentelemetry.io/otel/exporters/stdout/stdoutmetricv1.44.0go.mod
Gogo.opentelemetry.io/otel/metricv1.44.0go.mod
Gogo.opentelemetry.io/otel/sdkv1.44.0go.mod
Gogo.opentelemetry.io/otel/sdk/metricv1.44.0go.mod
Gogolang.org/x/timev0.14.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gomodernc.org/sqlitev1.41.0go.mod
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "cli",
        "filesystem",
        "fuse",
        "golang",
        "issue-tracking",
        "linear",
        "linear-app",
        "project-management"
      ],
      "is_fork": false,
      "size_kb": 2596,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 2263457,
        "Shell": 30792,
        "Makefile": 4033
      },
      "pushed_at": "2026-07-20T15:35:26Z",
      "created_at": "2025-12-11T19:37:32Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T15:37:00Z",
      "description": "Interact with linear as a series of text files in your filesystem",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "John Allen",
      "type": "User",
      "login": "jra3",
      "company": "Antimetal",
      "location": "New York, NY",
      "followers": 19,
      "avatar_url": "https://avatars.githubusercontent.com/u/419698?v=4",
      "created_at": "2010-09-28T19:45:37Z",
      "is_verified": null,
      "public_repos": 62,
      "account_age_days": 5777
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-07-18T12:27:53Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "7f3a8da96d15e96a398ede434350f95f65b8f196",
          "body": "atrest.Chmod stays best-effort, but a genuine tighten failure previously\nleft its only signal buried in journald — an artifact could silently\nkeep a loose mode with nothing observable. Chmod now records\nlinearfs.atrest.chmod_failures{artifact} alongside the log line;\nmissing artifacts still record n\n[…]\nlso fixes pre-existing telemetry.md drift: the\nlinearfs/cdn meter (PR #348) was missing from the scope list and\ninventory entirely.\n\nCloses #352\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(observability): count atrest chmod self-heal failures (#352) (#361)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T15:35:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7c6576e3cc652e6f905dc6c8d0ec21106c33bf3f",
          "body": "…ts (#358)\n\n* refactor(config): remove the dead allow_other mount option\n\nMountConfig.AllowOther was never wired to fuse.MountOptions — the mount\nhas always been owner-only, and `allow_other: true` in config.yaml was a\nsilent no-op that lied to the user. Remove the knob rather than wire it:\nwiring w\n[…]\nRE's api section updated to state the now-two-sided\nenforcement.\n\nCloses #353\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": "security follow-ups: drop dead allow_other, refuse API-client redirec…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T15:35:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e5609582ea4d5f37c2b01488f90cc66bb6e67700",
          "body": "Releases were checksummed but carried no cryptographic provenance:\nchecksums.txt is generated by the same job that builds the binaries and\nis itself unsigned, so an actor controlling the release pipeline could\nrewrite binary and checksum together. Add actions/attest-build-provenance\n(SHA-pinned, per\n[…]\nither. THREAT-MODEL TB4 gains the enforced provenance\nposture; SECURITY.md gains the operator-facing \"Verifying a release\"\nsection.\n\nCloses #354\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(release): SLSA build provenance for release artifacts (#357)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T15:35:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "18233600c8fc524ac210e22fbde83493ab82a53a",
          "body": "… (#356)\n\nPin the CI/release supply chain (Remediation Unit 4, #347):\n\n- SHA-pin actions/checkout (v4.3.1), actions/setup-go (v5.6.0), and\n  goreleaser/goreleaser-action (v6.4.0) to full 40-char commit SHAs with\n  trailing version comments across release.yml, test.yml, integration.yml.\n  Dependabot \n[…]\nse.yml keeps\n  its existing 'contents: write' for the goreleaser job.\n\nSLSA provenance / cosign signing intentionally excluded (#354, roadmap).\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(security): SHA-pin actions, pin govulncheck, least-privilege perms…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T11:36:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "62a0555f005f629619439436528db6f2abc884e7",
          "body": "…al (#351)\n\nRemediation Unit 3 from the #319 security audit (grilling-locked).\n\n- #338: config.Load hard-refuses a config.yaml that is the api_key source and\n  is group/other-accessible (mode & 0o077 != 0), naming the fix (chmod 600).\n  The LINEAR_API_KEY env path is the escape hatch and is unaffect\n[…]\nunaffected.\n\nDocs: THREAT-MODEL TB3 records the enforced posture; ARCHITECTURE notes the\nconfig refusal and the internal/db at-rest chmod seam.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(security): tighten at-rest modes, refuse loose key file, self-he…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T02:04:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "169281f3a30defee967f4baa3c47ae0dccde1dae",
          "body": "…e (#349)\n\n* fix(fs): route every name/target builder through one safeName chokepoint\n\nIntroduce a single exported safeName(raw, id) chokepoint in internal/fs that\nevery name/target builder routes its output through. It replaces /, \\, NUL, and\nC0 control chars with '-', trims trailing spaces/dots, f\n[…]\nes\n  (verified: 13 legitimate intermediate `name := ent.Name` assignments).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fs safety chokepoint: route every name/target builder through safeNam…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T01:37:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dfcbdc4d345ba58a0ac95260e55811ac75c46ac8",
          "body": "* harden(cdn): refuse redirects + cap GET body at 100 MiB\n\nRemediation Unit 1 from the #319 security audit. All three findings live in\nCDNClient.do():\n\n- Redirect policy (#336 SSRF, #337 key-downgrade): CheckRedirect now refuses\n  every redirect. Probing real cached uploads.linear.app attachment URL\n[…]\nd, all 10 subcases fail in 0.005s (was ~4.5m);\nrestored, green under -race.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "harden(cdn): refuse redirects + cap GET body at 100 MiB (#348)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-20T00:35:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "281e7b37fe16d5084395da93969398625c6d1717",
          "body": "…line (#329)\n\nFirst deliverable of the security-audit wayfinder map (#319). Establishes the\nsecurity reference every review pass keys off:\n\n- docs/THREAT-MODEL.md — four in-scope personas (hostile workspace member,\n  compromised CDN, local user, supply chain), the four trust boundaries where\n  untru\n[…]\nAT-MODEL.md in the same change, like ARCHITECTURE.md.\n- .gitignore — allowlist docs/THREAT-MODEL.md (docs/* is ignore-by-default).\n\nCloses #320.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(security): add threat model, wire SECURITY.md + CLAUDE.md discip…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-19T22:35:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9b886efe67c93de42b082fba2170b1d9e488a491",
          "body": "A prebuilt-binary AUR package so a fresh Arch box installs with `yay -S\nlinearfs-bin` instead of building from source. Downloads the vX.Y.Z release\ntarball for the host arch (x86_64/aarch64), verifies its sha256 against the\nrelease checksums, and installs /usr/bin/linearfs, the systemd user unit\n(Ex\n[…]\n the publish and per-release version-bump checklist. Build artifacts\n(src/, pkg/, *.pkg.tar.*, downloaded tarball) are gitignored.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(aur): add linearfs-bin AUR package (#318)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-19T02:11:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "035a8b7ce94e8c900c0a5c60fbc8d85e2c479f6b",
          "body": "…arsers (#317)\n\nThird fuzz batch: the write-only _create command parsers — the bytes a user\nwrites into relations/_create, links/_create, and attachments/_create through\nthe mount (untrusted input → a Linear mutation), the command-syntax counterpart\nto the marshal markdown parsers.\n\nExtraction (beha\n[…]\n-empty identifier.\n\n~30s/target locally (~1.1M execs each), no crashers, no findings. Seeds run in\nthe normal `go test -race` job.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): extract parseLinkInput, then fuzz the _create command p…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T19:56:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2eaa574853b68692b93ad9b02e1a2e388d99e58f",
          "body": "…#316)\n\nSecond fuzz batch (after the marshal parse/render seam), extending fuzzing to\nthe other pure input-shaping surfaces. Test-only; no production code changed.\n\ninternal/fs/listing_fuzz_test.go (5 targets over the real derivations):\n- FuzzNamedListing — labels/documents/milestones through the re\n[…]\nizeFilename's contract) so a future round —\nor the fuzzer — does not re-litigate it. Also un-ignore docs/adr/ so ADRs are\ntracked.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: fuzz the listing filename round-trips and SQLite time parsing (…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T19:36:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "efd24fdd1ac95dd90e0819000a8b47ce5119ecc4",
          "body": "Closes the standing \"instruments emit but nothing reads them\" gap: a single\ncommand that answers \"is it healthy?\" without journalctl + jq.\n\n`linearfs status` reports:\n- mount liveness — auto-detected from /proc/self/mounts (fuse.linearfs), so it\n  finds the real mountpoint however the daemon was sta\n[…]\nail-read of\nthe last line, byte/number/duration humanizers, /proc mount-field unescaping)\nare unit-tested with no mount or daemon.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(cmd): add `linearfs status` health snapshot (#315)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T14:53:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "766aeee5006fd9bd2e626048a96f293d1be99e8d",
          "body": "The fixture-mode integration suite passed one fresh-process run but failed\nunder `go test -count=N` (N>1): several tests mutated SHARED fixtures (TST-1,\nthe TST team, catalog labels) without restoring them, so in-process reruns —\nand, order-dependently, later reader tests — saw the debris. That bloc\n[…]\n\nreal waits; 3 fresh-process runs green (the CI condition is unchanged).\n\nSpec: docs/plans/2026-07-18-integration-count-safety.md.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(integration): make the offline suite -count-safe (#314)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T14:38:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cd5082136a2a8c37a1864bdbbb26b3c823afd85a",
          "body": "Adds two native Go fuzz targets over internal/marshal — the load-bearing\nboundary that turns untrusted file bytes a user writes into the mount into\nLinear mutations, and which had no fuzz coverage.\n\n- FuzzParse asserts Parse never panics and that Parse->Render->Parse is a\n  byte-stable fixpoint, sco\n[…]\nender emits\na nested map or a raw float (numeric fields are small ints coerced before\nwrite), so neither shape occurs in practice.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(marshal): fuzz the frontmatter parse/render seam (#313)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T12:48:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bf9e3bb67fc414715951eef4fa4fc14984b3c579",
          "body": "…ing (#312)\n\nWave 2 of the maturity push: make the project installable without building\nfrom source.\n\n- .goreleaser.yaml cross-compiles linux+darwin / amd64+arm64 as pure Go\n  (go-fuse needs no cgo), stamps version/commit/date, ships tar.gz archives\n  with README/LICENSE/INSTALL/KNOWN_ISSUES/contrib\n[…]\nrm —\n  the bug-report template asks contributors for this.\n\nCutting the first release (tag v0.1.0) is a separate, deliberate step.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build: add release pipeline (goreleaser) and reproducible build stamp…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T12:25:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8e5b6b64ac02368e578c24fa9ae772eede5c56ea",
          "body": "Position the project for outside contributors: CONTRIBUTING (dev setup,\ntesting philosophy, the CONTEXT.md/ARCHITECTURE.md \"docs are part of the\ndiff\" discipline), SECURITY (private disclosure + API-key/cache.db/umask\nguidance), CODE_OF_CONDUCT (Contributor Covenant 2.1), issue/PR templates,\nand a D\n[…]\nur\" line -> the real two-axis, header-governed\nrate model).\n\nRemove a stray root build artifact and gitignore /linearfs and dist/.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add contributor-OSS scaffolding (#308)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T12:18:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7ac567ad50fbdea3622400d30e64e47cc4ac298d",
          "body": "The confirmed-reflection contract (#276) closed the persist-wedge path, but a\npost-persist tail step could still hang the FUSE handler forever: server.Inode\nNotify / EntryNotify do not honor a context and can wedge on an internal go-fuse\nlock or a backed-up kernel-notify queue. A create's write-back\n[…]\nr intent + lowered timeout = deterministic); full fs suite green\nunder -race. ARCHITECTURE.md + telemetry.md updated.\n\nCloses #277\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(fs): bound kernel-notify tail steps against a wedge (#277) (#307)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T02:43:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cca4772bd86d848444a9d47aa8578308e416ed35",
          "body": "…tmatter (#227) (#306)\n\nIssue frontmatter fields were defined by three parallel hand-maintained walks —\nIssueToMarkdown (render), MarkdownToIssueUpdate (diff), MarkdownToIssueCreate\n(create) — each hand-coding the same 8 scalar fields (title, status, assignee,\ndue, parent, project, milestone, cycle)\n[…]\n table's key mapping and removal semantics as a change-detector.\nARCHITECTURE.md's marshal section records the table.\n\nCloses #227\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(marshal): declarative issueScalarFields table for issue fron…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T01:39:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "adfe8f06e28830ab6d5afa7fa9955fc8571e122c",
          "body": "…int (#197) (#305)\n\nIn fixture mode (no LINEARFS_LIVE_API), any write path exercised WITHOUT\nenableMockMutations — the deliberate loud-failure tests (TestT4_ValidSpecFails\nAtAPILoudly) and incidental post-teardown/validation writes — reached the real\napi.linear.app with the dummy key and 401'd. That\n[…]\nation required\" lines (down from the\nreported noise), 11 offline-marker hits where un-mocked writes fire, 0 failures.\n\nCloses #197\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(integration): point fixture-mode client at a local offline endpo…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T01:21:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7514a953f8abb63e02c527047075411bf1ce0b7f",
          "body": "…uge (#256) (#304)\n\nField report (#247 verification): linearfs.process.uptime_seconds read 300.001s\n(~one export interval) at ~93min real uptime, and only 2 `metrics:` dumps\nappeared in the journal over 93 minutes.\n\nInvestigation: the uptime gauge is CORRECT. It captures `start` once at\nregistration\n[…]\nand thus every 5-min metrics summary) are never dropped.\ntelemetry.md records the journald caveat and the mitigation.\n\nCloses #256\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(telemetry): stop journald dropping metrics dumps; guard uptime ga…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T01:07:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "65e0c990cfb76637c4f8cff9e7149fa2802249b7",
          "body": "…ate limit (#257) (#303)\n\nObserved live on the first #247 deploy: drainPendingDetailSync hit the client's\nLOCAL budget-deferral error and classified it as a server rate limit, pausing\ndetail sync for a full hour (\"backoff=1h0m5s\") for a condition that clears on\nthe admission ladder's own minute-scal\n[…]\nestIsDeferred, and ErrBudget is now correctly excluded too. ARCHITECTURE.md's\nerror-predicate note records the split.\n\nCloses #257\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(api): treat a local budget deferral as skip-cycle, not a server r…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T00:54:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0c5d24681f628e005b1d256fb83be0ed96961da1",
          "body": "execMutation decoded payload[entityField] into the entity AFTER the success\ncheck, so a mutation reporting success:true with a null/absent entity field\ndecoded into a silent zero-value T. An absent field already errored\n(\"unexpected end of JSON input\"), but an explicit null did not:\njson.Unmarshal([\n[…]\ns cover null, absent, valid, and success:false;\nARCHITECTURE.md's mutation-envelope note now records the shared rule.\n\nCloses #273\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(api): reject a null entity on a success:true mutation (#273) (#302)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-18T00:38:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "999214a64f2922030b4209e57ee83846da8fcb79",
          "body": "The offline integration suite flaked ~10% under load: a DIFFERENT unrelated\ntest failed each run, either an EIO on a `_create`/edit close or a read, or a\n\"created/renamed X not in listing\" readdir race. Pre-existing (present on base\n`c0244b6`), so PR #295 merged with the check red.\n\nRoot cause (the \n[…]\nsly failed within a few runs at count=30); full integration suite,\ndb/fs unit suites, vet, and staticcheck all clean.\n\nCloses #296\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(db): detach SQLite ops from FUSE-request cancellation (#296) (#301)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T21:42:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e60de10962cbd55f0148d777238e542dcee115ca",
          "body": "commitRename was the only member of the reflection-contract commit-tail\nfamily (commitCreate/commitWriteBack/commitDelete) that emitted no\nrecordFuseOp telemetry, so entity renames were invisible in\nmetrics.jsonl — a query for rename latency/error rate read as \"no\nrenames happen\" rather than \"rename\n[…]\nsFuseOp asserts the\nrename op is recorded on both a success (ok) and a classified-failure\n(eio) path via the shared manual reader.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(fs): instrument commitRename with a \"rename\" fuse op (#294) (#300)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T21:04:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b3c77b0f899866b09e9ada202aeb367d8a924711",
          "body": "…t (#291) (#299)\n\nTwo halves of commitRename's contract were unproven, so a regression would\nkeep the suite green:\n\n1. Normalization: the persist stub only counted calls, never recording the\n   entity it received, so nothing asserted persist gets the mutate-RETURNED\n   (server-normalized) value rath\n[…]\n Add rows feeding\n   typed errors through both find and mutate: rate-limit -> EAGAIN,\n   FieldError -> EINVAL, notFound -> ENOENT.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(fs): guard commitRename normalization + classified-errno contrac…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T20:57:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fff426e4297bdb1f995994ed8143cf057f732202",
          "body": "…e (#293) (#298)\n\nLabelsNode.Rename and DocsNode.Rename each hand-rolled a find closure\nre-implementing fetch -> listing(items).find(name) -> (nil,nil)-on-miss —\nthe exact filename↔name round-trip collectionDir already owns for Lookup\nand Unlink. The pattern lived in ~5 near-identical spots; a chang\n[…]\nk through them, so the resolve round-trip lives in one tested place.\nTestCollectionDirResolve pins hit / clean-miss / fetch-error.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): route rename find through a shared collectionDir.resolv…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T20:09:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "633da83c04ed074fa5643d2df666bffd657486db",
          "body": "…ey UUID (#292) (#297)\n\ncommitWriteBack rendered the #278 persist-wedge .error via\nunconfirmedEditMsg(spec.errKey, err), so \"Operation:\" showed the entity\nUUID (or a collection namespace) instead of a human-readable verb+target.\nAn agent reading .error after a wedged issue/project/comment/doc/label/\n[…]\nbel and asserts the .error carries \"Operation: save issue\nENG-1\" and never the raw UUID, guarding the contract against regression.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): give edit persist-wedge .error a real op label, not the errK…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T20:08:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "06effdd1b914ea0c43eea9c75c1d13b9966b55e3",
          "body": "LabelsNode.Rename and DocsNode.Rename hand-rolled the same ~70-line tail\n(guards, .md/dashes parse, find, API rename, persist gate, invalidate the\n.md/.meta pair) — the one write path where the confirmed-reflection contract\nwas applied by copy-paste instead of through a shared tail.\n\nExtract commitR\n[…]\nerification stays a layer above the commit-tail primitives\n(recorded in CONTEXT.md); ARCHITECTURE.md now lists four sibling tails.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): extract commitRename tail; dedup Labels/Docs Rename (#295)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T19:38:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c0244b6ae3fe57a7ec08f2f4c0bed87a6ed23fcd",
          "body": "The liveReader seam was built to unlock two tests; the first commit wrote\nonly the links phantom/verify-error coverage. Fill the other half: the\npost-mutation re-check branch that adopts the authoritative live entity as\nan idempotent success when the mutation itself fails (committed-but-response-\nlo\n[…]\n the re-check fallback makes the mutate return the error, so each\ntest genuinely pins its branch. Test-only; no production change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(fs): cover both liveReader mutate-failure re-check branches",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T16:43:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d4ee41632bfb275035bbfc1d6c6890b1e48d3beb",
          "body": "…branches\n\nThe links create tail's phantom check (#288) and the attachment create\nre-check read the authoritative live list straight off the concrete\nlfs.client *api.Client, which a fixture-mode test can't inject — so the\nphantom fall-through (a never-pruned cache row Linear no longer has) was\nuntes\n[…]\nverage, so an erroringLiveReader fake pins it explicitly.\n\nUpdates docs/ARCHITECTURE.md's API-seam bullet to enumerate liveReader.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(fs): add injectable liveReader seam; unit-test all #288 phantom …",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T16:28:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b67a4ac8ae2b6862770b8b1a0e8640911ef31c96",
          "body": "… tests\n\nFollow-through on the 2026-07-17 Fable bug-hunt (#283-#290): un-patched\nsiblings of the #276 confirmed-reflection and #282 dead-handler fixes, plus\nthe CRUD persistence test backlog. Each fix was built test-first (red proving\nthe old behavior, green after).\n\nConfirmed-reflection (Family A) \n[…]\ndelity\ngaps, now fixed: docState (document parent association), UpdateIssue field\noverlay, and UpdateLabel overlay from the store.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): close 7 reflection/dead-handler bugs + full CRUD persistence…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T16:04:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c79dd45b50d8ab347de3407cc5b164aaa0c0429a",
          "body": "`rm` on relations/*.rel, links/*.link, and external attachments/*.link\nsilently no-oped: unlink returned 0, wrote no .error, and the row\nsurvived the next readdir. go-fuse dispatches Unlink to the parent\ndirectory's ops, not the child file — so the Unlink methods on\nRelationFileNode / ExternalLinkNo\n[…]\n{Relation,ProjectLink,Attachment}CreateAndDelete in\nwrite_offline_test.go, each verified to fail on the pre-fix code.\n\nCloses #282\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): route info-listing deletes through the directory node (#282)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-17T04:35:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "71ae2222179991369f289cb750c58025d24d4aba",
          "body": "test(fs): close write-path edit-persistence gaps in fixture mode",
          "is_bot": false,
          "headline": "Merge pull request #281 from jra3/john/write-path-edit-tests",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T20:19:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65161d9cf38bc5264cdc92e14f2631837cc994a1",
          "body": "TestOffline_MilestoneEditPreservesOtherFields left the shared mount polluted:\nits cleanup re-seeded the store row but did not refresh the live milestone\nnode, whose adopted buffer still held the edited targetDate. The later\nTestFixtureMilestoneFile then read the stale 2025-12-01 and failed. Restore\n\n[…]\n (as the project/initiative tests do),\nwhich clears the node buffer and re-persists — mirroring the projectlabels\ncleanup pattern.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(fs): restore milestone edit through the mount, not a store reseed",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T19:16:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "378a8c2a7967fed352d954dcb84fbb5bbee8ac3c",
          "body": "TestClaudeToolEditPersists{Project,Initiative}Description require\nLINEARFS_WRITE_TESTS against the live API, so the default fixture-mode CI\nnever exercised the project/initiative edit-commit tail. Add fixture-mode\ncounterparts (TestOffline_{Project,Initiative}EditPersistsDescription) that\nedit the b\n[…]\nback with the untouched name intact. A sensitivity check (mock disabled ->\ncommit returns EIO) confirms they exercise persistence.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(fs): cover project/initiative edit persistence in fixture mode",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T19:11:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5fac2830d1e915c1ece1965eeae43cb8227eaffc",
          "body": "The existing TestWriteContractAtomicRename* tests assert only that an atomic\nsave-via-rename never corrupts the target, and run without the mock mutator\n(so the persisting write fails). Whether a save actually LANDS through the\nrename tail (renameSave) was unchecked — the exact neighborhood of the\ns\n[…]\nsitivity check (mock disabled -> rename returns EIO) confirms the test\nexercises persistence, not just the no-corruption contract.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(fs): verify atomic-save-rename edit persistence in fixture mode",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T19:09:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9332db25dcb4af491725c01bc18c40c568954920",
          "body": "MilestoneFileNode.Flush had zero tests (unit or integration): editing a\nmilestone's name/targetDate/sortOrder through the mount was exercised only\nby the create/read/delete lifecycle, never the edit-commit round trip.\n\nAdd TestOffline_MilestoneEditPreservesOtherFields, which edits one field\n(targetD\n[…]\nerlays the input onto the stored milestone (mirroring the project/\ninitiative currentXLocked merge) instead of minting a bare one.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(fs): cover milestone edit persistence in fixture mode",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T19:07:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d583c939522e625715a8259ed839924272359221",
          "body": "…tale\n\nfix(fs): fail loud on a spent scratch node serving the canonical file",
          "is_bot": false,
          "headline": "Merge pull request #280 from jra3/john/atomic-rename-spent-scratch-es…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T18:45:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d4c4af333b4294266774f1a11f10d96c8c3ac7a",
          "body": "…-sites\n\nfix(fs): confirmed-reflection contract for the remaining swallow sites (#278)",
          "is_bot": false,
          "headline": "Merge pull request #279 from jra3/john/confirmed-reflection-remaining…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T18:44:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a93286b7c514f8b7be7202439f6a3a4f26da59cb",
          "body": "After an atomic-save rename onto issue.md/project.md/initiative.md, go-fuse\nMvChilds the spent scratchFileNode over the canonical name. renameSave calls\nInvalidateRenamed to force a re-Lookup to the real node, but kernel-notify is\nasync: a write to the canonical file that wins the race against the p\n[…]\neject). The previously-flaky integration pair is now\ndeterministic (20/20).\n\nIndependent of #278 (reproduces on main); own branch.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): fail loud on a spent scratch node serving the canonical file",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T18:17:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9cde870c19cd9069313c8ffe1cecb953ca6a62aa",
          "body": "…s (#278)\n\nThe #276 create tail and the reconcile-link fix (b642867) proved that \"a write\nLinear accepted must not fail on a stale local cache — the sync worker\nreconciles\" turns into a silent stale when the daemon is wedged. This applies\nthe same \"confirmed reflection or say why in .error\" contract\n[…]\ner-surface defense in\ndepth that surface a wedge loudly at the write, where #277 heals the process in\nthe background.\n\nCloses #278\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): confirmed-reflection contract for the remaining swallow site…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T17:39:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b64286721ae0d09a79199ff94cc68515e2245f43",
          "body": "…#276)\n\npersistInitiativeProjectLink swallowed a failed junction-row write, on the\nbelief every other write path shares: \"a write Linear accepted must not fail\non a stale local cache — the sync worker reconciles.\" That belief has no\nfooting here. A project<->initiative link/unlink bumps NEITHER side\n[…]\ns (edit tail,\nhand-rolled renames, delete forget) all still have a working next-sync or\nretry fallback and are tracked separately.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): fail loud on a dropped initiative<->project junction write (…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T15:51:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a0c963b4d1e13db43fd5f5433b81a0a96523b067",
          "body": "commitCreate treated the SQLite write-back as best-effort: on a persist\nfailure it logged a warning and still returned errno 0. When the local\nreflection wedged (a stuck/locked write held by the paused sync worker;\nthe 30s createTimeout fires and sqlite3_interrupt returns an error), a\ncreate that Li\n[…]\nsuccess.\n\nResidual (persist succeeds but a later kernel-notify wedges) needs a\nbackground watchdog/self-heal — filed as follow-up.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(fs): gate create success on confirmed local reflection (#276)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-16T15:04:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a04beccd49d5275598dc3a2e2c106f3a58c5a424",
          "body": "refactor: architecture rounds 24-25 (listingDir, circuitBreaker, entityCell)",
          "is_bot": false,
          "headline": "Merge pull request #274 from jra3/refactor/architecture-round24-25",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-13T02:49:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98045fb4004803d062f1086f2668f898b221c3db",
          "body": "The entity()/setEntity()/refreshFrom() lock dance was hand-copied across 11\nentity-carrying directory nodes, so the 'every entity read/write goes under the\nlock' discipline was enforced only by copy-paste. Embed a generic entityCell[E]\nwith its own mutex: entity()/setEntity() promote onto the node (\n[…]\ncarries the CONTEXT.md doc sections for both this and listingDir, and the\nattrNode comment fix (stateMu now guards only the attr).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): collapse the entity-swap triplet into entityCell[E]",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-13T02:38:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aefdb7ab9ab2cc9d66a3c7009ab9bc06e03ff4cb",
          "body": "Gather the client's circuit breaker (two scattered atomics + three inline\nbranches in query(), with no test) into a state machine behind\nallow()/recordFailure()/recordSuccess() -- the isolated sibling of rateBudget.\nThe clock is injected at construction (matching newRateBudget(time.Now)), so the\n30s\n[…]\ntargeted onto the new breaker so the wiring coverage\n(real refused connection trips it, error surfaces through GetTeams) survives.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(api): extract circuitBreaker into a clock-injected module",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-13T02:38:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e89f9e27a940394c7ba46b5b9ac0cb80b621f93e",
          "body": "Collapse the identical Readdir+Lookup skeleton hand-copied across the three\nread-only info-listing directories (attachments/, relations/, links/) into one\ndeep module. Each listing already exposes entries()+find(name), so listingDir\ndelegates to it untouched behind the infoListing[E] seam, needing o\n[…]\nilter -> find -> EIO/ENOENT/build) are unit-tested\nwith no mount, mirroring collectiondir_test. Pure refactor, no behavior change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): add listingDir[E], the read-only twin of collectionDir",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-13T02:38:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4c8bd8f2f77bebb5000acc76d38f358d884b70c2",
          "body": "… buildFile\n\nTwo round-23 follow-ups, completing collectionDir's ownership of the collection\nitem-file surface.\n\n1. Create ride-along. collectionDir.create owns the shared Create shell (.md\n   guard → overwrite-existing branch → newCreateFile → the FUSE quad); comments,\n   docs, and labels delegate,\n[…]\nheck clean; /code-review verified (attr equivalence, clamp active,\ncomments overwrite inert, onFlush types, NewInode equivalence).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): fold Create into collectionDir; unify labels/milestones…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T19:46:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b60523339e4388e869e2f76d74078dd6ceafddf7",
          "body": "Every editable file node (issue/comment/label/document/milestone/project/\ninitiative) drove its FUSE Flush through the same invariant shell around its\nper-entity front half: lock, skip a clean/empty buffer, 30s timeout, run the\nfront half, then on success run commitWriteBack, adopt the fresh value,\n\n[…]\n changes).\n\nCONTEXT.md documents the module. Full unit + integration suites green;\nstaticcheck clean; two-pass /code-review clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): collapse the 7 Flush shells into editFlush[T]",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T19:36:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ea08327c5be16303d8c5effcaa4a6a46bdd9eb3b",
          "body": "…ir[T]\n\nThe four dynamic collection nodes (comments/docs/labels/milestones) each\nhand-copied the same Readdir + Lookup + .meta-shadow + Unlink head above the\nlisting/renderFile/commitDelete tails — the trio short-circuit, the .meta shadow\nbranch, the find-or-ENOENT symmetry, the on-error degradation\n[…]\nhead across the four nodes. CONTEXT.md documents the\nmodule; full unit + integration suites green; high-effort /code-review clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(fs): collapse the collection item-file head into collectionD…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T15:48:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bfce4fab837a3be8956ab6ad5b5910b017237137",
          "body": "The TB flowchart rendered as a hairball — dagre tangled the edges and there\nwas no visual grouping, so the lanes the prose describes were invisible.\n\nRedraw as flowchart LR with color-coded lane subgraphs (green serving /\ninternal/fs, blue persistence / repo·reconcile·SQLite, amber ingest /\nworker·a\n[…]\ng the\nread entry wrap across the top. Label keeps its internal/fs membership explicit.\nValidated by rendering through mermaid-cli.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: redraw the system diagram as color-coded left→right lanes",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:42:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b387b14f656eb7d3bc6c2b81b392c5b0c1cfcfa1",
          "body": "…ope (#263)\n\nPR #219's read-fetch envelope gave every decoded response a null-terminal-is-\nerror guarantee, but three paths still bypassed it. Two of them decoded their\nfirst page outside the shared walkPath descent, where the old silent-zero-value\nfailure mode still lived:\n\n- GetTeamMetadata / GetW\n[…]\nin (the combined-query companion to drain) plus tests\nasserting a null team / null connection now errors. Updates ARCHITECTURE.md.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(api): route combined-query & batch fetches through the read envel…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:34:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f06ce0d0fd889957530d5f5ff1811402bbf09bec",
          "body": "feat: add FUSE-op OTEL instruments to the serving layer (#264)",
          "is_bot": false,
          "headline": "Merge pull request #272 from jra3/feat/fs-otel-metrics",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:25:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "990c455fd0d222865a188e671de015eaa1de26ae",
          "body": "feat: unify CDN HTTP access behind one instrumented api.CDNClient (#262)",
          "is_bot": false,
          "headline": "Merge pull request #271 from jra3/feat/cdn-seam",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:24:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61701096668cfb92fc81f624535291d2334e4007",
          "body": "feat: sync team documents into SQLite (close last live-API read surface, #261)",
          "is_bot": false,
          "headline": "Merge pull request #269 from jra3/feat/team-docs-sync",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb4ea17d0f6cee3d0915a1613adc1e5762ba27a9",
          "body": "docs: add ARCHITECTURE.md maintenance rule to CLAUDE.md (#265)",
          "is_bot": false,
          "headline": "Merge pull request #270 from jra3/docs/architecture-sync-rule",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc1d40ca347afc9c7f9f4a5d0f1a19ddb6e21c27",
          "body": "api, sync, repo, and reconcile all recorded OTEL instruments, but internal/fs —\nthe layer users actually feel — recorded none, wiring only the per-request debug\nlog. This adds a serving-layer meter (linearfs/fuse):\n\n- linearfs.fuse.ops {op, outcome} + linearfs.fuse.duration {op} at the three\n  commi\n[…]\ner exit fires; the two error-classify sites switched from := (which\nshadowed the named errno) to explicit assignment.\n\nCloses #264\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add FUSE-op OTEL instruments to the serving layer (internal/fs)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T03:09:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a2dd48140fd9fdce5244ab08719b7b12d2286224",
          "body": "Two components made raw HTTP calls to uploads.linear.app with their own\nhttp.Clients, invisible to telemetry and with no timeout policy (both ran on\nhttp.DefaultClient, so a stalled CDN could hang a FUSE read or a sync HEAD\nforever): internal/fs's embeddedFileCache (authenticated GETs for embedded-f\n[…]\n.\n\"Who talks to the network\" is now exactly two clients in package api. Docs and\nthe system diagram updated to match.\n\nCloses #262\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: unify CDN HTTP access behind one instrumented api.CDNClient",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T02:51:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8628705605dd2482a8a9aeee054a2d85bc9b57cd",
          "body": "docs/ARCHITECTURE.md is now a verified orientation map (562a62e), but it will\nrot the same way it did before unless keeping it current is part of the change\nworkflow. Mirror the existing generateReadme rule: when a change reshapes a\npackage-level seam, contract, data flow, or invariant, update ARCHI\n[…]\nrefer contracts over counts (counts drift fastest); note there\nis no automated guard, so the discipline is the guard.\n\nCloses #265\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add ARCHITECTURE.md maintenance rule to CLAUDE.md",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T02:37:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2257d5ad84d460e65c01e228585977a0d834acea",
          "body": "… surface\n\nteams/{KEY}/docs/ was the one FUSE read that violated rule 1 (\"reads never\ntouch the Linear API\"): it served from a blocking, interactive-tier\nclient.GetTeamDocuments, so it failed offline and under rate-limit. The API\nclient stub returned an empty list, claiming Linear had no team-level \n[…]\nxtureAPITeamDocument + fixture seed + integration read test; rewrote\n  the API client test to the mock-server pattern\n\nCloses #261\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: sync team documents into SQLite, closing the last live-API read…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-12T02:17:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "04a842c90c7f09345d8ebb4fe56c9346a720af24",
          "body": "Fix the three verification-sweep bugs (#258, #259, #260)",
          "is_bot": false,
          "headline": "Merge pull request #266 from jra3/fix/verification-sweep-bugs",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-11T16:27:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "937569c8852856a5003d8ffd54c42e9a9d4f1d04",
          "body": "The persistent --config/-c flag was defined but never read; mount\nalways loaded the XDG default. Now an explicit --config path loads via\nconfig.LoadFrom, which fails loudly on an unreadable file (the user\nnamed that exact file — silently mounting with defaults is worse than\nno flag). The default path keeps its missing-is-fine contract, and\nLINEAR_API_KEY still overrides both.\n\nFixes #260\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: wire the --config flag through to config loading",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-11T15:52:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0faebc088bce5659abb0e9f06e473b6129a7425a",
          "body": "… path\n\nlinearfs.go hardcoded ~/Library/Caches/linearfs/files on every OS.\nos.UserCacheDir() resolves to exactly that path on macOS (existing\ncaches carry over) and to XDG ~/.cache/linearfs/files on Linux.\n\nFixes #259\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: embedded-file cache under os.UserCacheDir(), not hardcoded macOS…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-11T15:49:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b4546b206d765496778f23b558eaa359e384629a",
          "body": "SQLite orders timestamp TEXT lexicographically and the driver binds a\ntime.Time with its zone offset, so a local-zone time.Now() stamp\nmisorders against UTC cutoff strings — reconcile's cutoff-before-fetch\nprune pattern silently deletes fresh rows east of UTC.\n\nFixed sites: fs/attachments.go and fs/\n[…]\nat both stamps\nSyncedAt/DetailSyncedAt and calls bare time.Now(), catching the\nnow := time.Now() indirection a line-grep would miss.\n\nFixes #258\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: stamp SyncedAt via db.Now() everywhere; add AST discipline test",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-11T15:47:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "562a62e27e5d7e290dab4cb16bd7ffd953cdeb53",
          "body": "…+ session record\n\n262 claims verified; 34 corrections applied and ~20 confirmed omissions\nwoven in. Biggest fixes: Store.WithTx was deleted (real model is DSN\npragmas WAL+busy_timeout + single upserts); fs write tails do NOT go\nthrough internal/reconcile (that edge belongs to repo's SWR persist);\nn\n[…]\nr, db.Now()\nwrite-side invariant, intent-named kernel invalidation, dirty-buffer-\nwins, placeholder round-trip, cold-start probe, team rotation.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: correct ARCHITECTURE.md per 77-agent verification against code …",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-11T15:28:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1b795122a466ad94a6ec3249bf7a753d08b7c8bc",
          "body": "… current code\n\nThe doc was gitignored (docs/*) and had drifted badly: pre-diet sync\nworker, deleted Repository interface/mock, fictional 1500/hr token\nbucket, '_create reads return empty' (it's EACCES), no reconcile or\ntelemetry sections. Rewritten with every claim verified against the\ncode; whitelisted in .gitignore alongside plans/ and telemetry.md.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add system mermaid diagram and refresh ARCHITECTURE.md prose to…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-11T15:07:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab4fbef40073a568d18559c920536a307ea1fd57",
          "body": "fix: detail batch of 15 exceeds Linear's 10k per-query complexity cap",
          "is_bot": false,
          "headline": "Merge pull request #255 from jra3/fix/detail-batch-complexity",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T22:08:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4fd0ecedc3b5c2921c9e5a523b1b8d125be2550",
          "body": "Observed live immediately after the #238 diet deploy unblocked detail\nsyncing: every batched details fetch was rejected with \"Query too complex.\nComplexity: 12,897. Maximum allowed: 10000\" — the per-issue details\nselection has grown to ~860 points (relations, inverse relations, embedded\nfiles) since\n[…]\n15 failed\nidentically, freezing pending_detail_sync at ~154 forever.\n\ndetailsBatchSize 15 → 10 (~8.6k per batch, headroom for selection growth).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: detail batch of 15 exceeds Linear's 10k per-query complexity cap",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T22:02:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e1c9fba8ada9e2a5d82975dc25316f9ae5229efd",
          "body": "…er-length (#5, #6)\n\nKNOWN_ISSUES #5: the project.md/initiative.md body mapped to Linear's short\n`description` field (≤255 chars), so any real multi-paragraph write-up was\nrejected with a bare EINVAL. Map the body to Linear's uncapped `content`\nfield instead; the short `description` becomes read-onl\n[…]\nmeta carries description; IsFieldTooLong\n(7 cases); classifyMutationErr -> EMSGSIZE; the README guard pins both. Full\nsuite green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(projects,initiatives): map body to content field; EMSGSIZE for ov…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T21:44:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0c5512caaa36ded125d33aea4b35623a22e8c28d",
          "body": "feat: initiatives change-detection probe on lean cycles (#244)",
          "is_bot": false,
          "headline": "Merge pull request #254 from jra3/feat/244-initiatives-probe",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T20:12:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2c8e7cb7da560dfc59366a93bf74b89c80551c8",
          "body": "Union resolution: both #253 (main) and this branch invented the\nprobe_outcomes instrument independently — canonicalized on main's typed\nrecordProbeOutcome(kind, probeOutcome) API, added probeKindInitiatives,\nadapted this branch's call sites; worker_test.go rebuilt as main's file\nplus this branch's g\n[…]\ngned the two appended test suites into interleaved hunks;\ntelemetry.md probe row merged to cover both kinds; CONTEXT.md keeps both\nnew sections.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge origin/main into feat/244-initiatives-probe",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:35:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "56a59888fa888bf5108e17a54c976f3b09d5cc7f",
          "body": "feat: team-projects change-detection probe on lean cycles (#243)",
          "is_bot": false,
          "headline": "Merge pull request #253 from jra3/feat/243-projects-probe",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:27:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6b605be5b4877677a5a12181d7bcb5b906ee773",
          "body": "…+ reconcile-deletions metric, mock fields, CONTEXT.md sections)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Merge origin/main into feat/243-projects-probe (union: probe metrics …",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:21:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4f578c4a6d4bbbacba97a19cdb63a4d358e17e7e",
          "body": "feat: hourly scheduled issue-ID reconcile sweep (#245)",
          "is_bot": false,
          "headline": "Merge pull request #252 from jra3/feat/245-issue-id-reconcile",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:17:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "219b09ef81ba805991017ea5872391f7880e8b69",
          "body": "Diet slice 2 (#238): lean cycles replace nothing-fetched with a cheap\nper-team projects probe — one newest-first page (orderBy: updatedAt,\nfirst: 5, ~1K complexity) compared against a persisted per-team\nwatermark, vs the ~9.4K/page full drain that was 53% of steady-state\nspend. Full cycles are untou\n[…]\nged project\n  upserted + watermark ms round-trip fidelity, probe error continues the\n  cycle, deleted project survives lean cycles)\n\nCloses #243\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: team-projects change-detection probe on lean cycles (#243)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:12:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "442ba4452a9334a01e860449e5c2ba2506e60d51",
          "body": "Diet slice 3 of #238. Lean cycles now run a scalars-only newest-first\ninitiatives probe (first: 5, orderBy: updatedAt, InitiativeFields, no\nnested projects connection — a few hundred complexity vs the workspace\nquery's ~7.2K) and escalate to the existing full syncWorkspace only when\nthe newest updat\n[…]\nock server; behavior tested at the\nworker's API-client seam (unchanged / changed / probe-error /\nmissing-watermark scenarios on the fake clock).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: initiatives change-detection probe on lean cycles (#244)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:12:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "685ff499031c58221ca0cc823abb62352385a889",
          "body": "Issues are the one entity class whose sync is always incremental (never a\ncomplete drain), so a deleted issue that nothing reads lingered forever —\ndeletions were caught only reactively (read 404 → orphan delete → the repo's\ncooldown-gated reconcile pass). This adds slice 4 of the #238 sync-cycle\ndi\n[…]\nrker + repo over the same store). Repo seam — partial-drain\nper-team all-or-nothing + completeness, pending-guard mutual exclusion.\n\nCloses #245\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: hourly scheduled issue-ID reconcile sweep (#245)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T19:11:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7609d5e52e4a6973ddc634c1636d830f0af4c361",
          "body": "Add a links/ directory to projects and initiatives for Linear's\n\"Links / Resources\", backed by the EntityExternalLink entity — a distinct\nentity from issue Attachment (which is issue-only; AttachmentCreateInput\nrequires issueId). Same write contract as issue attachments: write\n\"URL [label]\" to _crea\n[…]\ntiatives\n\nDeliberately scoped out: sync-worker prefetch (links populate lazily on read\nvia SWR, matching project/initiative docs).\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: expose links/ surface on projects and initiatives (#249) (#251)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T18:54:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ee72d7e19f625cd48c326dd2a56aef4318d21f29",
          "body": "feat: validation-failure refresh-and-retry for catalog resolution (#246)",
          "is_bot": false,
          "headline": "Merge pull request #250 from jra3/feat/246-validation-refresh-retry",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T17:18:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24886439be53b763f6f691d6f360f4dd6906b393",
          "body": "feat: two-speed sync cycle — lean by default, full every FullSyncInterval (#242)",
          "is_bot": false,
          "headline": "Merge pull request #248 from jra3/feat/242-lean-full-cycles",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T17:17:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc447b2587ce35928b705a0f899dcc117a94231b",
          "body": "When a frontmatter write fails LOCAL name→ID resolution against a cached\ncatalog (state, label, project, milestone, cycle, user, initiative), the\nresolver now triggers ONE targeted refresh of that catalog, retries the\nresolution ONCE, and only then surfaces the existing validation error to\n.error/EI\n[…]\n no-refresh.\n- Docs: generated README self-healing note (+ readme conformance pin),\n  CONTEXT.md \"Catalog refresh-and-retry\" entry.\n\nCloses #246\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: validation-failure refresh-and-retry for catalog resolution (#246)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T17:08:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c73e66653ef2b9653da5237e8f4cccfb07afbd82",
          "body": "…ly returns do not)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: clarify full-cycle stamp semantics (partial failures stamp; ear…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T16:33:43Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b6b14eec64c5de3bc0298d3242a2c37c8ea574e8",
          "body": "…rval (#242)\n\nSlice 1 of the sync-cycle diet (#238). The worker's cycle gains a\nlean/full taxonomy:\n\n- Full cycle = the complete pre-diet behavior verbatim: syncWorkspace\n  (users + initiatives + project-label catalog) and per-team\n  syncTeamMetadata, with all prune licenses, plus the incremental\n  \n[…]\np case asserts the stamp was withheld.\nsync_schedule joins the fixture-parity exclusion list (sync-worker\nbookkeeping, no mount-visible render).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: two-speed sync cycle — lean by default, full every FullSyncInte…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T16:30:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ffe75b7161f085c5c9503fcd6cb8264cccda5850",
          "body": "refactor: extract UserFields/CycleFields/InitiativeFields query fragments (#232)",
          "is_bot": false,
          "headline": "Merge pull request #241 from jra3/refactor/232-query-fragments",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T12:37:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2854e30072d3031543a64a52265214f62dff2560",
          "body": "fix: paginate hardening — cursor-cycle stall guard, early vars check, composite budget preflight (#232)",
          "is_bot": false,
          "headline": "Merge pull request #237 from jra3/fix/232-paginate-hardening",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T12:31:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2d81848dce7b4414cd8c01fbde39bba6c8cc11c",
          "body": "…ents (#232)\n\nFinding 6 of the recovered PR #164 review: the field lists these queries\nselect were hand-duplicated — users five times (team members + drain page,\nworkspace users + drain page, viewer), cycles twice (combined metadata\nquery + drain page), and the ~20-line initiative selection three ti\n[…]\n\ndiffer (workspace nests at 50, the single-initiative drain runs at 250).\nNo field-set changes — every query selects exactly what it did before.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: extract UserFields/CycleFields/InitiativeFields query fragm…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T12:31:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7766d9f458814d8cbbc09cf492586cbf7cfe03b5",
          "body": "fix: syncWorkspace error aggregation + GetInitiative projects drain (#226)",
          "is_bot": false,
          "headline": "Merge pull request #236 from jra3/fix/226-workspace-sync-errors",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T12:25:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9c78dc45b71879c4f0361dcc737e8e7097e9b21",
          "body": "… composite budget preflight (#232)\n\nThree verified-open findings from the PR #164 review round (issue #232):\n\n- drainFrom's stall guard only caught an immediately-repeated cursor; an\n  alternating cycle (A→B→A→…) advanced `after` every iteration and ran\n  toward maxDrainPages — up to 10000 paid req\n[…]\n fixes ErrBudget's doc comment, which promised a reconcile errors.Is\nconsumer that never existed (reconcile preflights with LowBudget directly).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: paginate hardening — cursor-cycle stall guard, early vars check,…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T12:24:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "12a232dca6dfbbe6b148055f8615a4642b7dcd8a",
          "body": "…#226)\n\nTwo halves of #226:\n\n1. syncWorkspace declared `var errs []error` and gated its return on it,\n   but every failure path logged and continued without appending — a pass\n   whose every upsert failed returned nil, so the caller recorded success\n   over total data loss. The user/initiative conve\n[…]\now selects\n   pageInfo and GetInitiative drains the remainder, same contract as\n   GetWorkspace: complete Projects.Nodes, nil Projects.PageInfo.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: syncWorkspace error aggregation + GetInitiative projects drain (…",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T12:17:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "351b049c272ad54e400553b050686c8a4f1e8776",
          "body": "refactor: relationListing — direction-aware listing for relations/",
          "is_bot": false,
          "headline": "Merge pull request #225 from jra3/refactor/relation-listing",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T04:00:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68040f19bf797fcc183e4d4f25d9834f2b236244",
          "body": "relations/ was the last collection not on a listing module. The\n{type}-{ID}.rel name derivation and the outgoing/inverse direction split\nwere restated at four sites (Readdir's two loops, Lookup's two loops,\ncreateRelation's entryName/.last derivation), the content render\nhand-Sprintf'd unescaped YAM\n[…]\nifier skip, first-match/\nemit-once, the fetch-error seam against a real store, content render\nincl. valid-YAML colon title, and the parse table.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: relationListing — direction-aware listing for relations/",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T03:53:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bb1241e4fde6346ed845044e8908083263c7d17f",
          "body": "refactor: worker clock seam — inject now/timer/ticker",
          "is_bot": false,
          "headline": "Merge pull request #224 from jra3/refactor/worker-clock-seam",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T03:32:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "302db230bf6684ceb9d8e511d02f2fb1d2b240d0",
          "body": "The sync worker called time.Now/Since/Until/NewTimer/NewTicker directly\nat ~9 sites, making its timing logic slow-testable (six time.Sleep sites\nand a deadline-poll loop in worker_test.go). rateBudget already had the\ncure — an injected now func() time.Time driven by a fake clock in tests.\nThis gives\n[…]\ntick\non the fake ticker fires exactly one sync cycle.\n\nCONTEXT.md gains \"Worker clock seam\" recording the fields and the\nno-bare-time grep rule.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: worker clock seam — inject now/timer/ticker",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T03:26:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "60e6ba9be33ce6125829bb207c87b138496cf538",
          "body": "refactor: complete the parse side of the marshal seam",
          "is_bot": false,
          "headline": "Merge pull request #223 from jra3/refactor/marshal-parse-side",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T02:53:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e671368a2795335831bd32f86542ca5b8127c56",
          "body": "refactor: mount-lifetime context owns every spawned goroutine",
          "is_bot": false,
          "headline": "Merge pull request #222 from jra3/refactor/mount-lifetime-ctx",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T02:48:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d89ddafeeb0a4ffd5b0d6ce347dc03a5e0291f1e",
          "body": "All 7 entities rendered through internal/marshal, but only 4 parsed\nthere. This moves the last three fs-resident parsers onto the seam, so\nmarkdown -> entity now has one owner in both directions:\n\n- marshal.MarkdownToStatusUpdate replaces parseUpdateContent (the hand\n  line-scanner shared by project\n[…]\nt asserts the quoted\nrender); render -> MarkdownTo*Edit identity pins for\nproject/initiative. CONTEXT.md gains the \"Entity parse\" sibling entry.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: complete the parse side of the marshal seam",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T02:47:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "99f47959ccbb37eb71873c06d8a57882a3de7d48",
          "body": "EnableSQLiteCache's viewer-refresh goroutine ran on the caller's\ncontext.Background() (runMount), so its <-ctx.Done() branch could never\nfire — its 60s backoff ladder could outlive store.Close() and retry\nagainst a closed store.\n\nLinearFS now owns an internal lifecycle context (lifeCtx/lifeCancel,\nm\n[…]\nSpawned pins the ordering\ncontract without sleeps; TestSpawnAfterCloseDeclines pins the decline\nhalf. CONTEXT.md gains a \"Mount lifetime\" entry.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: mount-lifetime context owns every spawned goroutine",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T02:37:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d5e685ac19eecc6fd6c6ebe9b5996ba38fa347e",
          "body": "chore: prune three tiers of dead methods (−3,102 lines)",
          "is_bot": false,
          "headline": "Merge pull request #221 from jra3/chore/dead-code-prune",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T00:49:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c8afcc89702edc1e240ae8c211e57827e38fe2e",
          "body": "WithTx had zero production callers — the durability story is\nbusy_timeout + single upserts, transactions were never adopted. Its\ntest (TestWithTransaction) goes with it. The sqlc-generated\nQueries.WithTx in db.go stays (generated code).\n\nDB() also has zero production callers but is load-bearing for \n[…]\nn fixture loaders, and the junction-table\nobservation helpers the tier-2 prune introduced), so it stays with a\ncomment saying it is a test seam.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: delete Store.WithTx; mark Store.DB() as a test seam",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T00:39:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9930103950e8662f2a5a244da7e559a4642cdd32",
          "body": "The receiver-net audit ((q|qtx|Queries()).M( across internal+cmd,\nnon-test, excluding queries.sql.go) found 47 production-dead generated\nquery methods. After the repo-method prune, a re-run found 11 more\nwhose last callers were the deleted repo methods: GetAttachment,\nGetComment, GetCycleByName, Get\n[…]\nthe\nfs filtered-issues test dropped a pure debug block.\n\nAlso updates the round-19 note that said ListTeamIssuesByPriority was\nawaiting removal.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: prune 58 dead sqlc queries (47 audited + 11 tier-1 cascade)",
          "author_name": "John Allen",
          "author_login": "jra3",
          "committed_at": "2026-07-10T00:38:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 1,
      "commits_last_year": 437,
      "latest_release_at": "2026-07-18T12:27:53Z",
      "latest_release_tag": "v0.1.0",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 5,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 100,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/jra3/linear-fuse",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/jra3/linear-fuse",
          "is_deprecated": false,
          "latest_version": "v0.1.0",
          "repository_url": "https://github.com/jra3/linear-fuse",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T12:25:53Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 16
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 110276,
      "source_files_sampled": 258,
      "oversized_source_files": 4,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 18479
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/hanwen/go-fuse/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.9.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/stdout/stdoutmetric",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/metric",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk/metric",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "golang.org/x/time",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.14.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.41.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 113,
        "open_issues": 14,
        "closed_ratio": 0.943,
        "closed_issues": 231,
        "closed_unmerged_prs": 5
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "jra3",
          "commits": 334,
          "avatar_url": "https://avatars.githubusercontent.com/u/419698?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "integration.yml",
        "release.yml",
        "test.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "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": 9,
            "reason": "27 out of 28 merged PRs checked by a CI test -- score normalized to 9",
            "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 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "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": 10,
            "reason": "project is 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": 10,
            "reason": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
            "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": 10,
            "reason": "all dependencies are pinned",
            "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": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "7f3a8da96d15e96a398ede434350f95f65b8f196",
        "ran_at": "2026-07-24T07:24:47Z",
        "aggregate_score": 6.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T15:40:57Z",
      "oldest_open_prs": [
        {
          "number": 311,
          "created_at": "2026-07-18T12:20:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 350,
          "created_at": "2026-07-20T01:39:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-20T15:35:25Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 27,
          "created_at": "2025-12-19T13:22:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 230,
          "created_at": "2026-07-10T12:00:42Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 231,
          "created_at": "2026-07-10T12:00:43Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 234,
          "created_at": "2026-07-10T12:01:15Z",
          "last_comment_at": "2026-07-10T23:48:42Z",
          "last_comment_author": "jra3"
        },
        {
          "number": 235,
          "created_at": "2026-07-10T12:01:35Z",
          "last_comment_at": "2026-07-10T12:37:47Z",
          "last_comment_author": "jra3"
        },
        {
          "number": 240,
          "created_at": "2026-07-10T12:25:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 275,
          "created_at": "2026-07-13T04:41:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 333,
          "created_at": "2026-07-19T04:02:53Z",
          "last_comment_at": "2026-07-19T05:48:33Z",
          "last_comment_author": "jra3"
        },
        {
          "number": 359,
          "created_at": "2026-07-20T15:12:46Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 360,
          "created_at": "2026-07-20T15:12:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 362,
          "created_at": "2026-07-20T15:32:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 363,
          "created_at": "2026-07-20T15:32:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 364,
          "created_at": "2026-07-20T15:59:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 365,
          "created_at": "2026-07-23T19:36:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/jra3/linear-fuse",
    "host": "github.com",
    "name": "linear-fuse",
    "owner": "jra3"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 62,
      "inputs": {
        "security": 62,
        "vitality": 76,
        "community": 43,
        "governance": 55,
        "engineering": 70
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 76,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 437,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "437 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 437
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v0.1.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 3,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 3 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "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": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 55,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 81,
            "inputs": {
              "merged_prs": 113,
              "open_issues": 14,
              "closed_issues": 231,
              "issue_closed_ratio": 0.943,
              "closed_unmerged_prs": 5
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "94% of issues closed",
                "points": 44.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 94
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "113/118 decided PRs merged",
                "points": 36.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 113,
                      "decided": 118
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 56,
            "inputs": {
              "followers": 19,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "jra3",
              "public_repos": 62,
              "account_age_days": 5777
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "19 followers of jra3",
                "points": 9.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 19,
                      "login": "jra3"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "62 public repos, account ~15 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 62
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 15
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "good",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "packages": [
                "github.com/jra3/linear-fuse"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "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": "1 published versions",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 70,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "27 out of 28 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "cli",
                "filesystem",
                "fuse",
                "golang",
                "issue-tracking",
                "linear",
                "linear-app",
                "project-management"
              ],
              "has_wiki": false,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "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": 62,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 6.2
            },
            "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": "27 out of 28 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "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 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "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 fuzzed",
                "points": 5,
                "status": "met",
                "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": "30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "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": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": "excellent",
        "name": "AI Readiness",
        "value": 88,
        "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": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 18479
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.77,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "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": "77 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 77,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 110276,
              "source_files_sampled": 258,
              "oversized_source_files": 4
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-24T07:25:02.492883Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/jra3/linear-fuse.svg",
  "full_name": "jra3/linear-fuse",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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