Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-28 03:05 UTC

dkoosis / snipe

GoSin licencia detectada★ 0 estrellas⑂ 0 forksdesde ene 2026Ver en GitHub ↗

dkoosis/snipe tiene un índice de salud de 52 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (82/100) y la más baja, Community & Adoption (15/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

52
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.

52
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

David KoosisCuenta personal
7 seguidores37 repositorios públicosdesde mar 2012Visible Venture

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/dkoosis/snipev0.2.0-4hace 8 días

Métricas por categoría

Vitalidad

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

80Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
14.5/36Cadencia de commits — 21/52 semanas con commits
18/18Volumen de commits — 640 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 19 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year640
human_commit_share1
days_since_last_push0
active_weeks_last_year21
Cómo se puntúa
27/27Publica versiones — 4 versiones publicadas
36/36Recencia de las versiones — última versión hace 8 días
19.8/27Cadencia de publicación — una versión cada ~47,8 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count4
latest_release_tagv0.2.0
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases47,8

Comunidad y Adopción

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

15Crítico · 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
0/22.5Licencia — no se detectó ningún archivo de licencia
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
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?

56Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.1/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,995
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
35.7/38.3Aceptación de PR — 112/120 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs112
open_issues0
closed_issues92
issue_closed_ratio1
closed_unmerged_prs8
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.5/25Alcance del propietario — 7 seguidores de dkoosis
23.5/25Trayectoria — 37 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers7
owner_typeUser
is_verified
owner_logindkoosis
public_repos37
account_age_days5248
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 8 días
12/20Historial de versiones — 4 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/dkoosis/snipe
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

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

64Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 2 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 21 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

65Moderado
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_descriptionno

Seguridad

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

33En riesgo · 16% del índice global
Cómo se puntúa
0/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 21 merged PRs checked by a CI test -- score normalized to 0
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
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
0/2.5Licencia — license file not detected
7.5/7.5Maintained — 30 commit(s) and 19 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6/7.5Vulnerabilities — 2 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,3

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.

82Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — .claude/rules/CLAUDE.md, AGENTS.md, CLAUDE.md, vendor/github.com/dkoosis/keyring/AGENTS.md, vendor/github.com/dkoosis/keyring/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_files.claude/rules/CLAUDE.md, AGENTS.md, CLAUDE.md, vendor/github.com/dkoosis/keyring/AGENTS.md, vendor/github.com/dkoosis/keyring/CLAUDE.md
agent_instruction_max_bytes5926
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, vendor/github.com/buger/jsonparser/Makefile, vendor/github.com/wk8/go-ordered-map/v2/Makefile, vendor/modernc.org/libc/Makefile, vendor/modernc.org/mathutil/Makefile, vendor/modernc.org/memory/Makefile, vendor/modernc.org/sqlite/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile, vendor/github.com/buger/jsonparser/Makefile, vendor/github.com/wk8/go-ordered-map/v2/Makefile, vendor/modernc.org/libc/Makefile, vendor/modernc.org/mathutil/Makefile, vendor/modernc.org/memory/Makefile, vendor/modernc.org/sqlite/Makefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/272 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes54.020
source_files_sampled272
oversized_source_files0

Datos clave

0estrellas de GitHub
2contribuidores
640commits en los últimos 12 meses
0días desde el último push
4versiones publicadas
1factor bus
0issues 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 3.3 / 10
3.3agregado

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-28 03:04 UTC

0Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 21 merged PRs checked by a CI test -- score normalized to 0
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
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 19 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
8Vulnerabilities2 existing vulnerabilities detected
Dependencias directas 13
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/stretchr/testifyv1.8.1go.mod
Gogolang.org/x/toolsv0.41.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gomodernc.org/sqlitev1.44.0go.mod
Gogithub.com/fsnotify/fsnotifyv1.9.0go.mod
Gogithub.com/alecthomas/kongv1.15.0go.mod
Gogithub.com/rogpeppe/go-internalv1.15.0go.mod
Gogithub.com/dkoosis/keyringv0.1.0go.mod
Gogithub.com/google/go-cmpv0.7.0go.mod
Gogithub.com/pmezard/go-difflibv1.0.0go.mod
Gogithub.com/invopop/jsonschemav0.13.0go.mod
Gogithub.com/mattn/go-isattyv0.0.20go.mod
Gogolang.org/x/modv0.32.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": [],
      "is_fork": false,
      "size_kb": 209900,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1863760,
        "Shell": 77097,
        "Makefile": 14080
      },
      "pushed_at": "2026-07-28T01:27:24Z",
      "created_at": "2026-01-14T01:39:39Z",
      "owner_type": "User",
      "updated_at": "2026-07-28T01:26:58Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "David Koosis",
      "type": "User",
      "login": "dkoosis",
      "company": "Visible Venture",
      "location": "US",
      "followers": 7,
      "avatar_url": "https://avatars.githubusercontent.com/u/1538542?v=4",
      "created_at": "2012-03-15T00:19:48Z",
      "is_verified": null,
      "public_repos": 37,
      "account_age_days": 5248
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-07-19T23:18:49Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2026-03-05T17:40:20Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-03-05T07:59:23Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-02-26T16:42:43Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ed0f3769ef8892688e7d18bc2d00be7a368d7de6",
          "body": "* feat(triage): one-call triage facts for a file set (sn-zjwh)\n\nsnipe triage <file...> --format=json bundles the three reads cc-plugins'\nsignificance.sh makes per triage — hotspot row (score/fan_in/cyclo),\ntest-proximity, and real Go package count — into one call. Facts only; no\nband/route decision \n[…]\njected: standard-envelope wrap (bespoke facts-only struct is the\ndeliberate bash-gate contract, pinned in the bead). Deferred: package\nresolution for symbol-less files (no files.pkg column; new bead).",
          "is_bot": false,
          "headline": "feat(triage): one-call triage facts for a file set (sn-zjwh) (#212)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-28T01:26:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42d59ec91e7397ee15e9463ee56a2dbc2539d08d",
          "body": "* feat(doctor): --probe live-checks external API keys (sn-none)\n\nsnipe doctor verified only that credentials were present, not that they\nwork. Add embed.LiveProbe — one minimal Voyage request that proves the\nkey is valid and the endpoint reachable — behind a --probe flag (default\noff, keeps doctor n\n[…]\nth code EMBED_PROBE_FAILED so doctor exits non-zero.\n\nVoyage embeddings is snipe's only external API dependency.\n\nCloses: none\n\n* refactor(embed): wrap LiveProbe errors with phase context (CodeRabbit)",
          "is_bot": false,
          "headline": "feat(doctor): --probe live-checks external API keys (#211)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-28T00:38:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb02ba19c5bbced58566b200787edb67f64fe2b4",
          "body": "…2h) (#210)\n\nA no-hit query serialized results as null in --format json, forcing every\nJSON consumer to null-guard where an empty array would not (AXI #5,\ndefinitive empty states). Add Response[T].MarshalJSON to normalize a nil\nslice to [] at the single marshal point, so every command inherits it.\n\nBlackbox regression guard: search <no-match> must emit results:[].",
          "is_bot": false,
          "headline": "fix(json): emit results:[] not null on valid-but-empty answers (sn-wa…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T23:41:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83996b7845d2e4f013a03bf7424695d42b90562e",
          "body": "…rompt keyring (#209)\n\nExit codes (0 success / 1 error envelope / 2 usage), truncation markers that name the recovery lever, and env-first credential resolution so automation never prompts. Plus review hardening: wrapped keyring-store error + a guard test asserting the keychain is never opened when the env key is set.\n\nCloses: sn-9jaa, sn-9gtb, sn-gpxw",
          "is_bot": false,
          "headline": "Close 3 AXI agent-ergonomics gaps: exit codes, truncation hints, no-p…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T23:18:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bda0b2c00156edc4735fbb21b226f0c79b99ece",
          "body": "* feat(verify): ripple + uncovered structural warnings (sn-8f6q.4)\n\nExtend `snipe verify` with a second cheap static warning beside the\nexisting uncovered-symbol signal:\n\n- ripple: a changed EXPORTED func/method with direct call sites in files\n  the diff never touched. verifyBuildRipple queries Find\n[…]\nrom an un-touched sibling file in the same package is a real ripple the\nexported-only filter missed. Drop the filter (and the now-dead\nverifyIsExported helper); add a blackbox test. (codex PR #204 P1)",
          "is_bot": false,
          "headline": "feat(verify): ripple + uncovered structural warnings (sn-8f6q.4) (#204)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T18:26:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "83d9bcfd95a5549137ed70459ebff3dfe14210fe",
          "body": "…6q.9) (#206)\n\n* feat(index): index inline fixture-path literals for plan churn (sn-8f6q.9)\n\nThe string_refs extractor indexed only two literal shapes — os.Getenv-family\nargs (kind=env) and named string consts (kind=const) — so `snipe plan`'s churn\ndetector missed inline fixture-path arguments like\n\n[…]\nrt it fresh while missing WILL CHURN paths until each test\nhappened to change (or --force). Bumping the file-metrics generation forces\nthe one-time full reindex that backfills them. (codex PR #206 P1)",
          "is_bot": false,
          "headline": "feat(index): index inline fixture-path literals for plan churn (sn-8f…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T18:25:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "381f1dd6d118a023991b12b396a7589ba29be504",
          "body": "… (sn-8f6q.8) (#208)\n\n* fix(plan): surface test-file call sites beyond FindTests' 2-hop reach (sn-8f6q.8)\n\nOn the signature and delete (MustRemove) paths, plan dropped every _test.go\nref (planFilterRefs(refs,false)) on the assumption the TESTS section recovered\nthem. But TESTS uses FindTests — a 2-h\n[…]\numented 'cap total call sites emitted' contract (commands.go).\nSplit the cap: prod takes its share first, test gets the remainder. Adds\na blackbox test asserting the combined bound. (codex PR #208 P2)",
          "is_bot": false,
          "headline": "fix(plan): surface test-file call sites beyond FindTests' 2-hop reach…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T18:25:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce6d1d22bfb35b7a2cf7735cec179dc193aa49eb",
          "body": "…xen) (#205)\n\nFindOverlappingSymbols ran its predicate-batch loop as N separate\ndb.Query calls, each its own implicit transaction. On a large diff\n(>250 changed hunks/files, past overlapBatchPredicates) the query\nsplits into multiple batches; a concurrent writer — e.g. a reindex in\nWAL mode — could \n[…]\nency guarantee is\nstructural (verified by construction); a deterministic mid-loop-writer\ntest isn't feasible without a flaky timing hook, so it's documented in\na code comment instead.\n\nCloses: sn-5xen",
          "is_bot": false,
          "headline": "fix(query): wrap FindOverlappingSymbols batch loop in a read tx (sn-5…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T18:25:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d961e4f3634c7f0e4c0f0ebdf4a13ab1ac34a76f",
          "body": "Give every user-facing + hidden command in cmd/cli.go a testscript (.txtar)\nsmoke test asserting exit code + one stable default-surface line. Audited the\nfull command set against BOTH harnesses: only hotspots, sensitive, and guard\nwere covered by neither blackbox nor txtar — those are the primary co\n[…]\n/ tests / show: no diff / no _test.go / stable hex ID on this fixture\n  -> graceful degrade path (JSON contract lives in blackbox).\n\nmake audit: green (race, blackbox, govulncheck).\n\nCloses: snipe-p61",
          "is_bot": false,
          "headline": "test(cli): txtar smoke suite for uncovered commands (snipe-p61) (#207)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T18:25:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a141cd8c1e8d779d83e9877037af506e3a105ca8",
          "body": "…) (#203)\n\n* feat(plan): golden/testdata churn detection for snipe plan (sn-8f6q.6)\n\nReplace the planGoldenPlaceholder stub with real \"WILL CHURN\" detection.\nFor each covering test file, FindChurnLiterals extracts testdata/ and\n.golden path literals from string_refs (reusing the lits infra), deduped\n[…]\n call-site count), list shows the capped subset +\n  '+N more' footer.\n\nDeclined: Gemini args pre-alloc nit (capacity already reserved via\nmake(...,0,cap); append never reallocs — pure style, no gain).",
          "is_bot": false,
          "headline": "feat(plan): golden/testdata churn detection for snipe plan (sn-8f6q.6…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T17:18:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5014d91c9c931cc741ede4779625853b580b962b",
          "body": "Claude-Session: https://claude.ai/code/session_01QibjBCib4Su3E7kLiKmcnq",
          "is_bot": false,
          "headline": "chore: wrap — drop closed bead ref from boot lane",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T14:14:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e452eef703dc5728f9de728131d52931df110c5f",
          "body": "- boot.md: #202 merged, sn-8f6q.5 closed; add ↑ so-that rung; 6 ready.\n- .gitignore: sn-nduv/ + sn-8f6q.5/ bd worktree dirs.\n- eval task_status: current run snapshot.\n\nClaude-Session: https://claude.ai/code/session_01QibjBCib4Su3E7kLiKmcnq",
          "is_bot": false,
          "headline": "chore: refresh boot lane + ignore bd worktree dirs",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T13:56:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2c03869c60439cd7948d9906b64ef2835d239b5",
          "body": "* feat(plan): snipe plan — ordered edit worklist for a proposed symbol change (sn-8f6q.5)\n\nNew command 'snipe plan <sym> --change=signature|behavior|delete': emits the\nordered edit worklist fusing def site, call sites grouped by package (with\nrefs.ast_ctx context), and covering tests (direct then tr\n[…]\nymbol covered by >500 tests is not a real case, and the guard\nrisks a false \"truncated\" note at exactly 500.\n\nmake audit green.\n\nClaude-Session: https://claude.ai/code/session_01QibjBCib4Su3E7kLiKmcnq",
          "is_bot": false,
          "headline": "feat(plan): snipe plan — ordered edit worklist (sn-8f6q.5) (#202)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T12:15:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d7b473e8db9dc901b7b2798b1f7c29274918a06",
          "body": "…on-open",
          "is_bot": false,
          "headline": "docs: seed NORTH_STAR ★ + roadmap — station map for the derived sessi…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T11:45:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9dc7e5d6754feda9bc394fde197a1be90be57e3a",
          "body": "…-nduv) (#201)\n\n* chore(embed): drop deprecated plaintext credentials-file fallback (sn-nduv)\n\nKeychain-first resolution (#200) made ~/.config/snipe/credentials the last\nof three legs. Remove it entirely: keychain + SNIPE_VOYAGE_API_KEY env are\nnow the only paths. Deleted credentialsPath()/loadCrede\n[…]\n Regression guard: a planted credentials\nfile must not satisfy HasCredentials/resolveCredentials.\n\nCloses: sn-nduv\n\n* docs(embed): drop stale credentials-file mentions from resolveCredentials comments",
          "is_bot": false,
          "headline": "chore(embed): drop deprecated plaintext credentials-file fallback (sn…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-21T00:52:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d84e64b23ec89283ef4ded126a966f9535c3fa7",
          "body": "…s for keyring doctor",
          "is_bot": false,
          "headline": "chore: add keyring.json manifest — declares expected keychain account…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T18:21:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c3517661a5cfe508be2d7f60c8e7b975314025c",
          "body": null,
          "is_bot": false,
          "headline": "fix: repin dkoosis/keyring v0.1.0 to retagged public-release squash hash",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T17:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93cbb6f48582c902847006949919013bd0e01544",
          "body": "…eue updated",
          "is_bot": false,
          "headline": "chore: refresh boot lane — #196-#200 landed, keyring public, ready qu…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T17:10:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad8bccfccd85c06a8e95f7a7a9f5a80ca650da42",
          "body": "…gp) (#200)\n\nKeychain-first voyage API key via dkoosis/keyring (now public, v0.1.0). All review feedback resolved: gemini Linux remediation, both codex P2s (ErrUnreadable downgrade, probe-on-off), and codex P1 (private-dep install path — keyring made public). CodeRabbit table-driven test refactor applied.\n\nCloses: sn-8qgp",
          "is_bot": false,
          "headline": "feat(embed): voyage API key keychain-first via dkoosis/keyring (sn-8q…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T16:07:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2889e89478c9cbcdcb1d6721bfc1fe17b8e87aee",
          "body": "…-33gg) (#199)\n\n* test: guard snipe risk JSON contract (sn-n8re)\n\nGolden blackbox test pinning the cross-repo contract cc-plugins' review-judge\nconsumes: always exactly one result (meta.total==1, never results==[]), stable\n.results[0].{verdict,score,reasons,changed,degraded} field set, degraded=true\n[…]\n semver-guarded field paths, the\nalways-one-result invariant, and degraded trust/fallback semantics for the\ncc-plugins review-judge consumer. Points cmd/risk.go's doc-comment at it and the\nguard test.",
          "is_bot": false,
          "headline": "Harden snipe risk JSON contract: golden guard test + doc (sn-n8re, sn…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T15:01:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3013639c49689b304ad6ee9c8ebf9e53d56095c1",
          "body": null,
          "is_bot": false,
          "headline": "bd: update sync.remote",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T01:12:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a33f0eb71480315b994285f0cdc2b46ef71e86ec",
          "body": "…198)\n\nAdd ast_ctx filter to the LEFT JOIN ON clause in the three ref_count\naggregates flagged by sn-hmz R-B review (querySymbolRefsByKind and\ngetExtensionPoints in generate.go, GetChangeBoundaries in flows.go).\ngo-statement / channel-op self-refs no longer inflate CONTEXT RANKING\ncounts (D1 orderin\n[…]\nmbols whose only refs are go/chan self-refs\nstill appear with ref_count=0 instead of vanishing from the result set.\n\nOut of scope per bead: FindRefs listing and GetRefCount (handled in\nsn-hmz itself).",
          "is_bot": false,
          "headline": "sn-j2oy: exclude go/chan self-refs from context ranking aggregates (#…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T01:11:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "660654d705166c76611879b40ff30832d89bfb14",
          "body": "…197)\n\nextractConcurrencyRefs covered go-statements, sends (ch <- x), and\narrow-receives (<-ch) but missed `for v := range ch` — a func whose\nonly concurrency signal was a range-receive failed to classify as\nconcurrency.\n\nUses pkg.TypesInfo (already threaded through ExtractRefsFiltered) to\ncheck the\n[…]\nr — in that\ncase for-range receives are simply not detected (no heuristic guess).\n\nclose(ch) already gets ast_ctx=call:close via the existing call-context\npass, so it's out of scope here per the bead.",
          "is_bot": false,
          "headline": "sn-v84m: classify for-range channel receives as concurrency signal (#…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T01:11:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a92b42f0baa0b7ff32f1c89986a11b21da0581d5",
          "body": "…smatch (#196)\n\n* sn-za8p: canonicalize project root/file paths to fix symlink query mismatch\n\n`snipe index <path>` resolved an explicit path arg via filepath.Abs +\nFindProjectRoot with no symlink resolution, while query commands resolve\nroot via os.Getwd(), which macOS returns already kernel-canoni\n[…]\ncalize after resolving to absolute. dir is already\ncanonical (FindProjectRoot), so the common case is unchanged; this closes the\nnarrow intra-repo-symlink gap and makes behavior uniform.\n\nCloses: none",
          "is_bot": false,
          "headline": "sn-za8p: canonicalize project root/file paths to fix symlink query mi…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T01:11:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c814122a0268a4bc99e602a27b0776261ee13e1",
          "body": "…ve 1 (DeepCaiman lane)",
          "is_bot": false,
          "headline": "chore: wrap session — v0.2.0 release, cc-plugins contract, backlog wa…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-20T00:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f944661b81dd028399d42fdecc89f6e9ed3e72c7",
          "body": "…hain bump) (#195)\n\n* bd: clear sync.remote\n\n* fix: isolate git-fixture tests from ambient hooks + bump toolchain past GO-2026-5856\n\nTwo independent gate (make audit) failures blocking a snipe release:\n\n1. Fixture tests in internal/gitchurn, internal/risk, test/blackbox spin up\n   throwaway git repo\n[…]\nfixture repo.\n2. govulncheck flagged GO-2026-5856 (crypto/tls ECH privacy leak) reachable\n   via embed.BatchClient.DownloadFile; fixed in go1.26.5. Bump go.mod\n   toolchain directive.\n\nCloses: sn-4jog",
          "is_bot": false,
          "headline": "fix: green the release gate (test hook isolation + GO-2026-5856 toolc…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-19T23:15:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "84ab7445e245356aae1d54da804cbca4aab138f6",
          "body": null,
          "is_bot": false,
          "headline": "docs: track north-star-mini (product vision one-pager)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-13T02:51:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "265e1a504105646829b56a838affea7bb068da8a",
          "body": "…#194)\n\n* sn-hmz: emit go-stmt/channel-op indexer signal + wire concurrency-role recall\n\nAdds ast_ctx=\"go\"/\"chan\" to internal/index/refs.go: a new ast.Inspect pass\nin ExtractRefsFiltered emits a synthetic ref per go-statement/channel\nsend/receive, self-attributed (symbol_id == enclosing_id == the en\n[…]\nn self-refs — asserts\nGetRefCount == 1 (not 3) and FindRefs returns only the genuine ref.\n\nF2 [P2]: tighten CtxChan doc comment — for-range receives and close() are\nnot captured (deferred to sn-v84m).",
          "is_bot": false,
          "headline": "sn-hmz: go-stmt/channel-op indexer signal + concurrency-role recall (…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-13T02:47:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "699b5c48d162606cb3cdda64089b3c369ff6fba6",
          "body": "* sn-8f6q.3: add snipe verify — diff → minimal covering test set\n\nWires diff acquisition (internal/risk), hunk→symbol overlap, and\nsymbol→test lookup (both internal/query) into a new read-only `snipe\nverify` command: maps a working-tree or --base diff to the minimal\n`go test -run '...'` invocations \n[…]\nline assertion to the\n  anchored shape.\n- cosmetic: moved cmdNameVerify after cmdNameTypes to restore the\n  alphabetical run.\n\nmake check green; blackbox Verify (4 tests) green; help golden unchanged.",
          "is_bot": false,
          "headline": "sn-8f6q.3: add snipe verify — diff → minimal covering test set (#193)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-13T02:47:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a08a28799047e46dba7c25b352b9d6df2eccf91b",
          "body": "…e diffs (#192)\n\nA single OR-joined query (one predicate per stale file/merged fresh range)\ncan blow SQLite's vendored host-parameter cap (999) and MAX_EXPR_DEPTH\n(1000) on a pathological diff with 1000+ disjoint hunks.\n\nFlatten the WHERE into a flat predicate list (stale files: one `path = ?`\npredi\n[…]\nntity\ntest (covers cross-batch dedupe via a symbol hit by two hunks in different\nbatches), cap=1 many-stale-files batching test, and an edge test for the\nchanges-present-but-empty-ranges early return.",
          "is_bot": false,
          "headline": "sn-8f6q.7: chunk FindOverlappingSymbols into batched queries for larg…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-13T02:47:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71c5d174ba7fc2c90264708304d955e30ba64898",
          "body": "…-8f6q.1, .2) (#191)\n\n* sn-8f6q.1: working-tree diff mode in internal/risk/diff.go\n\n* sn-8f6q.2: hunk-symbol overlap query with staleness fallback\n\n* sn-8f6q.1: drop dead msg param in commitAll test helper (unparam)\n\n* review: robust untracked-path split + range-merge (sn-8f6q.1, .2)\n\nApplies accept\n[…]\n fallback (Gemini) — the empty-tree object\nisn't materialized in a fresh repo (verified 'fatal: bad object'); unborn HEAD\nis a non-use-case for verify. Deferred: full param/expr-depth chunking → bead.",
          "is_bot": false,
          "headline": "snipe verify foundations: working-tree diff + hunk→symbol overlap (sn…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-12T20:42:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bab0b1255b7a234cd97746a5733ebede7e6f96eb",
          "body": "* feat(risk): calibrate high cutoff 5→7 via 20-PR replay (sn-tgra)\n\n20-PR trixi replay at scoreHigh=5 read 5H/3M/8L — three small PRs (4-5\nfiles) tripped high(6) via central+role:persistence+blast+churn, i.e. any\nchange to a central persistence symbol read high regardless of breadth.\nRaise scoreHigh\n[…]\n\n- require jq up front (silent miss → every merge reads bogus low/0)\n- track compiled bin in cleanup trap (was leaking MBs per run)\n- register trap before go build so a failed build can't orphan temps",
          "is_bot": false,
          "headline": "feat(risk): calibrate high cutoff 5→7 via 20-PR replay (sn-tgra) (#190)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-12T18:16:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f9053341175ced9001934c488c34befd06c5c676",
          "body": "* feat(eval): enforce gates + MRR rank-quality floor (sn-4bxp)\n\nThe eval had no gates — File/Symbol/Eff targets and PASS/FAIL labels were\ncosmetic; only benchmark.yaml parse errors failed the build. Binary metrics\nare also saturated at 100%, so they no longer discriminate.\n\n- enforceGates(): t.Error\n[…]\ned as a magic literal in both. (CodeRabbit + Gemini)\n\nDeclined: table-driven refactor of the four check() calls — the closure\nform is already compact; a 4-row struct table adds ceremony without value.",
          "is_bot": false,
          "headline": "feat(eval): enforce gates + MRR rank-quality floor (sn-4bxp) (#189)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-07T15:27:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1cda88a7e1af42e490549a18aec97bcfa4b918c5",
          "body": "- CLAUDE.md traps: eval resolves env → ../<name> → .eval-repos/ (first\n  indexed wins), not siblings-only. Siblings absent → runs use .eval-repos/\n  (zero embeddings). Corpus cobra ≠ snipe's kong framework.\n- boot.md: TameCaribou lane, sn-aa2 done, task_status.txt drift trap.",
          "is_bot": false,
          "headline": "docs(rules): fix stale eval-repo resolution note; land boot rewrite",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-07-07T13:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cda9a5906969e8d2ea0c2f294b66f4b047da5a80",
          "body": "Fold bead-DAG centrality into `snipe risk` when the repo carries a\ngit-tracked .beads/issues.jsonl export. Scans the diff's provenance —\nhead branch name + base..head commit messages — for bead-id tokens,\nmatches them against the export (exact, then alias-suffix: sn-aa2 ↔\nsnipe-aa2), and buckets the\n[…]\n owns CI-metadata folding. Absent file → skipped silently.\n\nWeights reuse the existing strong/weak scale; thresholds still\nuncalibrated (sn-tgra). Flag-injection guard mirrors gitDiff.\n\nCloses: sn-aa2",
          "is_bot": false,
          "headline": "feat(risk): opportunistic bead-DAG centrality signal (sn-aa2) (#188)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-06T18:10:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b0b0e880360b156281bc47699f985d47598b37b5",
          "body": "* feat(risk): snipe risk <base> [head] — diff → code-graph risk verdict (sn-v87)\n\nNew 'snipe risk' command: maps a git diff to the changed symbols, fuses the\ncode-graph signals snipe already owns, and emits one repo-agnostic verdict +\nreasons. Consumer: cc-plugins review-judge maps verdict → CI revi\n[…]\nls skips _test.go files — a test edit shouldn't carry a\nproduction role or blast radius (addresses coderabbit's exclusion note at the\nrisk layer rather than making RolesForSymbols drop requested IDs).",
          "is_bot": false,
          "headline": "feat(risk): snipe risk — diff → code-graph risk verdict (sn-v87) (#187)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-06T17:44:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7764006ce77363984e53d037ce4f8b9e79d781b",
          "body": "…il-guard test (#186)\n\n* perf(context): scoped file→imports cache for risk classification (sn-c8o)\n\ndetectRiskFlags probed the imports table up to 4x per func/method during role\ninference; in --full that's every func/method in the repo. Preload the five\nrisk-relevant packages (sync, sync/atomic, os/\n[…]\nd coverage for GetTypeInfoFromSymbol (sn-4p8)\n\nCovers the new *SymbolRow entry point's nil path (sn-btq, #184). The pid<=0 /\nWindows ErrPermission guards from sn-4p8 already shipped in 951bf23 (#184).",
          "is_bot": false,
          "headline": "perf(context) + test(query): imports cache for risk classification, n…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-06T15:47:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "770bcadd58f6dc769661371d9cc85e375d4bc4e8",
          "body": "…L idiom (#184)\n\n* fix(kg): make GetHints orca-shim test timeout load-independent (sn-mo9)\n\n* perf(types): batch GetTypeInfo via *SymbolRow entry point, drop N+1 lookup (sn-btq)\n\n* fix(store): harden lockHeldByDeadProcess (ErrNotExist/EPERM/ESRCH, handle release) (sn-77t)\n\n* chore(store): use NOT EX\n[…]\nelevated\n  holder): the PID resolves to a live process we can't inspect, not a dead\n  one. Return alive so we never reap a live lock.\n\nFrom CodeRabbit (pid<=0) + gemini (ErrPermission) review on #184.",
          "is_bot": false,
          "headline": "fix: /team backlog wave 1 — test flake, N+1 batch, lock hardening, SQ…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-06T15:31:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2b7fad5ecd73c969677e753401d07e3b53cb92d",
          "body": "…urity_boundary RiskFlags (sn-zd2) (#185)\n\nDefect 1: role now populated on every `context --full` symbol (was boot-only) via\na batch InferRoles map in generateSymbols; test-file symbols default to\napi_boundary so coverage is 100%. Boot key-symbol cap is configurable via a\ndedicated --key-symbols fla\n[…]\nctable from existing signals; concurrency recall is capped to channel\nsignatures + sync-primitive call sites.\n\nContext SchemaVersion 1.0 -> 1.1 (additive: role on --full + risk_flags).\n\nCloses: sn-zd2",
          "is_bot": false,
          "headline": "feat(roles): carry role to --full, --key-symbols cap, concurrency/sec…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-07-06T15:31:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e6df2780cd6dcd98869add5f56dba7a388dcaffa",
          "body": "The bus-factor column (auth) read 2 on every file in this repo. Not a parse\nbug: gitchurn deduped authors by %aN (display name), and the same person had\ncommitted under two names — \"David Koosis\" and \"dkoosis@gmail.com\" — both at\n<dkoosis@gmail.com>. Two names, one human, counted as two.\n\nSwitch the\n[…]\nst stops\ndouble-counting a single contributor.\n\nAdded TestWalkCountsAuthorsByEmailNotName: two commits, two display names,\none email -> Authors == 1. Verified live: every hotspot row now reads auth=1.",
          "is_bot": false,
          "headline": "fix(gitchurn): key author identity on email, not display name (#183)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-29T21:14:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "de257db07c02fab6336cdce26ef915a5c7064089",
          "body": "…aller symbols (#182)\n\n* docs(metrics): cite algorithm sources in complexity/pagerank comments\n\nMcCabe (\"A Complexity Measure\", IEEE TSE 1976) on computeCyclo; Brin & Page\n(WWW7 1998) on PageRank — matches the author+year+title standard already set\nby cognitive.go (SonarSource 2017).\n\n* fix(hotspots\n[…]\nal-complexity, equal-churn, ties, single-row max, and\n  both zero-guards (maxCyclo==0 -> score 0; maxLogChurn==0 -> complexity-only).\n  No divide-by-zero, score stays reconstructable from its columns.",
          "is_bot": false,
          "headline": "fix(hotspots): file fan-in = distinct caller files (Martin Ca), not c…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-29T21:02:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b608b9427f56f6d2d5fa9624dfc9e88771de0600",
          "body": "…x (sn-64a.6) (#181)\n\n* fix(index): backfill file-level risk metrics on a stale existing index (sn-64a.6)\n\nCodex review on #180: when a repo already had an index built before the\nfile-level risk metrics existed, a plain `snipe index` (no source changes)\nhits the skip/incremental path and never popul\n[…]\nker, so the backfill guard\n  would force a full reindex on every run. Gate the check on !skipMetrics.\n- Log a warning instead of swallowing s.SetMeta's error, matching the\n  rest of the metrics block.",
          "is_bot": false,
          "headline": "fix(index): backfill file-level risk metrics on a stale existing inde…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-29T18:17:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f630be0058bec1bd719a6cf10c64aeb5bbf5736d",
          "body": "* feat(churn): index git change-frequency + metrics --kind=churn (sn-64a.1)\n\nAdd the temporal axis of code risk. At index time, walk git history once to\nderive per-file change-frequency — commit count (CodeScene \"revisions\"),\ndistinct authors (bus factor), first/last seen, and a recency-weighted\nsco\n[…]\n6: skip-index path doesn't backfill new file-level metrics\non an existing index — pre-existing \"metrics only on full reindex\" behavior.\n\nRefs: #180 review (chatgpt-codex-connector, gemini-code-assist)",
          "is_bot": false,
          "headline": "Git-aware code-risk metrics (crime-scene model) (#180)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-29T17:44:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa08ef3ce133ad760c90092766d3e8146ee5830d",
          "body": "- GetAllEmbeddings/GetEmbeddingsByPackage now surface ErrCorruptEmbedding on\n  undeserializable BLOBs, matching GetEmbedding (was silent nil) — #174 review.\n- frontierCallers chunks the IN(...) set at SQLite's 999-var limit so a wide BFS\n  frontier in large repos can't trip 'too many SQL variables' \n[…]\nc\n  sloppyReassign rejects it; explicit 'return err' already feeds the named\n  return before the deferred rollback). Kept a comment explaining why :=.\n\nFollow-up to merged #173/#174/#175. Closes: none",
          "is_bot": false,
          "headline": "fix(store,lifecycle): address PR review feedback on #173/#174",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:55:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "736c091c03e62a36ff7d79cee6a6aaf84c24f4b2",
          "body": "…ewWriter compact param (snipe-x95) (#178)",
          "is_bot": false,
          "headline": "refactor: typed child-table enum, EmbeddingHandler alias, drop dead N…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "694411514d7edf854f3e4049849f30a410e4b69f",
          "body": "…-reindex crash (snipe-syt) (#175)",
          "is_bot": false,
          "headline": "fix(store): keep imports truncate+repopulate in one tx to survive mid…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1599c53120e26e93be1da4584d4aa65ea80d7fe0",
          "body": "…no longer hidden in a predicate) (snipe-uap) (#172)",
          "is_bot": false,
          "headline": "refactor(store): make IsIndexing side effect honest (stale-lock reap …",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9665b16da75b44b3097901c558461d6a6943614",
          "body": "…ent nil (snipe-vv3) (#174)",
          "is_bot": false,
          "headline": "fix(store): surface corrupt-embedding BLOB as an error instead of sil…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "096d82bd0f43c89785eb5be8f61fb06de6995b5c",
          "body": "…ier primitives (snipe-0fy) (#173)",
          "is_bot": false,
          "headline": "perf(lifecycle,cmd): batch N+1 caller/type queries via existing front…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2992023c3db698df275a80988e2b38f4ff004a7",
          "body": "…tions (snipe-64y) (#177)",
          "is_bot": false,
          "headline": "test: harden flaky deadlock/goroutine checks + remove evergreen asser…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d67195a531fdd4d68777c4057f0542a5ed14e073",
          "body": "…e gets disambiguation hints (snipe-ami) (#176)",
          "is_bot": false,
          "headline": "fix(output): populate Suggestions on ambiguous-symbol errors so Claud…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "753924237649917382b573c480d412066eebe146",
          "body": "…dit on main) (#179)\n\n* test: regenerate blackbox goldens for #170 zero-emit envelope fields (snipe-aox)\n\n* test: regenerate remaining cli_workflows blackbox goldens for #170 zero-emit (snipe-aox)",
          "is_bot": false,
          "headline": "test: regenerate blackbox goldens for #170 zero-emit (unbreak make au…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T21:49:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "680c070d2c817dcdf1ae41344de0c967bb3de9f5",
          "body": "…RROR (#171)\n\nedit: maps edit.ErrSymbolNotFound to NOT_FOUND. search: classifies missing-rg via typed exec.ErrNotFound probe instead of substring-matching the message (fixes misclassification).\n\nCloses: snipe-7rn",
          "is_bot": false,
          "headline": "fix(cmd): route not-found errors to ErrNotFound instead of INTERNAL_E…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T20:23:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f47ee6f3e45a59eaf1ec7dc72dea7924caca5bb1",
          "body": "…d_at (#170)\n\nDrops omitempty from Total/Completed/Failed/Stale and Meta.Offset/Limit so meaningful zeros emit (D4). Makes EmbedStatusResult.CreatedAt a *time.Time so an absent timestamp is genuinely omitted (Gemini review).\n\nCloses: snipe-0xt",
          "is_bot": false,
          "headline": "fix(output): emit meaningful-zero envelope fields; omit absent create…",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T20:23:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbdfb4385c42cd9a70f8c1082e232b76784e8713",
          "body": "Sweeps orphaned call_graph edges in WriteIndexIncremental, mirroring the refs sweep. Fixes monotonic under-reporting of callers/callees/impact.\n\nCloses: snipe-bzw",
          "is_bot": false,
          "headline": "fix(store): sweep call_graph orphan edges on incremental reindex (#169)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-27T20:23:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "368d8f77085939b7ba4eeceddb9dca9926133206",
          "body": "* refactor(index): dedup ExtractLiterals, simplify isTestFile\n\n- ExtractLiterals now delegates to ExtractLiteralsFiltered(.., nil),\n  dropping a copy-pasted loop that double-computed the enclosing map\n- isTestFile uses strings.HasSuffix\n- literalID uses fmt.Appendf (modernize)\n\nCloses: none\n\n* refactor(index): hex-encode only first 8 bytes in literalID\n\nPer Gemini review on #168: hex.EncodeToString(h[:8]) yields the same\n16-char ID as encoding all 32 bytes then slicing, without the wasted work.",
          "is_bot": false,
          "headline": "refactor(index): dedup ExtractLiterals, simplify isTestFile (#168)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-20T19:55:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ed4de0abf90093f0053e9b6516763aaf7b2583c",
          "body": "Hand-authored d2 UML class diagram of snipe's interface surface, with embed relationships corrected per review.\n\nCloses: snipe-sv9",
          "is_bot": false,
          "headline": "docs: UML class diagram of system interface surface (#167)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-20T19:47:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "825bca94361b466b67fde31ab940842a9fddf1e2",
          "body": "stampTier was extracted when two ladder rungs stamped a MatchTier; the\nmethod-by-name rung removal (3069a27) left one caller. A 3-line loop with\none callsite doesn't earn a named helper — inline it.\n\nCloses: none",
          "is_bot": false,
          "headline": "refactor(query): inline single-caller stampTier helper (#166)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-20T19:13:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e5ca121095ce1d468fd82fe77e2ea9f42502b69",
          "body": "10 bug fixes across heal, store-lock, edit, index, search, watch, embed. One commit per bead on the branch; `make audit` green (race + blackbox + govulncheck + eval). Includes two Codex review fixes (P1 persisted-completed batch recovery, P2 search ctx-cancellation reporting).\n\nCloses: snipe-7ba, snipe-dv3, snipe-aj2, snipe-er5, snipe-4gz, snipe-l6a, snipe-1vi, snipe-apz, snipe-rqo, snipe-8el",
          "is_bot": false,
          "headline": "fix: drain go-bug-audit bug backlog + Codex review fixes (#165)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-20T08:59:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4dc69d1711b639dc61f87da1d027058417a1c2ab",
          "body": "…pe-ffj)\n\nPhase 3b graded marker. When ripgrep returns zero and search substitutes the\nnearest embeddings (usedFallback), emit '! semantic:0.62' carrying the top\nhit's cosine. Closes the Phase 0 gap: search.go:92 sets Result.Score but\ndefault Claude output drops it, so the substitution's strength wa\n[…]\ntual query ->\n! semantic:0.67/0.45; literal hit -> silent. Tests: embed.TestSearch_Top-\nResultCarriesCosineScore (score produced), output.TestClaudeSemanticMarker\n(rendered + raw Score still dropped).",
          "is_bot": false,
          "headline": "feat(search): emit ! semantic:N marker on pure semantic fallback (sni…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-19T17:30:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3069a277536e74b207a5365e97c527b379b6f2d5",
          "body": "…-ffj)\n\nlookupMethodByName could never return rows: the exact-name query has no kind\nfilter and methods are stored bare-named, so a bare method name already\nresolves at the exact rung. The fallback shared the same name=? predicate and\nnever added results. Drop it plus the inert method-match marker; \n[…]\nlive degraded rung in def's simple ladder.\n\nBare method lookup (def LoadLines -> (*FileCache).LoadLines) verified intact.\nEval unchanged (cobra-search-02 fails identically before/after; pre-existing).",
          "is_bot": false,
          "headline": "refactor(query): remove unreachable method-by-name lookup rung (snipe…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-19T17:30:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5677f01f09861a9ae0eee37ff40fcfb0fda047ab",
          "body": "…nipe-ffj)\n\nPhase 3 categorical markers. Transient SymbolRow.MatchTier stamped on the\ncase-insensitive fallback rung in lookupSimple; def maps it to ! ci-match on\ndefault output. Silence still = served (D4: exact path pays zero). Lets ferret\ntell a served query from a substituted one.\n\nmethod-by-name rung also plumbed (! method-match) but currently unreachable:\nthe exact-name query has no kind filter and methods are stored bare-named, so\nexact already catches them before lookupMethodByName runs.",
          "is_bot": false,
          "headline": "feat(query): emit ! ci-match self-assessment marker for def ladder (s…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-19T17:30:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4632f24007a90e9cf7cafb24f157e0a1b7320c03",
          "body": "Completes the CI-economy port (addendum to #163).\n\n- .github/pull_request_template.md: What / Beads (Closes: <ids|none>) /\n  Notes. Adapted from trixi; dropped its wt-land mention (snipe has none);\n  comment points at session-protocol.md.\n- session-protocol.md: add the PR↔beads rule next to batching — every PR\n  body carries a Closes: trailer; on merge close beads with the ref; no\n  merge-then-forget. Aligned batching to \"one commit per bead\" (snipe uses\n  beads).\n\nCloses: none",
          "is_bot": false,
          "headline": "chore: add PR template + PR↔beads Closes-trailer rule (#164)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-19T13:44:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9c5c0fea6edee12f9e9c40d46ae6762b1f46e2f",
          "body": "Port trixi's CI-economy convention to snipe.\n\n- codex-review.yml: switch trigger from `on: pull_request` (auto-fire on\n  >=50-line / `codex-review`-label PRs) to `on: issue_comment`, gated on a\n  `@codex review` comment. Adds issue_comment plumbing: resolve PR base ref\n  via `gh api`, checkout `refs\n[…]\n rule doc (Codex section only; snipe\n  has no macOS leg).\n- session-protocol.md: port the \"batch small fixes -> one PR / auto-batch\"\n  convention into the Workflow section (snipe's dev-workflow home).",
          "is_bot": false,
          "headline": "ci: move Codex review to comment-model + port CI-on-demand rules (#163)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-19T13:38:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e3d58113de2ceae33feff2f0cfa739f0ebcc994",
          "body": null,
          "is_bot": false,
          "headline": "ci: add advisory Codex PR review (gated: not-draft + main + meaty/label)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-18T01:51:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a27028338682eeb817435b680a26b89e89afe9b6",
          "body": "Index-global degraded marker: when the open index holds zero embeddings,\nsemantic resolution is unavailable, so every query command appends\n`! noembed` to its default-output meta line. Lets ferret/eval separate\ngenuine misses from semantic-unavailable repos.\n\nStamped once in OpenStore (the universal\n[…]\nough OpenStore and stay\nsilent. Existence check (LIMIT 1), not COUNT, keeps the hot path O(1).\nSilent on healthy indexes (D4).\n\nPhase 1 of snipe-ffj; substitution-tier markers (ci/method) are Phase 2.",
          "is_bot": false,
          "headline": "feat(query): emit ! noembed self-assessment marker (snipe-ffj)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-16T01:36:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3082b63167d7eda27f512f5f094beebac951abe3",
          "body": "…snipe-2rx, snipe-h26)\n\nkong migration dropped the dynamic --embed default (embed.HasCredentials),\nsilently forcing embedModeOff and shipping zero-embedding indexes. Restore\nvia flagPassed(\"embed\") + defaultWithEmbed() in IndexCmd.Run.\n\nAdd enum: tags to --select/--embed-mode/--mode/--warnings/--direction so bad\nvalues fail fast with a value list instead of silent fallthrough.",
          "is_bot": false,
          "headline": "fix(cli): restore embed-by-default + enum-validate closed-set flags (…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T18:36:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4111eb0097b23cecea906d3536eaff592259b4ad",
          "body": "Covers 11 commands missing from the blackbox JSON-envelope suite:\nboundary, deadcode, orient, trace, metrics (+--kind=cycles), embed-status,\nschema, and hidden baseline/check/history/watch.\n\n- test/script/ (own package, no build tag → runs under plain `make`)\n- build-and-exec + PATH harness (Execute\n[…]\n= --help only (long-running); check/history seed a baseline first\n- new dep: github.com/rogpeppe/go-internal (vendored)\n\ntxtar = smoke/usage contracts; complements blackbox envelope tests.\nmake green.",
          "is_bot": false,
          "headline": "test(cli): add testscript .txtar smoke suite (snipe-p61)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T18:00:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9c7fc0006d5d08f0236dc0770fc35e04b9301a0",
          "body": "Behavior-preserving framework swap. 43 commands ported to a single kong\nstruct tree (cmd/cli.go grammar, cmd/commands.go structs+Run). Kept all\npackage-global flag vars, getters, OpenStore, and run* bodies — each Run\ncopies its fields into the existing vars and calls the unchanged run func.\n\n- Persi\n[…]\ngroup:\"\" tags; status is default:\"withargs\"\n- golden help tests regenerated; root/lits tests rewritten onto kong harness\n- cobra dropped from go.mod (go mod tidy + re-vendor)\n\nmake + make audit green.",
          "is_bot": false,
          "headline": "refactor(cli): migrate from cobra to kong (snipe-ej0)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T17:47:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0a234548fa63355566c971c239f74b5956f42081",
          "body": "rg ran from cwd and never bounded its hits, so a query from above/outside\nthe repo could surface go-build cache paths (../../Library/Caches/go-build).\n\n- search from resolved repo root (D3), not arbitrary cwd\n- withinRoot guard drops any hit whose path escapes the search root\n- TestWithinRoot regression cover",
          "is_bot": false,
          "headline": "fix(search): contain rg results to repo root (snipe-zoq)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T17:10:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1411cfcf9de2802f3ffaea28ec14db20eab65e91",
          "body": null,
          "is_bot": false,
          "headline": "docs: trim boot.md to cap",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T16:34:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c8568577aa1355628dbe01c073fad475f9d813a",
          "body": null,
          "is_bot": false,
          "headline": "docs: boot reflects snipe guard merge (#162)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T16:32:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "76d99756329093a823f2f4f749fd09fcca00c103",
          "body": "* feat(guard): assert architecture boundaries from a spec, exit non-zero on violation (snipe-guard)\n\nsnipe already builds the reference graph and `boundary` computes crossings; guard\nadds the missing gate. Reads .snipe/boundaries.yml deny rules (from/to package\nglobs), reuses query.FindBoundaryCross\n[…]\n#162: strings.HasSuffix let an\nallow-list entry like \"db.go\" grandfather \"validb.go\". Require the suffix\nto align on a path boundary (whole-path or preceded by /). Test covers the\nfalse-positive case.",
          "is_bot": false,
          "headline": "feat(guard): assert architecture boundaries from a spec (#162)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T16:32:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d1e023fdc96c490b4b640443abbbc0e89978e12d",
          "body": "Read-path gate (store.IsIndexing) only checked lock-file existence, so an\ninterrupted 'snipe index' stranded every read command (diagram, search) with\n'indexing in progress' until the .lock was manually removed — even though\nstatus reported fresh. AcquireLock already reaped dead-PID locks; the read\npath now applies the same liveness check and removes the stale lock.\n\nCloses snipe-58l",
          "is_bot": false,
          "headline": "fix: IsIndexing reaps stale lock from interrupted index",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-15T13:49:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e144ad89dda0977f21b33448138c1e2bd7790e5",
          "body": null,
          "is_bot": false,
          "headline": "docs: lifecycle help reflects AST-fact classification",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-13T00:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9851e61ec16d8ef1245c813bf1a671172b75361",
          "body": null,
          "is_bot": false,
          "headline": "chore: wrap session — index-time invariants pass, 5 beads closed",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-13T00:22:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e89192aea74c7f4e727ab40ffd95155666a6b1bb",
          "body": "Indexer now records each ref's syntactic context (composite-literal type,\nnew/make argument, signature, type decl, call argument with callee name)\nin a new refs.ast_ctx column (schema v18). Lifecycle classification reads\nthese facts instead of regexing snippet text: the R2 create rules and the\nisFun\n[…]\n is\nctx=sig and can never look like construction. R1 delete evidence now keys\non callee names (call:DeleteX, builtin delete, Exec+DELETE SQL). Name+sig\nheuristics R3/R4/R5 unchanged. Closes snipe-rpw.",
          "is_bot": false,
          "headline": "feat: record AST context per ref; classify lifecycle from stored facts",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-13T00:21:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "84e10135a40a9da2ad21d1f2b26893af7ae09cd6",
          "body": "isKnownSubcommandOrFlag called InitDefaultHelpCmd/InitDefaultCompletionCmd\non every call; parallel tests mutated rootCmd concurrently and the race\ndetector caught it (this was also the earlier one-off make failure).\nDerive the set once under sync.Once.",
          "is_bot": false,
          "headline": "fix: race in derived subcommand registry — compute set once",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-13T00:21:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8b796736d7fb964b56b5db0064d13ee0b83d6f7",
          "body": "buildEnclosingMap started each function's range at the body Lbrace, so\nrefs in the signature (params, return types) got no enclosing_id and\ncmd-layer reattachSignatureRefs patched them back per query. Range now\nstarts at fn.Pos(); the recovery shim and both call sites are removed.\nOrphan refs on snipe's own index: 1019 -> 355 (remainder are genuine\ntop-level decls). Closes snipe-u7o.",
          "is_bot": false,
          "headline": "fix: attribute signature-line refs to their function at index time",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-13T00:02:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6dc512baab7cfd83f108624febadb5bcd50e8c3e",
          "body": "Boot trap: ranking on non-unique keys flakes golden tests. Audited all 79\nORDER BY clauses; appended stable tiebreaker columns to the 15 that ended\nin aggregates, expressions, or DESC ranking keys (deps, lookup, position,\nresolve, generate, flows). New guard test scans embedded SQL in non-test\nsource and fails any future ORDER BY whose final key is not a plain\ncolumn. Closes snipe-4uj.",
          "is_bot": false,
          "headline": "fix: deterministic ORDER BY everywhere — tiebreakers + source guard test",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-13T00:00:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec95e04717fba97813e360e7c1466d7e031e299c",
          "body": "knownSubcommands was a manually-maintained map; forgetting to register a\nnew command silently routed 'snipe X' to the bare-symbol fallback (D2\nviolation). isKnownSubcommandOrFlag now walks rootCmd.Commands() (plus\naliases and materialized help/completion built-ins), so the trap class\nis gone. Removes the two manual registrations in deadcode/orient.\nCloses snipe-x6q.",
          "is_bot": false,
          "headline": "refactor: derive subcommand recognition from cobra command tree",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T23:55:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b423bb59910bd36e4424716f25a50d81394e824f",
          "body": "go/packages with Tests:true re-synthesizes foo.test binary packages on the\nfull load; their only GoFile is a generated _testmain.go in the go-build\ncache, polluting the index with out-of-repo paths (111 symbols on snipe\nitself). First-pass name filtering can't catch them. Closes snipe-cz0.",
          "is_bot": false,
          "headline": "fix: drop synthesized .test binary packages from load results",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T23:53:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a41ca34af51f1fe84f6864f3f1fe62ef5bb1a369",
          "body": null,
          "is_bot": false,
          "headline": "chore: wrap session — first-reach epic snipe-g0d shipped 8/8",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T23:15:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f051c524e07acc3262d52d60701d8c3f0773b668",
          "body": "A freshly-resolved root can differ from the index-time root in symlink\ncanonicalization (macOS /var vs /private/var), making every stored file\nlook added+deleted. Heal then rewrote all paths and broke path-based\nqueries (caught by blackbox TestImports). Drift detection and the heal\nsubprocess now use the repo_root stored at index time.",
          "is_bot": false,
          "headline": "fix: heal against stored repo_root — phantom drift on symlinked roots",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T23:15:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7daf3ee5597c837e0cbaf9ce4417c400bc22c77b",
          "body": "Every WriteResponse/WriteError appends {ts, cmd, outcome, ms, caller} to\n.snipe/usage.jsonl (local only, SNIPE_NO_TELEMETRY=1 disables; silent on\nfailure). snipe metrics --kind=usage summarizes calls/errors/p50 per\ncommand. Ground truth for the first-reach goal and the eval constraint.\n\nCloses snipe-g0d.7",
          "is_bot": false,
          "headline": "feat: local usage telemetry — .snipe/usage.jsonl + metrics --kind=usage",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T23:01:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "506bf825555f7cd9904e9b9911ade0011114f884",
          "body": "lookupMethod accepts pkg.Type.Method and pkg.(*T).Method (pkg narrows\npackage), normalizes doubled parens from pasted legacy display forms.\nClaudish headers and candidate lists render receivers as (*T).Method —\nthe exact form that resolves back — instead of ((*T)).Method.\n\nCloses snipe-g0d.5",
          "is_bot": false,
          "headline": "feat: zero-hex disambiguation — qualified names round-trip",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T22:56:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57a69d2d606ecf556e18a1c7cb09ec7fa4b08e30",
          "body": "OpenStore detects file drift (fingerprint match + <=20 changed files) and\nruns an incremental reindex subprocess (no embeddings/enrichment, 15s cap)\nbefore answering. Large drift or config change keeps the one-line stale\nwarning. SNIPE_NO_HEAL=1 disables. Verified live: edit -> query -> healed\n-> correct answer in one command.\n\nCloses snipe-g0d.4",
          "is_bot": false,
          "headline": "feat: self-healing index — small drift reindexes inline on query",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T22:53:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "344bd0066ec875c5e460887e524a5da0ea8d52cb",
          "body": "WriteError now attaches a default NextAction by error code when the site\nset none (NOT_FOUND -> snipe search, INTERNAL -> snipe doctor, stale ->\nsnipe index, mismatch -> snipe index --force). NewNotFoundError routes to\nsnipe search with the actual symbol. deps module-path error suggests\nindex --force. 150 error sites covered in one choke point.\n\nCloses snipe-g0d.3",
          "is_bot": false,
          "headline": "feat: every error routes forward with a recovery command",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T22:49:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b4eaebca59419543f1832baa2172d8cc209068b",
          "body": "DetectModulePath now resolves meta module_path -> go.mod at repo_root ->\npkg_path heuristic. The heuristic alone returned empty on repos with no\nroot package (everything under internal/ or cmd/), breaking deps --tree\nand pack on loto. Index now stores module_path in meta.\n\ncontext --full and --conventions defaulted to an empty format string and\nwere rejected with 'unsupported format'; they now default to yaml.\n\nCloses snipe-g0d.2",
          "is_bot": false,
          "headline": "fix: module path detection + context --full/--conventions default format",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-12T22:44:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a1fa2104248af4a3906dc18043ed7e7914add4a",
          "body": "…iage)\n\nSquished 13 beads after enrich sweep + dk judgment:\n- 4dx query-split epic + 10 carve children: coupling/transitive-type-cost\n  benefit doesn't bite in a single-binary CLI; plan unsound (phantom Hit,\n  punted lookup.go). De-scoped.\n- snipe-add: false premise (no existing cost sink)\n- snipe-4na: off-star (filesystem I/O, not symbol-nav per D1)\n\nBoard now: snipe-p61 (testscript CLI suite) only.",
          "is_bot": false,
          "headline": "chore(beads): close 4dx epic tree + 2 off-star beads (enrich sweep tr…",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-06-04T03:43:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c90096a6af40d900278ddeabb89e43ec488ef94",
          "body": null,
          "is_bot": false,
          "headline": "test(config): add invariant-focused Load contract cases (#161)",
          "author_name": "David Koosis",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T02:44:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a79b2678334e81320da7c1831b6017a186985919",
          "body": "Goldens predated df70907 (always-emit IsVariadic). Regenerated via\nUPDATE_GOLDENS=1, +1 line each. make audit clean.",
          "is_bot": false,
          "headline": "fix: clean — refresh 3 goldens for is_variadic field",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T02:34:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a229efdef4e5b0082bf07917b3bbd2f49c60ee3",
          "body": "Parent snipe-4dx is human-flagged (\"Not safe to drain-execute\"). Its 10\ncarve children (vzg, voc, 8dr, a4v, e23, 5gc, 598, z2b, 1tp, aol)\ninherit the same design+budget gate — should not drain unsupervised.\n\nBacklog now drained per /goal path (b): all open beads → bd human.",
          "is_bot": false,
          "headline": "chore(beads): inherit 4dx human flag onto 10 carve children",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T02:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "489bdc1acdf1b0b1e3d87d28e6b7ea926f2e25bb",
          "body": null,
          "is_bot": false,
          "headline": "docs(boot): wrap snipe drain — 5 shipped, 2 surfaced for human",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:30:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e61e4dcd47c3d2b0743d4ad792212b92c2408cd",
          "body": null,
          "is_bot": false,
          "headline": "chore(beads): surface snipe-ci0 + snipe-4dx for human triage",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:29:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c59a55afe43918cad4ebb2deb3a64e987c27ca3",
          "body": "Demote CycloRollup → cycloRollup and SymbolPosIndex → symbolPosIndex.\nNeither is named by cmd/ or any external pkg. ChangeResult left exported\n— it's structurally tied to DetectChanges, which cmd/ calls and stores\nin its own function signatures.\n\nCloses snipe-6oq",
          "is_bot": false,
          "headline": "refactor(index): unexport zero-external-caller types (snipe-6oq)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:27:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df709073c746098a52581e5b13f4fc1f8f93864e",
          "body": "Sibling IsExported emits unconditionally; mirror that. omitempty\ncollapsed the field for ~99% of funcs, making it indistinguishable\nfrom 'not populated'.\n\nCloses snipe-3dg",
          "is_bot": false,
          "headline": "fix(output): always emit FuncAnalysis.IsVariadic (snipe-3dg)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:24:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "228a9c81ac4d5db907934e482a6f2ed76bfb60c3",
          "body": "Per D4, token budget is first-class. Field is load-bearing for orca\ntelemetry; dropping when zero skews aggregation.\n\nCloses snipe-zx1",
          "is_bot": false,
          "headline": "fix(output): always emit Meta.TokenEstimate (snipe-zx1)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:23:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c92e0eb00d930881f923c7b06d272344b647425",
          "body": "Config is a closed schema. Typos like embedding_mode for embed_mode\nshould surface as parse errors, not silently fall through to defaults.\n\nCloses snipe-ssx",
          "is_bot": false,
          "headline": "fix(config): DisallowUnknownFields on file decoder (snipe-ssx)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:23:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf756ac9a34b30b3a5b816f7ebb58778cdcdd187",
          "body": "Silent typos like 'newName' vs 'new_name' decoded to zero values\ncould corrupt the wrong target. Strict decoding makes the failure\nloud at the trust boundary.\n\nCloses snipe-kuy",
          "is_bot": false,
          "headline": "fix(edit): DisallowUnknownFields on batch stdin decoder (snipe-kuy)",
          "author_name": "dkoosis@gmail.com",
          "author_login": "dkoosis",
          "committed_at": "2026-05-18T00:22:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 640,
      "latest_release_at": "2026-07-19T23:18:49Z",
      "latest_release_tag": "v0.2.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 21,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 47.8
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/dkoosis/snipe",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/dkoosis/snipe",
          "is_deprecated": false,
          "latest_version": "v0.2.0",
          "repository_url": "https://github.com/dkoosis/snipe",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T23:15:15Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "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": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "vendor/github.com/buger/jsonparser/Makefile",
        "vendor/github.com/wk8/go-ordered-map/v2/Makefile",
        "vendor/modernc.org/libc/Makefile",
        "vendor/modernc.org/mathutil/Makefile",
        "vendor/modernc.org/memory/Makefile",
        "vendor/modernc.org/sqlite/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 54020,
      "source_files_sampled": 272,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".claude/rules/CLAUDE.md",
        "AGENTS.md",
        "CLAUDE.md",
        "vendor/github.com/dkoosis/keyring/AGENTS.md",
        "vendor/github.com/dkoosis/keyring/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 5926
    },
    "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/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.1"
        },
        {
          "name": "golang.org/x/tools",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.41.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.44.0"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.0"
        },
        {
          "name": "github.com/alecthomas/kong",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.15.0"
        },
        {
          "name": "github.com/rogpeppe/go-internal",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.15.0"
        },
        {
          "name": "github.com/dkoosis/keyring",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.0"
        },
        {
          "name": "github.com/google/go-cmp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.7.0"
        },
        {
          "name": "github.com/pmezard/go-difflib",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "github.com/invopop/jsonschema",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.13.0"
        },
        {
          "name": "github.com/mattn/go-isatty",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.20"
        },
        {
          "name": "golang.org/x/mod",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.32.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": 0,
        "merged_prs": 112,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 92,
        "closed_unmerged_prs": 8
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "dkoosis",
          "commits": 639,
          "avatar_url": "https://avatars.githubusercontent.com/u/1538542?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.995
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "codex-review.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 0,
            "reason": "binaries present in source code",
            "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": 0,
            "reason": "0 out of 21 merged PRs checked by a CI test -- score normalized to 0",
            "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": 0,
            "reason": "no 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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 19 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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 8,
            "reason": "2 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ed0f3769ef8892688e7d18bc2d00be7a368d7de6",
        "ran_at": "2026-07-28T03:04:41Z",
        "aggregate_score": 3.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-28T01:26:56Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-28T01:26:54Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dkoosis/snipe",
    "host": "github.com",
    "name": "snipe",
    "owner": "dkoosis"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 52,
      "inputs": {
        "security": 33,
        "vitality": 80,
        "community": 15,
        "governance": 56,
        "engineering": 64
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 640,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 21
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "21/52 weeks with commits",
                "points": 14.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "640 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 640
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 19 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": 83,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.2.0",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 47.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~47.8 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 47.8
                    }
                  }
                ],
                "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": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 15,
        "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": "at_risk",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": 56,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.995
            },
            "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.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 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": 82,
            "inputs": {
              "merged_prs": 112,
              "open_issues": 0,
              "closed_issues": 92,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 8
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "112/120 decided PRs merged",
                "points": 35.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 112,
                      "decided": 120
                    }
                  }
                ],
                "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": 50,
            "inputs": {
              "followers": 7,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "dkoosis",
              "public_repos": 37,
              "account_age_days": 5248
            },
            "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": "7 followers of dkoosis",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 7,
                      "login": "dkoosis"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "37 public repos, account ~14 yr old",
                "points": 23.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 37
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/dkoosis/snipe"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "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 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 64,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "0 out of 21 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 0,
                "status": "missed",
                "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": "0 out of 21 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 19 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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "2 existing vulnerabilities detected",
                "points": 6,
                "status": "partial",
                "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": "good",
        "name": "AI Readiness",
        "value": 82,
        "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/rules/CLAUDE.md",
                "AGENTS.md",
                "CLAUDE.md",
                "vendor/github.com/dkoosis/keyring/AGENTS.md",
                "vendor/github.com/dkoosis/keyring/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 5926
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".claude/rules/CLAUDE.md, AGENTS.md, CLAUDE.md, vendor/github.com/dkoosis/keyring/AGENTS.md, vendor/github.com/dkoosis/keyring/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".claude/rules/CLAUDE.md, AGENTS.md, CLAUDE.md, vendor/github.com/dkoosis/keyring/AGENTS.md, vendor/github.com/dkoosis/keyring/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": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "vendor/github.com/buger/jsonparser/Makefile",
                "vendor/github.com/wk8/go-ordered-map/v2/Makefile",
                "vendor/modernc.org/libc/Makefile",
                "vendor/modernc.org/mathutil/Makefile",
                "vendor/modernc.org/memory/Makefile",
                "vendor/modernc.org/sqlite/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, vendor/github.com/buger/jsonparser/Makefile, vendor/github.com/wk8/go-ordered-map/v2/Makefile, vendor/modernc.org/libc/Makefile, vendor/modernc.org/mathutil/Makefile, vendor/modernc.org/memory/Makefile, vendor/modernc.org/sqlite/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, vendor/github.com/buger/jsonparser/Makefile, vendor/github.com/wk8/go-ordered-map/v2/Makefile, vendor/modernc.org/libc/Makefile, vendor/modernc.org/mathutil/Makefile, vendor/modernc.org/memory/Makefile, vendor/modernc.org/sqlite/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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 54020,
              "source_files_sampled": 272,
              "oversized_source_files": 0
            },
            "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": "0/272 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 272,
                      "oversized": 0
                    }
                  }
                ],
                "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-28T03:05:19.971067Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dkoosis/snipe.svg",
  "full_name": "dkoosis/snipe",
  "license_state": "absent",
  "license_spdx": null
}

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.