Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 0 forksdesde dic 2025Ver en GitHub ↗

jra3/linear-fuse tiene un índice de salud de 62 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (88/100) y la más baja, Community & Adoption (43/100). Se actualizó por última vez hace 3 días. Una sola persona concentra la mayor parte del trabajo reciente.

62
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

62
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

John AllenCuenta personal
19 seguidores62 repositorios públicosdesde sept 2010Antimetal

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/jra3/linear-fusev0.1.0-1hace 5 días

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

76Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 3 días
11.8/36Cadencia de commits — 17/52 semanas con commits
18/18Volumen de commits — 437 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year437
human_commit_share1
days_since_last_push3
active_weeks_last_year17
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count1
latest_release_tagv0.1.0
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

43En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
18/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conduct
has_pull_request_template

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

55Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
44.1/46.8Resolución de issues — 94% de issues cerradas
36.6/38.3Aceptación de PR — 113/118 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs113
open_issues14
closed_issues231
issue_closed_ratio0,943
closed_unmerged_prs5
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
9.4/25Alcance del propietario — 19 seguidores de jra3
25/25Trayectoria — 62 repos públicos, cuenta de ~15 años
Datos de entrada utilizados
followers19
owner_typeUser
is_verified
owner_loginjra3
public_repos62
account_age_days5777
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 5 días
4/20Historial de versiones — 1 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/jra3/linear-fuse
ecosystemsgo
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

70Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-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
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 8 topics
0/10Wiki
Datos de entrada utilizados
topicscli, filesystem, fuse, golang, issue-tracking, linear, linear-app, project-management
has_wikino
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

62Moderado · 16% del índice global
Cómo se puntúa
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.5Licencia — 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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate6,2

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

88Excelente · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 100 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes18.479
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 77 de los últimos 100 commits con autoría o crédito de agente
5/8Mantenimiento automatizado — automatización de dependencias configurada, no observada en los commits muestreados
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,77
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.1/55Tamaños de archivo manejables — 4/258 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes110.276
source_files_sampled258
oversized_source_files4

Datos clave

0estrellas de GitHub
1contribuidores
437commits en los últimos 12 meses
3días desde el último push
1versiones publicadas
1factor bus
14issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 6.2 / 10
6.2agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
Dependencias directas 10
RegistroPaqueteRestricción de versiónManifiesto
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
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasGo.